Paper : Faster R-CNN
Code : official
摘要
Fast R-CNN将多阶段训练合并到单阶段,并将目标检测算法的结构改进为Region Proposal + CNN classifier/regressor的结构。由于Selective Search 算法进行Region Proposal时,SS算法本身并不是深度学习算法,运行在CPU上,因此计算的瓶颈位置在于SS算法上。Faster R-CNN开创性地提出了RPN网络用来进行Region Proposal的工作,而由于RPN的结构与classifier/regressor相近,都是多层卷积后接全连接的结构,因此作者提出共用卷积部分的参数,加速训练和测试。我认为这篇文章值得关注的有以下几点
- RPN的结构
- 使用DNN进行回归任务时,损失函数的设计
- 对于共用卷积层的网络,训练的方式
正文
Faster R-CNN整体框架
上图是论文中的原图,比较粗糙,下图是源自一文读懂Faster RCNN 给出的Vgg16作为base model的Faster R-CNN模型的结构
- 首先将输入图片缩放至固定大小MxN,然后将MxN图像送入网络
- Conv layers部分包含了13个conv层+13个relu层+4个pooling层
- RPN网络首先经过3x3卷积,再分别生成positive anchors和对应bounding box偏移量,然后计算出proposals
- 后面的与Fast R-CNN结构相同,RoI Pooling层利用proposals从feature maps中提取proposal feature送入后续全连接和softmax网络作物体分类和更加精细的bounding box位置的回归
RPN
RPN接受任意尺寸的图片输入,输出矩形窗的集合表示RoI,每个RoI还会输出一个分数表示是物体还是背景。RPN使用全卷积神经网络实现,前若干层卷积的参数与Fast R-CNN共用,如框架中所示。为了生成RoI,RPN在共享的卷积层生成的特征图上使用固定长度的窗口进行滑动,在图中显示为3*3的卷积层接ReLU激活函数
设卷积的输出为 C*H*W 传递给两个分支部分,上面一个分支负责预测给RoI区域打分,下面一个分支负责对Anchor 进行回归,用来提高RoI的准确性。
Anchor :所谓anchors,实际上就是一组预先定义好长宽比和尺寸的矩形,使用这些矩形进行Region Proposal的粗粒度初始化,通过RPN的回归进行细粒度调整,Anchors的尺寸长宽比可以根据实际情况进行调正。Paper的实验中选择了三种尺寸的长宽比 { 1 : 1 , 1 : 2 , 2 : 1 } \{1:1,1:2,2:1\} {1:1,1:2,2:1},同时选择了三种不同的尺寸 { 12 8 2 , 25 6 2 , 51 2 2 } \{128^2,256^2,512^2\} {1282,2562,5122},因此可以组成3*3中尺寸长宽比不同的Anchors
RPN采用了遍历的方式来测试Archors的表现,对于上一步卷积输出 C*H*W,需要将9种Archors以每个像素为中心进行计算,因此总共有 H*W*9 个 Archors 进行计算,对于每个Archors都需要使用RPN进行打分和bounding box的回归,打分采用二分类的方式,因此输出规模为 2*9*H*W,而bounding box回归需要对 x,y,w,h 四个参数进行回归,输出规模为 4*9*H*W。FPN采用1*1的卷积核来进行feature map到结果的转换,因此在上图中标有18和36。
下图也说明了类似的事情,在原文中使用的是ZF model中,其Conv Layers中最后的conv5层channel=256,对应生成256张特征图,所以相当于feature map每个点都是256-dimensions
在conv5之后,做了3x3卷积且channel=256,相当于每个点又融合了周围3x3的空间信息,同时256-d不变。
作者认为,Anchors具有以下两点优势
- 平移不变性
- 相比于图片金字塔处理和多尺寸滑动窗口,Anchors使用多尺寸的Anchor来处理检测目标具有尺寸的问题,节省计算力
RPN的训练:RPN的训练包含两部分,第一部分是根据feature map 和 Archor进行打分,第二部分是根据feature map和Archor进行回归
RPN将满足以下条件的Archor标记为positive
- 与ground truth box IoU最高的Archor
- 与ground truth box IoU得分高于0.7的Archor
将以下的Archor标记为negtive
- 与所有ground truth box IoU得分都低于0.3
其他的Archor对训练目标无贡献,这一步用来生成训练RPN打分部分的样本。实际上,我们每个mini batch 都是从一张图片上抽取出来的正负样本比例相当的Archor来训练,全部anchors拿去训练太多了。
假定 (x,y,w,h) 分别表示一个矩形的中心点坐标,宽度和高度,那么Archor 表示为
A
=
(
A
x
,
A
y
,
A
w
,
A
h
)
A = (A_x,A_y,A_w,A_h)
A=(Ax,Ay,Aw,Ah),ground truth box 表示为
G
=
(
G
x
,
G
y
,
G
w
,
G
h
)
G = (G_x,G_y,G_w,G_h)
G=(Gx,Gy,Gw,Gh),那么回归任务即找到一种变换方式使得
F
(
A
)
=
G
‘
F(A) = G‘
F(A)=G‘,且
G
′
≈
G
G'\approx G
G′≈G
在这里固定变换
F
F
F的形式,而是学习
F
F
F的参数,
F
F
F的形式为
G x ′ = A w ⋅ t x ( A ) + A x G y ′ = A h ⋅ t y ( A ) + A y G w ′ = A w ⋅ exp ( t w ( A ) ) G h ′ = A h ⋅ exp ( t h ( A ) ) \\G'_x = A_w \cdot t_x(A)+A_x \\G'_y = A_h \cdot t_y(A)+A_y \\G'_w = A_w \cdot \exp(t_w(A)) \\G'_h = A_h \cdot \exp (t_h(A)) Gx′=Aw⋅tx(A)+AxGy′=Ah⋅ty(A)+AyGw′=Aw⋅exp(tw(A))Gh′=Ah⋅exp(th(A))
前两个对应平移变换,后两个对应缩放。因此,对于bounding box回归任务来说,学习和预测的结果是
t
x
,
t
y
,
t
w
,
t
h
t_x,t_y,t_w,t_h
tx,ty,tw,th
其中,
x
,
x
a
,
x
∗
x,x_a,x^*
x,xa,x∗分别对应回归输出,archor,ground truch。对于RPN来说,总损失函数如下
L ( { p i } , { t i } ) = 1 N c l s ∑ i L c l s ( p i , p i ∗ ) + λ N r e g ∑ i p i ∗ L r e g ( t i ∗ , t i ) L(\{p_i\},\{t_i\}) = \frac{1}{N_{cls}}\sum_i L_{cls}(p_i,p_i^*) +\frac{\lambda}{N_{reg}}\sum_i p_i^* L_{reg}(t_i^*,t_i) L({pi},{ti})=Ncls1i∑Lcls(pi,pi∗)+Nregλi∑pi∗Lreg(ti∗,ti)
其中, L c l s L_{cls} Lcls使用对数损失函数, L r e g L_{reg} Lreg使用smooth L1损失函数。实验时, N c l s = 256 N_{cls} = 256 Ncls=256,而 N r e g ∼ 2400 N_{reg} \sim 2400 Nreg∼2400,因此默认设置 λ = 10 \lambda = 10 λ=10,实验表明算法对该超参数不敏感。
Faster R-CNN训练
论文中采用四步迭代法进行训练
- 在ImageNet pretrained模型上finetune,训练RPN网络
- 使用第一步中训练好的RPN模型进行Region Proposal,在ImageNet pretrained model上finetune Faster R-CNN,此时没有卷积层共享
- 使用Faster R-CNN的卷积层替换RPN的卷积层,进行共享,固定卷积参数,finetune RPN模型
- 保持卷积参数固定,finetune Faster R-CNN模型
更多的迭代根据实验来看并没有产生更好的效果,说明算法收敛了
论文中的实现细节:
- 作者首先将图片短边放大到600px,然后传入网络,此时对应的archor选取为
For anchors, we use 3 scales with box areas of 1282, 2562, and 5122 pixels, and 3 aspect ratios of 1:1, 1:2, and 2:1.
- 在训练中,对于穿过图片边界的Archor,我们忽略掉它们
If the boundary-crossing outliers are not ignored in training, they introduce large, difficult to correct error terms in the objective, and training does not converge.
- 测试时,对于RPN生成的穿过边界的RoI,我们clip到边界内,然后使用NMS取IoU threshold = 0.7进行舍弃,选择最高的若干个传递给后面的检测器
总结
Faster R-CNN的核心贡献包括以下几点:RPN结构,卷积参数共享结构的训练,Archor的提出。目前大多数双阶段目标检测模型都是在Faster R-CNN的基础上进行改进和加工。