Faster R-CNN(2015)阅读笔记
一、解决问题
2016年前最前沿水平的物体检测网络是基于候选算法来预测物体位置的。像SPPnet和Fast R-CNN这些先进的算法减少了检测网络的运行时间,但是RP(Region Proposal)的计算却仍然是瓶颈所在。
二、解决方法
候选区域网络(RPN,region proposal network):该网络与检测网络共享全图像的卷积特征,从而使近乎零成本的区域提出成为可能。
(一)整体结构
Faster RCNN大体由两部分构成,一是RPN结构,另一个是Fast RCNN结构。整体思路是使用RPN结构代替Fast RCNN的SS算法部分来提取RP。如下图所示。
结构细节图如下。
测试时的过程:原始图像输入至卷积结构(红框1)进行特征提取,得到整张图像的特征图。将此特征图送入RPN(红框2),经过一个3x3的卷积后分两条路线进行回归(对位置进行初步的纠正)和分类(找到想要的前景,作为感兴趣域,注意,RPN中分类至区分前景和背景,不对前景进行细致分类),进而得到RPs位置信息。根据这些位置信息在之前得到的特征图上提取对于的ROIs,再分别经过ROI池化层抽取到固定大小的特征。分送入后面的全连接层进行分类(对ROI进行识别)和回归(精准纠正位置信息)。
(二)RPN
RPN也可看做两部分,一是与Fast RCNN公用的卷积部分(红框1),二是用来实现寻找RP功能的独有部分(红框2)。工作的详细流程如下:
1.卷积部分对输入图像进行特征图的提取。
2.对1步骤中得到的特征图进行3x3的卷积操作,相当于每个点又融合了周围3x3的空间信息,扩大了感受野。得到新的特征图。
3.对2步骤得到的特征图按照锚点提取滑动窗。每个特征图上的点提取三个尺度不同长宽比共k个滑动窗(默认k=9,对应9个锚点,位置一样,但形状和大小不一样)。
4.对k个滑动窗分两路进行操作。
第一路为分类:将滑动窗进行1x1卷积再经过一个二分类的softmax得到是前景或者背景的对应概率,也就是说对于每个滑动窗分别得到前景和背景的2个概率得分。
第二路为回归:将滑动窗进行1x1卷积直接进行位置移动的回归,每个滑动窗分别得到窗口中心坐标和窗口的宽度、高度(x,y,w,h)4个参数的回归结果。
此处RPN的回归同Fast R-CNN中的bounding-box回归相比数有区别的。 Fast R-CNN中基于RoI的bounding-box回归的输入是任意size的RoIs进行Pool操作提取后的(size相同且固定)。而在RPN中,用来bounding-box回归的输入是拥有k个size的锚点,为了解决不同尺度变化的问题,同时训练和学习了k个不同的回归器,这k个回归器并不分享权重。
5.做NMS(非极大值抑制,即根据分类的得分对这些ROI进行排序,然后选择其中的前N个ROI);
RPS输出的维度为:2N+4N = 6N
(三)锚点
锚点是在红框2中经过3x3卷积后特征图上的每个点的位置对应的不同尺度和纵横比下的匹配。下图中的256-d表示特征图的通道数为256。对每个滑动位置使用3个尺度和3个纵横比产生k = 9个锚点。对于大小为W x H(通常为~2,400)的卷积特征图,总共有W x H x k个锚点。
(四)训练
1.四步交替训练的方式
第一步:训练RPN。该网络使用ImageNet预先训练的模型对CNN部分进行初始化,并针对区域提出的任务进行微调端对端。
第二步:我们使用由步骤1 RPN生成的RP作为Fast R-CNN的数据,并对其单独训练。该检测网络也由ImageNet预训练模型初始化。此时,两个网络不共享卷积层。
第三步,我们使用Fast R-CNN网络来初始化RPN,并进行训练,但固定了共享卷积层,只调整了RPN特有的层。现在这两个网络共享卷积层。
第四步:保持共享卷积层固定,我们微调Fast R-CNN的独特层。因此,两个网络共享相同的卷积层并形成统一的网络。
可以运行类似的交替训练以进行更多迭代,但实验显示改进幅度很小。
2.损失函数
(1).RPN损失函数
整体损失函数
L ( p i , t i ) = 1 N c l s ∑ i L c l s ( p i , p i ∗ ) + λ 1 N r e g ∑ i p i ∗ L r e g ( t i , t ∗ i ) L({pi},{ti})=\frac{1}{N_{cls}}∑_{i}L_{cls}(p_{i},p^{*}_{i})+λ\frac{1}{N_{reg}}∑_{i}p^{*}_{i}Lreg(ti,t^{*}i) L(pi,ti)=Ncls1i∑Lcls(pi,pi∗)+λNreg1i∑pi∗Lreg(ti,t∗i)其中, i i i是一个小批量数据中锚点的索引, p i p_{i} pi是锚点 i i i作为目标的预测概率。如果锚点标签为正,真实标签 p i ∗ p^{*}_{i} pi∗为1,如果标签为负,则为0。 t i t_{i} ti是表示预测边界框4个参数化坐标的向量,而 t i ∗ t_{i}^{*} ti∗是与正锚点相关的真实边界框的向量。 N c l s N_{cls} Ncls为一个mini-batch中经过红框2中3xe卷积后特征图格子的数量。 N r e g N_{reg} Nreg为一个mini-batch中锚点的数量。 λ λ λ默认为10,所以 1 N c l s : = λ 1 N r e g \frac{1}{N_{cls}} := λ\frac{1}{N_{reg}} Ncls1:=λNreg1
分类损失函数
L c l s L_{cls} Lcls是两个类别上(目标或不是目标)的对数损失。
回归损失函数
L r e g ( t i , t i ∗ ) = S m o o t h L 1 ( t i − t i ∗ ) L_{reg}(t_{i},t^{*}_{i})=Smooth_{L1}(t_{i}−t^{*}_{i}) Lreg(ti,ti∗)=SmoothL1(ti−ti∗) s m o o t h L 1 ( x ) = { ( x ) = 0.5 x 2 , ∣ x ∣ < 1 ∣ x ∣ − 0.5 , o t h e r w i s e s smooth_{L1}(x)= \begin{cases} \mathcal(x)=0.5x^{2}, &\text{$|x|<1$}\\ \mathcal|x|−0.5, &\text{$otherwises $} \end{cases} smoothL1(x)={(x)=0.5x2,∣x∣−0.5,∣x∣<1otherwises项 p i ∗ L r e g p^{*}_{i}L_{reg} pi∗Lreg表示回归损失仅对于正锚点激活。cls和reg层的输出分别由 p i p_{i} pi和 t i t_{i} ti组成。
(2)Fast RCNN损失函数
总体损失函数
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) + λ[u ≥ 1]L_{loc}(t u ,v) L(p,u,tu,v)=Lcls(p,u)+λ[u≥1]Lloc(tu,v)当u=0时(背景)λ=0,即识别为背景的情况下,位置回归不参与损失函数计算。当u=1,2,3,…,k(第1,2,3,…,k类)时,λ=1。
分类损失函数
交叉熵损失函数。因为标签是one-hot形式,所以只由真实类别u对应的softmax结果概率觉得。 L c l s ( p , u ) = − l o g p u L_{cls}(p,u)=-logp_{u} Lcls(p,u)=−logpu
位置回归损失函数
smooth L1损失函数,比较真实分类u对应的预测平移缩放参数
t
u
=
(
t
u
x
,
t
u
y
,
t
u
w
,
t
u
h
)
t_{u}=(t_{ux},t_{uy},t_{uw},t_{uh})
tu=(tux,tuy,tuw,tuh) 和真实平移缩放参数
v
=
(
v
x
,
v
y
,
v
w
,
v
h
)
v=(v_{x},v_{y},v_{w},v_{h})
v=(vx,vy,vw,vh) 的差距:
L
l
o
c
(
t
u
,
v
)
=
∑
i
∈
x
,
y
,
w
,
h
s
m
o
o
t
h
L
1
(
t
u
i
−
v
i
)
L_{loc}(t_{u},v)=∑_{i∈{x,y,w,h}}smooth_{L1}(t_{ui}−v_{i})
Lloc(tu,v)=i∈x,y,w,h∑smoothL1(tui−vi)
s
m
o
o
t
h
L
1
(
x
)
=
{
(
x
)
=
0.5
x
2
,
∣
x
∣
<
1
∣
x
∣
−
0.5
,
o
t
h
e
r
w
i
s
e
s
smooth_{L1}(x)= \begin{cases} \mathcal(x)=0.5x^{2}, &\text{$|x|<1$}\\ \mathcal|x|−0.5, &\text{$otherwises $} \end{cases}
smoothL1(x)={(x)=0.5x2,∣x∣−0.5,∣x∣<1otherwises
三、效果
更快更准,真正意义上实现了端到端的训练。