mysql实现pr曲线_如何画PR curve (PR曲线)基于COCO格式数据集 在maskrcnn_benchmark中

本文聚焦如何画出基于coco格式数据集测试得到的precision-recall curve (PR curve)。

众所周知,对于目标检测的论文,往往要列出mAP的表格和PR曲线的图。

以FAIR开源的maskrcnn_benchmark为例子,模型训练好了之后进行测试只能得到mAP,并没有直接给出PR曲线。

所以我对coco_eval.py和cocoapi的代码进行了一下研究。https://github.com/cocodataset/cocoapi/blob/master/PythonAPI/pycocotools/cocoeval.py​github.com

coco_eval.eval['precision']是一个5维的数组。

# precision - [TxRxKxAxM] precision for every evaluation setting

# catIds - [all] K cat ids to use for evaluation

# iouThrs - [.5:.05:.95] T=10 IoU thresholds for evaluation

# recThrs - [0:.01:1] R=101 recall thresholds for evaluation

# areaRng - [...] A=4 object area ranges for evaluation

# maxDets - [1 10 100] M=3 thresholds on max detections per image

第一维T:IoU的10个阈值,从0.5到0.95间隔0.05。

第二维R:101个recall 阈值,从0到101

第三维K:类别,如果是想展示第一类的结果就设为0

第四维A:area 目标的大小范围 (all,small, medium, large)

第五维M:maxDets 单张图像中最多检测框的数量 三种 1,10,100

所以, coco_eval.eval['precision'][0, :, 0, 0, 2] 所表示的就是当IoU=0.5时,从0到100的101个recall对应的101个precision的值。

在coco_eval.py中加入一些代码把这个1维数组画出来就是IoU=0.5时对应的PR曲线。

如果对于recall 对应的 precision如何计算有些不清楚的同学,可以看一下这篇文章,一定就可以明白了。zzzz1:浅析经典目标检测评价指标--mmAP(一)​zhuanlan.zhihu.coma45c349edf10dd87d180b5260bff858f.png

在coco_eval.py中加入的画PR曲线的代码

其他的语句就是一些plt.相关的用来画图的语句了。

plt.grid是用来在图中加网格。

plt.legend是用来在图中添加注释。

核心其实就是搞懂 coco_eval.eval['precision'] 这个5维数组表达的是什么。

搞懂了就可以以此类推画出各种自己需要的pr曲线了。

最后列举了基于三种不同的IoU阈值得到的PR曲线。


版权声明:本文为weixin_32191249原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。