导读】近日,机器学习工程师Tarang
Shah发布一篇文章,探讨了机器学习中模型的度量指标的相关问题。本文首先介绍了机器学习中两个比较直观和常用的度量指标:精确度和召回率,然后详细讲解了目标检测领域最常用的度量指标——均值平均精度(mAP),并图解了给定边界框的正确性的度量标准IoU
– 交并比。通过阅读本文,你将掌握机器学习模型,特别是目标检测领域的各种度量指标,这有助于在科研和项目中衡量你的模型。专知内容组编辑整理。







What is mAP ? Understanding the statistic of choice for comparing Object
Detection models






对于使用机器学习解决的大多数常见问题,通常有多种可用的模型。每种模型都有自己的特点,会根据各种因素表现不同。




在数据集上判断模型的性能,通常称为“验证/测试”数据集 。这种性能是使用各种统计数据 - 
准确度,精确度,召回率等来衡量的。选择的性能度量通常是针对您的特定应用和使用情况来定。而对于每个应用程序来说,找到可用于客观比较模型的度量标准至关重要。




在本文中,我们将讨论用于目标检测问题的最常用的度量指标 - 均值平均精度,即mAP。(对每个类的AP再求平均)




大多数时候,这些指标很容易理解和计算。例如,在二元分类中,精确度和召回率是一个简单直观的统计量。




目标检测另一方面是一个相当不同的...有趣的问题。

即使您的物体检测器在图像中检测到猫,但如果您无法找到它所在的图像中的哪个位置,它也是无用的。




由于您预测了图像中目标的发生 和位置 ,因此我们如何计算这个度量值是非常有趣的。




首先,让我们定义目标检测问题。






▌目标检测问题




“目标检测问题”是指:


给定一个图像,找到其中的目标,找到他们的位置和并且对目标进行分类。




目标检测模型通常是在一组固定的类上进行训练的,所以模型只能定位和分类图像中的那些类。




此外,目标的位置通常是边界矩形的形式。所以,目标检测涉及图像中目标的位置信息和对目标进行分类。



图1 图像处理几个经典问题示意图




如下所述,均值平均精度(Mean Average Precision),特别适用于我们预测目标与类的位置的算法。 因此,从图1
中,我们可以看出它对于评估模型定位性能,目标检测模型性能和分割模型性能是有用的。






▌评估目标检测模型






为什么选择mAP?




目标检测问题中的每个图像都可能具有不同类别的不同目标。 如前所述,模型的分类和定位都需要进行评估。 
因此,在图像分类问题中使用的精度的标准度量不能直接应用于此。 这就是mAP(均值平均精确度)出现的地方。 我希望在这篇文章的最后,你将能够理解它的含义和意义。





关于Ground Truth




对于任何算法,度量总是与数据的真实值(Ground Truth)进行比较。 我们只知道训练,验证和测试数据集的Ground Truth信息。





对于物体检测问题,Ground Truth包括图像,图像中目标的类别以及该图像中每个目标的边界框。




一个例子:



图显示实际人手工标注的ground truth

我们给了一个真实的图像(JPG,PNG等)和其他标注信息作为文本(边界框坐标(X,Y
,宽度和高度)和类),其中上图的红色框和文本标签仅仅是为了更好地理解,手工标注可视化显示。




所以对于这个特定的例子,我们的模型在训练中得到的是这个



和3组数字定义的ground truth (让我们假设这个图像是1000x800px,所有这些坐标都是构建在像素层面上的)



现在,让我们看看如何计算mAP。




我将在另一篇文章中介绍各种目标检测算法,方法和性能。 现在,让我们假设我们有一个已经训练好的模型,我们正在验证集上评估它的结果。






▌计算mAP(Calculating the mAP)




假设原始图像和真实的标注信息( ground truth)如上所述。 训练和验证数据以相同的方式都进行了标注。





该模型将返回大量的预测,但是在这些模型中,其中大多数都具有非常低的置信度分数,因此我们只考虑高于某个置信度分数的预测信息。




我们通过我们的模型运行原始图像,在置信阈值确定之后,下图是目标检测算法返回的带有边框的图像区域(bounding boxes)。









