1 介绍
在本文中我们将介绍目标检测任务中的mAP~
2 COCO-mAP
在介绍mAP时,我们选择的是COCO-mAP,这是现在最为流行的指标;
关于COCO-mAP的形象解释,请参考视频《霹雳吧啦Wz ——目标检测mAP计算以及coco评价标准》
在具体介绍COCO-mAP的算法之前,我们先来对其概念进行一些引入性的解释,mAP其实上评价的是算法检测目标整体的性能,在评价整体性能时,我们能想到的最熟悉的指标就是PR值,这是最简单也是用的比较多的一种评价指标,那么mAP指的是PR吗?
答案是否定的,mAP不是PR值,但实际上,mAP可以看作是PR值的一种近似,它是模型在不同情况下的PR值的综合,也就是PR曲线的面积;
2.1 PR曲线的面积
这时,有人就要问了,为什么要用PR曲线的面积,而不是之间使用PR值呢?
我们来看看下面的情况,以射击游戏为例:
Precision高,recall低
→
\rightarrow
→ 打得准,跑了几个,子弹没有用多少
Recall高,precision低
→
\rightarrow
→ 打中很多,但是不准,浪费许多子弹
那么这两个玩家,哪一个技术更好呢?
COCO认为,在不同任务中都可能有用,(比如:在子弹有限和子弹很多的情况下,可以设置不同的Top-K值,从而实现不同的策略效果)
(但是这个违反了“End-to-End”的评价原则,后期我们会对这点进行改进)
AP就是为了实现这一点而产生,这里的AP实际上就是对PR曲线的一种离散近似;
2.2 mAP的计算
在学习COCO-mAP时,我们可以参考COCO官网关于这个部分的解释说明《COCO - Common Objects in Context - Detection Evaluation》
关于COCO-mAP的准确解释,请参考以下资料:
- 《详解object detection中的mAP》:详细解释了COCO-mAP的计算过程。
- 《霹雳吧啦Wz ——目标检测mAP计算以及coco评价标准》:视频讲解了COCO-mAP。
- 《COCO目标检测测评指标》:讲解了相关的原理和代码。
我们首先来看看AP的计算公式
A
P
=
1
k
∑
i
=
1
k
(
r
i
−
r
i
−
1
)
∗
p
^
i
AP = \frac{1}{k} \sum_{i=1}^{k} \left ( r_i-r_{i-1}\right) \ast \hat{p}_i
AP=k1i=1∑k(ri−ri−1)∗p^i
其中,
p
^
\hat{p}
p^为平滑后PR曲线上观测点的回归值;
(关于如何进行平滑,我们需要进一步看看cocoapi
的实现)
在计算mAP值时,会取不同IoU阈值下AP值的平均数,
其中,IoU阈值列表为.50:.05:.95
,共有10个不同的IoU阈值;
m
A
P
=
1
10
∑
t
=
0.5
:
.
05
.
95
A
P
t
mAP = \frac{1}{10} \sum_{t=0.5:.05}^{.95} AP_t
mAP=101t=0.5:.05∑.95APt
就可以获得最终的mAP值了。
2.3 Philosophy of mAP
在了解mAP的计算过程之后,我们来总结一下mAP在评测过程中的哲学;
I. Treat each category as equal.
由于mAP在最后会对所有类别求平均,所以对于每个类别的目标,他们的地位是等价的;
II. Treat each object as equal.
对于单个种群来说,每个目标的地位是平等的,这跟目标的大小是无关的;
2.4 Cocoapi中mAP实现
cocoapi
的Github链接:cocodataset/cocoapi
COCOeval——COCO评价类
参数说明:
N
:评测图像的数量。
T
:IoU阈值数,T=10,范围:[.5:.05:.95]
。
R
:召回率采样数,R=101,范围:[0:.01:1]
。
K
:类别的数量。
A
:四类目标大小,A=4,即:['all', 'small', 'medium', 'large']
, (link)。
M
:三种最大检测数,M=3,[1 10 100]
, (link)。
2.5 mAP代码实现
输入:检测框张量, [ B , N , 4 ] [B, N, 4] [B,N,4]。