目标检测评价指标Precision、Recall、mAP
参考:
Object-Detection-Metrics
A Survey on Performance Metrics for Object-Detection Algorithms
1.重要定义
1.1.交并比(IOU)
Intersection Over Union (IOU)交并比用来衡量两个框的重合率,其计算公式如下:
I
O
U
=
area
(
B
p
∩
B
g
t
)
area
(
B
p
∪
B
g
t
)
\mathrm{IOU}=\frac{\operatorname{area}\left(B_{p} \cap B_{g t}\right)}{\operatorname{area}\left(B_{p} \cup B_{g t}\right)}
IOU=area(Bp∪Bgt)area(Bp∩Bgt)
其中
B
p
B_{p}
Bp为模型预测的框,
B
g
t
B_{g t}
Bgt为ground truth。直观点:
实验评估过程中会设置一项IOU阀值,用来评判 B p B_{p} Bp为正样本或负样本,例如设置IOU阀值为0.5,代表:
- IOU ≥ 0.5 : B p B_{p} Bp为正样本;
- IOU < 0.5 : B p B_{p} Bp为负样本。
阀值经常被设为50%, 75%或95%。
1.2.TP , FP , FN
- True Positive (TP) : 一次正确的检测,即 B p B_{p} Bp与 B g t B_{g t} Bgt的IOU ≥ threshold(初始设定的IOU阀值);
- False Positive (FP) :一次错误的检测,代表模型预测的 B p B_{p} Bp与真值 B g t B_{g t} Bgt的IOU < threshold;
- False Negative (FN) : 代表真值 B g t B_{g t} Bgt没有被检测出来,即模型预测的所有 B p B_{p} Bp里没有与该 B g t B_{g t} Bgt重合的;
1.3.Precision(准确率),Recall(召回率)
- Precision(准确率):指模型在一张图片上预测的所有框中,为正确检测的比率,表达式
Precision = T P T P + F P = T P all detections \text { Precision }=\frac{\mathrm{TP}}{\mathrm{TP}+\mathrm{FP}}=\frac{\mathrm{TP}}{\text { all detections }} Precision =TP+FPTP= all detections TP - Recall(召回率):指所有ground truth中被正确匹配到的比率
Recall = T P T P + F N = T P all ground truths \text { Recall }=\frac{\mathrm{TP}}{\mathrm{TP}+\mathrm{FN}}=\frac{\mathrm{TP}}{\text { all ground truths }} Recall =TP+FNTP= all ground truths TP
2.Average Precision(AP)
AP 是0到1之间的所有Recall对应的Precision的平均值。从Precision和Recall的公式可以看出,随着模型在图片上预测的框(all detections)越多,而TP会有上限,所以对应的Precision会变小;当all detections越多,就代表有越多的ground truth可能会被正确匹配,即TP会有少量增加,此时Recall会变大。反过来也一样,所以我们需要检测器保持随着Recall增加(越来越多的ground truth被正确匹配),Precision也保持较高准确率。
Average Precision (AP)用来计算Precision x Recall曲线的面积,如下图所示,方式是插值法。
以上参考文章中有举例,这里进行分析:
这里共有7幅图像,其中绿色边界框表示15个ground truth,红色边界框表示24个pre-box。每一个预测的框pre-box都包含一个置信度。接下来的表格展示了每一个pre-box和对应置信度,需注意:
- 只要一个pre-box与某个ground truth的IOU大于设定阈值,则标记为TP,否则为FP。
- 在一些图片上,一个ground truth与不止一个pre-box有重合,则与其IOU最大的pre-box为TP,其余为FP。
因为Precision和Recall都是靠FP,TP来计算的,所以Precision x Recall 曲线也是通过计算累积的 TP 或 FP 检测的准确率召回率值绘制的。首先,我们需要根据检测的可信度来排序,然后计算每个累积检测的Precision和Recall,如下表所示:
其中Acc TP是累计出现了几个TP。根据当前的Acc TP和Acc FP计算当前的Precision和Recall。画出来折线图:
上文提到用插值法计算AP,这里有两种插值方法:
2.1 11点插值
计算公式:
A
P
=
1
11
∑
r
∈
{
0
,
0.1
,
…
,
1
}
ρ
interp
(
r
)
\mathrm{AP}=\frac{1}{11} \sum_{r \in\{0,0.1, \ldots, 1\}} \rho_{\operatorname{interp}(r)}
AP=111r∈{0,0.1,…,1}∑ρinterp(r)
其中
ρ
interp
=
max
r
ˉ
:
r
~
≥
r
ρ
(
r
~
)
\rho_{\text {interp }}=\max _{\bar{r}: \tilde{r} \geq r} \rho(\tilde{r})
ρinterp =rˉ:r~≥rmaxρ(r~)
该公式的含义是在11个level的recall下,即
r
∈
{
0
,
0.1
,
…
,
1
}
r \in\{0,0.1, \ldots,1\}
r∈{0,0.1,…,1}下,进行插值。例如:
- 当 r = 0 r=0 r=0时, ρ interp = max r ˉ : r ~ ≥ 0 ρ ( r ~ ) \rho_{\text {interp }}=\max _{\bar{r}: \tilde{r} \geq 0} \rho(\tilde{r}) ρinterp =maxrˉ:r~≥0ρ(r~),而在所有 r ~ ≥ 0 \tilde{r} \geq 0 r~≥0的点中,能令 ρ ( r ~ ) \rho(\tilde{r}) ρ(r~)最大的 r ~ \tilde{r} r~为其等于0.0666时,此时Precision=1。
- 当 r = 0.1 r=0.1 r=0.1时, ρ interp = max r ˉ : r ~ ≥ 0.1 ρ ( r ~ ) \rho_{\text {interp }}=\max _{\bar{r}: \tilde{r} \geq 0.1} \rho(\tilde{r}) ρinterp =maxrˉ:r~≥0.1ρ(r~),在所有 r ~ ≥ 0.1 \tilde{r} \geq 0.1 r~≥0.1的点中,能令 ρ ( r ~ ) \rho(\tilde{r}) ρ(r~)最大的 r ~ \tilde{r} r~为其等于0.1333时,此时Precision=0.6666。
- 以此类推,没有
r
>
=
0.5
r>=0.5
r>=0.5的情况,所以之后为0,得到下式:
A P = 1 11 ∑ r ∈ { 0 , 0.1 , … , 1 } ρ interp ( r ) A P = 1 11 ( 1 + 0.6666 + 0.4285 + 0.4285 + 0.4285 + 0 + 0 + 0 + 0 + 0 + 0 ) A P = 26.84 % \begin{array}{l} A P=\frac{1}{11} \sum_{r \in\{0,0.1, \ldots, 1\}} \rho_{\text {interp }(r)} \\ A P=\frac{1}{11}(1+0.6666+0.4285+0.4285+0.4285+0+0+0+0+0+0) \\ A P=26.84 \% \end{array} AP=111∑r∈{0,0.1,…,1}ρinterp (r)AP=111(1+0.6666+0.4285+0.4285+0.4285+0+0+0+0+0+0)AP=26.84%
2.1 全点插值
这个看图很好理解,即计算面积:
计算公式:
A
P
=
A
1
+
A
2
+
A
3
+
A
4
A
1
=
(
0.0666
−
0
)
×
1
=
0.0666
A
2
=
(
0.1333
−
0.0666
)
×
0.6666
=
0.04446222
A
3
=
(
0.4
−
0.1333
)
×
0.4285
=
0.11428095
A
4
=
(
0.4666
−
0.4
)
×
0.3043
=
0.02026638
A
P
=
0.0666
+
0.04446222
+
0.11428095
+
0.02026638
A
P
=
0.24560955
A
P
=
24.56
%
\begin{array}{l} A P=A _1+A _2+A _3+A _4\\ A _1=(0.0666-0) \times 1=\mathbf{0 . 0 6 6 6} \\ A_ 2=(0.1333-0.0666) \times 0.6666=\mathbf{0 . 0 4 4 4 6 2 2 2} \\ A _3=(0.4-0.1333) \times 0.4285=\mathbf{0 . 1 1 4 2 8 0 9 5} \\ A _4=(0.4666-0.4) \times 0.3043=\mathbf{0 . 0 2 0 2 6 6 3 8} \\ A P=0.0666+0.04446222+0.11428095+0.02026638 \\ A P=0.24560955 \\ A P=\mathbf{2 4 . 5 6} \% \end{array}
AP=A1+A2+A3+A4A1=(0.0666−0)×1=0.0666A2=(0.1333−0.0666)×0.6666=0.04446222A3=(0.4−0.1333)×0.4285=0.11428095A4=(0.4666−0.4)×0.3043=0.02026638AP=0.0666+0.04446222+0.11428095+0.02026638AP=0.24560955AP=24.56%