R-FCN: Object Detection via Region-based Fully Convolutional Networks
作者:JiFeng Dai,Yi Li, Kaiming He, Jian Sun
短评:该论文中提出并计算了位置敏感得分,不仅可以充分利用物体的局部信息来估计整体,而且可以指导反馈过程做出修整。处理单张图片的效率惊人呀。受博主知识上界限制,文中理解不充分之处在所难免,恭请批评指教。
摘要直译:为了提高物体识别的精确度和效率,我们展示了基于区域的全卷机网络。相比于之前的基于区域的检测器,比如Fast / Faster R-CNN,对每个区域子网络应用几百次,我们的基于区域的检测器是全卷积的且几乎所有的计算都在整个图像上共享。为了实现这个目的,我们提出了位置敏感得分图(position-sensitive score maps)来解决这样的两难困境,即分类上的平移不变形和物体检测上的平移变性。我们的方法很自然的采用了全卷机图像分类骨干,比如最新的残差网络(Residual Networks, ResNet)用来物体检测。在PASCAL VOC 数据集上,采用101-层的ResNet主干网,我们展示了充满竞争力的结果,比如,在2007数据集上,83.6%的mAP。同时我们的结果也达到了在测试速度中每张图片170ms的效果,2.5-20倍于Faster R-CNN。源码已经公开,地址为 https://github.com/daijifeng001/r-fcn.
核心分析:该论文非常重要的概念是位置敏感得分图(position-sensitive score maps),通过下图来直观感受下:
在上图中的由R-FCN学习到的位置敏感得分图,其中k×k = 3×3。在图像中某个物体的相对位置上,我们期望这些图能够产生被强烈的激活,比如,在Figure 3中,位置敏感RoI池化图中的“上中敏感得分”显示了很高的得分(近乎白色),即近乎接近对应物体的上中位置。如果一个候选box精准的覆盖了一个物体,那么RoI对应的k²个box中大部分box都会被激活,然后他们投票得到一个很高的得分。反之,如果候选框并没有正确的覆盖一个物体,那么RoI对应的k²个box中很多不会被激活,也就意味着投票得分很低,比如Figure 4中9个box中有5个得分偏低(颜色较暗),那么投票结果就是no。
接着看下一个图:
在这个框架图中,注意到前面的位置敏感RoI池化对应于该图中的池化过程(ps 因为刚开始对这个池化很迷惑,所以就先介绍了)。在这个框架图中,可以看到从feature maps过来有k²(C+1)个通道的位置敏感得分图,其中k²对应于池化后的位置敏感RoI池化图的大小,不一定是3×3的大小;(C+1)对应于C个物体类别和1个背景。对于每个RPN提出的RoI,RoI会映射到特征图上,并将RoI分割成k×k个box,每个box上计算一个得分,之后计算每个类别对应的所有通道上的位置得分图的位置敏感RoI池化图,计算公式如下:
r c ( i , j ∣ θ ) = ∑ ( x , y ) ∈ b i n ( i , j ) z i , j , c ( x + x 0 , y + y 0 ∣ θ ) / n r_c(i, j | \theta) = \sum_{(x,y)\in bin(i,j)} z_{i,j,c}(x+x_0, y+y_0 | \theta) / n rc(i,j∣θ)=(x,y)∈bin(i,j)∑zi,j,c(x+x0,y+y0∣θ)/n
其中
r
c
(
i
,
j
)
r_c(i,j)
rc(i,j) 是在
c
−
t
h
c-th
c−th类别的
(
i
,
j
)
−
t
h
(i,j)-th
(i,j)−th块上的池化响应;
z
i
,
j
,
c
z_{i,j,c}
zi,j,c是
k
2
(
C
+
1
)
k^2(C+1)
k2(C+1)个得分图中的一个,通道的计算是
i
∗
j
∗
c
i*j*c
i∗j∗c,
i
i
i对应池化图上的横坐标,
j
j
j对应池化图上的纵坐标;
n
n
n是
(
i
,
j
)
−
t
h
(i,j)-th
(i,j)−th块上的像素个数,
θ
\theta
θ表示网络中所有可学习的参数。
(
i
,
j
)
−
t
h
(i,j)-th
(i,j)−th块展开就是
⌊
i
w
k
⌋
≤
x
≤
⌈
(
i
+
1
)
w
k
⌉
\lfloor i \frac{w}{k} \rfloor \le x \le \lceil (i+1) \frac{w}{k} \rceil
⌊ikw⌋≤x≤⌈(i+1)kw⌉ ,
⌊
j
h
k
⌋
≤
y
≤
⌈
(
j
+
1
)
h
k
⌉
\lfloor j \frac{h}{k} \rfloor \le y \le \lceil (j+1) \frac{h}{k} \rceil
⌊jkh⌋≤y≤⌈(j+1)kh⌉。以上公式,可以结合着上图来看,会有更深刻的体会。那么有了每个RoI的位置敏感RoI得分图,就可以投票了,在该论文中投票是计算平均分的方式,采取以下公式:
r
c
(
θ
)
=
∑
i
,
j
r
c
(
i
,
j
∣
θ
)
r_c(\theta) = \sum_{i,j} r_c(i, j|\theta)
rc(θ)=i,j∑rc(i,j∣θ)
得到该RoI对应的投票结果之后,就可以利用这个投票结果来进行分类了,该论文中用的是常规的softmax响应,即 s c ( θ ) = e r c ( θ ) / ∑ c ′ = 0 C e r c ′ ( θ ) s_c(\theta) = e^{r_c(\theta) / \sum_{c^{'} =0} ^{C}} e^{r_c^{'}(\theta)} sc(θ)=erc(θ)/∑c′=0Cerc′(θ)。这个计算结果可以用在训练阶段的计算交叉熵,和推理阶段对RoI类间排名上。
至此,应该说核心的东西都讲完了。下面是论文中实验设置的相关说明。
骨干网框架:该论文中选用是 ResNet-101。 ResNet-101有100个卷积层,之后是GAP(global average pooling),再接着是1000个类的全连接层。在该论文中,作者们去掉了后面的GAP和FC层,这样ResNet-101的输出就是2048维,因此接上1024维的1×1的卷积层用来降低维数(当然也就增加一层的深度),最后,接上 k 2 ( C + 1 ) k^2(C+1) k2(C+1)维的卷积层。last but no least, 这个ResNet-101在ImageNet上预训练过。
训练阶段:损失函数定义在每个RoI上,是交叉熵和损失和box回归损失: L ( s , t x , y , w , h ) = L c l s ( s c ∗ ) + λ [ c ∗ > 0 ] L r e g ( t , t ∗ ) L(s, t_{x, y, w, h}) = L_{cls}(s_{c^{*}}) + \lambda[c^{*} >0]L_{reg}(t, t^{*}) L(s,tx,y,w,h)=Lcls(sc∗)+λ[c∗>0]Lreg(t,t∗)。其中 c ∗ c^{*} c∗是RoI的GT标签( c ∗ = 0 c^{*} =0 c∗=0表示背景)。 λ = 1 \lambda=1 λ=1。正样例 I o U ≥ 0.5 IoU \ge 0.5 IoU≥0.5。权重衰减为 0.0005 0.0005 0.0005,动量为 0.9 0.9 0.9,默认设置下,图片缩放到 600 600 600。每个图片上,选择排名前 B = 128 B=128 B=128的RoIs用于BP。在VOC数据集上fine-tune R-FCN,前20k个mini-batches学习率设置为0.001,接着10k个mini-batches学习率设置为0.0001。为了是R-FCN与RPN共享特征,该论文采用了4-step交换训练[1],交换训练RPN和R-RCN。
推理阶段:RPN用来推荐RoIs, R-FCN部分估计RoIs的类别得分和回归方框位置。该阶段中取得分前 B = 300 B=300 B=300的RoIs。之后用NMS做后处理,IoU阈值为 0.3 0.3 0.3。
A trous and stride: 该论文的全卷机框架受益于[2,3]语义分割中的网络修整。该论文中,作者们把Res-101的有效步长从32减少到16,以增加得分图的像素。其中conv4前的所有层都没有改变,在conv5 块将步长从2减小为1,且所有的卷积核都用“hole algorithm”修整过,以弥补步长的减小。
实验结果: 该proposal非常的快,在保持精度不下降的情况下,单张图片只需要0.17秒。
此外,另一点是RoI输出尺寸的大小影响结果,设置为
1
×
1
1\times1
1×1时,并不能收敛。
参考文献:
[1] S. Ren, K. He, R. Girshick, and J. Sun. Faster R-CNN: Towards real-time object with region proposal networks. In NIPS, 2015.
[2] J.Long, E. Shelhamer, and T. Darrell. Fully convolutional networks for semantic segmentation. In CVPR, 2015.
[3] L.-C. Chen, G. Papandreou, I.Kokkinos, K.Murphy, and A.L. Yuille. Semantic image segmentation with deep convolutional nets and fully connected crfs. In ICLR, 2015.
后记:本博客作为博主读论文系列。