一文带你理解《A Survey on Performance Metrics for Object-Detection Algorithms 》,目标检测中的指标计算。

一文带你理解《A Survey on Performance Metrics for Object-Detection Algorithms 》,目标检测中的指标计算。


github地址:https://github.com/rafaelpadilla/Object-Detection-Metrics(网页包含论文)
论文名称:A Survey on Performance Metrics for Object-Detection Algorithms

在大多数目标检测任务中,平均精确度AP以及它的各种变式被广泛的应用与模型评估或者竞赛的排名,这篇文章首先介绍了用于评估目标检测算法的最流行的度量指标,包括它们的主要概念,指出它们的差异,并建立了不同实现之间的比较。

度量指标

在目标检测任务和科学界使用的不同注释数据集中,用于测量检测精度的最常见度量是AP。 在介绍AP的各种变种之前,我们应该回顾它们之间共享的一些概念。 最基本的是下面定义的:

  • True positive (TP): 正确检测真实框
  • False positive (FP): 不正确地检测不存在的对象或错误地检测现有对象
  • False negative (FN): 一个未被发现的真实框

需要注意的是,在目标检测中,一个 true negative (TN) 的结果不会被采用,因为在任何给定的图像中都有无限多的边界框不应该被检测到。

根据上面的定义,我们不禁要问,怎么去衡量正确检测和错误检测,我们知道,在分类任务中,分类正确便是正确检测,分类错误便是错误检测。但是在目标检测中,预测的是锚框,又改怎么去建立这种正确检测和错误检测的关系了。答案便是:一个常见方法是使用交集(IOU)

IOU是一种基于Jaccard指数的度量,是两组数据的相似系数。在目标检测任务中,IOU测量预测框 B p B_p Bp与真实框 B g t B_{gt} Bgt之间的重叠面积除以它们之间的结合面积,用公式表示即:
J ( B p , B g t ) = I O U = area ⁡ ( B p ∩ B g t ) area ⁡ ( B p ∪ B g t ) J(B_p,B_{gt})=IOU=\frac{\operatorname{area}\left(B_{p} \cap B_{g t}\right)}{\operatorname{area}\left(B_{p} \cup B_{g t}\right)} J(Bp,Bgt)=IOU=area(BpBgt)area(BpBgt)
通过将IOU与给定的阈值t进行比较,我们可以将检测分类为正确或不正确。 如果IOU≥t,那么检测被认为是正确的。 如果IOU<t,那么检测被认为是不正确的。
交并比:IOU
因为上文说过TN不会用于目标检测任务,因此像TPR, FPR and ROC curves这些基于TN的指标不会被使用。取而代之的,目标检测方法的评估主要基于精度 P P P和召回 R R R,它们的定义是:
P = T P T P + F P = T P  all detections  P=\frac{\mathrm{TP}}{\mathrm{TP}+\mathrm{FP}}=\frac{\mathrm{TP}}{\text { all detections }} P=TP+FPTP= all detections TP

R =  TP   TP + FN  =  TP   all ground truths  R=\frac{\text { TP }}{\text { TP + FN }}=\frac{\text { TP }}{\text { all ground truths }} R= TP + FN  TP = all ground truths  TP 
笔者总是会混淆这连个概念,为了加强记忆,通常我会在脑海里面建立下面这个表格,那么 R R R的计算就是TP比上第一行相加的结果,而 P P P便是TP比上第一列相加的结果,方便记忆。

——预测的框没有预测的框
真实框TPFN
不存在的框FPTN

精度×召回曲线可以看作是,对于与检测器生成的边界框相关联的置信度值,在精度和召回之间的权衡。 如果检测器的置信度使其检测器的FP低,则精度将很高。但是,在这种情况下,可能会遗漏许多真正的预测框,从而导致FN较高,从而召回率较低。 相反,如果检测器接受更多真正的正样本,则召回率将增加,但FP可能也会增加,从而降低精度。

因此,如果特定对象检测器的精度随其召回率的提高而保持较高,则可以认为是良好的,这意味着,如果置信度阈值发生变化,则精度和查全率仍将很高。 因此,曲线下的高面积(AUC)倾向于表示高精度和高召回率。

问题:不幸的是,在实际情况下,精度×召回图通常是锯齿状的曲线,给准确测量其AUC带来了挑战。 通过处理精度×召回曲线可以避免这种情况,以便在AUC估算之前消除锯齿形行为
解决方法:基本上有两种方法可以这样做:11点插值(11-point interpolation)和所有点插值(allpoint interpolation)。

