显著性目标检测matlab代码_目标检测模型评估指标mAP及代码注释

目标检测模型评估指标mAP及代码注释

最近刚看完Faster R-CNN的源码,对于mAP这个目标检测的衡量指标之前也大致的了解一下,但是它与准确度(Accuray)、精度(Precision)、召回率(recall)等的关系是怎么样的?这些都还没有了解,所以刚好顺着Faster R-CNN的源码,把这个问题搞清楚一些。

一、目标检测问题

每个模型在“验证/测试”数据集上来评估性能,性能衡量使用各种统计量如准确度(accuracy),精度(precision),召回率(recall)等。选择的统计量通常针对特定应用场景和用例。 对于每个应用场景,选择一个能够客观比较模型的度量指标非常重要。

大多数时候,这些指标很容易理解和计算。例如,在二元分类中,精确度和召回率是一个一个简单直观的统计量。然而,目标检测是一个非常不同且有趣的问题。即使你的目标检测器在图片中检测到猫,但如果你无法定位,它也没有用处。由于你要预测的是图像中各个物体是否出现及其位置,如何计算mAP将非常有趣。

在目标检测问题中,给定一个图像,找到它所包含的物体,找到他们的位置并对它们进行分类。目标检测模型通常是在一组特定的类集合上进行训练的,所以模型只会定位和分类图像中的那些类。另外,对象的位置通常采用矩形边界框表示。因此,目标检测涉及图像中物体的定位和分类。

1b776ad2975e334b902611e6794af20b.png

二、评估目标检测模型

1.为什么是mAP?

目标检测问题中的每个图片都可能包含一些不同类别的物体。如前所述,需要评估模型的物体分类和定位性能。因此,用于图像分类问题的标准指标precision不能直接应用于此。所以我们需要一种新的评估方式,即mAP(Mean Average Precision),来衡量模型的性能。

2.Ground Truth的定义


对于任何算法,评估指标需要知道ground truth(真实标签)数据。 我们只知道训练、验证和测试数据集的ground truth。对于目标检测问题,ground truth包括图像中物体的类别以及该图像中每个物体的真实边界框。

a8931e64c74dadbef23fd9dbcd255796.png

训练时,模型需要的输入是原始的图像,以及Ground Truth的坐标值和类别。

65026e157e4100d7f2d5a85b4c7f0ac1.png

在计算mAP之前我们再来复习以下比较重要的概念。

3.IOU的概念

IOU的概念应该比较简单,就是衡量监测框和标签框的重合程度。

9d939a8ecf43e6a2bb7fe6f4040840c0.png

2.TP TN FP FN的概念

TP(True Positives)意思是“被分为正样本,并且分对了”,
TN(True Negatives)意思是“被分为负样本,而且分对了”,
FP(False Positives)意思是“被分为正样本,但是分错了”,
FN(False Negatives)意思是“被分为负样本,但是分错了”。

按下图来解释,左半矩形是正样本,右半矩形是负样本。一个2分类器,在图上画了个圆,分类器认为圆内是正样本,圆外是负样本。那么左半圆分类器认为是正样本,同时它确实是正样本,那么就是“被分为正样本,并且分对了”即TP,左半矩形扣除左半圆的部分就是分类器认为它是负样本,但是它本身却是正样本,就是“被分为负样本,但是分错了”即FN。右半圆分类器认为它是正样本,但是本身却是负样本,那么就是“被分为正样本,但是分错了”即FP。右半矩形扣除右半圆的部分就是分类器认为它是负样本,同时它本身确实是负样本,那么就是“被分为负样本,而且分对了”即TN

f4f1144c3821dfa0a0d83ca6478654a0.png

3.Precision(精度)和Recall(召回率)的概念

有了上面TP TN FP FN的概念,这个Precision和Recall的概念一张图就能说明。

cef094ea8846b19273892d101a7a164e.png

4a58572c967f7a0f8fd0f5093644aaf4.png

翻译成中文就是“分类器认为是正类并且确实是正类的部分占所有分类器认为是正类的比例”,衡量的是一个分类器分出来的正类的确是正类的概率。两种极端情况就是,如果精度是100%,就代表所有分类器分出来的正类确实都是正类。如果精度是0%,就代表分类器分出来的正类没一个是正类。光是精度还不能衡量分类器的好坏程度,比如50个正样本和50个负样本,我的分类器把49个正样本和50个负样本都分为负样本,剩下一个正样本分为正样本,这样我的精度也是100%,但是傻子也知道这个分类器很垃圾。

954b106d615a430e72dc6d78fc4962e9.png

翻译成中文就是“分类器认为是正类并且确实是正类的部分占所有确实是正类的比例**”,衡量的是一个分类能把所有的正类都找出来的能力。两种极端情况,如果召回率是100%,就代表所有的正类都被分类器分为正类。如果召回率是0%,就代表没一个正类被分为正类。

4.举例计算mAP

在对多标签图像分类时,首先用训练好的模型得到所有测试样本的confidence score,每一类(如car)的confidence score都保存到一个文件中(如test_car.txt)。假设该文件包含20个测试样本(即对应图1中的矩形),每个id, confidence score, ground truth label如下:

接下来按照confidence score从大到小排序:

fda43bb5f6a6647c9e6fa81df299a0e9.png

上面虽然有分数,但是我们没有判定每个id是属于哪个类别。这里有两种方法。

  • 设定阈值,比如score>=0.50
  • 或者每一类的前五必为该类。

