如何计算 Pascal VOC 排行榜检测任务的 mAP(平均平均精度)?
那里说-在第11页:
平均精度 (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 处测量的精度
关于mAP
这是否意味着:
- 我们计算 Precision 和 Recall:
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}
,如这里所说,然后我们计算: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
所说
C)或者对于我们计算的许多不同的检测算法阈值:
Precision = Intersect / Detected_box
Recall = Intersect / Object
如图 所示?
- 然后我们将 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,我们得到 MAX of Precision for Recall <= 0.3,而不是此时 Recall=0.3 的 Precision 值)
- 当我们只为所有图像上的 1 个对象类计算 AP 时,我们会得到这个类的AP(平均精度),例如,仅针对
air
.
所以 AP 是一个积分(曲线下面积)
但是当我们为所有图像上的所有对象类计算 AP 时,我们会得到所有图像数据集的mAP(平均精度)。
问题:
- 是否正确,如果不是,那么如何计算 Pascal VOC Challenge 的 mAP?
- 第 1 段中的 3 个公式(A、B 或 C)中的哪一个对于计算 Precision 和 Recall 是正确的?
简短的回答:
- 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 的对象数