交并比(IOU)是用于评估两个边界框之间重叠程度。 它需要真值边界框和检测框。 通过应用IOU,我们可以判断出一个检测框是有效的(真阳性)还是无效的(假阳性)。 IOU的计算公式表示为检测框和真值框之间的交集面积除以它们的并集面积。
IOU = area ( B p ∩ B g t ) area ( B p ∪ B g t ) \text{IOU}=\frac{\text{area}\left(B_{p} \cap B_{gt} \right)}{\text{area}\left(B_{p} \cup B_{gt} \right)} IOU=area(Bp∪Bgt)area(Bp∩Bgt)
真阳性 True Positive(TP):一个正确的检测,检测的IOU ≥ threshold。即预测的边界框(bounding box)中分类正确且边界框坐标正确的数量。
假阳性 False Positive(FP):一个错误的检测,检测的IOU < threshold。即预测的边界框中分类错误或者边界框坐标不达标的数量,即预测出的所有边界框中除去预测正确的边界框,剩下的边界框的数量。
假阴性 False Negative(FN):一个没有被检测出来的ground truth。所有没有预测到的边界框的数量,即正确的边界框(ground truth)中除去被预测正确的边界框,剩下的边界框的数量。
真阴性 True Negative(TN): 在目标检测领域不适用。 在目标检测任务中,存在许多不应该在图像内检测到的可能的边界框。 因此,TN代表正确未检测到的所有可能的边界框(图像中的如此多的可能框)。
注: threshold根据指标的不同,通常设置为50%、75%或95%。
精确率 Precision:代表模型仅识别相关目标的能力。它强调识别结果的准确程度。也称为查准率。
Precision = TP TP + FP = TP all detections \text{Precision} = \frac{\text{TP}}{\text{TP}+\text{FP}}=\frac{\text{TP}}{\text{all detections}} Precision=TP+FPTP=all detectionsTP
召回率 Recall :代表模型覆盖到所有目标的能力。它强调识别结果的覆盖程度,也称为查全率。
Recall = TP TP + FN = TP all ground truths \text{Recall} = \frac{\text{TP}}{\text{TP}+\text{FN}}=\frac{\text{TP}}{\text{all ground truths}} Recall=TP+FNTP=all ground truthsTP
Precision-Recall曲线是评估目标检测器性能的好方法,通过改变置信度为每个目标类别绘制出一条曲线。如果特定类别的目标检测器在召回率增加时仍然保持较高的精确度,则被认为是好的。这意味着如果改变置信度阈值,则精确度和召回率仍然很高。判定物体检测器是优秀的另一种方式是寻找只能识别相关物体(FP=0,即高精度),找出所有地面真实物体(FN=0,即高召回率)的检测器。
另一方面,对于一个性能不好的目标检测器来说,需要通过增加检测对象的数量(增加FP,即降低精度),以便检索所有地面真实对象(高召回率)。 这就是为什么Precision-Recall曲线通常从高精度值开始,然后随着召回率的增加而降低。
PASCAL VOC 2012挑战使用了这种曲线。
另一种比较目标检测器性能的方法是计算Precision-Recall曲线的曲线下面积(AUC)。 由于Precision-Recall曲线通常是上下曲折的曲线,比较同一曲线图中的不同曲线(不同的目标检测器)通常不是一件容易的任务。因为这些曲线往往彼此交叉得非常频繁。 这就是为什么平均精度(AP)这一数字指标也可以帮助我们比较不同的目标检测器。 实际上,AP是介于0和1之间的所有召回率的平均精确度。
从2010年开始,通过PASCAL VOC竞赛来计算AP的方法已经改变。 目前,由PASCAL VOC竞赛执行的插值使用所有数据点,而不是如其论文所述仅插值11个等距点。
11点插值法尝试通过在一组11个等间隔的召回率[0、0.1、0.2,…,1]上的平均精度,来表示Precision-Recall曲线的形状。
AP = 1 11 ∑ r ∈ { 0 , 0.1 , . . . , 1 } ρ interp ( r ) \text{AP}=\frac{1}{11} \sum_{r\in \left \{ 0, 0.1, ...,1 \right \}}\rho_{\text{interp}\left ( r \right )} AP=111r∈{0,0.1,...,1}∑ρinterp(r)
ρ interp = max r ~ : r ~ ≥ r ρ ( r ~ ) \rho_{\text{interp}} = \max_{\tilde{r}:\tilde{r} \geq r} \rho\left ( \tilde{r} \right ) ρinterp=r~:r~≥rmaxρ(r~)
其中, ρ ( r ~ ) \rho(\tilde{r}) ρ(r~) 是在召回率为 r ~ \tilde{r} r~ 时的精度值。 ρ interp \rho_{\text{interp}} ρinterp 是召回率大于等于 r r r 对应的精度值 ρ ( r ~ ) \rho(\tilde{r}) ρ(r~)中的最大精度值。
总结来说,11点插值法代替使用在每个点上观察到的精度,可以通过仅在11个级别上对精度进行插值来获得AP,并采用其召回值大于 r r r的最大精度。
不必仅在11个等距点上插值,而是可以通过以下方式对所有点进行插值
∑ n = 0 ( r n + 1 − r n ) ρ interp ( r n + 1 ) \sum_{n=0} \left ( r_{n+1} - r_{n} \right ) \rho_{\text{interp}}\left ( r_{n+1} \right ) n=0∑(rn+1−rn)ρinterp(rn+1)
ρ interp ( r n + 1 ) = max r ~ : r ~ ≥ r n + 1 ρ ( r ~ ) \rho_{\text{interp}}\left ( r_{n+1} \right ) = \max_{\tilde{r}:\tilde{r} \ge r_{n+1}} \rho \left ( \tilde{r} \right ) ρinterp(rn+1)=r~:r~≥rn+1maxρ(r~)
在这种情况下,不再使用仅在几个点观察到的精度,而是通过在每个级别插值精度来获得AP,并采用其召回值大于 r + 1 r+1 r+1的最大精度。这样我们就可以计算出曲线下的估计面积。
有7张图像,其中有15个用绿色边界框表示的ground truth物体,还有24个用红色边界框表示的检测物体。 每个检测到的对象都有一个置信度,并由字母(A,B,…,Y)标识。
下表显示了边界框及其相应的置信度。 最后一列将检测结果标识为TP或FP。 在此示例中,设置IOU的threshold为30%,则判断为TP,否则为FP。 通过查看上面的图像,我们可以大致分辨出每个检测框是TP还是FP。
在某些图像中,有多个检测框与ground truth框重叠(图像2、3、4、5、6和7)。 对于这些情况,第一个检测被认为是TP,而其他检测是FP。 该规则由Pascal VOC 2012度量应用:“例如,单个对象的5个检被算作1个正确检测和4个错误检测”。
通过累计检测的TP或FP来计算精度和召回率值,绘制出PR曲线。为此,我们首先需要对检测框的置信度进行排序,然后计算每次累积检测的准确率和召回率,如下表所示:
绘制精确度和召回值时,我们有以下Precision-Recall曲线:
如前所述,有两种不同的方法来测量插值平均精度:11点插值和所有点插值。 下面我们对它们进行比较:
11点内插平均精度的想法是在一组11个召回级别(0,0.1,…,1)上平均精度。 内插精度值是通过将召回值大于其当前召回值的最大精度获得的,如下所示:
通过应用11点插值,我们可以:
AP = 1 11 ∑ r ∈ { 0 , 0.1 , . . . , 1 } ρ interp ( r ) = 1 11 ( 1.0 + 0.6666 + 0.4285 + 0.4285 + + 0.4285 + 0 + 0 + 0 + 0 + 0 + 0 ) = 0.2684 \text{AP}=\frac{1}{11} \sum_{r\in \left \{ 0, 0.1, ...,1 \right \}}\rho_{\text{interp}\left ( r \right )}=\frac{1}{11} (1.0 + 0.6666 + 0.4285 + 0.4285 ++ 0.4285 + 0 + 0 + 0 + 0 + 0 + 0) = 0.2684 AP=111r∈{0,0.1,...,1}∑ρinterp(r)=111(1.0+0.6666+0.4285+0.4285++0.4285+0+0+0+0+0+0)=0.2684
通过插值所有点,平均精度(AP)可以解释为Precision-Recall曲线的近似AUC,目的是减少曲线中摆动的影响。 通过查看Precision-Recall曲线中的召回率从最高点0.4666到最低点0的过程**(从右到左的绘图)**,我们还可以直观地获得内插的精度点。并且随着我们降低召回率,精度值会越来越大。 如下图所示:
查看上图,我们可以将AUC划分为4个区域(A1、A2、A3和A4):
通过应用前面介绍的方程式,我们可以计算出:
A 1 = ( 0.0666 − 0 ) ∗ 1 = 0.0666 A1 = (0.0666 - 0) * 1 = 0.0666 A1=(0.0666−0)∗1=0.0666
A 2 = ( 0.1333 − 0.0666 ) ∗ 0.6666 = 0.04446222 A2 = (0.1333 - 0.0666) * 0.6666 =0.04446222 A2=(0.1333−0.0666)∗0.6666=0.04446222
A 3 = ( 0.4 − 0.1333 ) ∗ 0.4285 = 0.11428095 A3 = (0.4 - 0.1333) * 0.4285 =0.11428095 A3=(0.4−0.1333)∗0.4285=0.11428095
A 4 = ( 0.4666 − 0.4 ) ∗ 0.3043 = 0.02026638 A4 = (0.4666 - 0.4) * 0.3043 =0.02026638 A4=(0.4666−0.4)∗0.3043=0.02026638
A 1 + A 2 + A 3 + A 4 = 0.2456 A1 + A2 + A3 + A4 = 0.2456 A1+A2+A3+A4=0.2456
两种不同插值方法之间的结果略有不同:每点插值和11点插值分别为24.56%和26.84%。
https://github.com/rafaelpadilla/Object-Detection-Metrics