现在,由于我们人类就是目标检测的专家,所以我们可以说上面这些检测区域是正确的。 但是我们如何在实际中量化呢?




我们首先需要知道每个检测的正确性。 告诉我们一个给定的边界框的正确性的度量标准是IoU – 交并比(检测评价函数), 这是一个非常简单的视觉量。




有人会说这个名词可以意会,但是我们需要更好的解释。 我将以简短的方式解释IoU,对于那些真正想要详细解释的人,Adrian
Rosebrock有一篇很好的文章,你可以参考。


https://www.pyimagesearch.com/2016/11/07/intersection-over-union-iou-for-object-detection/






IoU




交并比是预测的框和真实ground truth的框的交集和并集之间的比例。 这个数据也被称为Jaccard指数,并于20世纪初由Paul Jaccard
首次发表。





为了得到交集和并集值,我们首先将预测框叠加在ground truth实际框的上面。 (见图)




现在对于每个类,与预测框和真实框重叠的区域是交集区域,并且两者的总面积是并集框。




图是马的一个IoU示意图




在上面的目标马的交集和联合看起来是这样的,



图上两者的交集蛮大的




交集包括重叠区域(青色区域),并集包括橙色和青色区域。




IoU将会像这样计算



 

识别正确的检测和计算精度




使用IoU,我们现在必须确定检测是否正确。 最常用的阈值是0.5 - 如果IoU> 0.5,则认为是真实的检测(true detection
),否则认为是错误的检测(false detection)。





我们现在计算模型得到的每个检测框(置信度阈值后)的IoU值。 使用这个值和我们的IoU阈值(比如0.5)比较,我们计算图像中每个类的正确检测次数(A)。




现在,对于每个图像,我们都有ground truth的数据(即知道每一张图像的真实目标信息),它告诉我们该图像中给定类别的实际目标(B)的数量。 
而且我们已经计算了正确预测的数量(A)(True possitive)。 因此,我们现在可以使用这个公式来计算该类模型的精度(A / B)。



公式是给定一张图像的类别C的Precision = 图像的正确预测(True Positives)的数量除以在图像上这一类的总的目标数量。




对于给定的类,我们能够为验证集中的每张图像计算此值。 假设我们在验证集中有100个图像,并且我们知道每个图像都有其中的所有类(基于ground truth)。
 




现在我们将有100个精度值(每个图像1个值)。 让我们取这100个值的平均值。 这个平均值被称为该类的平均精度。





一个类C的平均精度= 在验证集上所有图像对于类C的精度值的和 / 有类C这个目标的所有图像的数量




现在,我们整个集合中有20个类。 对于每个类别,我们都会遵循相同的方法来计算IoU - >精度 - >平均精度。 所以我们现在有20个不同的平均精度值。 
使用这些平均精度的值,我们可以轻松地判断任何给定类别的模型的性能。




为了用一个单一的数字来表示一个模型的表现(一个度量来统一它们),我们取所有类的平均精度值的平均值。 这个新的价值,是我们的均值平均精度 - MAP! 
(非常有创意地命名,我必须说)



MAP =所有类别的平均精度求和除以所有类别




所以,均值的平均精度就是数据集中所有类的平均精度的平均值。




当我们比较MAP值时要记住一些重要的点

*
MAP总是在固定数据集上计算。

*
它不作为量化模型输出的绝对度量,但它是一个相当好的相对度量。当我们在流行的公共数据集上计算这个度量时,这个度量可以很容易地用来比较不同目标检测方法。

*
根据训练数据中类的分布情况,平均精确度值可能会因某些类别(具有良好的训练数据)而非常高(对于具有较少/较差数据的类别)而言非常低。所以你的MAP可能是适中的,
但是你的模型可能对某些类非常好,对某些类非常不好。因此,建议在分析模型结果的同时查看各个类的平均精度。这些值也可以作为我们是不是需要添加更多训练样本的一个依据。

原文载于:


http://tarangshah.com/blog/2018-01-27/what-is-map-understanding-the-statistic-of-choice-for-comparing-object-det
ection-models/




参考链接:


https://towardsdatascience.com/what-is-map-understanding-the-statistic-of-choice-for-comparing-object-detection-models-1ea4f67a9dbd