问题描述:进行论文进行对比时候发现用cocoapi对yolo保存的best_prediction.json进行cocoeval,发现精度远远低于yolo自带val.py的结果。
这个问题卡了我前前后后大概半年的时间,限于学识有限,老是找不到问题所在于是搁置。最近在进行论文对比实验不得不用上cocoapi去计算cocometric,硬着头皮解决了两个礼拜才搞定(Orz 我太菜了!)
解决思路:ground truth抓换的json和best_prediction.json中的category_id需要对齐
Yolov5中自带的Visdrone.yaml自动完成了Visdrone文件自带的annotation到yolo标注格式的转换,其实Visdrone原始的标注一共有12个类别的,分别如下:
categories = [
{"id": 0, "name": "ignored regions"},
{"id": 1, "name": "pedestrian"},
{"id": 2, "name": "people"},
{"id": 3, "name": "bicycle"},
{"id": 4, "name": "car"},
{"id": 5, "name": "van"},
{"id": 6, "name": "truck"},
{"id": 7, "name": "tricycle"},
{"id": 8, "name": "awning-tricycle"},
{"id": 9, "name": "bus"},
{"id": 10, "name": "motor"},
{"id": 11, "name": "others"}
]
但在Visdrone目标检测论文https://arxiv.org/pdf/2108.11539.pdf中以及u版yolov5yolov5/data/VisDrone.yaml at master · ultralytics/yolov5 · GitHub中都值关注中间10项目标 因为忽略了文件中的label为0和11的目标。
yolov5官网截图
论文TPH-YOLOV5截图
1.通过yolo系列中的val.py (yolov7中是test.py) 文件参数 (此处以yolov7为例 其他同),设置--save-json 为True
parser.add_argument('