【导读】目标检测(Object Detection)是计算机视觉中四大基础任务之一,目标检测的任务主要是找出图像中所有感兴趣的目标(物体),确定它们的位置和大小,是机器视觉领域的核心问题之一。由于各类物体有不同的外观,形状,姿态,加上成像时光照,遮挡等因素的干扰,目标检测一直是机器视觉领域最具有挑战性的问题。
由于目标检测(Object Detection)主要需要解决“是什么?和 在哪里?”这两大问题,即对给定图像中的所有存在的目标,每个目标都要给出类别信息(是什么?)和位置信息(在哪里?)。这个位置信息通常用一个外接矩形框(俗称bounding box)来表示。因此,目标检测的性能度量方法要比图像分类任务复杂得多。本文我们来为大家介绍一下目标检测算法里常用的一些评价指标。
Accuracy(准确率)表示是在所有样本中预测正确的比例。
混淆矩阵是以模型预测的类别数量统计信息为横轴,真实标签的数量统计信息为纵轴画出的矩阵。对角线代表了模型预测和数据标签一致的数目,所以准确率也可以用混淆矩阵对角线之和除以测试集图片数量来计算。对角线上的数字越大越好,在混淆矩阵可视化结果中颜色越深,代表模型在该类的预测结果更好。其他地方自然是预测错误的地方,自然值越小,颜色越浅说明模型预测的更好。
对于任何算法,评估指标需要知道ground truth(真实标签)数据。我们只知道训练、验证和测试数据集的ground truth。对于目标检测问题,ground truth包括图像中物体的类别以及该图像中每个物体的真实边界框。IoU是预测框或者是检测结果(DetectionResult)与Ground truth的交集和并集的比值。这个量也被称为Jaccard指数,并于20世纪初由Paul Jaccard首次提出。
数学表达式如下:
数学集合形式表示:
不同IoU值比较:
通常我们可以设置一个阈值(threshold),通常设置为50%,75%,95%
对于每一个图片,ground truth数据会给出该图片中各个类别的实际物体数量。我们可以计算每个Positive预测框与ground truth的IoU值,并取最大的IoU值,认为该预测框检测到了那个IoU最大的ground truth。然后根据IoU阈值,我们可以计算出一张图片中各个类别的正确检测值(True Positives, TP)数量以及错误检测值数量(False Positives, FP)。据此,可以计算出各个类别的precision:
既然我们已经得到了正确的预测值数量(True Positives),也很容易计算出漏检的物体数(False Negatives, FN)。据此可以计算出Recall(其实分母可以用ground truth总数):
所谓PR曲线就是改变识别阈值,使得系统依次能够识别前K张图片,阈值的变化同时会导致Precision与Recall值发生变化,从而得到曲线。曲线图大概如下,这里有3条PR曲线,周志华机器学习的解释如下:
图片来源自:GiantPandaCV公众号
AP值是Precision-Recall曲线下方的面积,通常来说一个越好的分类器,AP值越高。为了得到precision-recall曲线,首先要对模型预测结果进行排序(ranked output,按照各个预测值置信度降序排列)。那么给定一个rank,Recall和Precision仅在高于该rank值的预测结果中计算,改变rank值会改变recall值。这里共选择11个不同的recall([0, 0.1, ..., 0.9, 1.0]),可以认为是选择了11个rank,由于按照置信度排序,所以实际上等于选择了11个不同的置信度阈值。那么,AP就定义为在这11个recall下precision的平均值,其可以表征整个precision-recall曲线(曲线下面积)。
另外:AP50,AP60,AP70等等代表什么意思?代表IOU阈值分别取0.5,0.6,0.7等对应的AP值。
mAP是多个类别AP的平均值。这个mean的意思是对每个类的AP再求平均,得到的就是mAP的值,mAP的大小一定在[0,1]区间,越大越好。该指标是目标检测算法中最重要的一个。
当比较mAP值,记住以下要点:
ROC的横轴是假正率(False positive rate, FPR),FPR = FP / [ FP + TN] ,代表所有负样本中错误预测为正样本的概率,假警报率。ROC的纵轴是真正率(True positive rate, TPR),TPR = TP / [ TP + FN] ,代表所有正样本中预测正确的概率,命中率。ROC曲线的对角线坐标对应于随即猜测,而坐标点(0,1)也即是左上角坐标对应理想模型。曲线越接近左上角代表检测模型的效果越好。
AUC是ROC下的面积,大于0小于1,越大说明效果越好。AUC越接近于1,分类器性能越好。AUC值是一个概率值,当你随机挑选一个正样本以及一个负样本,当前的分类算法根据计算得到的Score值将这个正样本排在负样本前面的概率就是AUC值。当然,AUC值越大,当前的分类算法越有可能将正样本排在负样本前面,即能够更好的分类。
AUC的计算公式如下:
图片来源自:GiantPandaCV公众号
ROC曲线的绘制:
1)按照预测概率从大到小排序,将分类阈值设置为最大,即所有的预测结果都是反例,此时假正率和真正率都是0,在原点。
2)将分类阈值按照从大到小依次减小,即分类为正类的样本越来越多。如果一个测试样本中有m个正类,n个负类。每有1个正样本被预测正确了,纵轴增大1/m,每有一个负样本预测为正样本,横轴就增大1/n。
3)依次连接各点即为ROC曲线。
为什么使用ROC曲线?
使用ROC曲线是因为其有个很好的特性:当测试集中的正负样本的分布变化的时候,ROC曲线能够保持不变。即对正负样本不均衡问题不敏感,比如负样本的数量增加到原来的10倍,那TPR不受影响,FPR的各项也是成比例的增加,并不会有太大的变化。所以不均衡样本问题通常选用AUC作为评价标准。
参考链接: