谨以本文记录深度学习入门过程中学习的目标检测常见指标,如有错误还请朋友不吝指教!
目标检测评价指标——mAP
- GT与预测框的IoU是否大于阈值?
- 预测的类别是否正确?
- 置信度是否大于阈值?
交并比(IoU,Intersection over Union)
IoU的作用是评价两个矩形框之间的相似性,在目标检测中是度量两个检测框的交叠程度。计算公式如下:
I
O
U
=
a
r
e
a
(
B
g
t
∩
B
p
)
a
r
e
a
(
B
g
t
∪
B
p
)
IOU=\frac{area(B_{gt}\cap B_{p})}{area(B_{gt} \cup B_p)}
IOU=area(Bgt∪Bp)area(Bgt∩Bp)
其中
B
g
t
B_{gt}
Bgt表示GT Box,
B
p
B_p
Bp表示Predict Box。
查准率和查全率
什么是TP、TN、FP、FN?
- TP:True Positive
- TN:True Negative
- FP:False Positive
- FN:False Negative
TP、TN、FP和FN的对应解释如上所述,其中的Positive和Negative表示模型对样本预测的结果是正样本还是负样本。True和False表示预测的结果和真实结果是否相同。例如:True Positive就是模型预测样本为正样本,该结果与实际结果相同,该样本实际上本来就是标签为正的样本。
如果假设IoU阈值为0.5的话,那在目标检测中:
- TP:表示 I o U > 0.5 IoU>0.5 IoU>0.5的检测框的数量,也就是检测正确的数量。
- FP:表示 I o U ≤ 0.5 IoU \le 0.5 IoU≤0.5的检测框数量(或者是检测到同一GT的多余的检测框的数量),属于误检一类了。
- FN:表示没有检测到的GT数量,即漏检的数量。
查准率(Precision)
被预测为正样本的检测框中预测正确的占比:
P
r
e
c
i
s
i
o
n
=
T
P
T
P
+
F
P
=
T
P
a
l
l
d
e
t
e
c
t
i
o
n
s
Precision=\frac{TP}{TP+FP}=\frac{TP}{all \ detections}
Precision=TP+FPTP=all detectionsTP
如上图所示,图中GT共有5只猫待检测,但实际上只检测出来了一只,而且这个检测是正确的。那这种情况下的查全率就是:
P
r
e
c
i
s
i
o
n
=
1
1
=
100
%
Precision=\frac{1}{1}=100\%
Precision=11=100%
查全率(Recall)
被正确检测出来的真实框占所有真实框的比例:
R
e
c
a
l
l
=
T
P
T
P
+
F
N
=
T
P
a
l
l
g
r
o
u
n
d
t
r
u
t
h
s
Recall=\frac{TP}{TP+FN}=\frac{TP}{all \ ground \ truths}
Recall=TP+FNTP=all ground truthsTP
R e c a l l = 5 5 + 0 = 100 % Recall=\frac{5}{5+0}=100\% Recall=5+05=100%
AP和mAP
AP 是计算某一类 P-R 曲线下的面积,mAP 则是计算所有类别 P-R 曲线下面积的平均值。其中P是查准率Precision,R是查全率Recall。
下面以3张图片为例,说明AP和mAP的计算过程:
在所有的图片中(当前只有上图一张),待检测的目标的数量 n u m o b = 2 num_{ob}=2 numob=2,上图中的检测情况如下表所示:
GT id | Confidence | OB(IoU=0.5) |
---|---|---|
1 | 0.98 | True |
1 | 0.61 | False |
该表中的顺序是按Confidence从高到低排序的,对于一个GT来说,只能有一个检测框为正确的检测。
加入第二张图片,此时待检测的目标数量 n u m o b = 3 num_{ob}=3 numob=3,检测情况如下表所示
GT id | Confidence | OB(IoU=0.5) |
---|---|---|
1 | 0.98 | True |
3 | 0.89 | True |
3 | 0.66 | False |
1 | 0.61 | False |
加入第三张图片,加上前两张中的待检测目标,共有 n u m o b = 7 num_{ob}=7 numob=7 个目标需要检测,检测情况如下表所示:
GT id | Confidence | OB(IoU=0.5) |
---|---|---|
1 | 0.98 | True |
3 | 0.89 | True |
6 | 0.88 | True |
7 | 0.78 | True |
3 | 0.66 | False |
1 | 0.61 | False |
4 | 0.52 | True |
依次取Confidence的阈值为[0.98, 0.89, 0.88, 0.78, 0.66, 0.61, 0.52],计算对应的查准率和查全率如下表所示:
Rank | Precision | Recall | Confidence thread |
---|---|---|---|
1 | 1.0 | 0.14 | 0.98 |
2 | 1.0 | 0.28 | 0.89 |
3 | 1.0 | 0.42 | 0.88 |
4 | 1.0 | 0.57 | 0.78 |
5 | 0.80 | 0.57 | 0.66 |
6 | 0.66 | 0.57 | 0.61 |
7 | 0.71 | 0.71 | 0.52 |
以Confidence thread=0.52为例:
此时的TP=5,误检FP=2,第一张和第三张两张图片共漏检FN=2,所以
P
r
e
c
i
s
i
o
n
=
T
P
T
P
+
F
P
=
5
5
+
2
=
0.71
Precision=\frac{TP}{TP+FP}=\frac{5}{5+2}=0.71
Precision=TP+FPTP=5+25=0.71
R
e
c
a
l
l
=
T
P
T
P
+
F
N
=
5
5
+
2
=
0.71
Recall = \frac{TP}{TP+FN}=\frac{5}{5+2}=0.71
Recall=TP+FNTP=5+25=0.71
绘制出对应的P-R曲线图:
计算曲线下方的面积,也就是猫这一类别的AP:
(
0.14
−
0
)
×
1.0
+
(
0.28
−
0.14
)
×
1.0
+
(
0.42
−
0.28
)
×
1.0
+
(
0.57
−
0.42
)
×
1.0
+
(
0.71
−
0.57
)
×
0.71
=
0.6694
\begin{aligned} & (0.14-0)\times 1.0+(0.28-0.14) \times1.0 + (0.42-0.28)\times 1.0+ \\ & (0.57-0.42) \times1.0 + (0.71-0.57)\times 0.71=0.6694 \end{aligned}
(0.14−0)×1.0+(0.28−0.14)×1.0+(0.42−0.28)×1.0+(0.57−0.42)×1.0+(0.71−0.57)×0.71=0.6694
对于表格中Recall相同的,只保留Precision最高的值进行计算,最终得到猫这一类的AP=0.6694,如果要计算mAP则需要计算出其他类别的AP,并取平均值。
参考链接:
https://www.zhihu.com/question/53405779/answer/399478988
如果想看视频讲解的朋友可以移步这位up主的投稿,文中的例子也是来源于该视频:视频传送门