文章目录[隐藏]
另一篇Yolox文章,解决Voc数据集下AP为0:解决YOLOX训练时AP为0
有小伙伴是训练coco数据集时,AP为0,实际上,我并没有遇到这个问题,我这里测试了下,是可以正常运行的,但有小伙伴问了,我这里就总结一下如何训练Coco数据集吧...
步骤如下
- 首先呢,保证Coco数据集格式正确
Animals_Coco ├─annotations ├─train2017 └─val2017
在
annotations
文件夹下包含两个重要的文件instances_train2017.json
,instances_val2017.json
在train2017
和val2017
包含的是训练和验证的图片数据 - 接着修改
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 Libraries
的 site-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)
版权声明:本文为CSDN博主「MangoloD」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_42166222/article/details/119739396
暂无评论