大佬带队!旷视研究院 CV Master训练营-《目标检测任务综述》总结
大佬带队!旷视研究院 CV Master训练营-《目标检测任务综述》总结
邵盛松 笔记
介绍
黎泽明老师,旷视研究院基础检测组负责人,硕士毕业于清华大学。在CVPR,ICCV,ECCV,NeurIPS,AAAI等会议上发表论文十余篇。曾在物体检测的著名挑战赛COCO上作为主力取得了3连冠,并获得比赛的最佳论文奖,在CVPR19的DIW挑战赛中担任评审委员。研究兴趣主要集中在物体检测和高效的模型设计, 并在旷视主导研发了检测的代码仓库。
提纲 outlines
- 基于DNN的通过物体检测简介
- 经典物体检测结构
一阶段检测器
多阶段检测器 - 进阶的学习
系统化、模块化检测器 -宏观(macro)
深入研究细节-微观(delve into details - micro)
扩展主题(expanded topic)
Appetizer(餐前或主菜前的开胃小吃或饮品)
- 看看理论基础,开阔视野。
- 技能下潜,扎实的炼丹框架帮我们兜下限,也能限制我们的上限。多动手动脑,多怀疑。
推荐书籍
《Grokking Deep Learning》Andrew W.Trask中文版叫《深度学习图解》 ,与《图解深度学习》山下隆义 是不同的两本书。
《深度学习》Ian Goodfellow、Yoshua Bengio 、Aaron Courville
物体检测
数据集
北京智源人工智能研究院和旷视联合推出了目标检测任务的新基准:Objects365。它的所有图像数据都是在自然场景设计和收集的。该Objects365目标检测数据集主要用于解决具有365个对象类别的大规模检测,并为目标检测研究提供多样化、实用性的基准。同时,我们围绕数据集组织了2019年智源-旷视目标检测挑战赛,以及一个挂靠CVPR 2019会议的Workshop。Objects365联盟希望这些活动可以成为一个平台,推动目标检测研究的上限。
评测:AP
不同的比赛不同的评判标准(Different competitions, different metrics)
表达式是
I
o
U
=
a
r
e
a
(
B
p
⋂
B
g
t
)
a
r
e
a
(
B
p
⋃
B
g
t
)
IoU = \frac{area(B_{p} \bigcap B_{gt})}{area(B_{p} \bigcup B_{gt})}
IoU=area(Bp⋃Bgt)area(Bp⋂Bgt)
TP - True Positive, 正确的检测结果,
I
o
U
≥
t
h
r
e
s
h
o
l
d
IoU \geq threshold
IoU≥threshold
FP - False Positive, 错误的检测结果,
I
o
U
≤
t
h
r
e
s
h
o
l
d
IoU \leq threshold
IoU≤threshold
精度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
召回率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 \ groundtruths}
Recall=TP+FNTP=all groundtruthsTP
举例说明AP的计算方法
红色:预测框
绿色:真实框
假设7张图像上有15个真实框也叫ground truth,用绿色方框表示;模型给出了24个预测框,用红色方框表示,使用字母 (A,B,…,Y) 进行编号,每个预测框有一个置信度。
下表给出了每个预测框及其对应的置信度. 最后一列表示检测结果是 TP 还是 FP. 如果 IoU >= 30%,则该预测框为 TP,否则为 FP.
在某些图像中,有多个预测框与真实框重叠例如(图像2、3、4、5、6和7)。对于这些情况,置信度最高的预测框被认为是TP,而其他预测框是FP。该规则应用于Pascal VOC 2012 metric:例如,单个物体有5个预测框,置信度最高的那一个被算作正确检测即TP和4个错误检测即FP。
Precision x Recall曲线(P-R曲线)绘制方法
我们首先需要根据预测框的可信度对预测框进行排序,然后计算每个累计预测框的准确率precision和召回率recall,如下表所示:
Acc TP 和 Acc FP 两列是累计计算的
举例说明
Detection R的计算方法
P
r
e
c
i
s
i
o
n
=
T
P
T
P
+
F
P
=
1
1
+
0
=
1
Precision = \frac{TP}{TP + FP} = \frac{1}{1+0}=1
Precision=TP+FPTP=1+01=1
R
e
c
a
l
l
=
T
P
T
P
+
F
N
=
1
15
=
0.0666
Recall = \frac{TP}{TP + FN} = \frac{1}{15}=0.0666
Recall=TP+FNTP=151=0.0666
Detection J的计算方法
P
r
e
c
i
s
i
o
n
=
T
P
T
P
+
F
P
=
2
2
+
1
=
0.6666
Precision = \frac{TP}{TP + FP} = \frac{2}{2+1}=0.6666
Precision=TP+FPTP=2+12=0.6666
R
e
c
a
l
l
=
T
P
T
P
+
F
N
=
2
15
=
0.1333
Recall = \frac{TP}{TP + FN} = \frac{2}{15}=0.1333
Recall=TP+FNTP=152=0.1333
绘制精确度和召回值,我们得到下面的Precision x Recall曲线(精确度x召回曲线)
有两种方法来测量 AP,11点插值法的AP和全点插值法的AP
11点插值法
11点内插平均精度的想法是在一组11个等间距召回等级(0,0.1,…,1)上平均精度。 通过将召回值大于其当前召回值的最大精度取出作为内插精度值来绘制P-R曲线。
例如看Detections列= J那行
P
r
e
c
i
s
i
o
n
=
0.6666
R
e
c
a
l
l
=
0.1333
Precision =0.6666 \\\\ Recall =0.1333
Precision=0.6666Recall=0.1333
如何找一下Precision 和 Recall
看红点,再看上面的图表 因为要取剩余precision中最大值,precision=0.6666完了就是0.4285,
所以Recall =0.2,0.3,0.4,precision都是0.6666
recall=0.46也就是0.5包含0.5后就没有值,所以Recall =从0.5一直到1,precision都是0.
A
P
=
1
11
∑
r
∈
{
0
,
0.1
,
.
.
.
,
1
}
ρ
i
n
t
e
r
p
(
r
)
A
P
=
1
11
(
1
+
0.6666
+
0.4285
+
0.4285
+
0.4285
+
0
+
0
+
0
+
0
+
0
+
0
)
A
P
=
0.2684
AP = \frac{1}{11} \sum_{r \in \lbrace 0, 0.1,..., 1 \rbrace} \rho _{interp}(r) \\\\ AP = \frac{1}{11}(1 + 0.6666 + 0.4285 + 0.4285 + 0.4285 + 0 + 0 + 0 + 0 + 0 + 0) \\\\ AP = 0.2684 \\\\
AP=111r∈{0,0.1,...,1}∑ρinterp(r)AP=111(1+0.6666+0.4285+0.4285+0.4285+0+0+0+0+0+0)AP=0.2684
全点插值法
通过插值所有点,平均精度(AP)可以解释为Precision x Recall曲线的近似AUC。 目的是减少曲线中摆动的影响。 通过应用前面介绍的方程式,我们可以获得在这里将要演示的面积。 通过查看从最高(0.4666)到0(从右到左的绘图)的召回率,我们还可以从视觉上获得内插的精度点,并且随着我们降低召回率,我们会收集最高的精度值 如下图所示:
看上面的图,我们可以把AUC分成4个区域(A1, A2, A3和A4)
A
P
=
A
1
+
A
2
+
A
3
+
A
4
AP = A1 + A2 + A3 + A4
AP=A1+A2+A3+A4
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{aligned} A 1 &=(0.0666-0) \times 1=0.0666 \\ A 2 &=(0.1333-0.0666) \times 0.6666=0.04446222 \\ A 3 &=(0.4-0.1333) \times 0.4285=0.11428095 \\ A 4 &=(0.4666-0.4) \times 0.3043=0.02026638 \\ A P &=0.0666+0.04446222+0.11428095+0.02026638 \\ A P &=0.24560955 \\ A P &=24.56 \% \end{aligned}
A1A2A3A4APAPAP=(0.0666−0)×1=0.0666=(0.1333−0.0666)×0.6666=0.04446222=(0.4−0.1333)×0.4285=0.11428095=(0.4666−0.4)×0.3043=0.02026638=0.0666+0.04446222+0.11428095+0.02026638=0.24560955=24.56%
结果不同:11点插值 26.84%,全点插值 24.56%。
经典物体检测结构
一阶段检测器
单阶段的例如SSD、RetinaNet、RefineDet、YOLO
多阶段检测器
两阶段的例如 R-CNN、SPP-Net、fast R-CNN、Faster R-CNN、 R-FCN、Mask R-CNN
进阶的学习
系统化、模块化检测器
https://github.com/facebookresearch/Detectron
https://github.com/facebookresearch/detectron2
https://github.com/facebookresearch/maskrcnn-benchmark
Detectron向 Detectron2过渡期间,Facebook Research 还开源了一个项目maskrcnn-benchmark
Detectron和maskrcnn-benchmark现在已经弃用,只剩Detectron2
香港中文大学-商汤联合实验室
mmDetection
https://github.com/open-mmlab/mmdetection
图森未来(TuSimple)
simpledet
https://github.com/TuSimple/simpledet
AlexeyAB(个人开发者)
https://github.com/AlexeyAB/darknet
TensorFlow官方
https://github.com/tensorflow/models/tree/master/research/object_detection
模块化
深入研究细节-微观(delve into details - micro)
快速学习tricks
-
快速犯错:learn from bugs
-
from scratch
-
多怀疑
检测:SyncBN多机模拟单击,bug in NCCL
检测:Accumulate Grad模拟多机,not perfectly equivalent
扩展主题(expanded topic)
- Specific detector
- Video
- 3D
- Long-tail,few/zero/any-shot
- Instance seg
- Semi/self supervise
- Transformer based
- 量化、蒸馏部署 …