YOLOX-0.1.0自定义训练+CPU修改方式
1、主训练模块train.py在tools文件夹下(为什么不放在主目录?),训练命令为python tools/train.py -f exps/example/yolox_voc/yolox_s.py
![](https://pic3.zhimg.com/80/v2-186fa1180f89c5692ff37f79c401ec3a_720w.jpg)
2、train.py 中必须加入import sys sys.path.append(r'D:\YoloX')才能正常运行,即主目录的路径
![](https://pic2.zhimg.com/80/v2-7960986c9e331e403043a8608e020691_720w.jpg)
3、模型深度控制模块yolox_s.py在exps/example/yolox_voc文件夹下,训练命令后半部分这么长就是这么来的,可以复制原模块再自定义内容
![](https://pic3.zhimg.com/80/v2-5602869210bdb12e1790c5221c0f51b2_720w.webp)
4、数据集导入模块voc.py在yolox/data/datasets文件夹下,如果复制一份再重命名并自定义,必须修改datasets文件夹中的__init__.py的from .voc import VOCDetection为自己的文件名
![](https://pic2.zhimg.com/80/v2-196513fbad0ca5cea1f58a1a76b09891_720w.webp)
![](https://pic1.zhimg.com/80/v2-1c1a07c7ab68eb6e1035c7012e84df54_720w.webp)
5、数据集导入模块voc.py的get_data_loader()为导入训练数据,get_eval_loader()为导入验证数据,如果只是进行一些代码测试,不想要测试集,那么可以将测试集路径设置为与训练集路径一致
![](https://pic1.zhimg.com/80/v2-50df6607fcb2cf2caa33fa2e83bf02e8_720w.webp)
![](https://pic4.zhimg.com/80/v2-1887d41a3db3558e4703ab454f9cd357_720w.webp)
6、类别设置模块voc_classes.py在yolox/data/datasets文件夹下,如果复制一份再重命名并自定义,必须修改voc.py中的from .voc_classes import VOC_CLASSES中的voc_classes为自己的文件名
![](https://pic4.zhimg.com/80/v2-2c81a90c547aac9bebf5e269738653a3_720w.webp)
7、数据集必须为VOC格式,放在YOLOX/datasets/下,文件夹名称为VOCdevkit/VOC2007/,其中三个文件夹Annotations存放xml标签,ImageSets/Main存放train.txt,即图片名称,不能带后缀,JPEGImages存放图片
![](https://pic4.zhimg.com/80/v2-addd43d32a9a296ab91c440e510efb43_720w.webp)
8、如果想在本地用CPU进行测试,必须安装CUDA版torch,否则会报错AssertionError: Torch not compiled with CUDA enabled
然后在tools/train.py中assert num_gpu <= get_num_devices()后插入num_gpu = 0
再在YOLOX/yolox/core/trainer.py的Trainer类的__init__函数中把self.device = "cuda:{}".format(self.local_rank)注释掉,插入self.device = "cpu"
再在YOLOX/yolox/core/trainer.py中的train_one_iter函数中的targets = targets.to(self.data_type)后插入inps = inps.to(self.device)与targets = targets.to(self.device)
并且把下面的with torch.cuda.amp.autocast(enabled=self.amp_training):注释掉
这样就可以在本地用CPU进行一些测试了
![](https://pic4.zhimg.com/80/v2-164d660cf80f954d11c25675309dbe0f_720w.webp)
![](https://pic1.zhimg.com/80/v2-22f4e211effa71ecacfd454b48093e90_720w.webp)
![](https://pic1.zhimg.com/80/v2-16dba0f2383d04ee9bc34dd73631a488_720w.webp)
总体来说代码对于自定义训练与测试很不友好,没有Ultralytics的YOLOv5简单方便易懂