11点插值法:精确度×召回曲线的形状通过平均11个等距召回级别[0、0.1、0.2,…,1]的集合上的最大精度值来汇总,即:
A P 11 = 1 11 ∑ R ∈ { 0 , 0.1 , … , 0.9 , 1 } P interp  ( R ) \mathrm{AP}_{11}=\frac{1}{11} \sum_{R \in\{0,0.1, \ldots, 0.9,1\}} P_{\text {interp }}(R) AP11=111R{0,0.1,,0.9,1}Pinterp (R)
其中:
P interp  ( R ) = max ⁡ R ~ : R ~ ≥ R P ( R ~ ) P_{\text {interp }}(R)=\max _{\tilde{R}: \tilde{R} \geq R} P(\tilde{R}) Pinterp (R)=R~:R~RmaxP(R~)
在此AP定义中,不是使用在每个召回级别R观察到的精度 P ( R ) P(R) P(R),而是通过考虑其召回值大于R的最大精度 P i n t e r p ( R ) P_{interp}(R) Pinterp(R)来获得AP。

全点插值:对所有点进行插值,而不是只对11个等距点进行插值:
A P a l l = ∑ ( R n + 1 − R n ) P interp  ( R n + 1 ) \mathrm{AP}_{\mathrm{all}}=\sum\left(R_{n+1}-R_{n}\right) P_{\text {interp }}\left(R_{n+1}\right) APall=(Rn+1Rn)Pinterp (Rn+1)
其中
P interp  ( R n + 1 ) = max ⁡ R ~ : R ~ ≥ R n + 1 P ( R ~ ) P_{\text {interp }}\left(R_{n+1}\right)=\max _{\tilde{R}: \tilde{R} \geq R_{n+1}} P(\tilde{R}) Pinterp (Rn+1)=R~:R~Rn+1maxP(R~)
在这种情况下,现在不再使用仅在几个点上观察到的精度,而是通过对每个级别上的精度进行插值来获得AP,并采用召回值大于或等于 R n + 1 R_n + 1 Rn+1的最大精度。

光读概念,看公式可能有些蒙圈,但是不要着急,笔者希望按照原文作者的写作顺序来详细讲解这篇文章,后续会有实例来具体讲解怎么去计算这两中不同的AUC指标

平均AP(mAP)是用于测量特定数据库中所有类别上对象检测器准确性的度量。 mAP只是所有类别中的平均AP,即
m A P = 1 N ∑ i = 1 N A P i \mathrm{mAP}=\frac{1}{N} \sum_{i=1}^{N} \mathrm{AP}_{i} mAP=N1i=1NAPi
其中 N N N是类别的总数, A P i \mathrm{AP}_{i} APi是第 i i i个类别上的AP.

举个例子

之前讲了一大堆理论,到这里就可以通过实例来讲解具体怎么计算AP啦:

