目标检测性能的衡量指标:mAP图解

最近又重新复习了下mAP,在网上找了有关mAP的文章,但是感觉大多数都是左抄一点又抄一点那种。。。写的比较乱,可能因为mAP的计算方法前后变过几次,所以导致有很多版本的说法存在。为了更好的理解,看网上的讲解(包括我这篇博客hhh)不如直接看一遍源代码理解的深。。。下文对mAP计算过程的讲解是我根据对源代码的理解写的,是目前最新的计算方式。下面我们会逐步了解TPFPTNFN四种类型以及精确度precision召回率recallR-P曲线AP值的含义。

源代码链接:https://github.com/Cartucho/mAP

目录

1、对TP、FP、TN、FN四种类型的理解

2、两个相关指标:精确度(Precision)与召回率(Recall)

3、对AP及mAP的理解

4、AP的具体计算方式


1、对TP、FP、TN、FN四种类型的理解

T:True,代表判断正确

F:False,代表判断正确

P:Positive,代表被分为正样本

N:Negative,代表被分为负样本

 

TP:代表被分为正样本且分对了

FP:代表被分为正样本且分错了

TN:代表被分为负样本且分对了,在mAP指标中不会使用到TN

FN:代表被分为负样本但是分错了

2、两个相关指标:精确度(Precision)与召回率(Recall)

目标检测性能的衡量指标:mAP图解_第1张图片

3、对AP及mAP的理解

容易理解,单独使用Precision或Recall具有局限性,并不能很全面地反应目标检测的效果。

因为在目标检测的网络中,我们需要使用目标的置信度confidence及IOU的阈值(threshold)来筛选最后的目标框。当我们把threshold设置的较低时,说明筛选相对宽松,会有较多负样本被留下来归类为正样本,此时会导致Precision降低,Recall升高。反之,当我们设置的threshold值较高时,此时对目标的筛选较为严格,会过滤掉置信度较低但本属于正样本的样本,此时会导致Precision升高,Recall降低,这很容易理解。因此我们需要一个用来来平衡Precision与Recall对目标检测的效果的综合评价指标,于是就有了AP与mAP。

AP是针对目标检测模型中某个单独的类别的识别效果来说的。代表某一类别的P-R曲线下的面积值,P-R曲线是在同一IOU阈值下,不同Recall值与Precision值对应关系的曲线。比如下面:

目标检测性能的衡量指标:mAP图解_第2张图片

mAP是所有类别的AP值取平均(mean)后的结果,因此下面主要介绍下AP的计算方式。

4、AP的具体计算方式

AP是针对一个类来说的,假设我们有以下六张图片,图中的框是类别“cat”的预测结果。绿色框代表groundtruth,红色的框代表网络的预测结果。

在计算AP之前,我们先把初步预测的结果按照置信度confidence(有些地方叫score)的值进行排序,将大于confidence阈值的预测结果保留下来作为正样本Positive,即图中的红框,红色框旁边的数字代表相应的置信度confidence的值。在确定了正样本后,对于某一确定的IOU阈值(这里取AP50,即阈值为0.5,相应的AP60对应的阈值为0.6),来判断预测出来的正样本是正确的(T)还是错误的(F)。图中共有12个gt框,13个预测框。则上述所说的,   

目标检测性能的衡量指标:mAP图解_第3张图片

 我们设置IOU阈值为0.5来作为是预测的正样本是否是正确的依据,当IOU≥0.5时,标记为TP,若一个gt有多个符合条件的预测框(比如image6中的12、13号预测框),则只留下一个预测框作为TP,其余的均记为FP(关于具体留下那个,源代码中的方法是先检测到谁就留下谁,这很容易理解,因为不管留下谁最终的计算结果都一样)。当IOU<0.5时,则标记为FP。这里要注意区别置信度阈值以及IOU阈值在计算过程中扮演的角色,置信度阈值用来初步筛选哪些预测框是正样本(P),而IOU阈值则是用来判别预测的正样本是对的(TP)还是错的(FP)。以上检测结果如下表所示:

目标检测性能的衡量指标:mAP图解_第4张图片

我们可以通过上表绘制出P-R曲线,但在绘制曲线之前我们需要将上表的结果按照置信度的值由高到低排序,然后分别计算TP与FP的累计数量,对置信度进行降序排序的操作是为了便于直观地计算不同置信度下的Recall与 Precision值。容易理解,这里的置信度都是高于前面我们筛选预测正样本时设置的置信度阈值的,在这里再进行排序细分只是为了计算AP值的。AP的求解过程中,求一个Recall值对应的Precision的值就是取大于等于这一Recall值的最大的Precision,即表中的rP(在后面的面积计算中,Recall=0处的rP就是全局最大的Precision,此处为1。说到这里你可能有点懵——为什么不是直接取一个Recall以及他直接对应的Precision的坐标,即(Recall,Precision)来计算AP,而是要娶坐标(Recall,rP)来计算AP值呐?直接说不好理解,继续往下看你就会明白了~最终的结果如下表:

目标检测性能的衡量指标:mAP图解_第5张图片

下图中蓝色点描出的折线就是真实的R-P曲线,即坐标(Recall,Precision)绘制出来的曲线。但是,现实中对mAP的计算并不完全是真实R-P曲线下的面积,而是使用上表的绿色部分的数据,即取坐标(Recall,rP)绘制的曲线下的面积,也就是下图中的阴影部分,这一点网上很多地方都没说清楚。这可以理解为:这是为了便于积分计算的一种方式。因为真实情况下,我们计算mAP用到的图片数量远不止例子中的6张,大量图片的结果就是更密集的置信度取值,对应着更密集的(Recall,Precision)点,这些点连接起来可以近似为“光滑”的曲线,而不是例子中这么明显的折线,而直接计算这些“光滑”曲线的积分就显得比较复杂,因此我们采用(Recall,rP)坐标绘制的曲线的积分来计算最终的AP值。

最后mAP的计算就是所有类别的AP相加取平均。特别的,如果网络只是针对一个类别训练的,则此时AP=mAP。一般来说,一个越好的目标检测网络其mAP值就越高。

目标检测性能的衡量指标:mAP图解_第6张图片

你可能感兴趣的:(机器学习,深度学习,人工智能)