目标检测评价指标(含 mAP、F-measure、FPS)

写在前面的话

无论是目标检索、分类、还是检测,都有其自身的一套评价指标体系。可能其中很多概念很类似,比如精确度、召回率。但其实内涵还是有些不一样的。身为一个已经搞了一年图像目标检测的后进者,直到现在才发现,之前我以为轻松搞懂的评价标准,其实是错误的。今天特就自己翻阅的资料做一个汇总,不敢保证对,但至少修正了一部分自以为是的思想。

在网上之前看到的很多打着目标检测评价指标的博文,其实只是对分类做的评价。而检测的实质是分类+定位。所以没有牵扯到 IoU 概念的统统都是耍流氓~

好了闲话少叙,我们言归正传…

-----------------------------------------------------------------------------------------------------------------------------------------

1 目标检测一些基本概念

这部分包含但不限于

  1. 什么是 目标检测?
  2. 什么是 Ground Truth?
  3. 什么是 IoU?
  4. 精确度 Precision 和召回率 Recall 的絮絮叨叨概念,不想看的可以直接跳到 2 mAP 那里

可以参考 目标检测的评估指标mAP的那些事儿 中的相关部分。

2 mAP

TP: IoU>0.5的检测框数量(同一 Ground Truth 只计算一次)
FP: IoU<=0.5的检测框,或者是检测到同一个 GT 的多余检测框的数量
FN: 没有检测到的GT的数量

Precision: TP / (TP + FP)
Recall: TP / (TP + FN)

PR曲线: Precision-Recall曲线
AP: PR曲线下的面积,综合考量了 recall 和 precision 的影响,反映了模型对某个类别识别的好坏。
mAP: mean Average Precision, 即各类别AP的平均值,衡量的是在所有类别上的平均好坏程度。

-----------------------------------------------------------------------------------------------------------------------------------------

在目标检测中,mAP的定义首先出现在PASCAL Visual Objects Classes(VOC)竞赛中,这个大赛包含许多图像处理任务。

我们要注意,在计算Precision和Recall,至少有两个变量会影响 Precision 和 Recall,即 IoU 和置信度阈值。IoU 是一个简单的几何度量,可以很容易标准化,比如在PASCAL VOC竞赛中采用的 IoU 阈值为 0.5,而 COCO 竞赛中在计算 mAP 较复杂,其计算了一系列 IoU 阈值(0.05至0.95)下的 mAP。但是置信度却在不同模型会差异较大,可能在我的模型中置信度采用 0.5 却等价于在其它模型中采用 0.8 置信度,这会导致Precision-Recall曲线变化。为此,PASCAL VOC组织者想到了一种方法来解决这个问题,即要采用一种可以用于任何模型的评估指标。在paper中,他们推荐使用如下方式计算Average Precision(AP):

For a given task and class, the precision/recall curve is computed from a method’s ranked output. Recall is defined as the proportion of all positive examples ranked above a given rank. Precision is the proportion of all examples above that rank which are from the positive class. The AP summarises the shape of the precision/recall curve, and is defined as the mean precision at a set of eleven equally spaced recall levels [0,0.1,…,1]:

可以看到,为了得到 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 的平均值,其可以表征整个Pprecision-Recall 曲线(曲线下面积)。

在这里插入图片描述
以上这种方法叫做11-point interpolated average precision(差值平均精度)。是VOC2010以前的方法,具体流程为:

  1. 对于类别C,首先将算法输出的所有C类别的预测框,按置信度排序;
  2. 设定不同的k值,选择top k个预测框,计算FP和TP,使得 recall 分别等于 0,0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1.0;
    计算Precision;
  3. 将得到的11个Precision取平均,即得到AP;
    AP是针对单一类别的,mAP是将所有类别的AP求和,再取平均:
    mAP = 所有类别的AP之和 / 类别的总个数

VOC2010以后的AP计算过程出现了变化,在计算 precision 时采用一种插值方法(interpolate):

The precision at each recall level r is interpolated by taking the maximum precision measured for a method for which the corresponding recall exceeds r:
The intention in interpolating the precision/recall curve in this way is to reduce the impact of the “wiggles” in the precision/recall curve, caused by small variations in the ranking of examples.

在这里插入图片描述

及对于某个 recall 值 r,precision值取所有 recall>=r 中的最大值(这样保证了p-r曲线是单调递减的,避免曲线出现摇摆)。

对于各个类别,分别按照上述方式计算AP,取所有类别的AP平均值就是mAP。这就是在目标检测问题中mAP的计算方法。可能有时会发生些许变化,如COCO数据集采用的计算方式更严格,其计算了不同IoU阈值和物体大小下的AP。