如前所述,针对每个类别分别计算AP。 在下图所示的示例中,方框代表给定类别的检测值(红色方框以字母标识-A,B,…,Y)和真实框(绿色方框)。 每个红色框旁边绘制的百分比值表示此对象类的检测置信度。 为了评估分布在7张图像中的15个真实框中的24个检测的精度和召回率,需要建立IOU阈值t。 在此示例中,让我们考虑IOU≥30%的检测框作为TP检测框。 注意,IOU阈值的每个值都提供了不同的AP度量,因此必须始终指示所使用的阈值。
在这里插入图片描述
下表列出了每个检测框的置信度。 对于每个检测框,如果其面积与真实框有30%或更多重叠(IOU≥30%),则TP列被标识为1; 否则将其设置为0,并将其视为FP。 某张照片可以输出与单个真实框重叠的多个检测(例如,image 2中的检测D和E;image 3中的G,H和I)。对于这些情况,按照PASCAL VOC 2012挑战,将具有最高置信度的检测视为TP,将其他检测视为FP。 Acc TP和Acc FP列沿高于相应置信度水平的所有检测累计TP和FP的总量。根据这张表格我们可以看出来,关于精度和召回率的计算是根据一个一个检测框累积计算而来。
在这里插入图片描述
下图描绘了这种情况下计算出的精度和召回值。
在这里插入图片描述
接下来就可以根据两种不同的插值计算方式计算各自的AP,首先是第一种方式 A P 11 \mathrm{AP}_{11} AP11
A P 11 = 1 11 ( 1 + 0.6666 + 0.4285 + 0.4285 + 0.4285 ) A P 11 = 26.84 % \begin{array}{l} \mathrm{AP}_{11}=\frac{1}{11}(1+0.6666+0.4285+0.4285+0.4285) \\ \mathrm{AP}_{11}=26.84 \% \end{array} AP11=111(1+0.6666+0.4285+0.4285+0.4285)AP11=26.84%
解释一下这个怎么计算的,根据公式,首先找置信度比0大的置信度对应的精度中最大的那一个:1,然后找置信度比0.1大的置信度对应的精度中最大的那一个:0.6666,继续找置信度比0.2大的置信度对应的精度中最大的那一个:0.4285,以此类推,将找出来的值相加,取平均后,完成计算。
接着是第二种方式 A P all  \mathrm{AP}_{\text {all }} APall 的计算:
A P all  = 1 ∗ ( 0.0666 − 0 ) + 0.6666 ∗ ( 0.1333 − 0.0666 ) + 0.4285 ∗ ( 0.4 − 0.1333 ) + 0.3043 ∗ ( 0.4666 − 0.4 ) A P all  = 24.56 % \begin{aligned} \mathrm{AP}_{\text {all }} &=1 *(0.0666-0)+0.6666 *(0.1333-0.0666) \\ &+0.4285 *(0.4-0.1333)+0.3043 *(0.4666-0.4) \\ \mathrm{AP}_{\text {all }} &=24.56 \% \end{aligned} APall APall =1(0.06660)+0.6666(0.13330.0666)+0.4285(0.40.1333)+0.3043(0.46660.4)=24.56%
有了上面 A P 11 \mathrm{AP}_{11} AP11的例子和 A P all  \mathrm{AP}_{\text {all }} APall 的公式,这个的计算方式便很好理解,这里便不再叙述。
下面给出这两种方式计算对应的可视化图片:
在这里插入图片描述
在这里插入图片描述
存在的问题:细心的读者可能已经发现问题所在,那就是不同方式计算出来的AP是不一样的。因此在很多论文中,通常既未提及所使用的方法,也未提及所采用的工具来评估其结果。这个问题在竞赛中很少发生,因为通常的做法是包括一个参考软件工具,以便参与者评估他们的结果。
另一个问题是,检测器可能会为两个不同的检测框赋予相同的置信度。例如,上表中说明检测R和Y获得相同的置信度(95%),这种情况很少发生。根据某种实现方法,可以将一个或其他检测分类为表中的第一个检测,直接影响对象检测算法的最终结果。也就是说如果调换R和Y的位置,算出来的AP又会不同。
通常,评估工具没有根据上述缺陷达成共识。

目标检测任务以及AP的各种变种

目标检测算法更新速度极快, 将他们的结果与不同的作品进行比较并不是一件容易的事。 有时所应用的度量标准会有所不同,或者不同作者所使用的实现方式可能不同,从而产生不同的结果。 本节介绍了文献中发现的主要竞赛及其最受欢迎的AP变种。

PASCAL VOC 是在2005年发布的一个目标检测竞赛。从2005年到2012年,发布了新版本的Pascal VOC,其中增加了图像和类的数量,从四个类开始,在最后一次更新中达到20个类 。 PASCAL VOC竞赛仍然接受提交,揭示用于目标检测的最新算法。 在本教程中,竞赛将应用11点插值精度,并使用开发工具包所实现的所有类的均值AP对提交性能进行排名。

Open Images 2019竞赛在其目标检测任务中使用Open Images数据集,其中包含170万个图像上500个对象类别中的12.2 M带注释的边界框。 由于具有分层注释,因此同一对象可以属于一个主类和多个子类(例如“头盔”和“足球头盔”)。 因此,用户应报告给定检测的类和子类。 如果以某种方式仅正确报告了检测到的边界框的主类,则未报告的子类会对分数产生负面影响,因为该分数被视为FN。 前述挑战采用的度量标准是使用Tensorflow对象检测API的所有类的平均AP 。

COCO检测挑战(边界框)提供了200,000张包含80个对象类别的图像的边界框坐标。 提交的作品根据收集到的四个主要的指标进行排名。

  • AP:用不同的IOU评估AP。 可以计算10个IOU,步长范围为50%至95%,步长为5%,通常记为为AP @ 50:5:95。 也可以使用单个IOU值进行评估,其中最常见的值为50%和75%,分别标记为 A P 50 AP{50} AP50 A P 75 AP{75} AP75,有些文章也标注为 A P 50 AP_{50} AP50 A P 75 AP_{75} AP75
  • 跨比例AP:针对三种不同大小的对象确定AP:小(面积<32^2 像素),中(32^2 <面积< 96^2像素)和大(面积> 96^2像素),分别标注为 A P S AP_S APS, A P M AP_M APM, A P L AP_L APL
  • 平均召回率(AR):通过给定在IOU和类别上平均每张图像固定检测次数(1、10或100)的最大召回值来估计AR;
  • 跨比例AR:为与跨比例AP相同的三个不同大小的对象确定AR,通常分别报告为AR-S,AR-M和AR-L。

下面两个表格分别给出了由不同的目标检测方法在COCO和PASCAL VOC挑战数据集所获得的结果。
在这里插入图片描述
在这里插入图片描述
存在的问题1:由于边界框注释格式不同,研究人员倾向于仅报告每个数据集分发的源代码所支持的指标。 除此之外,使用具有其他注释格式的数据集的方法被迫在使用评估代码之前将其注释转换为PASCAL VOC和COCO格式。

存在的问题2:上面表格中指标AP50的计算方法与指标mAP相同,但是由于在不同的数据集中对方法进行了训练和测试,因此在两次评估中都获得了不同的结果。 由于需要在不同数据集之间的边界框注释之间进行转换,因此研究人员通常不会使用所有可能的指标来评估所有方法。 在实践中,如果一个数据集(例如,PASCAL VOC)训练和测试的方法也可以通过其他数据集(例如,COCO)中使用的度量标准进行评估,那将更有意义。

开源性能指标库

针对上诉的问题1和问题2,这篇文章的作者开发了一个标准的指标计算库,仓库的地址就是开头的链接。

为了帮助其他研究人员和学术界获得可信赖的结果,无论检测方法,数据库或真实框批注的格式如何,都可以用我们开发的Python AP度量标准的库来进行度量,该库可以扩展到AP的各种变化形式 。 该库易于使用,并且实现了与最流行的比赛和物体检测方法相同的度量标准。 实现了不需要修改检测模型以匹配复杂的输入格式,从而避免了转换为XML或JSON文件。 为了确保结果的准确性,我们在定义后面加上了具体的实现方式,并将我们的结果与正式的实现方式进行了仔细比较,结果完全相同。 读者可以使用我们开发的库获得使用11点或全点插值的AP度量标准的变化,例如mAP,AP50,AP75和AP @ 50:5:95。

该仓库简化了输入数据(真实边界框和检测到的边界框)的格式。 所需的格式非常简单,可以支持最流行的检测方法。 对于真实边界框,应使用以下格式之一为每个图像创建一个文本文件:
< c l a s s > < l e f t > < t o p > < r i g h t > < b o t t o m > <class> <left> <top> <right> <bottom> <class><left><top><right><bottom>
< c l a s s > < l e f t > < t o p > < w i d t h > < h e i g h t > <class> <left> <top> <width> <height> <class><left><top><width><height>
对于检测的边界框,应使用以下格式之一为每个图像创建一个文本文件:
< c l a s s > < c o n f i d e n c e > < l e f t > < t o p > < r i g h t > < b o t t o m > <class> <confidence> <left> <top> <right> <bottom> <class><confidence><left><top><right><bottom>
< c l a s s > < c o n f i d e n c e > < l e f t > < t o p > < w i d t h > < h e i g h t > <class> <confidence> <left> <top> <width> <height> <class><confidence><left><top><width><height>
第二中形式支持YOLO的输出边界框格式。除了指定边界框的输入格式外,还可以设置用于计算TP的IOU阈值(用于计算指标AP @ 50:5:95,AP50和AP75)和插值方法(11点插值或用所有点进行插值)。该工具将输出11点插值或用所有点进行插值计算的图,最终的mAP和每个类的AP,从而更好地查看每个类的结果。该工具还提供了一个选项,以生成带有画有边框的输出图像,如下图所示。
在这里插入图片描述
可以从以下网站访问与本文开发的项目:https://github.com/rafaelpadilla/Object-Detection-Metrics。到目前为止,我们的框架已帮助研究人员以简单的方式获得AP指标及其变化,支持数据集使用的最流行的格式,避免了转换为XML或JSON文件。开发工具已被用作比赛中的正式工具[27],已在[45]等第三方库中采用,并在[46]-[48]中被许多其他方法使用。

关于这个仓库的详细使用方法,大家可以移步该仓库进行查看学习,这篇文章的解读就到此为止了,如果你都看到这里了,麻烦点个赞哦!

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值