YOLOv4 绘制PR曲线
简述
最近做的一项工作就是交通目标的识别,我用的是YOLOv4基于Darknet的那一版,其中最重要的评价一项目标检测,但是我试过YOLOv4自带的map和网上常用的绘制PR曲线的方法进行对比,发现计算得到的map有一定差距,于是我想找一个第三方的库来试试。找来找去还真让我发现一个,https://github.com/Cartucho/mAP,接下来,我详细说一下应该怎么使用。
YOLOv4 自带mAP检测代码
darknet.exe detector map data/obj.data cfg/yolov4_custom.cfg backup/yolov4_custom.weights
那么yolov4其实自带了一套检测工具,其他博主也有写,例如这位博主写的:https://blog.csdn.net/qq_44929031/article/details/113355506
但是我尝试了一下,发现mAP差5%,不知道是什么原因,有懂的小伙伴可以留言告诉我。
第三方库
因为我的本行是搞汽车的,不是写代码的,所以代码写的不太好还请多包涵。
这边先把库拖下来,我们可以看到这个库需要一个input
这个input文件夹中两个文件是必须的,那就是detection-results和ground-truth,通过官网,我们看到detection-results里面的要求是这样子的,那就是类别的名字,置信度和位置坐标,
tvmonitor 0.471781 0 13 174 244
cup 0.414941 274 226 301 265
book 0.460851 429 219 528 247
chair 0.292345 0 199 88 436
book 0.269833 433 260 506 336
而ground-truth的要求是这样子,
tvmonitor 2 10 173 238
book 439 157 556 241
book 437 246 518 351
pottedplant 272 190 316 259
名字坐标即可,如果是难例可以标上难例。
但是yolo中类别是数字形式表达,然后位置坐标页不太一致,所以需要转换一下,我贴一下我的代码:
import os
from tqdm import tqdm
from PIL import Image
label = {'0' : 'car', '1' : 'van', '2' : 'truck', '3' : 'bus'}