如何为PASCAL VOC挑战计算检测任务的mAP?


22

如何为Pascal VOC排行榜的检测任务计算mAP(平均平均精度)?http://host.robots.ox.ac.uk:8080/leaderboard/displaylb.php?challengeid=11&compid=4

那里说-在第11页http : //homepages.inf.ed.ac.uk/ckiw/postscript/ijcv_voc09.pdf

平均精度(AP)。对于VOC2007挑战,使用插值平均精度(Salton和Mcgill 1986)来评估分类和检测。对于给定的任务和类别,从方法的排序输出中计算出精度/召回曲线。召回率定义为排名高于给定等级的所有阳性示例的比例。精确度是高于该等级的所有示例中来自肯定类别的比例。AP汇总了精度/召回曲线的形状,并定义为一组11个等距召回级别[0,0.1,...,1]的平均精度: AP = 1/11 ∑ r∈{0,0.1,...,1} pinterp(r)

通过采用针对相应召回率超过r:的方法测得的最大精度来内插每个召回级别r的精度pinterp(r) = max p(r˜),其中p(r〜)是在召回〜r时测得的精度

有关地图:http://0agr.ru/wiki/index.php/Precision_and_Recall#Average_Precision


这是否意味着:

  1. 我们计算精度和召回率

    • A)对于许多不同的值,IoU > {0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1}我们计算真/假正/负值

    其中True positive = Number_of_detection with IoU > {0, 0.1,..., 1},这里说:/datascience//a/16813/37736然后我们计算:

    Precision = True positive / (True positive + False positive)

    Recall = True positive / (True positive + False negative)


  • B)或者对于许多不同的检测算法阈值,我们计算:

    Precision = True positive / (True positive + False positive)

    Recall = True positive / (True positive + False negative)

    True positive = Number_of_detection with IoU > 0.5这里说:/programming//a/43168882/1558037



  1. 然后我们构建Precision-Recall曲线,如下所示: 在此处输入图片说明

  1. 然后我们计算AP(平均精度)为平均11个值Precision在点,其中Recall = {0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1},即AP = 1/11 ∑ recall∈{0,0.1,...,1} Precision(Recall)

(通常,对于每个点,例如0.3,我们得到Recall <= 0.3的Precision最大值,而不是此时Recall = 0.3的Precision值)


  1. 而且,当我们仅针对所有图像上的1个对象类计算AP时- 例如,仅获得的AP(平均精度)air

因此AP是积分(曲线下的面积):https : //stats.stackexchange.com/a/157019/111998

但是,当我们为所有图像上的所有对象类计算AP时-那么我们将获得所有图像数据集的mAP(平均平均精度),例如,88.6对于R4D_faster_rcnn:http ://host.robots.ox.ac.uk:8080/leaderboard /displaylb.php?challengeid=11&compid=4


问题:

  1. 是的,如果不是,那么如何计算Pascal VOC Challenge的mAP?
  2. 在第1段中,三个公式(A,B或C)中的哪个公式对于计算“精确度”和“召回率”是正确的?

简短答案:

  • mAP = AVG(每个对象类的AP)
  • AP = AVG(11次召回中的每个召回的精度{precision = 0、0.1,...,1})
  • PR曲线=精确度和调用率(对于“预测”边界框中的每个阈值)
  • 精度= TP /(TP + FP)
  • 召回率= TP /(TP + FN)
  • TP = IoU> 0.5的检测次数
  • FP = IoU <= 0.5或多次检测的检测次数
  • FN =未被检测到或被IoU <= 0.5检测到的对象数

Answers:


15

要回答您的问题:

  1. 是的,您的方法是正确的
  2. 在A,B和C中,正确的答案是B。

