【YOLO】YOLOX训练COCO数据集

另一篇Yolox文章,解决Voc数据集下AP为0:解决YOLOX训练时AP为0

有小伙伴是训练coco数据集时,AP为0,实际上,我并没有遇到这个问题,我这里测试了下,是可以正常运行的,但有小伙伴问了,我这里就总结一下如何训练Coco数据集吧...


步骤如下

  • 首先呢,保证Coco数据集格式正确
    Animals_Coco
       ├─annotations
       ├─train2017
       └─val2017
    
    annotations 文件夹下包含两个重要的文件instances_train2017.jsoninstances_val2017.json
    train2017val2017 包含的是训练和验证的图片数据
  • 接着修改 yolox/data/datasets/coco_classes.py, 修改为自己数据集的类别
    COCO_CLASSES = (
    "tiger",
    "panda",
    )
    
  • 接着按照自己的需求修改 yolox/exp/yolox_base.py(也可以不做修改)
    (这里应该也可以不用修改,因为后面的exps/example/yolox_voc/yolox_s.py会对self.num_classes进行重载)
    将self.num_classes修改为自己的类别数
    self.num_classes = 2 (我的数据集是 2)
    
    你还可以修改 self.inputsize, self.random_size 改变训练尺寸大小
    
    你还可以修改 self.test_size 改变测试的尺寸大小
    
  • 修改 exps/example/custom/yolox_s.py
    修改数据集地址 self.data_dir
    self.data_dir = "D:/Z_Data/Animals_Coco"
    
    修改类别 self.num_classes
    self.num_classes = 2
    
    剩下的 self.max_epoch,self.data_num_workers,self.eval_interval 可自行选择修改
    
  • 最后修改下 tools/train.py 中的参数配置
    设置 default="Animals_Coco", 训练后结果就会保存在 tools/YOLOX_outputs/Animals_Coco下
    parser.add_argument("-expn", "--experiment-name", type=str, default=None)
    
    设置 model_name,我也不太清楚这是不是必须项 (我觉得不是)
    parser.add_argument("-n", "--name", type=str, default="yolox-s", help="model name")
    
    设置 batch_size
    parser.add_argument("-b", "--batch-size", type=int, default=64, help="batch size")
    
    设置gpu,因为我只有一张卡,所以设 default=0
    parser.add_argument(
        "-d", "--devices", default=0, type=int, help="device for training"
    )
    
    设置你的数据配置的路径,default="../exps/example/custom/yolox_s.py"
    parser.add_argument(
        "-f",
        "--exp_file",
        default="../exps/example/custom/yolox_s.py",
        type=str,
        help="plz input your expriment description file",
    )
    
    设置预训练权重路径, default="../weights/yolox_s.pth"
    parser.add_argument("-c", "--ckpt", default="../weights/yolox_s.pth", type=str, help="checkpoint file")
    

经过上述操作后,从下图可以看到已经可以正常运行啦在这里插入图片描述
如果经过这一些列操作过后,AP还是为0,个人猜测是 json 文件的内容是出现了问题

让我们看下测试效果在这里插入图片描述
请添加图片描述

请添加图片描述
总体上来看,速度、精度都还是可以的


最后,如果大家有在训练过程中遇到 TypeError: 'numpy.float64' object cannot be interpreted as an integer
找到Anaconda3\Lib\site-packages\pycocotools\cocoeval.py 或者在 pycahrm 里面的 External Librariessite-packages\pycocotools\cocoeval.py 修改第 507、508

self.iouThrs = np.linspace(.5, 0.95, np.round((0.95 - .5) / .05) + 1, endpoint=True)
self.recThrs = np.linspace(.0, 1.00, np.round((1.00 - .0) / .01) + 1, endpoint=True)

修改为

self.iouThrs = np.linspace(.5, 0.95, 10, endpoint=True)
self.recThrs = np.linspace(.0, 1.00, 101, endpoint=True)

猜你喜欢

转载自blog.csdn.net/weixin_42166222/article/details/119739396