使用YOLOX训练自己的数据集 - 知乎https://zhuanlan.zhihu.com/p/421061236
1、加入apex梯度溢出2、XML文件找不到这里主要是在:YOLOX-main/yolox/core/trainer.py 修改amp的优化级别为 O0
model, optimizer = amp.initialize(model, self.optimizer, opt_level="O0")
- 其实训练自己的数据集时,如果数据不是很大,其实不要apex也可以
3、类别名冲突出现这个问题一般是在读取的时候配置的路径不对
文件位置:YOLOX-main/yolox/data/datasets/voc.py
如果在训练自己数据集的时候,类别中存在类别名转小写后冲突的问题,需要修改代码中的统一转小写的代码,具体报错如下:
代码修改即为:去掉 lower() 部分
4、命令行训练-d:设置使用的GPU的数量
python3 tools/train.py -f exps/example/yolox_voc/yolox_voc_s.py -d 2 -b 20 -c yolox_s.pth5、YOLO-main/yolox/exp/yolox_base.py
6、eval_interval中的问题设置训练中需要的基本参数:
- self.num_classes:设置数据集中物体的分类数
- self.max_epoch:设置训练的epoch数目,默认是300
- self.print_interval :设置经过多少个batch_size打印一次信息
- self.eval_interval :设置经过多少epoch验证一次(这里很炕)
7、自建数据集问题文件位置:YOLOX-main/yolox/core/trainer.py
我在训练过程中,设置eval_interval是200,max_epoch是100,就是希望他不进行验证了。可是在第85epoch的时候报错了,后来debug后发现是self.exp.no_aug_epochs 值为15,所以100-15=85,刚好满足下面代码的条件,所以进入了最后阶段,在这一阶段(No mosaic aug),总共15epoch,将eval_interval设置成了1,每个epoch都要验证。
注:训练的过程中验证的时候targets是空的,所以出断言错误
- 为了不验证所以我将 self.exp.eval_interval=1注释掉了
- 这里我把训练和验证分开做了,使用train.py训练,使用eval.py验证
8、resume使用出现targets找不到原因是我的数据集的XML文件中的标签出错,导致没有正常读取
训练过程中经常会出现中间某一阶段出错,为了查看错误复现 或者 继续训练,需要使用resume,这里需要设置:
- "--resume":设置resume的默认值,也即:default=True,正常训练时设为False。这里如果是在终端中运行的话,直接加上 --resume参数即可
- --ckpt:如果需要继续前面的工作训练的话,需要使用 YOLOX_outputs下面生成的权重文件训练
parser.add_argument(
"--resume", default=False, action="store_true", help="resume training"
)
parser.add_argument('--ckpt', default='/mnt/sda3/yolos/YOLOX-main/yolox_s.pth', type=str, help="checkpoint file")
9、检测数据
在使用已训练好的模型检测图片时,需要指定使用的 分类(cls_names) : VOC_CLASSES & COCO_CLASSES,不过这里是设置默认参数
或者是在创建对象的时候指定:


![[YOLOX]——训练自己的数据集(Ubuntu20.04) [YOLOX]——训练自己的数据集(Ubuntu20.04)](http://www.mshxw.com/aiimages/31/487517.png)
