版权声明:转载必须经过本人同意,并且注明文章来源! https://blog.csdn.net/weixin_41665360/article/details/86597436
摘要
本文提出了
F
a
s
t
R
−
C
N
N
Fast~R-CNN
F a s t R − C N N
(
F
a
s
t
R
e
g
i
o
n
−
b
a
s
e
d
C
o
n
v
o
l
u
t
i
o
n
a
l
N
e
t
w
o
r
k
m
e
t
h
o
d
)
(Fast~Region-based~Convolutional~Network~method)
( F a s t R e g i o n − b a s e d C o n v o l u t i o n a l N e t w o r k m e t h o d ) 用于目标检测。
F
a
s
t
R
−
C
N
N
Fast~R-CNN
F a s t R − C N N 基于以前的工作,利用深度卷积网络有效地对目标提议进行分类。
F
a
s
t
R
−
C
N
N
Fast~R-CNN
F a s t R − C N N 采用了一些创新技术来提高训练和测试速度,同时也提高了检测精度。
F
a
s
t
R
−
C
N
N
Fast~R-CNN
F a s t R − C N N 训练非常深的
V
G
G
16
VGG~16
V G G 1 6 网络,速度比
R
−
C
N
N
R-CNN
R − C N N 快
9
9
9 倍,测试时速度提高了
213
213
2 1 3 倍,并在
P
A
S
C
A
L
V
O
C
2012
PASCAL~VOC~2012
P A S C A L V O C 2 0 1 2 上获得了更高的
m
A
P
mAP
m A P 。与
S
P
P
n
e
t
SPPnet
S P P n e t 相比,
F
a
s
t
R
−
C
N
N
Fast~R-CNN
F a s t R − C N N 训练
V
G
G
16
VGG~16
V G G 1 6 速度快
3
3
3 倍,测试速度快
10
10
1 0 倍,并且精度更高。
F
a
s
t
R
−
C
N
N
Fast~R-CNN
F a s t R − C N N 是用
P
y
t
h
o
n
Python
P y t h o n 和
C
+
+
C++
C + + 实现的(使用
C
a
f
f
e
Caffe
C a f f e ),可在开源
M
I
T
MIT
M I T 许可证下获得: https: //github.com/rbgirshick/fast-rcnn .
1、介绍
最近,深度
C
o
n
v
N
e
t
s
ConvNets
C o n v N e t s [14] [16] 极大地提升了图像分类 [14] 和目标检测 [9] [19] 精度。比较于图像分类,目标检测需要采用更复杂的方法,更具有挑战性。由于这种复杂性,当前的方法(例如,[9] 、[11] 、[19] 、[25] )在多级管道中训练模型,既缓慢且不优雅。
复杂性的出现是因为检测需要对象的精确定位,这产生了两个主要挑战。首先,必须处理大量候选对象位置(通常称为“提议”) 。其次,这些候选对象只提供粗略的定位,必须精炼以实现精确定位 。这些问题的解决方案往往会损害速度、准确性或简单性。
在这篇论文中,作者对最新的基于
C
o
n
v
N
e
t
ConvNet
C o n v N e t 的目标检测器 [9] [11] 的训练过程进行了流水线操作。提出了一种单阶段训练算法,该算法可以联合对目标提议进行分类的学习过程以及精炼空间位置的过程。
由此产生的方法可以训练一个非常深的检测网络(
V
G
G
16
VGG16
V G G 1 6 [20] )比
R
−
C
N
N
R-CNN
R − C N N [9] 快
9
9
9 倍,比
S
P
P
n
e
t
SPPnet
S P P n e t [11] 快
3
3
3 倍。在运行时,检测网络在
0.3
s
0.3~s
0 . 3 s 内处理图像(不包括目标提议时间),同时在
P
A
S
C
A
L
2012
PASCAL~2012
P A S C A L 2 0 1 2 上以
66
%
66\%
6 6 % 的
m
A
P
mAP
m A P 实现最高精度。(对比
R
−
C
N
N
R-CNN
R − C N N 的
62
%
62\%
6 2 % )
1.1、R-CNN and SPPnet
R
−
C
N
N
R-CNN
R − C N N [9] 通过使用深度
C
o
n
v
N
e
t
ConvNet
C o n v N e t 对目标提议进行分类,实现了卓越的目标检测精度。然而,它有明显的缺陷:
训练是一个多阶段通道。
R
−
C
N
N
R-CNN
R − C N N 首先利用对数损失在目标提议上微调
C
o
n
v
N
e
t
ConvNet
C o n v N e t 。然后,它将
S
V
M
s
SVMs
S V M s 与
C
o
n
v
N
e
t
ConvNet
C o n v N e t 特征拟合 。这些
S
V
M
s
SVMs
S V M s 充当目标检测器,取代了通过微调学习到的
s
o
f
t
m
a
x
softmax
s o f t m a x 分类器。在第三个训练阶段,学习边界框回归器 。
训练在空间和时间上都很昂贵。对于
S
V
M
SVM
S V M 和边界框回归器训练,从每个图像中的每个对象提议中提取特征并写入磁盘。对于非常深的网络,如
V
G
G
16
VGG16
V G G 1 6 ,
V
O
C
07
VOC~07
V O C 0 7 训练验证集的
5
k
5k
5 k 幅图像需要
2.5
G
P
U
2.5~GPU
2 . 5 G P U 天的处理时间。这些特征需要数百
G
G
G 的存储空间。
目标检测缓慢。在测试时,从每个测试图像中的每个对象提议中提取特征。使用
V
G
G
16
VGG16
V G G 1 6 进行检测,每幅图像需要
47
s
47s
4 7 s (在
G
P
U
GPU
G P U 上)。
R
−
C
N
N
R-CNN
R − C N N 速度很慢,因为它对每一个对象提议执行
C
o
n
v
N
e
t
ConvNet
C o n v N e t ,而不共享计算。空间金字塔池化网络(
S
P
P
n
e
t
s
SPPnets
S P P n e t s )[11] 提出通过共享计算来加速
R
−
C
N
N
R-CNN
R − C N N 。
S
P
P
n
e
t
SPPnet
S P P n e t 方法计算整个输入图像的卷积特征图,然后使用从共享特征图中提取的特征向量对每个目标提议进行分类 。通过将提议内的特征图的部分
m
a
x
−
p
o
o
l
i
n
g
max-pooling
m a x − p o o l i n g 成固定大小的输出(例如,
6
×
6
6×6
6 × 6 )来提取提议的特征。多个输出大小被汇集在一起,然后像空间金字塔池化 [15] 中那样串联起来。
S
P
P
n
e
t
SPPnet
S P P n e t 在测试时将
R
−
C
N
N
R-CNN
R − C N N 的速度提高了
10
10
1 0 到
100
100
1 0 0 倍。由于更快的提议特征提取,训练时间也减少了
3
3
3 倍。
S
P
P
n
e
t
SPPnet
S P P n e t 也有明显的缺点。与
R
−
C
N
N
R-CNN
R − C N N 一样,训练是一个多阶段的流程,涉及提取特征、利用对数损失微调网络、训练
S
V
M
s
SVMs
S V M s 和最后拟合边界框回归器 。特征也会写入磁盘。但是与
R
−
C
N
N
R-CNN
R − C N N 不同,[11] 中提出的微调算法无法更新空间金字塔池之前的卷积层。毫不奇怪,这种限制(固定卷积层)限制了深度网络的精度。
1.2、贡献
作者提出了一种新的训练算法,它克服了
R
−
C
N
N
R-CNN
R − C N N 和
S
P
P
n
e
t
SPPnet
S P P n e t 的缺点,同时提高了它们的速度和准确性。作者称这种方法为
F
a
s
t
R
−
C
N
N
Fast~R-CNN
F a s t R − C N N ,因为它训练和测试相对较快。
F
a
s
t
R
−
C
N
N
Fast~R-CNN
F a s t R − C N N 方法有几个优点:
检测质量
(
m
A
P
)
(mAP)
( m A P ) 高于
R
−
C
N
N
R-CNN
R − C N N 、
S
P
P
n
e
t
SPPnet
S P P n e t
训练是单阶段的,使用多任务损失
训练可以更新所有网络层
特征缓存不需要磁盘存储
2、Fast R-CNN 结构和训练
图
1
1
1 展示出了
F
a
s
t
R
−
C
N
N
Fast~R-CNN
F a s t R − C N N 架构。
F
a
s
t
R
−
C
N
N
Fast~R-CNN
F a s t R − C N N 网络将整个图像和一组目标提议作为输入。网络首先用几个卷积
(
c
o
n
v
)
(conv)
( c o n v ) 和
m
a
x
p
o
o
l
i
n
g
max~pooling
m a x p o o l i n g 层处理整个图像,以生成
c
o
n
v
conv
c o n v 特征图。然后,对于每个对象提议,感兴趣区域
(
R
o
I
)
(RoI)
( R o I ) 池化层从特征图中提取固定长度的特征向量。每个特征向量被馈送到一系列全连接
(
f
c
)
(fc)
( f c ) 层中,这些层最终分支为两个兄弟输出层:一个在
K
K
K 个目标类加上 “背景” 类上产生
s
o
f
t
m
a
x
soft~max
s o f t m a x 概率估计,另一个为
K
K
K 个对象类中的每一个输出四个实数。每组
4
4
4 个值对
K
K
K 个类之一的精确边界框位置进行编码。
2.1、RoI 池化层
R
o
I
RoI
R o I 池化层使用
m
a
x
p
o
o
l
i
n
g
max~pooling
m a x p o o l i n g 将任何有效感兴趣区域内的特征转换成具有固定空间范围
H
×
W
H×W
H × W (例如,
7
×
7
7×7
7 × 7 )的小特征图,其中
H
H
H 和
W
W
W 是独立于任何特定
R
o
I
RoI
R o I 的层超参数。在本文中,
R
o
I
RoI
R o I 是转换卷积特征图的矩形窗口。每个
R
o
I
RoI
R o I 由一个四元组
(
r
,
c
,
h
,
w
)
(r,~c,~h,~w)
( r , c , h , w ) 来定义,该元组指定了它的左上角
(
r
,
c
)
(r,~c)
( r , c ) 以及它的高度和宽度
(
h
,
w
)
(h,~w)
( h , w ) 。
R
o
I
m
a
x
p
o
o
l
i
n
g
RoI~max~pooling
R o I m a x p o o l i n g 工作方式是将
h
×
w
R
o
I
h×w~RoI
h × w R o I 窗口划分成
H
×
W
H×W
H × W 个网格,每个子窗口大小近似为
h
/
H
×
w
/
W
h / H×w / W
h / H × w / W ,然后将每个子窗口中的值最大池化到相应的输出网格单元中。像标准最大池一样,池化独立应用于每个特征图通道。
R
o
I
RoI
R o I 层只是
S
P
P
N
e
t
s
SPPNets
S P P N e t s [11] 中使用的空间金字塔池化层的特例,其中只有一个金字塔层。作者使用 [11] 中给出的池化子窗口计算。
2.2、从预训练的网络初始化
作者对三个经过预训练的
I
m
a
g
e
N
e
t
ImageNet
I m a g e N e t [4] 网络进行了实验,每个网络都有五个最大池化层,并且介于第五层和第十三层之间(有关网络详细信息,请参见第
4.1
4.1
4 . 1 节)。当一个预训练的网络初始化一个
F
a
s
t
R
−
C
N
N
Fast~R-CNN
F a s t R − C N N 网络时,它经历了三个转变。
首先,最后一个最大池化层被
R
o
I
RoI
R o I 池化层取代,
R
o
I
RoI
R o I 池化层通过将
H
H
H 和
W
W
W 设置为与网络的第一个全连接层兼容来配置(例如,对于
V
G
G
16
VGG16
V G G 1 6 ,
H
=
W
=
7
H = W = 7
H = W = 7 )。
第二,网络的最后一个全连接层和
s
o
f
t
m
a
x
softmax
s o f t m a x (针对
1000
1000
1 0 0 0 路
I
m
a
g
e
N
e
t
ImageNet
I m a g e N e t 分类进行了训练)被前面描述的两个兄弟层(
K
+
1
K+1
K + 1 类别上的全连接层和
s
o
f
t
m
a
x
softmax
s o f t m a x 以及特定类别的边界框回归器)取代。
第三,对网络进行了修改,以获取两个数据输入:图像列表和这些图像中的
R
o
I
s
RoIs
R o I s 列表。
2.3、检测微调
利用反向传播训练所有网络权重是
F
a
s
t
R
−
C
N
N
Fast~R-CNN
F a s t R − C N N 的一项重要能力。首先,作者阐明了为什么
S
P
P
n
e
t
SPPnet
S P P n e t 无法更新空间金字塔池化层之下的权重。
根本原因在于,当每个训练样本(即
R
o
I
RoI
R o I )来自不同的图像时,通过
S
P
P
SPP
S P P 层的反向传播是非常低效的,这正是
R
−
C
N
N
R-CNN
R − C N N 和
S
P
P
n
e
t
SPPnet
S P P n e t 网络的训练方式。效率低下源于这样一个事实,即每个
R
o
I
RoI
R o I 可能有一个非常大的感受野,通常覆盖整个输入图像。由于前向传播必须处理整个感受野,训练输入很大(通常是整个图像)。
作者提出了一种更有效的训练方法,在训练过程中利用特征共享。在
F
a
s
t
R
−
C
N
N
Fast~R-CNN
F a s t R − C N N 训练中,随机梯度下降
(
S
G
D
)
(SGD)
( S G D )
m
i
n
i
b
a
t
c
h
e
s
mini~batches
m i n i b a t c h e s 被分层采样,首先采样
N
N
N 幅图像,然后从每幅图像中采样
R
/
N
R/N
R / N 个
R
o
I
s
RoIs
R o I s 。关键是,来自同一图像的
R
o
I
s
RoIs
R o I s 在前向和反向通道中共享计算和内存。使
N
N
N 变小会减少
m
i
n
i
b
a
t
c
h
e
s
mini~batches
m i n i b a t c h e s 计算。例如,当使用
N
=
2
N = 2
N = 2 和
R
=
128
R = 128
R = 1 2 8 时,所提出的训练方案比从
128
128
1 2 8 幅不同的图像中采样一个
R
o
I
RoI
R o I (即
R
−
C
N
N
R-CNN
R − C N N 和
S
P
P
n
e
t
SPPnet
S P P n e t 策略)大约快
64
64
6 4 倍。
对这种策略的一个担忧是,这可能会导致训练收敛缓慢,因为来自同一幅图像的
R
o
I
s
RoIs
R o I s 是相关的。这种担心似乎不是一个实际问题,使用比
R
−
C
N
N
R-CNN
R − C N N 更少的
S
G
D
SGD
S G D 迭代,在
N
=
2
N = 2
N = 2 和
R
=
128
R = 128
R = 1 2 8 的情况下取得了良好的结果。
除了分层采样之外,
F
a
s
t
R
−
C
N
N
Fast~R-CNN
F a s t R − C N N 还采用了一种流线型的训练流程,微调阶段,可以联合优化
s
o
f
t
m
a
x
softmax
s o f t m a x 分类器和边界框回归器,而不是在 [9] [11] 三个独立阶段中训练
s
o
f
t
m
a
x
softmax
s o f t m a x 分类器、
S
V
M
s
SVMs
S V M s 和回归器。该流程的组成部分(损失、
m
i
n
i
b
a
t
c
h
e
s
mini~batches
m i n i b a t c h e s 采样策略、通过
R
o
I
p
o
o
l
i
n
g
RoI~pooling
R o I p o o l i n g 层的反向传播和
S
G
D
SGD
S G D 超参数)如下所述。
多任务损失
F
a
s
t
R
−
C
N
N
Fast~R-CNN
F a s t R − C N N 网络有两个兄弟输出层。第一个输出是离散概率分布(每个
R
o
I
RoI
R o I ),
p
=
(
p
0
,
.
.
.
,
p
K
)
p = ( p_0~,...,~p_K )
p = ( p 0 , . . . , p K ) ,对应
K
+
1
K + 1
K + 1 个类别。像往常一样,
p
p
p 是通过全连接层的
K
+
1
K+1
K + 1 个输出上的
s
o
f
t
m
a
x
softmax
s o f t m a x 来计算的。第二个兄弟层输出边界框回归偏移,
t
k
=
(
t
x
k
,
t
y
k
,
t
w
k
,
t
h
k
)
t^k=(t^k_x~,~t^k_y~,~t^k_w~,~t^k_h)
t k = ( t x k , t y k , t w k , t h k ) ,用
k
k
k 索引
K
K
K 个对象类中的每一个。作者使用 [9] 中给出的
t
k
t^k
t k 参数化,其中
t
k
t^k
t k 指定了相对于对象提议的尺度不变平移和对数空间高度 / 宽度偏移。
每个训练
R
o
I
RoI
R o I 都标有一个
g
r
o
u
n
d
−
t
r
u
t
h
ground-truth
g r o u n d − t r u t h 类
u
u
u 和一个
g
r
o
u
n
d
−
t
r
u
t
h
ground-truth
g r o u n d − t r u t h 边界框回归目标
v
v
v 。在每个标记的
R
o
I
RoI
R o I 上使用多任务损失
L
L
L 来共同训练分类和边界框回归:
(1)
L
(
p
,
u
,
t
u
,
v
)
=
L
c
l
s
(
p
,
u
)
+
λ
[
u
≥
1
]
L
l
o
c
(
t
u
,
v
)
,
L(p,u,t^u,v)=L_{cls}(p,u)+\lambda[u\ge1]L_{loc}(t^u,v),\tag{1}
L ( p , u , t u , v ) = L c l s ( p , u ) + λ [ u ≥ 1 ] L l o c ( t u , v ) , ( 1 ) 其中,
L
c
l
s
(
p
,
u
)
=
−
log
p
u
L_{cls}(p,u)=-\log p_u
L c l s ( p , u ) = − log p u 是真实类
u
u
u 的对数损失。
第二个任务损失,
L
l
o
c
L_{loc}
L l o c 被定义为类
u
u
u 的一组真实边界框回归目标,
v
=
(
v
x
,
v
y
,
v
w
,
v
h
)
v=(v_x~,~v_y~,~v_w~,~v_h)
v = ( v x , v y , v w , v h ) ,为
u
u
u 类预测元组
t
u
=
(
t
x
u
,
t
y
u
,
t
w
u
,
t
h
u
)
t^u = (t^u_x~,~t^u_y~,~t^u_w~,~t^u_h)
t u = ( t x u , t y u , t w u , t h u ) 。当
u
≥
1
u ≥ 1
u ≥ 1 时,艾弗森括号指示函数
[
u
≥
1
]
[u ≥ 1]
[ u ≥ 1 ] 评估为
1
1
1 ,否则为
0
0
0 。按照惯例,所有背景类标记为
u
=
0
u = 0
u = 0 。对于背景
R
o
I
RoI
R o I ,没有
g
r
o
u
n
d
−
t
r
u
t
h
ground-truth
g r o u n d − t r u t h 边界框的概念,因此
L
l
o
c
L_{loc}
L l o c 被忽略。对于边界框回归,使用损失:
(2)
L
l
o
c
(
t
u
,
v
)
=
∑
i
∈
{
x
,
y
,
w
,
h
}
s
m
o
t
h
L
1
(
t
i
u
−
v
i
)
,
L_{loc}(t^u,v)=\underset{i\in\{x,y,w,h\}}{\sum}smoth_{L_1}(t_i^u-v_i),\tag{2}
L l o c ( t u , v ) = i ∈ { x , y , w , h } ∑ s m o t h L 1 ( t i u − v i ) , ( 2 ) 其中,
(3)
s
m
o
t
h
L
1
(
x
)
=
{
0.5
x
2
i
f
∣
x
∣
<
1
∣
x
∣
−
0.5
o
t
h
e
r
w
i
s
e
,
smoth_{L_1}(x) = \begin{cases} 0.5x^2&if~|x|<1\\ |x|-0.5&otherwise, \end{cases}\tag{3}
s m o t h L 1 ( x ) = { 0 . 5 x 2 ∣ x ∣ − 0 . 5 i f ∣ x ∣ < 1 o t h e r w i s e , ( 3 ) 是一种鲁棒的
L
1
L_1
L 1 损失,与
R
−
C
N
N
R-CNN
R − C N N 和
S
P
P
n
e
t
SPPnet
S P P n e t 中使用的
L
2
L_2
L 2 损失相比,它对异常值不太敏感。当回归目标不受限制时,
L
2
L_2
L 2 损失的训练可能需要仔细调整学习率,以防止梯度爆炸。等式
3
3
3 消除了这种敏感性。
方程
1
1
1 中的超参数
λ
λ
λ 控制两个任务损失之间的平衡。将
g
r
o
u
n
d
−
t
r
u
t
h
ground-truth
g r o u n d − t r u t h 回归目标
v
i
v_i
v i 标准化,使其具有零均值和单位方差。所有实验都使用
λ
=
1
λ= 1
λ = 1 。
注意到,[6] 使用相关的损失来训练一个类别不可知的对象提议网络。与本文的方法不同,[6] 提倡一种将定位和分类分开的两个网络系统。
O
v
e
r
F
e
a
t
OverFeat
O v e r F e a t [19] 、
R
−
C
N
N
R-CNN
R − C N N [9] 和
S
P
P
n
e
t
SPPnet
S P P n e t [11] 也训练分类器和边界框定位器,但是这些方法使用阶段式训练,这对于
F
a
s
t
R
−
C
N
N
Fast~R-CNN
F a s t R − C N N 来说是次优的(第
5.1
5.1
5 . 1 节)。
M
i
n
i
−
b
a
t
c
h
Mini-batch
M i n i − b a t c h 采样 在微调期间,每个
S
G
D
m
i
n
i
−
b
a
t
c
h
SGD~mini-batch
S G D m i n i − b a t c h 由随机均匀选择的
N
=
2
N = 2
N = 2 个图像构成(通常的做法是,迭代数据集的排列)。使用数量
R
=
128
R = 128
R = 1 2 8 的
m
i
n
i
−
b
a
t
c
h
mini-batch
m i n i − b a t c h ,从每幅图像中采样
64
64
6 4 个
R
o
I
s
RoIs
R o I s 。与 [9] 一样,从对象提议中提取
25
%
25\%
2 5 % 的
R
o
I
RoI
R o I ,这些对象提议与
g
r
o
u
n
d
−
t
r
u
t
h
ground-truth
g r o u n d − t r u t h 的交并比(
I
o
U
IoU
I o U )至少为
0.5
0.5
0 . 5 。这些
R
o
I
s
RoIs
R o I s 由前景对象类标记的样本组成,即
u
≥
1
u ≥ 1
u ≥ 1 。根据 [11] ,其余的
R
o
I
s
RoIs
R o I s 是从与
g
r
o
u
n
d
−
t
r
u
t
h
ground-truth
g r o u n d − t r u t h 最大
I
o
U
IoU
I o U 在
[
0.1
,
0.5
)
[0.1~,~0.5)
[ 0 . 1 , 0 . 5 ) 区间内的目标提议中取样的。那些背景样本,用
u
=
0
u = 0
u = 0 标记。较低的阈值
0.1
0.1
0 . 1 似乎是一个启发式的硬样本挖掘 [8] 。在训练期间,图像被水平翻转,概率为
0.5
0.5
0 . 5 。不使用其他数据增强。
通过
R
o
I
RoI
R o I 池化层的反向传播 。反向传播通过
R
o
I
RoI
R o I 池化层衍生。为了清楚起见,假设每个
m
i
n
i
−
b
a
t
c
h
mini-batch
m i n i − b a t c h 只有一个图像
(
N
=
1
)
(N=1)
( N = 1 ) ,扩展到
N
>
1
N >1
N > 1 很简单,因为前向传递独立处理所有图像。
让
X
i
∈
R
X_i∈R
X i ∈ R 是输入到
R
o
I
RoI
R o I 池化层的第
i
i
i 个激活,让
y
r
j
y_{rj}
y r j 成为该层第
r
r
r 个
R
o
I
RoI
R o I 的第
j
j
j 个输出。
R
o
I
RoI
R o I 池化层计算
y
r
j
=
x
i
∗
(
r
,
j
)
y_{rj} =x_{i^*(r,j )}
y r j = x i ∗ ( r , j ) ,其中
i
∗
(
r
,
j
)
=
a
r
g
m
a
x
i
′
∈
R
(
r
,
j
)
x
i
′
i^*(r,j )=argmax_{i'∈R(r,j)}x_{i'}
i ∗ ( r , j ) = a r g m a x i ′ ∈ R ( r , j ) x i ′ 。
R
(
r
,
j
)
R(r,j)
R ( r , j ) 是子窗口中输入的索引集,输出单元
y
r
j
y_{rj}
y r j 在该子窗口上
m
a
x
max
m a x 池化。一个
x
i
x_i
x i 可以被分配给几个不同的输出
y
r
j
y_{rj}
y r j 。
R
o
I
RoI
R o I 池化层的
b
a
c
k
w
a
r
d
s
backwards
b a c k w a r d s 函数通过跟随
a
r
g
m
a
x
argmax
a r g m a x 开关计算损失函数相对于每个输入变量
x
i
x_i
x i 的偏导数:
(4)
∂
L
∂
x
i
=
∑
r
∑
j
[
i
=
i
∗
(
r
,
j
)
]
∂
L
∂
y
r
j
\frac{\partial L}{\partial x_i}=\underset{r}{\sum}\underset{j}{\sum}[i=i^*(r, j)]\frac{\partial L}{\partial y_{rj}}\tag{4}
∂ x i ∂ L = r ∑ j ∑ [ i = i ∗ ( r , j ) ] ∂ y r j ∂ L ( 4 ) 换句话说,对于每个
m
i
n
i
−
b
a
t
c
h
R
o
I
r
mini-batch~RoI~r
m i n i − b a t c h R o I r 和每个池化输出单元
y
r
j
y_{rj}
y r j ,如果
i
i
i 是由最大池为
y
r
j
y_{rj}
y r j 选择的
a
r
g
m
a
x
argmax
a r g m a x ,则偏导数
∂
L
∂
y
r
j
\frac{\partial L}{\partial y_{rj}}
∂ y r j ∂ L 被累加。在反向传播中,偏导数
∂
L
∂
y
r
j
\frac{\partial L}{\partial y_{rj}}
∂ y r j ∂ L 已经通过
R
o
I
RoI
R o I 池化层顶层的
b
a
c
k
w
a
r
d
s
backwards
b a c k w a r d s 函数来计算。
SGD 超参数 用于
s
o
f
t
m
a
x
softmax
s o f t m a x 分类和边界框回归的全连接层分别用标准差为
0.01
0.01
0 . 0 1 和
0.001
0.001
0 . 0 0 1 的零均值高斯分布初始化。偏差被初始化为
0
0
0 。所有层的每层学习率为权重
1
1
1 ,偏差
2
2
2 ,全局学习率为
0.001
0.001
0 . 0 0 1 。当在
V
O
C
07
VOC~07
V O C 0 7 或
V
O
C
12
VOC12
V O C 1 2 训练验证集上训练时,运行
S
G
D
SGD
S G D 进行
30
k
30k
3 0 k
m
i
n
i
−
b
a
t
c
h
mini-batch
m i n i − b a t c h 迭代,然后将学习率降低到
0.0001
0.0001
0 . 0 0 0 1 ,再进行
10
k
10k
1 0 k 迭代训练。当在更大的数据集上训练时,会运行
S
G
D
SGD
S G D 进行更多的迭代,如后面所述。
m
o
m
e
n
t
u
m
momentum
m o m e n t u m 为
0.9
0.9
0 . 9 ,参数衰减为
0.0005
0.0005
0 . 0 0 0 5 (权重和偏差)。
2.4、尺度不变性
作者探索了两种实现尺度不变目标检测的方法:
通过 “蛮力” 学习
通过使用图像金字塔
这些策略遵循 [11] 中的两种方法。在 “蛮力” 方法中,在训练和测试期间,每个图像都以预先定义的像素大小进行处理。网络必须从训练数据中直接学习尺度不变的物体检测。
相比之下,多尺度方法通过图像金字塔为网络提供了近似的尺度不变性。在测试时,图像金字塔被用来将每个目标提议近似尺度标准化。在多尺度训练中,在每次图像采样时随机采样金字塔尺度,以此作为数据增强的一种形式。由于
G
P
U
GPU
G P U 内存有限,只针对较小的网络进行多尺度训练。
3、Fast R-CNN 检测
一旦快速
R
−
C
N
N
R-CNN
R − C N N 网络被微调,检测只不过是向前传递(假设预先计算了目标提议)。网络将图像(或图像金字塔,图像列表)和
R
R
R 个对象提议列表作为输入进行评分。测试时,
R
R
R 大约为
2000
2000
2 0 0 0 ,有些情况下它更大,约等于
45000
45000
4 5 0 0 0 。当使用图像金字塔时,每个
R
o
I
RoI
R o I 被分配给该尺度,使得该尺度化的
R
o
I
RoI
R o I 最接近 [11] 区的
22
4
2
224^2
2 2 4 2 像素。
对于每个测试
R
o
I
r
RoI~r
R o I r ,前向通路输出一个类后验概率分布
p
p
p 和一组相对于
r
r
r 的预测边界框偏移(
K
K
K 类中的每一个都获得其自己的精确边界框预测)。使用估计的概率
P
r
(
c
l
a
s
s
=
k
∣
r
)
=
△
p
k
Pr(class= k|r)\overset{\triangle}{=}p_k
P r ( c l a s s = k ∣ r ) = △ p k 。为每个对象类
k
k
k 的
r
r
r 分配检测置信度。然后使用来自
R
−
C
N
N
R-CNN
R − C N N [9] 的算法和设置,对每个类别单独执行非最大抑制。
3.1、截断奇异值分解加快检测速度
对整幅图进行分类,计算全连接层花费的时间比卷积层少。与之相反,检测任务需要处理的
R
o
I
RoI
R o I 数量巨大,将近一半的前向传播时间用于计算全连接层(见图
2
2
2 )。规模大的全连接层很容易通过截断
S
V
D
SVD
S V D [5] [23] 进行压缩,从而加快速度。
在该技术中,由
u
×
v
u×v
u × v 参数化的层权重矩阵
W
W
W 近似分解为:
(5)
W
=
U
∑
t
V
T
W = U{\sum}_tV^T\tag{5}
W = U ∑ t V T ( 5 ) 使用奇异值分解。其中,
U
U
U 是一个
u
×
t
u\times t
u × t 的矩阵,包括
W
W
W 的前
t
t
t 个左奇异向量,
∑
t
{\sum}_t
∑ t 是一个包含
W
W
W 的前
t
t
t 个奇异值的
t
×
t
t×t
t × t 对角矩阵,
V
V
V 是包含
W
W
W 的前
t
t
t 个右奇异向量的
v
×
t
v×t
v × t 矩阵。截断奇异值分解将参数数量从
u
v
uv
u v 减少到
t
(
u
+
v
)
t(u+v)
t ( u + v ) ,如果
t
t
t 比
m
i
n
(
u
,
v
)
min(u,v)
m i n ( u , v ) 小得多,效果是显著的。为了压缩网络,对应于
W
W
W 的单个全连接层被两个全连接层代替,它们之间没有非线性。第一层使用权重矩阵
∑
t
V
T
{\sum}_tV^T
∑ t V T (无偏差),第二层使用
U
U
U (使用与
W
W
W 相关的原始偏差)。这种简单的压缩方法在
R
o
I
s
RoIs
R o I s 数量较大时能提供良好的加速。
4、主要结果
三个主要结果支撑了本文的贡献:
在
V
O
C
07
,
2010
VOC07,2010
V O C 0 7 , 2 0 1 0 和
2012
2012
2 0 1 2 上取得最优
m
A
P
mAP
m A P
相比较于
R
−
C
N
N
R-CNN
R − C N N 和
S
P
P
n
e
t
SPPnet
S P P n e t 实现了快速训练和测试
微调
V
G
G
16
VGG16
V G G 1 6 的卷积层提升
m
A
P
mAP
m A P
4.1、实验设置
实验使用了三个网络上获取的预训练的
I
m
a
g
e
N
e
t
ImageNet
I m a g e N e t 模型。第一个是
C
a
f
f
e
N
e
t
CaffeNet
C a f f e N e t (本质上是来源于
R
−
C
N
N
R-CNN
R − C N N [9] 的
A
l
e
x
N
e
t
AlexNet
A l e x N e t [14] )。作者选择性的参考了
C
a
f
f
e
N
e
t
CaffeNet
C a f f e N e t 作为模型
S
S
S 称为 “小模型”。第二个网络是来自 [3] 的
V
G
G
_
C
N
N
_
M
_
1024
VGG\_CNN\_M\_1024
V G G _ C N N _ M _ 1 0 2 4 ,该模型与
S
S
S 有相同的深度,但是更宽。称该模型为
M
M
M “中等模型”。最后一个网络是源自 [20] 的深度
V
G
G
16
VGG16
V G G 1 6 。由于该模型最大,因此称为
L
L
L 。在本部分,所有实验使用单一尺度训练和测试(
s
=
600
s=600
s = 6 0 0 ;参考
5.2
5.2
5 . 2 节获取详情)。
4.2、VOC 2010 和 2012 结果
在这些数据集上,作者将
F
a
s
t
R
−
C
N
N
Fast~R-CNN
F a s t R − C N N (简称
F
R
C
N
FRCN
F R C N )与公共排行榜(表
2
2
2 , 表
3
3
3 )上
c
o
m
p
4
comp4
c o m p 4 (外部数据)上的顶级方法进行比较。对于
N
U
S
_
N
I
N
_
c
2000
NUS\_NIN\_c2000
N U S _ N I N _ c 2 0 0 0 和
B
a
b
y
L
e
a
r
n
i
n
g
BabyLearning
B a b y L e a r n i n g 方法,目前并无相关的公开信息,因此不知道它们使用的
C
o
n
v
N
e
t
ConvNet
C o n v N e t 架构的确切信息。它们是
N
e
t
w
o
r
k
−
i
n
−
N
e
t
w
o
r
k
Network-in-Network
N e t w o r k − i n − N e t w o r k 设计 [17] 的变体。所有其他的方法使用相同的预训练
V
G
G
16
VGG16
V G G 1 6 网络进行初始化。
F
a
s
t
R
−
C
N
N
Fast~R-CNN
F a s t R − C N N 在
V
O
V
12
VOV12
V O V 1 2 上实现了
m
A
P
mAP
m A P 等于
65.7
%
65.7\%
6 5 . 7 % 的顶级结果(用其他数据实现了
68.4
%
68.4\%
6 8 . 4 % )。它也比其他基于 “慢”
R
−
C
N
N
R-CNN
R − C N N 管道的方法快两个数量级。在
V
O
C
10
VOC10
V O C 1 0 上,
S
e
g
D
e
e
p
M
SegDeepM
S e g D e e p M [25] 比
F
a
s
t
R
−
C
N
N
Fast R-CNN
F a s t R − C N N 实现了更高的
m
A
P
mAP
m A P (
67.2
%
67.2\%
6 7 . 2 % 对
66.1
%
66.1\%
6 6 . 1 % )。
S
e
g
D
e
e
p
M
SegDeepM
S e g D e e p M 在添加了分割注释的
V
O
C
12
VOC12
V O C 1 2 训练验证集上进行了训练。它旨在通过使用马尔可夫随机场对来自
O
2
P
O_2P
O 2 P [1] 语义分割方法的
R
−
C
N
N
R-CNN
R − C N N 检测和分割进行推理来提高
R
−
C
N
N
R-CNN
R − C N N 的准确性。
F
a
s
t
R
−
C
N
N
Fast~R-CNN
F a s t R − C N N 可以取代
R
−
C
N
N
R-CNN
R − C N N ,被交换到
S
e
g
D
e
e
p
M
SegDeepM
S e g D e e p M ,这可能会带来更好的结果。当使用扩大的
07
+
+
12
07++12
0 7 + + 1 2 训练集(见表
2
2
2 标题)时,
F
a
s
t
R
−
C
N
N
Fast~R-CNN
F a s t R − C N N 的
m
A
P
mAP
m A P 增加到
68.8
%
68.8\%
6 8 . 8 % ,超过
S
e
g
D
e
e
p
M
SegDeepM
S e g D e e p M 。
4.3、VOC 2007 结果
在
V
O
C
07
VOC07
V O C 0 7 上,作者比较了
F
a
s
t
R
−
C
N
N
Fast~R-CNN
F a s t R − C N N ,
R
−
C
N
N
R-CNN
R − C N N 以及
S
P
P
n
e
t
SPPnet
S P P n e t 。所有的方法使用相同预训练的
V
G
G
16
VGG16
V G G 1 6 网络,并且使用边界框回归。
V
G
G
16
S
P
P
n
e
t
VGG16~SPPnet
V G G 1 6 S P P n e t 的结果来自于 [11] 的作者。
S
P
P
n
e
t
SPPnet
S P P n e t 在训练和测试中使用了五个尺度。
F
a
s
t
R
−
C
N
N
Fast~R-CNN
F a s t R − C N N 相比于
S
P
P
n
e
t
SPPnet
S P P n e t 的提升表现在,即使
F
a
s
t
R
−
C
N
N
Fast~R-CNN
F a s t R − C N N 使用单尺度训练和测试,通过微调卷积层能使
m
A
P
mAP
m A P 获得较大的提升(从
63.1
%
63.1\%
6 3 . 1 % 到
66.9
%
66.9\%
6 6 . 9 % )。
R
−
C
N
N
R-CNN
R − C N N 实现
66.0
%
66.0\%
6 6 . 0 % 的
m
A
P
mAP
m A P 。作为次要问题,
S
P
P
n
e
t
SPPnet
S P P n e t 训练时不包括在
P
A
S
C
A
L
PASCAL
P A S C A L 中被标记为“困难”的样本。移除这些样本将使
F
a
s
t
R
−
C
N
N
Fast~R-CNN
F a s t R − C N N 的
m
A
P
mAP
m A P 提高到
68.1
%
68.1\%
6 8 . 1 % 。所有其他实验都使用 “困难” 的样本。
4.4、训练和测试时间
快速训练和测试时间是本文第二个主要结果。表
4
4
4 在
V
O
C
07
VOC07
V O C 0 7 上比较了
F
a
s
t
R
−
C
N
N
Fast~R-CNN
F a s t R − C N N ,
R
−
C
N
N
R-CNN
R − C N N 以及
S
P
P
n
e
t
SPPnet
S P P n e t 的训练时间(小时),测试速率(秒每幅图)以及
m
A
P
mAP
m A P 。对于
V
G
G
16
VGG16
V G G 1 6 ,
F
a
s
t
R
−
C
N
N
Fast~R-CNN
F a s t R − C N N 使用截断
S
V
D
SVD
S V D 时处理图像的速度比
R
−
C
N
N
R-CNN
R − C N N 快
213
213
2 1 3 倍,不使用时快
146
146
1 4 6 倍。训练时间缩短了
9
9
9 倍,从
84
84
8 4 小时缩短到了
9.5
9.5
9 . 5 小时。与
S
P
P
n
e
t
SPPnet
S P P n e t 相比,
F
a
s
t
R
−
C
N
N
Fast~R-CNN
F a s t R − C N N 训练
V
G
G
16
VGG16
V G G 1 6 快
2.7
2.7
2 . 7 倍(
9.5
9.5
9 . 5 小时
v
s
vs
v s
25.5
25.5
2 5 . 5 小时),测试时,不使用截断
S
V
D
SVD
S V D 快
7
7
7 倍,使用截断
S
V
D
SVD
S V D 快
10
10
1 0 倍。
F
a
s
t
R
−
C
N
N
Fast~R-CNN
F a s t R − C N N 也避免了数百
G
G
G 的磁盘存储,因为它不缓存特征。
截断 SVD 截断
S
V
D
SVD
S V D 可以减少超过
30
%
30\%
3 0 % 的检测时间,只会降低
m
A
P
mAP
m A P
0.3
0.3
0 . 3 个百分点,模型压缩后不需要进行多余的微调。图
2
2
2 示出了如何使用来自
V
G
G
16
VGG16
V G G 1 6 的
f
c
6
fc_6
f c 6 层的
25088
×
4096
25088×4096
2 5 0 8 8 × 4 0 9 6 矩阵的前
1024
1024
1 0 2 4 个奇异值和来自
f
c
7
fc_7
f c 7 层
4096
×
4096
4096×4096
4 0 9 6 × 4 0 9 6 矩阵的前
256
256
2 5 6 个奇异值减少运行时间,同时
m
A
P
mAP
m A P 损失很小。如果压缩后进行微调可能将速度进一步提升,精度损失进一步降低。
4.5、微调哪一层
对于
S
P
P
n
e
t
SPPnet
S P P n e t 论文 [11] 中考虑的深度较浅的网络,只微调全连接层似乎足以获得高精度。作者假设这个结果不适用于非常深的网络。为了验证微调卷积层对
V
G
G
16
VGG16
V G G 1 6 的重要性,作者使用
F
a
s
t
R
−
C
N
N
Fast~R-CNN
F a s t R − C N N 来微调,但是冻结了
13
13
1 3 个卷积层,确保只有全连接层才能学习。这种切除模拟单尺度
S
P
P
n
e
t
SPPnet
S P P n e t 训练,并将
m
A
P
mAP
m A P 从
66.9
%
66.9\%
6 6 . 9 % 降低到
61.4
%
61.4\%
6 1 . 4 % (表
5
5
5 )。这个实验验证了假设:对于非常深的网络,训练通过
R
o
I
RoI
R o I 池化层非常重要。 这是否意味着所有
c
o
n
v
conv
c o n v 层都应该进行微调?简而言之,不是。在较小的网络(
S
S
S 和
M
M
M )中,作者发现
c
o
n
v
1
conv1
c o n v 1 是通用的,与任务无关(众所周知的事实是 [14] )。允许
c
o
n
v
1
conv1
c o n v 1 学习或不学习对
m
A
P
mAP
m A P 没有任何意义。对于
V
G
G
16
VGG16
V G G 1 6 ,作者发现只需要更新
c
o
n
v
3
_
1
conv3\_1
c o n v 3 _ 1 和更高的层(
13
13
1 3 个
c
o
n
v
conv
c o n v 层中的
9
9
9 个)。这个观察是实用的:
与从
c
o
n
v
3
_
1
conv3\_1
c o n v 3 _ 1 学习相比,从
c
o
n
v
2
_
1
conv2\_1
c o n v 2 _ 1 更新将训练速度降低
1.3
×
1.3×
1 . 3 × (
12.5
12.5
1 2 . 5 小时对
9.5
9.5
9 . 5 小时)
从
c
o
n
v
1
_
1
conv1\_1
c o n v 1 _ 1 更新将导致
G
P
U
GPU
G P U 存储器过载
从
c
o
n
v
2
_
1
conv2\_1
c o n v 2 _ 1 向上学习时,
m
A
P
mAP
m A P 的差异仅为增加
0.3
0.3
0 . 3 个百分点(表
5
5
5 ,最后一列)。所有
F
a
s
t
R
−
C
N
N
Fast~R-CNN
F a s t R − C N N 在本文中都使用
V
G
G
16
VGG16
V G G 1 6 微调
c
o
n
v
3
_
1
conv3\_1
c o n v 3 _ 1 和更高的层;所有用
S
S
S 和
M
M
M 模型的实验微调
c
o
n
v
2
conv2
c o n v 2 及以上的层。
5、设计评估
作者进行了实验将
F
a
s
t
R
−
C
N
N
Fast~R-CNN
F a s t R − C N N 与
R
−
C
N
N
R-CNN
R − C N N 和
S
P
P
n
e
t
SPPnet
S P P n e t 进行了比较,并评估设计决策。遵循最佳实践,作者在
P
A
S
C
A
L
V
O
C
07
PASCAL~VOC07
P A S C A L V O C 0 7 数据集上进行了这些实验。
5.1、多任务训练的有效性
多任务训练很方便,因为它避免了管理一系列按顺序训练的任务。但是它也有可能改善结果,因为任务通过一个共享的表征(
C
o
n
v
N
e
t
ConvNet
C o n v N e t ) [2] 相互影响。多任务训练能提高
F
a
s
t
R
−
C
N
N
Fast~R-CNN
F a s t R − C N N 的目标检测精度吗?
为了测试这个问题,作者只使用等式
1
1
1 (即,设
λ
=
0
\lambda = 0
λ = 0 )中的分类损失
L
c
l
s
L_{cls}
L c l s 训练基线网络。这些基线在表
6
6
6 中各组的
S
S
S 、
M
M
M 和
L
L
L 模型的第一列中。注意,这些模型没有边界框回归器。接下来(每组第二列),采用多任务损失训练的网络(等式
1
1
1 ,
λ
=
1
λ=1
λ = 1 ),但是在测试时
d
i
s
a
b
l
e
disable
d i s a b l e 边界框回归。这隔离了网络的分类精度,并允许与基线网络进行一对一的比较。 在所有三个网络中,观察到多任务训练相对于单独的分类训练,提高了纯分类的准确性。
m
A
P
mAP
m A P 提升范围从
0.8
0.8
0 . 8 到
1.1
1.1
1 . 1 个百分点,显示了多任务学习的一贯的积极效果。
最后,作者采用基线模型(仅用分类损失训练),固定在边界框回归层上,并用
L
l
o
c
L_{loc}
L l o c 训练它们,同时保持所有其他网络参数冻结。每组中的第三列显示了这个阶段式训练方案的结果:
m
A
P
mAP
m A P 比第一列有所改进,但是阶段式训练不如多任务训练(每组第四列)。
5.2、尺度不变性:粗野或灵巧
作者比较了两种实现尺度不变目标检测的策略:暴力学习(单尺度)和图像金字塔(多尺度)。在任一情况下,将图像的尺度
s
s
s 定义为其最短边的长度。
所有单尺度实验都使用
s
=
600
s = 600
s = 6 0 0 像素;对于一些图像,
s
s
s 可能小于
600
600
6 0 0 ,因为将最长的图像边限制在
1000
1000
1 0 0 0 像素,并保持图像的纵横比。选择这些值是为了在微调期间
V
G
G
16
VGG16
V G G 1 6 能在
G
P
U
GPU
G P U 内存中拟合。较小的模型不受内存限制,可以受益于较大的
s
s
s 值;然而,优化每个模型的
s
s
s 不是主要关心的问题。注意到
P
A
S
C
A
L
PASCAL
P A S C A L 图像平均为
384
×
473
384×473
3 8 4 × 4 7 3 像素,因此单尺度设置通常将图像上采样
1.6
1.6
1 . 6 倍。因此,
R
o
I
RoI
R o I 池化层的平均有效步幅约为
10
10
1 0 像素。
在多尺度设置中,作者使用与 [11] 中规定相同的五个尺度(
s
∈
{
480
,
576
,
688
,
864
,
1200
}
s\in\{480,576,688,864,1200\}
s ∈ { 4 8 0 , 5 7 6 , 6 8 8 , 8 6 4 , 1 2 0 0 } ),以便与
S
P
P
n
e
t
SPPnet
S P P n e t 进行比较。然而,作者为避免超出
G
P
U
GPU
G P U 内存,将最长边限制在
2000
2000
2 0 0 0 像素。
表
7
7
7 显示了用一个或五个尺度的图像训练和测试
S
S
S 和
M
M
M 模型。也许 [11] 中最令人惊讶的结果是,单尺度检测的性能几乎和多尺度检测一样好。作者的发现证实了他们的结果:深度
C
o
n
v
N
e
t
s
ConvNets
C o n v N e t s 擅长直接学习尺度不变性。多尺度方法仅提供
m
A
P
mAP
m A P 的小幅度增加,但计算时间成本很高(表
7
7
7 )。在
V
G
G
16
VGG16
V G G 1 6 (模型
L
L
L )的情况下,实现细节限制使用单个尺度。然而,它实现了
66.9
%
66.9\%
6 6 . 9 % 的
m
A
P
mAP
m A P ,略高于
R
−
C
N
N
R-CNN
R − C N N [10] 报道的
66.0
%
66.0\%
6 6 . 0 % ,尽管
R
−
C
N
N
R-CNN
R − C N N 使用了 “无限” 尺度,即每个提议都被扭曲到一个规范的大小。 由于单尺度处理在速度和精度之间提供了最佳的平衡,特别是对于非常深的模型,因此本小节之外的所有实验都使用单尺度
s
=
600
s = 600
s = 6 0 0 像素进行训练和测试。
5.3、是否需要更多训练数据
当提供更多的训练数据时,一个好的目标检测器应该会改进。
Z
h
u
Zhu
Z h u 等人 [24] 发现
D
P
M
DPM
D P M [8] 的
m
A
P
mAP
m A P 在仅仅几百到几千个训练样本后就饱和了。作者用
V
O
C
12
VOC12
V O C 1 2 训练验证集扩充了
V
O
C
07
VOC07
V O C 0 7 训练验证集,将图像数量增加了大约两倍,达到
16.5
k
16.5k
1 6 . 5 k ,以评估
F
a
s
t
R
−
C
N
N
Fast~R-CNN
F a s t R − C N N 。扩大训练集将
V
O
C
07
VOC07
V O C 0 7 测试中的
m
A
P
mAP
m A P 从
66.9
%
66.9\%
6 6 . 9 % 提高到
70.0
%
70.0\%
7 0 . 0 % (表
1
1
1 )。在这个数据集上进行训练时,使用
60
k
60k
6 0 k 的
m
i
n
i
−
b
a
t
c
h
mini-batch
m i n i − b a t c h 迭代,而不是
40
k
40k
4 0 k 。
作者对
V
O
C
10
VOC10
V O C 1 0 和
2012
2012
2 0 1 2 进行了类似的实验,联合
V
O
C
07
VOC07
V O C 0 7 训练验证集、测试集和
V
O
C
12
VOC12
V O C 1 2 训练验证集构建了一个
21.5
k
21.5k
2 1 . 5 k 的图像数据集。在此数据集上进行训练时,使用
100
k
S
G
D
100k~SGD
1 0 0 k S G D 迭代,每
40
k
40k
4 0 k 迭代(而不是每
30
k
30k
3 0 k )将学习率降低
0.1
0.1
0 . 1 倍。对于
V
O
C
10
VOC10
V O C 1 0 和
2012
2012
2 0 1 2 ,
m
A
P
mAP
m A P 分别从
66.1
%
66.1\%
6 6 . 1 % 提高到
68.8
%
68.8\%
6 8 . 8 % 和
65.7
%
65.7\%
6 5 . 7 % 提高到
68.4
%
68.4\%
6 8 . 4 % 。
5.4、SVM 优于 softmax?
F
a
s
t
R
−
C
N
N
Fast~R-CNN
F a s t R − C N N 使用在微调过程中学习到的
s
o
f
t
m
a
x
softmax
s o f t m a x 分类器,而不是像
R
−
C
N
N
R-CNN
R − C N N 和
S
P
P
n
e
t
SPPnet
S P P n e t 那样训练
o
n
e
−
v
s
−
r
e
s
t
one-vs-rest
o n e − v s − r e s t 线性
S
V
M
s
p
o
s
t
h
o
c
SVMs~post~hoc
S V M s p o s t h o c 。为了理解这一选择的影响,作者在
F
a
s
t
R
−
C
N
N
Fast~R-CNN
F a s t R − C N N 中实施了带有硬否定挖掘的
p
o
s
t
h
o
c
S
V
M
s
post~hoc~SVMs
p o s t h o c S V M s 训练。使用与
R
−
C
N
N
R-CNN
R − C N N 相同的训练算法和超参数。 表
8
8
8 显示
s
o
f
t
m
a
x
softmax
s o f t m a x 在所有三个网络中的表现略优于
S
V
M
SVM
S V M ,
m
A
P
mAP
m A P 增加
0.1
0.1
0 . 1 到
0.8
0.8
0 . 8 个百分点。这种影响很小,但它表明与以前的多阶段训练方法相比,“一次” 微调是足够的。注意到,
s
o
f
t
m
a
x
softmax
s o f t m a x 不同于
o
n
e
−
v
s
−
r
e
s
t
one-vs-rest
o n e − v s − r e s t 的支持向量机,在对
R
o
I
RoI
R o I 打分时会引入不同类别之间的竞争。
5.5、提议越多越好?
有(广义上)两种类型的目标检测器:使用稀疏对象提议集的检测器(例如,选择性搜索 [21] )和使用密集对象提议集的检测器(例如,
D
P
M
DPM
D P M [8] )。对稀疏提议进行分类是一种级联式的 [22] ,在这种级联中,提议机制首先拒绝大量的候选集,只留下一小部分候选进行评估。当应用于
D
P
M
DPM
D P M 检测 [21] 时,这种级联提高了检测精度。作者发现,提议分类器级联也提高了
F
a
s
t
R
−
C
N
N
Fast~R-CNN
F a s t R − C N N 的准确性。
使用选择性搜索的 “质量模式” ,每次重新训练和重新测试模型
M
M
M 时,都会从每幅图像提取
1
k
1k
1 k 到
10
k
10k
1 0 k 个提议。如果提议仅起计算作用,增加每幅图像的提议数量不会损害
m
A
P
mAP
m A P 。
作者发现,随着提议数量增加,
m
A
P
mAP
m A P 先上升,然后略微下降(图
3
3
3 实心蓝线)。该实验表明,为深度分类器提供更多的提议对提升精度并没有帮助,甚至会轻微地损害精度。
如果不实际运行实验,这个结果很难预测。衡量对象提议质量的最新技术是平均召回(
A
R
AR
A R )[12] 。当每个图像使用固定数量的提议时,
A
R
AR
A R 与使用
R
−
C
N
N
R-CNN
R − C N N 的几种提议方法的
m
A
P
mAP
m A P 有很好的相关性。图
3
3
3 示出了
A
R
AR
A R (实红线)与
m
A
P
mAP
m A P 没有很好的相关性,因为每幅图像的提议数量是变化的。
A
R
AR
A R 必须小心使用;提议增加导致的
A
R
AR
A R 增加并不意味着
m
A
P
mAP
m A P 会增加。幸运的是,用
M
M
M 模型进行训练和测试需要不到
2.5
2.5
2 . 5 小时。因此,
F
a
s
t
R
−
C
N
N
Fast~R-CNN
F a s t R − C N N 能够高效、直接地评估对象提议
m
A
P
mAP
m A P ,这优于替代度量。
当使用密集生成框(超尺度、位置和长宽比)时,作者也研究了
F
a
s
t
R
−
C
N
N
Fast~R-CNN
F a s t R − C N N ,速率约为
45
k
45k
4 5 k 框 / 图。这个密集集足够丰富,以至于当每个选择性搜索框被最接近的(
I
o
U
IoU
I o U 中的)密集框替换时,
m
A
P
mAP
m A P 只下降
1
1
1 个百分点(到
57.7
%
57.7\%
5 7 . 7 % ,图
3
3
3 ,蓝色三角形)。
密集搜索框的统计数据不同于选择性搜索框的统计数据。从
2
k
2k
2 k 个选择性搜索框开始,当添加
1000
×
{
2
,
4
,
6
,
8
,
10
,
32
,
45
}
1000×\{2~,~4~,~6~,~8~,~10~,~32~,~45\}
1 0 0 0 × { 2 , 4 , 6 , 8 , 1 0 , 3 2 , 4 5 } 个密集框的随机样本时,分别测试
m
A
P
mAP
m A P 。对于每一个实验,都重新训练和测试模型
M
M
M 。当添加这些密集框时,
m
A
P
mAP
m A P 比添加更多的选择性搜索框时下降更大,最终达到
53.0
%
53.0\%
5 3 . 0 % 。
作者也只使用密集框(
45
k
45k
4 5 k / 图像)训练和测试
F
a
s
t
R
−
C
N
N
Fast~R-CNN
F a s t R − C N N 。此设置产生
52.9
%
52.9\%
5 2 . 9 % 的
m
A
P
mAP
m A P (蓝色菱形)。最后,检查是否需要使用难分负样本挖掘 的支持向量机来处理密集框分布。
S
V
M
s
SVMs
S V M s 效果更差:
49.3
%
49.3\%
4 9 . 3 % (蓝色圆圈)。
5.6、初步 MS COCO 结果
作者将
F
a
s
t
R
−
C
N
N
Fast~R-CNN
F a s t R − C N N (
V
G
G
16
VGG16
V G G 1 6 )应用于
M
S
C
O
C
O
MS~COCO
M S C O C O 数据集 [18] 以建立初步基线。对
80
k
80k
8 0 k 图像训练集进行了
240
k
240k
2 4 0 k 迭代训练,并使用评估服务器在
t
e
s
t
−
d
e
v
test-dev
t e s t − d e v 数据集上进行了评估。
P
A
S
C
A
L
m
A
P
PASCAL~mAP
P A S C A L m A P 为
35.9
%
35.9\%
3 5 . 9 % ;新的
C
O
C
O
COCO
C O C O 的
A
P
AP
A P ,也平均超过
I
o
U
IoU
I o U 阈值,为
19.7
%
19.7\%
1 9 . 7 % 。
6、总结
本文提出了
F
a
s
t
R
−
C
N
N
Fast~R-CNN
F a s t R − C N N ,这是对
R
−
C
N
N
R-CNN
R − C N N 和
S
P
P
n
e
t
SPPnet
S P P n e t 的一种干净、快速的更新。除了报告最先进的检测结果,本文还提供了详细的实验,希望能提供新的见解。特别值得注意的是,稀疏目标提议似乎提高了检测器的质量。这个问题过去(在时间上)花费太大,难以研究,但在
F
a
s
t
R
−
C
N
N
Fast~R-CNN
F a s t R − C N N 中变得切实可行。当然,可能存在一些尚未被发现的技术,使得密集框和稀疏提议性能一样好。这种方法,如果开发出来,可能有助于进一步加速目标检测。