记录贴
yolox代码实在是比较难用,写个帖子记录一下,忘了好几次了,每次都要慢慢调。
官方代码下载
下载地址:https://github.com/Megvii-BaseDetection/YOLOX
这里直接下载zip格式了,下载到本地电脑解压。
终端训练评估代码
pycharm打开配置环境
使用pycharm打开代码,然后选择虚拟环境,将数据集放到datasets文件夹下,这里使用VOC格式数据集。
修改部分参数
修改exps/example/yolox_voc/yolox_voc_s.py文件,这里使用的是yolox-s的网络参数,如果使用其他网络,可以修改深度和宽度系数。修改Exp类self.num_classes = 1修改为自己的数据集类别,这里我的为1。删除image_sets里的2012,用的是VOC2007格式的数据集。
修改yolox/data/datasets/voc_classes.py 里面的VOC_CLASSES为自己的数据集类别名称。
开始训练模型
在终端输入命令训练网络
-f:VOC模型
-d:设备,gpu
-b:batch size
python tools/train.py -f exps/example/yolox_voc/yolox_voc_s.py -d 0 -b 1
error 处理
1.No modul named “yolox”
在tools/train.py 最上方加入以下代码,系统参数加入项目绝对路径地址
2.IndexError: list index out of range
参考官方issue:https://github.com/Megvii-BaseDetection/YOLOX/issues/1645
将 YOLOX-main/yolox/data/datasets/voc.py 文件的 (self._imgpath % self.ids[i]).split(self.root + “/”)[1] 修改为 (self._imgpath % self .ids[i]).split(self.root + “\”)[1]
3.OMP error
在tools/train.py 最上方加入以下代码
import os
os.environ[“KMP_DUPLICATE_LIB_OK”]=“TRUE”
4.训练时第10轮 eval 报错,FileNotFoundError: [Errno 2] No such file or directory: ‘xxx.xml’
修改报错的yolox/evaluators/voc_eval.py文件,在文件名的前半部分加入xml文件路径
在exps/example/yolox_voc/yolox_voc_s.py 将评估轮次改为1次,跑一轮看下是否有问题
5.训练时 eval 报错, ValueError: invalid literal for int() with base 10: ‘35.0’
这是因为标签文件里的标注是小数,修改报错的yolox/evaluators/voc_eval.py文件,先转成float类型在转成int
预测图片
首先修改tools/demo.py文件,导入VOC_CLASSES, 将所有的COCO_CLASSES替换为VOC_CLASSES
终端输入以下命令:
image:预测图片
-f:模型文件
-c:权重文件
–path:预测图片
python tools/demo.py image -f exps/example/yolox_voc/yolox_voc_s.py
-c YOLOX_outputs/yolox_voc_s/best_ckpt.pth
--path assets/2f9755f66.jpg --conf 0.25
--nms 0.45 --tsize 1024 --save_result --device gpu
评估模型
在命令行输入以下命令:
python tools/eval.py -f exps/example/yolox_voc/yolox_voc_s.py
-c YOLOX_outputs/yolox_voc_s/best_ckpt.pth -b 1 -d 1 --conf 0.001
pycharm右键运行训练评估代码
训练模型
修改parser参数,代码文件都在tools文件夹下,如果路径出现报错相对路径都指向上级目录就好了,结果文件在tools文件夹下tools/YOLOX_outputs
预测图片
修改parser参数
评估模型
测试这种训练方式结果很差,后面找下原因?
tensorboard可视化训练过程
终端输入命令:
tensorboard --logdir=tools/YOLOX_outputs/yolox_voc_s/tensorboard/
附录
在exps/example/yolox_voc/yolox_voc_s.py 文件中,代码读取的是trainval.txt和test.txt,也就是说把训练集+验证集用于训练,测试集用于验证。当然如果生成trainval.txt文件就只是训练集,test.txt文件是验证集,那就没有问题。
不过我的文件格式是这样的,所以这里也要改一下。
完结!又忙活了一次,没有下次了