目标检测模型的性能评估--MAP(Mean Average Precision)

目标检测模型中性能评估的几个重要参数有精确度,精确度和召回率。本文中咱们将讨论一个经常使用的度量指标:均值平均精度,即MAP。
在二元分类中,精确度和召回率是一个简单直观的统计量,可是在目标检测中有所不一样的是及时咱们的物体检测器在图像中检测到物体,若是咱们仍没法找到它所在的图像中的哪一个位置也是无用的。因为咱们须要预测图像中的目标的发生和位置,因此在计算精确度和召回率与普通的二分类有所不一样。算法

1、目标检测问题
目标检测问题是指:
给定一个图像,找到其中的目标,找到它们的位置,而且对目标进行分类。目标检测模型一般是在一组固定的类上进行训练的,因此模型只能定位和分类图像中的那些类。此外,目标的位置一般是边界矩阵的形式。因此,目标检测须要涉及图像中目标的位置信息和对目标进行分类。因此本文将要描述的均值平均精度(Mean Average Precision)特别适用于咱们预测目标与类的位置的算法。同时均值平均值对于评估模型定位性能、目标监测模型性能和分割模型性能都是有用的。函数

2、评估目标检测模型性能

一、选择MAP的缘由
目标检测问题中的模型的分类和定位都须要进行评估,每一个图像均可能具备不一样类别的不一样目标,所以,在图像分类问题中所使用的标准度量不能直接应用于目标检测问题。
二、Ground Truth 的定义
对于任何算法,度量老是与数据的真实值(Ground Truth)进行比较。咱们只知道训练、验证和测试数据集的Ground Truth信息。对于物体检测问题,Ground Truth包括图像,图像中的目标的类别以及图像中每一个目标的边界框。
下图给出了一个真实的图像(JPG/PNG)和其余标注信息做为文本(边界框坐标(X, Y, 宽度和高度)和类),其中上图的红色框和文本标签仅仅是为了更好的理解,手工标注可视化显示。
测试

对于上面的例子,咱们在模型在训练中获得了下图所示的目标边界框和3组数字定义的ground truth(假设这个图像是1000*800px,全部这些坐标都是构建在像素层面上的) spa

接下来,让咱们看看如何计算MAP
三、计算MAP
假设原始图像和真实的标注信息(ground truth)如上所示,训练和验证数据以相同的方式都进行了标注。该模型将返回大量的预测,可是在这些模型中,大多数都具备很是低的置信度分数,所以咱们只考虑高于某个置信度分数的预测信息。咱们经过咱们的模型运行原始图像,在置信阈值肯定以后,下面是目标检测算法返回的带有边框的图像区域(bounding boxes)。
3d

可是怎样在实际中量化这些检测区域的正确性呢?
首先咱们须要知道每一个检测的正确性。测量一个给定的边框的正确性的度量标准是loU-交幷比(检测评价函数),这是一个很是简单的视觉量。
下面给出loU的简单的解释。
四、loU
loU(交并比)是模型所预测的检测框和真实(ground truth)的检测框的交集和并集之间的比例。这个数据也被称为Jaccard指数。为了获得交集和并集值,咱们首先将预测框叠加在ground truth实际框上面,以下图所示:
blog

如今对于每一个类,预测框和真实框重叠的区域就是交集区域,预测框和真实框的总面积区域就是并集框。 
在上面的目标马的交集和联合看起来是这样的: ci

交集包括重叠区域(青色区域), 并集包括橙色和青色区域。 
loU(交并比将会这样计算):it

 

识别正确的检测和计算精度
咱们使用loU看检测是否正确须要设定一个阈值,最经常使用的阈值是0.5,即若是loU>0.5,则认为是真实的检测(true detection),不然认为是错误的检测(false detection)。咱们如今计算模型获得的每一个检测框(置信度阈值后)的loU值。用计算出的loU值与设定的loU阈值(例如0.5)比较,就能够计算出每一个图像中每一个类的正确检测次数(A)。对于每一个图像,咱们都有ground truth的数据(即知道每一个图像的真实目标信息),所以也知道了该图像中给定类别的实际目标(B)的数量。咱们也计算了正确预测的数量(A)(True possitive)。所以咱们可使用这个公式来计算该类模型的精度(A/B) io

   

即给定一张图像的类别C的Precision=图像正确预测(True Positives)的数量除以在图像张这一类的总的目标数量。
假如如今有一个给定的类,验证集中有100个图像,而且咱们知道每一个图像都有其中的全部类(基于ground truth)。因此咱们能够获得100个精度值,计算这100个精度值的平均值,获得的就是该类的平均精度。
  

即一个C类的平均精度=在验证集上全部的图像对于类C的精度值的和/有类C这个目标的全部图像的数量。
如今加入咱们整个集合中有20个类,对于每一个类别,咱们都先计算loU,接下来计算精度,而后计算平均精度。全部咱们如今有20个不一样的平均精度值。使用这些平均精度值,咱们能够轻松的判断任何给定类别的模型的性能。
可是问题是使用20个不一样的平均精度使咱们难以度量整个模型,因此咱们能够选用一个单一的数字来表示一个模型的表现(一个度量来统一它们),咱们能够取全部类的平均精度值的平均值,即MAP(均值平均精度)。
  

MAP=全部类别的平均精度求和除以全部类别 
即数据集中全部类的平均精度的平均值。

使用MAP值时咱们须要知足一下条件:
(1) MAP老是在固定的数据集上计算
(2)它不是量化模型输出的绝对度量,可是是一个比较好的相对度量。当咱们在流行的公共数据集上计算这个度量时,这个度量能够很容易的用来比较不一样目标检测方法
(3)根据训练中类的分布状况,平均精度值可能会由于某些类别(具备良好的训练数据)很是高(对于具备较少或较差数据的类别)而言很是低。因此咱们须要MAP多是适中的,可是模型可能对于某些类很是好,对于某些类很是很差。所以建议在分析模型结果的同时查看个各种的平均精度,这些值也能够做为咱们是否是须要添加更多训练样本的一个依据。

相关文章
相关标签/搜索