一.格式转换
-yolo输出的预测数据是txt格式,而pycocotools使用json格式对ground truth和predict进行评估
*首先说明,数据集的图片名称应是数字,不含字母的,如果不是需要自己写个脚本给图片批量改名称
1.yolo预测的数据可以通过开启val.py/test.py中的save_json来开启,同时把is_coco硬编码为False;
把self.class_map硬编码为self.class_map=list(range(1000)[1:]),使得预测的json中标签id从1开始;
2.数据集的标签如果没有json格式的需要转换成json格式(代码自行搜索)
注意事项:
①标签转json时需要注意类别id的初始值,设为从1开始,比如有4类,类别id就是[1,2,3,4];
②注意图片id的初始值,与数据集中的名称对应,数据集中从0.jpg开始初始值就设为0,从1.jpg开始就设为1,如果初始值设置的不对会出现评价后的值大部分都为0,或者报错提示“标签不匹配”。
二、问题说明
①上面多次提到类别id从1开始,要注意标签转json和预测的json文件的类别id都是从1开始,否则会出现评价后的值大部分都为0;
②如果标签转json和预测的json文件的类别id都是从0开始,则最后一类目标不能完成评估,最后一类的所有AP和AR值都为-1;
③要注意使用pycocotools评价时,标签转json时,这个标签要和验证集/训练集(数量)对应,不能是预测c生成的json是验证集或测试集,而标签转json是整个数据集所有的标签,这会出现评价后的AP值低。
④最后pycocotools的评价值和yolo自带的评价指标不一致,这是正常的。