目标检测中的AP和mAP计算方法(极易理解版)

       看了几篇相关资料,知乎上一篇文章(https://zhuanlan.zhihu.com/p/43068926)写的容易理解,转载以学习。为了方便理解,我在文中自己画了一个P-R曲线,读完本文以后足够理解AP和mAP了,其具体计算过程可以参考我另一篇博客中第五部分:https://blog.csdn.net/zhou4411781/article/details/105112058

       图像分类任务通常用accuracy来衡量模型的准确率,对于目标检测任务,比如测试集上的所有图片一共有1000个object(这里的object不是图片的数量,因为一张图片中可能包含若干个object),两个模型都正确检测出了900个object(IOU>规定的阈值)。与图像分类任务不同的是,目标检测因为可能出现重复检测的情况,所以不是一个n to n的问题。也就不能简单用分类任务的accuracy来衡量模型性能,因为模型A有可能是预测了2000个结果才中了900个,而模型B可能只预测了1200个结果。模型B的性能显然要好于A,因为模型A更像是广撒网,误检测的概率比较高。想象一下如果将模型A用在自动驾驶的汽车上,出现很多误检测的情况对汽车的安全性和舒适性都有很大影响。

       那在目标检测任务中,应该怎样衡量模型的性能?其中一个标准就是信息检索那样,不仅要衡量检测出正确目标的数量,还应该评价模型是否能以较高的precision检测出目标。也就是在某个类别下的检测,在检测出正确目标之前,是不是出现了很多判断失误。AP越高,说明检测失误越少。对于所有类别的AP求平均就得到mAP了。

(1)voc2007的计算方法:

在计算AP时,首先要把结果按照置信度排序,公式如下:

在这里插入图片描述

(2)voc2010的计算方法:

比起07年,10年以后的新方法是取所有真实的recall值,按照07年的方法得到所有recall/precision数据点以后,计算recall/precision曲线下的面积:

Compute a version of the measured precision/recall curve with > precision monotonically decreasing, by setting the precision for > recall r to the maximum precision obtained for any recall r′ ≥ r.
Compute the AP as the area under this curve by numerical integration. No approximation is involved since the curve is piecewise constant.

举一个例子具体说明:

对于Aeroplane类别,我们有以下输出(BB表示Bounding Box序号,IOU>0.5时GT=1):

BB  | confidence | GT
----------------------
BB1 |  0.9       | 1
----------------------
BB2 |  0.9       | 1
----------------------
BB1 |  0.8       | 1
----------------------
BB3 |  0.7       | 0
----------------------
BB4 |  0.7       | 0
----------------------
BB5 |  0.7       | 1
----------------------
BB6 |  0.7       | 0
----------------------
BB7 |  0.7       | 0
----------------------
BB8 |  0.7       | 1
----------------------
BB9 |  0.7       | 1
----------------------

因此,我们有 TP=5 (BB1, BB2, BB5, BB8, BB9), FP=5 (重复检测到的BB1也算FP)。除了表里检测到的5个GT以外,我们还有2个GT没被检测到,因此: FN = 2. 这时我们就可以按照Confidence的顺序给出各处的PR值,如下:

rank=1  precision=1.00 and recall=0.14
------------------------------
rank=2  precision=1.00 and recall=0.29
------------------------------
rank=3  precision=0.66 and recall=0.29
------------------------------
rank=4  precision=0.50 and recall=0.29
------------------------------
rank=5  precision=0.40 and recall=0.29
------------------------------
rank=6  precision=0.50 and recall=0.43
------------------------------
rank=7  precision=0.43 and recall=0.43
------------------------------
rank=8  precision=0.38 and recall=0.43
------------------------------
rank=9  precision=0.44 and recall=0.57
------------------------------
rank=10 precision=0.50 and recall=0.71
------------------------------

目标检测中的AP和mAP计算方法(极易理解版)_第1张图片

(1)07年的方法:我们选取Recall >={ 0, 0.1, …, 1}的11处Percision的最大值:1, 1, 1, 0.5, 0.5, 0.5, 0.5, 0.5, 0, 0, 0。AP = 5.5 / 11 = 0.5

(2)VOC2010及以后的方法,对于Recall >= {0, 0.14, 0.29, 0.43, 0.57, 0.71, 1},我们选取此时Percision的最大值:1, 1, 1, 0.5, 0.5, 0.5, 0。计算recall/precision下的面积:AP = (0.14-0)x1 + (0.29-0.14)x1 + (0.43-0.29)x0.5 + (0.57-0.43)x0.5 + (0.71-0.57)x0.5 + (1-0.71)x0 = 0.5

计算出每个类别的AP以后,对于所有类别的AP取均值就得到mAP了。

你可能感兴趣的:(深度学习)