[目标检测][PASCAL VOC]mAP
对于目标检测算法而言,mAP(mean average precision)
是最常用的评价指标了。关于如何计算mAP
,不同的数据集提供了不同的实现方式,其中最常用的就是PASCAL VOC
数据集的mAP
计算,网上有很多相关的资料,看了很多还是感觉不理解,所以打算好好记录一下
相关实现:zjykzj/vocdev
PASCAL VOC mAP
PASCAL VOC
数据集的AP
计算经历了两个版本,参考
mAP
就是多个AP
的平均值
版本一:07
计算得到不同置信度阈值下的Precision
和Recall
后,均匀采样11
个recall
值(recall = [0, 0.1, 0.2, ..., 1]
)对应的精度值,然后求和进行平均
版本二:12
需要针对每一个不同的Recall值(包括0和1),选取其大于等于这些Recall值时的Precision最大值,然后计算PR曲线下面积作为AP值
绘制出平滑后的PR曲线后,用积分的方式计算平滑曲线下方的面积作为最终的AP值
\[ AP = \int _{0}^{1} p_{smooth}(r)dr \]
TP
Multiple detections of the same object in an image are considered false detections e.g. 5 detections of a single object is counted as 1 correct detection and 4 false detections - it is the responsibility of the participant's system to filter multiple detections from its output.
图像中每个目标仅有一个被认定为True Positive
,其余的都是False Positive
Precision/Recall
最关键的是如何有效定义目标检测下的Precision/Recall
,其实现公式如下:
\[ Precisoin = \frac {TP}{TP+FP} \ Recall = \frac {TP}{TP+FN} \]
在目标检测中有两个超参数:
- 置信度阈值:判断预测边界框是否为
positive
IoU
:判断预测边界框是否为true/false
假定对于某一类目标而言,存在\(N\)个真值边界框,共检测得到了\(M\)个候选边界框。设置固定的最小IoU=0.5
,不同的置信度阈值([0, 1]
)下的计算如下:
- 此时\(M\)个候选边界框中有\(K\)个大于等于置信度阈值的候选边界框
- 从
K
个候选边界框中存在\(H\)个TP
,那么\(FP = K-H\)
此时精度和召回率计算如下:
\[ Precision = \frac {H}{K} \ Recall = \frac {H}{N} \]
上述的计算是通过阅读源码理解的
实现
PASCAL VOC
提供的是Matlab
实现,不懂,不过幸好网上有人开源了相应的Python
实现
主要研究了第一个仓库的源码,使用第二个仓库进行了验证
1 | # 实现一 |
不过两个仓库的实现都包含了绘制PR
图像的功能,同时还存在一些代码排版的问题,所以自定义了一个仓库,仅实现mAP
的计算