对mAP(Mean Average Precision)的理解
在目标检测算法(如Faster RCNN, YOLO ,SSD)中mAP常做为一种基准来衡量算法的精确度好坏。
mAP的本质其实是多类检测中各类别最大召回率(recall)的一个平均值。
计算mAP之前我们先要了解Precision和Recall也就是精确率和召回率。
精确率(precision)主要衡量模型做出预测的精准度,也就是TP在TP与FP和中的占比率。
召回率(recall)主要用来衡量模型对positives的检测程度,也就是TP在TP与FN中的占比率。
·IoU
loU(交并比)是模型所预测的检测框和真实(ground truth)的检测框的交集和并集之间的比例。这个数据也被称为Jaccard指数。
我们使用loU看检测是否正确需要设定一个阈值,最常用的阈值是0.5,即如果loU>0.5,则认为是真实的检测(true detection),否则认为是错误的检测(false detection)。
我们现在计算模型得到的每个检测框(置信度阈值后)的loU值。用计算出的loU值与设定的loU阈值(例如0.5)比较,就可以计算出每个图像中每个类的正确检测次数(A)。
对于每个图像,我们都有ground truth的数据(即知道每个图像的真实目标信息),因此也知道了该图像中给定类别的实际目标(B)的数量。我们也计算了正确预测的数量(A)(True possitive)。因此我们可以使用这个公式来计算该类模型的精度(Precision)(A/B) :
即给定一张图像的类别C的Precision=图像正确预测(True Positives)的数量除以在图像张这一类的总的目标数量。
假如现在有一个给定的类,验证集中有100个图像,并且我们知道每个图像都有其中的所有类(基于ground truth)。所以我们可以得到100个精度值,计算这100个精度值的平均值,得到的就是该类的平均精度(AveragePrecision)。
即一个C类的平均精度=在验证集上所有的图像对于类C的精度值的和/有类C这个目标的所有图像的数量。
现在加入我们整个集合中有20个类,对于每个类别,我们都先计算loU,接下来计算精度,然后计算平均精度。所有我们现在有20个不同的平均精度值。使用这些平均精度值,我们可以轻松的判断任何给定类别的模型的性能。
但是问题是使用20个不同的平均精度使我们难以度量整个模型,所以我们可以选用一个单一的数字来表示一个模型的表现(一个度量来统一它们),我们可以取所有类的平均精度值的平均值,即MAP(均值平均精度)。
MAP =(所有类别的平均精度求和)/(所有类别个数)
即数据集中所有类的平均精度的平均值。