[YOLOX]——训练自己的数据集(Ubuntu20.04)

环境搭建及详细配置:深入浅出Yolox之自有数据集训练超详细教程 - 云+社区 - 腾讯云 (tencent.com)

使用YOLOX训练自己的数据集 - 知乎https://zhuanlan.zhihu.com/p/421061236

1、加入apex梯度溢出

这里主要是在:YOLOX-main/yolox/core/trainer.py 修改amp的优化级别为 O0

model, optimizer = amp.initialize(model, self.optimizer, opt_level="O0")
  •  其实训练自己的数据集时,如果数据不是很大,其实不要apex也可以

2、XML文件找不到

出现这个问题一般是在读取的时候配置的路径不对

[YOLOX]——训练自己的数据集(Ubuntu20.04)_第1张图片

3、类别名冲突

文件位置:YOLOX-main/yolox/data/datasets/voc.py

如果在训练自己数据集的时候,类别中存在类别名转小写后冲突的问题,需要修改代码中的统一转小写的代码,具体报错如下:

代码修改即为:去掉 lower() 部分

[YOLOX]——训练自己的数据集(Ubuntu20.04)_第2张图片

4、命令行训练

-d:设置使用的GPU的数量

python3 tools/train.py -f exps/example/yolox_voc/yolox_voc_s.py -d 2 -b 20 -c yolox_s.pth

5、YOLO-main/yolox/exp/yolox_base.py

设置训练中需要的基本参数:

  • self.num_classes:设置数据集中物体的分类数
  • self.max_epoch:设置训练的epoch数目,默认是300
  • self.print_interval :设置经过多少个batch_size打印一次信息
  • self.eval_interval :设置经过多少epoch验证一次(这里很炕)

6、eval_interval中的问题

文件位置: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是空的,所以出断言错误

[YOLOX]——训练自己的数据集(Ubuntu20.04)_第3张图片

  • 为了不验证所以我将 self.exp.eval_interval=1注释掉了
  • 这里我把训练和验证分开做了,使用train.py训练,使用eval.py验证

[YOLOX]——训练自己的数据集(Ubuntu20.04)_第4张图片

 7、自建数据集问题

出现targets找不到原因是我的数据集的XML文件中的标签出错,导致没有正常读取

[YOLOX]——训练自己的数据集(Ubuntu20.04)_第5张图片

8、resume使用

训练过程中经常会出现中间某一阶段出错,为了查看错误复现 或者 继续训练,需要使用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)_第6张图片

 或者是在创建对象的时候指定:

10、去掉预训练部分

修改文件:/mnt/sda3/yolos/YOLOX-main/yolox/core/trainer.py 

  • 这里YOLOX的做法:在resume_train中查看resume参数的值,如果是True的话,就去加载训练过程中的last模型文件继续训练;如果是False的话,就直接加载在官网中下载的预训练文件。
  • 这里我是修改了原网络,所以需要去掉原网络的预训练部分,所以就注释掉else中的内容即可

[YOLOX]——训练自己的数据集(Ubuntu20.04)_第7张图片

你可能感兴趣的:(计算机视觉,ubuntu,腾讯云,linux)