在这里插入图片描述

-----------------------------------------------------------------------------------------------------------------------------------------

mAP计算示例:
假设,对于Aeroplane类别,我们网络有以下输出(BB表示BoundingBox序号,IoU>0.5时GT=1):

BB   | confidence  | GT
BB1 |       0.9        |   1
BB2 |       0.9        |   1
BB1 |       0.8        |   1
BB3 |       0.7        |   0
BB4 |       0.7        |   0
BB5 |       0.7        |   1
BB6 |       0.7        |   0
BB7 |       0.7        |   0
BB8 |       0.7        |   1
BB9 |       0.7        |   1

因此,我们有 TP=5 (BB1, BB2, BB5, BB8, BB9), FP=5 (重复检测到的BB1也算FP)。除了表里检测到的5个GT以外,我们还有2个GT没被检测到,因此: FN = 2. 这时我们就可以按照Confidence的顺序给出各处的PR值,如下:

rank=1       precision=1.00 and recall=0.14
rank=2       precision=1.00 and recall=0.29
rank=3       precision=0.66 and recall=0.29
rank=4       precision=0.50 and recall=0.29
rank=5       precision=0.40 and recall=0.29
rank=6       precision=0.50 and recall=0.43
rank=7       precision=0.43 and recall=0.43
rank=8       precision=0.38 and recall=0.43
rank=9       precision=0.44 and recall=0.57
rank=10     precision=0.50 and recall=0.71

对于上述PR值,如果我们采用VOC2010之前的方法,我们选取Recall >= 0, 0.1, …, 1的11处Percision的最大值:1, 1, 1, 0.5, 0.5, 0.5, 0.5, 0.5, 0, 0, 0。此时Aeroplane类别的 AP = 5.5 / 11 = 0.5

VOC2010及以后的方法,对于Recall >= 0, 0.14, 0.29, 0.43, 0.57, 0.71, 1,我们选取此时Percision的最大值:1, 1, 1, 0.5, 0.5, 0.5, 0。此时Aeroplane类别的 AP = (0.14-0)*1 + (0.29-0.14)*1 + (0.43-0.29)*0.5 + (0.57-0.43)*0.5 + (0.71-0.57)*0.5 + (1-0.71)*0 = 0.5

mAP就是对每一个类别都计算出AP然后再计算AP平均值就好了。

-----------------------------------------------------------------------------------------------------------------------------------------

在比较mAP值,记住以下要点:

1.mAP通常是在一个数据集上计算得到的。

2.虽然解释模型输出的绝对量化并不容易,但mAP作为一个相对较好的度量指标可以帮助我们。 当我们在流行的公共数据集上计算这个度量时,该度量可以很容易地用来比较目标检测问题的新旧方法。

3.根据训练数据中各个类的分布情况,mAP值可能在某些类(具有良好的训练数据)非常高,而其他类(具有较少/不良数据)却比较低。所以你的mAP可能是中等的,但是你的模型可能对某些类非常好,对某些类非常不好。因此,建议在分析模型结果时查看各个类的AP值。这些值也许暗示你需要添加更多的训练样本。

3 F1-measure

通常我们使用 precision 和 recall 两个指标来衡量模型的好坏,但是同时要权衡这两个量,影响我们做决策的速度.所以可以使用 F1 score 来组合这两个量(又称 F1 measure):

在这里插入图片描述
P和 R 的值均是越大越好,因此 F1 score 也越大结果越好。

以行人检测为例:
行人总共有10个人,测试出的所有目标框有20个,其中6个检测到有行人(与ground truth的IoU>0.5)
P: 正确检测/总检测框数 6/20 = 0.3
R: 正确检测/检测目标总数(gt总数)6/10 = 0.6
F1-measure = 2PR/P+R=2×0.3×0.6/(0.3+0.6)=0.4

4 FPS

FPS,即每秒帧率 (Frame Per Second)

除了检测准确度,目标检测算法的另一个重要评估指标是速度,只有速度快,才能够实现实时检测。FPS用来评估目标检测的速度。即每秒内可以处理的图片数量。当然要对比FPS,你需要在同一硬件上进行。另外也可以使用处理一张图片所需时间来评估检测速度,时间越短,速度越快

5 其他一些评价指标

当然,通用的评价指标还有一些,比如 AUC,或者绘制 ROC 曲线图,这些因为没有之前的常见,笔者也没有用过,所以等以后遇到了再积累…

6 引用和借鉴

  • 31
    点赞
  • 172
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值