这里我们选用前五这种方法来计算:

前五如下:

8d202fddb5160b9c433a4f502712ee82.png

意思就是说,前五被认为应该全是Positive,但是只有gt_label=1时才是正真的Positive。
true positives就是指第4和第2张图片共2张照片,false positives就是指第13,19,6张图片共3张照片。

前五之后如下:

ca9ae9284c784d84747cf0157784f9c9.png

就是说,按照这个标准来讲,前五之后的所有都被认为是Negative,那么其中,false negatives是指第9,16,7,20张图片共4张照片,true negatives是指第1,18,5,15,10,17,12,14,8,11,3张图片共11张照片。

1).计算Precision和Recall的值:

4a58572c967f7a0f8fd0f5093644aaf4.png

,则Precision=2/5=40%,意思是对于car这一类别,我们选定了5个样本,其中正确的有2个,即准确率为40%。

954b106d615a430e72dc6d78fc4962e9.png

,则Recall=2/(2+4)=30%,意思是在所有测试样本中,共有6个car,但是因为我们只召回了2个,所以召回率为30%。

2).做PR图

实际多类别分类任务中,通常不满足只通过top-5来衡量一个模型的好坏,而是需要知道从top-1到top-N(N是所有测试样本个数,本文中为20)对应的precision和recall。显然随着我们选定的样本越来也多,recall一定会越来越高,而precision整体上会呈下降趋势。把recall当成横坐标,precision当成纵坐标,即可得到常用的precision-recall曲线。例子中precision-recall曲线如下:

a34a76779eb0bc60066ad13f453fa88c.png


图中一共有20个点,也就是使用每个点作为界限点。

3).VOC计算方法

PASCAL VOC CHALLENGE的计算方法:

  1. 07年的方法:首先设定一组阈值,[0, 0.1, 0.2, …, 1]。然后对于recall大于每一个阈值(比如recall>0.3),都会得到一个对应的最大precision。这样,就计算出了11个precision。AP即为这11个precision的平均值。这种方法英文叫做11-point interpolated average precision。计算曲线的下面积 则为AP。
  1. 10年之后的方法:新的计算方法假设这N个样本中有M个正例,那么会得到M个recall值(1/M, 2/M, ..., M/M),对于每个recall值r,可以计算出对应(r' > r)的最大precision,然后对这M个precision值取平均即得到最后的AP值。计算方法如下:

对于上面的例子中。一共有20个测试,但是只有6个正的测试样本(以下是第二种计算mAP的方法)。

89a8df8f64fff40f41a2eb53d9776952.png

上表中的最后一栏就是car这类的AP。而mAP就是10个种类的AP求平均值。
从表中gt_label可以看出正例是6个,其他是负例。Recall分别为1/6,2/6,3/6,4/6,5/6,6/6。对于每个recall值,都对应着很多种top取法,所以每个recall值对应的诸多取法中(包括等于此recall的取法)有一个最大的precision,把每种recall对应最大的precision求和取平均即AP。

比如2/6的recall,查找上表,能得到recall2/6值的种类:从第2个开始到第5个,而到上表第6个,因为对应的是正例,所以就不是recall为2/6的范围了(因为前面已经有2个正例,如果再加一个正例,recall值就是3/6了),这几个取法对应最大的precision是2/2。同理,recall 4/6的取法就是第四个正例开始(4/7)到第5个正例前(4/10)之间的范围,对应最大的pricision是4/7。

相应的Precision-Recall曲线(这条曲线是单调递减的)如下:

166d2b05de2d8fbdd8f5f119dbf0764d.png

AP衡量的是学出来的模型在每个类别上的好坏,mAP衡量的是学出的模型在所有类别上的好坏,得到AP后mAP的计算就变得很简单了,就是取所有AP的平均值。

5.目标检测计算mAP

检测出来的bbox包含score和bbox,按照score降序排序,所以每添加一个样本,就代表阈值降低一点(真实情况下score降低,iou不一定降低)。这样就是可以有很多种阈值,每个阈值情况下计算一个prec和recall。

具体过程如下:

  1. 使用区域选择算法得到候选区域
  2. 对候选区域,计算每一个候选区域和标定框(groud truth)的iou
  3. 设定一个iou阈值,大于这个的标为正样本,小于的标为负样本,由此得到一个类似于分类时的测试集。
  4. 将给定的测试集(正负样本),通过分类器,算出每一个图片是正样本的score
  5. 设定一个score阈值,大于等于此值的视作正样本,小于的作为负样本
  6. 根据上一步的结果可以算出准确率和召回率
  7. 调节score阈值,算出召回率从0到1时的准确率,得到一条曲线计算曲线的下面积 则为AP(这是07年方法,10年的方法参考上面),这条曲线就是对每个类的单独计算出来的。通过计算所有类的AP就可以计算mAP了。

三、python版本的VOC计算方式

下面摘自前段时间阅读Faster R-CNN源码中,计算mAP的部分代码。

from 

参考:

COCO目标检测测评指标​www.jianshu.com
873dd5468bdfa8c60de4da413994aaaf.png
小小将:目标检测模型的评估指标mAP详解(附代码)​zhuanlan.zhihu.com
16342507a5091dd28fb3069ac47e3e01.png
目标检测中的mAP是什么含义?​www.zhihu.com
CSDN-专业IT技术社区-登录​blog.csdn.net
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值