解释如下:为了在对象检测的上下文中计算平均平均精度(mAP),您必须计算每个类别的平均精度(AP),然后计算所有类别的平均值。此处的关键是计算每个类别的AP,通常在计算Precision(P)和Recall(R)时,您必须定义以下各项:真阳性(TP),假阳性(FP),真阴性(TN)和假负数(FN)。在“ Pascal VOC挑战”的“对象检测”设置中,以下内容:

  • TP:是结合(IoU)与地面实况(GT)的交点大于0.5的边界框(BB)
  • FP:具有GT的IoU低于0.5的BB以及具有已检测到GT的IoU的BB。
  • TN:没有真正的负片,图像应包含至少一个对象
  • FN:那些图像是方法无法产生BB的

现在,每个预测的BB对于给定的类别都有一个置信度值。因此,计分方法对预测进行排序以降低置信度,并针对每个可能的排名k = 1直至预测数量,计算P = TP /(TP + FP)和R = TP /(TP + FN)。因此,现在每个等级都有一个(P,R),这些P和R是“原始”精确调用曲线。要计算R的每个值的内插PR曲线,请选择具有相应R'> = R的最大P。

根据voc devkit doc,有两种不同的方法可以对PR曲线点进行采样。对于2010年之前的VOC挑战,我们选择任何R'> = R所获得的最大P,其中R属于0、0.1,...,1(11分)。然后,AP是每个召回阈值处的平均精度。对于VOC Challenge 2010及之后的版本,我们仍然为任何R'> = R选择最大P,而R属于所有唯一的召回值(包括0和1)。AP就是PR曲线下的面积。请注意,如果您的Pcall值没有超过某些阈值,则Precision值为0。

例如,考虑给定类别“ Aeroplane”的方法的以下输出:

BB  | confidence | GT
----------------------
BB1 |  0.9       | 1
----------------------
BB2 |  0.9       | 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
----------------------

除了未在两个图像中检测到边界框外,因此我们有FN =2。上表是方法GT = 1的预测的预测值的按置信度排序的等级,表示TP和GT = 0 FP。因此TP = 5(BB1,BB2,BB5,BB8和BB9),FP = 5。对于等级= 3的情况,精度已经下降,因为已经检测到BB1,因此即使确实存在该对象,它也算作FP。。

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
----------

给出先前的结果:如果我们使用voc2010之前的方式,则插值的Precision值是1,1,1,0.5,0.5,0.5,0.5,0.5,0,0,0。则AP = 5.5 / 11 = 0.5飞机的类别。否则,如果我们使用自voc2010以来的方式,则内插的Precision值分别是七个,分别为0、0.14、0.29、0.43、0.57、0.71、1的唯一召回的1,1,1,0.5,0.5,0.5,0。 (0.14-0)* 1 +(0.29-0.14)* 1 +(0.43-0.29)* 0.5 +(0.57-0.43)* 0.5 +(0.71-0.57)* 0.5 +(1-0.71)* 0 = 0.5 “飞机”类。

对每个班级重复上述步骤,然后获得(mAP)。

更多信息可在下面的链接找到12。另外,您还应该查看以下文章:PASCAL可视对象类挑战:回顾,以获得更详细的解释。


1
别客气!是的,您应该计算所有图像。如果IoU> 0.5,则GT为1。对于3个未检测到的对象,最后一个FN将为3
feynman410'1

1
FN是未进行预测的图像数量,FP是IoU <= 0.5或检测到不止一次的检测数量。参见此伪代码stats.stackexchange.com/a/263758/140597
feynman410

1
抱歉,您的权限是未检测到对象的数量。
feynman410 '17

1
@ feynman410我很困惑,您能告诉我们您在表格中未检测到但应该放置的对象中的位置吗?在桌子的尽头?(因为他们没有得分)
马丁·布里西亚克(MartinBrišiak

1
因此,针对每个类别分别计算“精度”和“召回”,以便为每个类别计算AP。对?那么,是对每个图像分别进行计算然后求平均值,还是对所有图像的总检测值进行计算?
SomethingSomething

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.