文章目录
(一)YOLOX 训练 Objects365_172
(1)数据集预处理
<1> 数据集格式
1 | ├─datasets |
<2> 数据集抽取
- 从 Objects365 中抽取指定 172 类并转为 VOC 数据集类型 xml
obj365_main.py
链接: https://pan.baidu.com/s/1ePq7KB1Ho5R-uNXK-XOa-Q 提取码: 8008
- 根据抽取的标签获取图片列表
img_list_txt.py
链接: https://pan.baidu.com/s/1IyP7yEibYzR1UL_fZfbccg 提取码: mgk3
-
根据图片列表抽取源数据
img_list_txt.py
链接:https://pan.baidu.com/s/10C0TULHWCQ1YkjkVzY6jaQ 提取码:ju1j
- 生成 ImageSets 文件夹,切分 train、val、test、trainval
VOC_ImageSets_Main_txt.py
链接: https://pan.baidu.com/s/1hHLI3-30nXb-kqEsNLnHEQ 提取码: om41
(2)YOLOX 训练
<1> 文件修改
(1) yolox/data/datasets/voc_classes.py
1 | VOC_CLASSES = ( |
(2) yolox/exp/yolox_base.py
1 | (self.num_classes可以不用修改,因为后面的exps/example/yolox_voc/yolox_voc_s.py会对self.num_classes进行重载) |
(3) yolox/data/datasets/voc.py
-
_do_python_eval()
方法1
2
3annopath = os.path.join(rootpath, "Annotations", "{:s}.xml")
修改为
annopath = os.path.join(rootpath, "Annotations", "{}.xml")
(4) exps/example/yolox_voc/yolox_voc_s.py
-
全局超参数
1
修改 self.num_classes = 172 # 自定义的类别数
-
get_data_loder
方法1
2修改VOCDetection下的 image_sets=[('2007', 'trainval'), ('2012', 'trainval')],
修改为 image_sets=[('2007', 'train')] -
get_eval_loader
方法1
2修改VOCDetection下的 image_sets=[('2007', 'test')],
修改为 image_sets=[('2007', 'val')]
(5) tools/train.py
1 | 设置 default="Animals", 训练后结果就会保存在 tools/YOLOX_outputs/Animals下 |
(6) tools/demo.py
-
由于 demo.py 默认调用的是 COCO_CLASSES,所以想要正确显示结果,就要把
yolox/data/datasets/coco_classes.py
下的 COCO_CLASSES 改成你的数据类别 -
或者如果想修改为调用 VOC_CLASSES
-
在
yolox/data/datasets/__init__.py
里将 from .voc import VOCDetection 修改为 from .voc import VOCDetection, VOC_CLASSES -
在
tools/demo.py
1
2
3from yolox.data.datasets import COCO_CLASSES
修改为
from yolox.data.datasets import COCO_CLASSES, VOC_CLASSES -
将
tools/demo.py
里所有用到 COCO_CLASSES 的地方全部改为 VOC_CLASSES 即可
-
<2> 模型训练
1 | # 单GPU训练 |
<3> 模型推理
1 | python tools/demo.py image -f exps/example/yolox_voc/yolox_voc_s.py -c YOLOX_outputs/yolox_s/best_ckpt.pth --path TestFiles/testimg1.jpg --conf 0.3 --nms 0.65 --tsize 640 --save_result --device cpu |
(二)注意事项:
(1)多 GPU 训练问题(可选)
- 多 GPU 训练模型时,需将 os.environ [‘CUDA_VISIBLE_DEVICES’] 修改为实际需要的
1 | import os |
(2)训练中生成临时标签文件报错问题
- YOLOX 训练过程中出现验证生成临时标签 txt 文件时,因文件名中包含 “/”, 而无法生成临时标签 txt 文件的问题
- 解决方法:重新生成标签文件,将 “/” 修改为 “_”
- 生成标签文件时将 object365_dict.txt 文件中对应标签的 “/” 修改为 “_”
- /YOLOX/yolox/data/dataset/voc_classes.py 中的 VOC_CLASSES 类别中的 “/” 修改为 “_”
- 解决方法:重新生成标签文件,将 “/” 修改为 “_”