yolox训练voc数据集
制作数据集
请参考上一篇使用labelme打标签并制作voc数据集
上文中最后得到了几个文件夹
但这不能直接用,还需要划分训练集和测试集,可以手动划分,或者写段代码随机划分,最后数据集目录结构如下
VOC2007
—-Annotations
—-JPEGImages
—-ImageSets
——–Main
————test.txt
————trainval.txt
Annotations是VOC格式的标注文件
JPEGImages是图片文件夹
ImageSets/Main中包含了训练集和测试集的图片名列表,不包含后缀名
在VOC2007同级目录执行下面这段代码即可自动划分
1 |
|
安装YOLOX
从github下载即可
建议新建一个conda环境来安装
参考之前写过的文章
因为和现在的版本稍有不同,以github项目官方安装指引为准
总结来讲就是在项目根目录成功执行下面两行命令
pip install -r requirement.txt
python setup.py develop
如果安装GPU版本torch,再安装cudnn和cuda即可
修改训练相关配置文件
首先把数据集放到datasets目录下,严格按照以下目录结构,会更方便一些
修改exps/example/yolox_voc/yolox_voc_s.py
num_classes改为标签数目,我这里只有一个标签类别
去掉2012相关的内容
修改tools/train.py
-b 一次训练所抓取的数据样本数量,取决于内存大小,提示memory相关错误优先考虑这个问题,2,4,8,16…
-d GPU索引,只有一个GPU的话,写0或1是一样的
-f 试验描述文件路径,也就是上面修改的配置文件
-c 模型权重文件,使用预训练模型,从官网下载
修改yolox/data/datasets/voc.py
注释difficult,意思是打标签时对应标签的识别难度,我的标签里没有这一项,不修改会报错,需要把difficult设置为False
删去花括号里原有的:s,否则无法正确读取
修改yolox/data/datasets/voc_classes.pycoco_classes.py(记得改下coco类名,因为后面import类别的时候默认是coco)
注释原有类别,改为自己的,这里只有单类
修改yolox/evaluators/voc_eval.py
因为没有truncated和difficult标签,所以这里也要修改为0
还有一处是类型转换,添加了float类型转换,否则报错
x[“difficult”]改为0
修改yolox/exp/yolox_base.py
修改训练轮次,默认300
self.max_epoch = 150
训练
python tools/train.py
每10轮会有一次统计,只要下面两个数字不是0就好了,越接近1效果越好
验证
训练完后的模型权重文件保存在YOLOX_outputs/yolox_voc_s下,最好的权重是best_ckpt.pth
使用这个权重来验证一下
python tools/demo.py image -f exps/example/yolox_voc/yolox_voc_s.py -c YOLOX_outputs/yolox_voc_s/best_ckpt.pth –path datasets/coco/val2017/00001.png –save_result –device gpu
然后在YOLOX_outputs/yolox_voc_s/vis_res下的时间文件夹里就能找到识别结果,如下
另
如果要训练多个数据集,建议看下注意事项: