评价指标MAP

目录

1、相关知识点

1.1、IOU交并比

 1.2、TP TN FP FN

1.3、Precision(精度)和Recall(召回率)

 2、目标检测精确度Precision

 3、Average Precision

3.1、VOC 2007的AP

3.2、VOC 2012的AP

3.3、COCO mAP


        mAP:mean Average Precision即均值平均精确度,首先是一个类别内,求平均精确度(Average Precision),然后对所有类别的平均精确度再求平均(mean Average Precision)。

1、相关知识点

1.1、IOU交并比

        预测的检测框(bbox)和真实的检测框(ground truth)的交集和并集之间的比例。

评价指标MAP_第1张图片

评价指标MAP_第2张图片

def iou(rec1, rec2):
  x1,x2,y1,y2 = rec1 #分别是第一个矩形左右上下的坐标
  x3,x4,y3,y4 = rec2 #分别是第二个矩形左右上下的坐标
  area_1 = (x2-x1)*(y1-y2)
  area_2 = (x4-x3)*(y3-y4)
  sum_area = area_1 + area_2
  w1 = x2 - x1#第一个矩形的宽
  w2 = x4 - x3#第二个矩形的宽
  h1 = y1 - y2
  h2 = y3 - y4
  W = min(x1,x2,x3,x4)+w1+w2-max(x1,x2,x3,x4)#交叉部分的宽
  H = min(y1,y2,y3,y4)+h1+h2-max(y1,y2,y3,y4)#交叉部分的高
  Area = W*H#交叉的面积
  Iou = Area/(sum_area-Area)
  return Iou

 1.2、TP TN FP FN

        考虑一个二分问题,即将实例分成正类(positive)或负类(negative)。对一个二分问题来说,会出现四种情况。

        TP(True Positive-真正):是正类并且也被预测成正类的数目;

  FN(False Negative-假负):正类被预测成负类的数目;

  FP(False Positive-假正):是负类被预测成正类的数目;

  TN(True Negative-真负):是负类被预测成负类的数目;

        列联表如下表所示,1代表正类,0代表负类:

预测1

预测0

实际1

True Positive(TP)

False Negative(FN)

实际0

False Positive(FP)

True Negative(TN)

1.3、Precision(精度)和Recall(召回率)

        分类器认为是正类并且确实是正类的部分占所有分类器认为是正类的比例:

评价指标MAP_第3张图片

         分类器认为是正类并且确实是正类的部分占所有确实是正类的比例:

 2、目标检测精确度Precision

        对于简单的二分类问题,精确度的计算公式为:

         实际上就是看所检测出来的结果中有多少是正确的,也就是预测结果为Positive的样例中,True Positive的比例。

        对于目标检测问题,一般以检测出来的bounding box与ground true的bounding box的交并比(IOU)来判断检测结果是TP还是FP。因此,取不同的IOU,TP和FP的数量就会不一样,如下图所示(横坐标表示IOU值,纵坐标表示样例的数量,左侧“驼峰”内的是标签为False的样例,右侧“驼峰”内的是标签为True的样例,中间的分界线表示IOU的判别阈值,模型把分界线左侧的样例判别为False,右侧的判别为True,得到混淆矩阵的TP、FP、FN和TN四个不同的结果。当分界线取不同值时,矩阵内的各个值都会变化)。在评判模型优劣的时候,不能以某个单一的IOU来衡量精确度,因此,就需要计算AP(Average Precision)。

评价指标MAP_第4张图片

 3、Average Precision

        在判断模型的优劣时,除了精确度之外,还有另一个非常重要的指标——Recall,计算方式如下:

         实际上就是看有多少正例被找出来了,等于TP占所有ground true标签为True的比例。在一定程度上,Precision和Recall是“对立”的,当IOU的判别阈值增大时(IOU更大的才被判别为正例),即上图的分界线向右移时,Precision会增大,而Recall会减小;当IOU阈值减小时,即分界线往左移,Precision会减小,而Recall会增大。反过来考虑,在不同的Recall值下,会有不同的Precision值。以Recall值为横坐标,以Precision为纵坐标,把取不同阈值时的结果画到图上,就得到了所谓的PR曲线,如下图所示。

评价指标MAP_第5张图片

         计算不同Recall值下的Precision的平均值,就得到了所谓的Average Precision。对不同的Recall值,可以有不同的取值方法,其中PASCAL VOC 2007和PASCAL VOC 2012 中采取的是如下两种不同的方式。

3.1、VOC 2007的AP

        对于上面的PR曲线,取(0.0, 0.1, 0.2 …… 1.0)共11个Recall值,计算Precision的平均值。考虑到在样本有限的情况下,有可能出现如下图这样的抖动,即Recall值较大时,Precision反而比Recall较小时的值更大。因此,还需采取一定的平滑措施,计算方式如下。

评价指标MAP_第6张图片

评价指标MAP_第7张图片

         实际上就是对于每个Recall值下的Precision,取所有比当前值大的Recall对应的Precision的最大值作为当前Recall值下的Precision,对应上图,就是取当前recall值右侧的最大Precision作为当前的Precision。平滑后,得到的就是如上面红色虚线所示的值。

        上面的计算过程,可以看成是把横坐标分成11个bin,每个bin的宽度就是1/11​,高度就是Precision值,AP值就是这11个bin的面积和。如上图的计算过程如下:

AP = 1/11*(1+0.6666+0.4285+0.4285+0.4285+0+0+0+0+0+0) = 0.2684

        PS:Pascal VOC 2008中设置IoU的阈值为0.5,取不同的conf_th获得PR曲线。这种方式有两个缺陷,第一个是使用11个采样点在精度方面会有损失。第二个是,在比较两个AP值较小的模型时,很难体现出两者的差别。

3.2、VOC 2012的AP

        PASCAL VOC 2012 中,针对每一个不同的Recall值(包括0和1),选取其大于等于这些Recall值时的Precision最大值,然后计算PR曲线下面积作为AP值。平滑的结果还是上面那个曲线,只不过计算平均值的点更多了。

        这样取均值的结果,就可以看成是计算平滑后的PR曲线(上图红色虚线)的AUC(Area Under Curve)。

评价指标MAP_第8张图片

         如上图所示,AP值实际上就等于四个方框的面积和。

AP=A1+A2+A3+A4

        例如上图中:

A1=(0.0666−0)∗1=0.0666 
A2=(0.1333−0.0666)∗0.0666=0.0444 
A3=(0.4−0.1333)∗0.4285=0.1142 
A4=(0.4666−0.4)∗0.3043=0.0202 
AP=0.0666+0.0444+0.1142+0.0202=0.2456​

        实际计算时,可能是用两个Recall的间隔作为bin的宽度,以平滑后的Precision作为高,求和后与上面的过程是一样的。

        PS:精度更高,绘制出平滑后的PR曲线后,用积分的方式计算平滑曲线下方的面积作为最终的AP值。

3.3、COCO mAP

        在目标检测任务中,如果我们模型输出的矩形框与我们人工标注的矩形框的IoU值大于某个阈值时(通常为0.5)即认为我们的模型输出是正确的。检测的结果P越高越好,R也越高越好,但事实上这两者在某些情况下是矛盾的。如极端情况下,我们只检测出了一个结果,且是准确的,那么Precision就是100%,但是Recall就很低;而如果我们把所有结果都返回,那么必然Recall必然很大,但是Precision很低。所以,通常会用绘制Precision-Recall曲线来帮助分析。

        顾名思义AP就是平均精准度,简单来说就是对PR曲线上的Precision值求均值。对于pr曲线来说,我们使用积分来进行计算。

         在实际应用中,我们并不直接对该PR曲线进行计算,而是对PR曲线进行平滑处理。即对PR曲线上的每个点,Precision的值取该点右侧最大的Precision的值。

评价指标MAP_第9张图片

         PR曲线的平滑处理,用公式来描述就是:

        COCO mAP:

        最新的目标检测相关论文都使用coco数据集来展示自己模型的效果。对于coco数据集来说,使用的也是Interplolated AP的计算方式。与voc 2008不同的是,为了提高精度,在PR曲线上采样了100个点进行计算。而且Iou的阈值从固定的0.5调整为在 0.5 - 0.95 的区间上每隔0.05计算一次AP的值,取所有结果的平均值作为最终的结果。

        比如我们看一下YOLOv3的作者在论文中展示的在coco数据集上的实验结果:

评价指标MAP_第10张图片

         我们发现除了AP,还有 AP50、AP75、APs、APm、APl等,AP50、AP75分别表示iou为0.5、0.7时的AP测量值,APs:像素面积小于32^2的目标框的AP测量值,APm:像素面积在32^2~96^2之间目标框的AP测量值,APl:像素面积大于 96*96 的目标框的AP测量值。

        注:通常来说AP是在单个类别下的,mAP是AP值在所有类别下的均值。在这里,在coco的语境下AP便是mAP,这里的AP已经计算了所有类别下的平均值,这里的AP便是mAP。

你可能感兴趣的:(目标检测,python,计算机视觉,目标检测,视觉检测)