Faster R-CNN中的公式记录
1.最简单的特征图尺寸变换公式
H o u t = H i n − h k e r n e l + 2 ∗ p a d d i n g s t r i d e + 1 H_{out}= \frac{H_{in}-h_{kernel}+2*padding}{stride}+1 Hout=strideHin−hkernel+2∗padding+1
2.Bounding box 回归原理
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MshRKuDl-1572327829914)(Faster R-CNN中的公式记录.assets/v2-ea7e6e48662bfa68ec73bdf32f36bb85_hd.jpg)]
如上图所示,其中红框A代表未回归之前的框,蓝框G‘ 表示回归之后的框,绿框G代表真实的瑕疵框。每个框的表示方法为(x,y,h,w),其中下x,y表示中心点坐标,h,w表示框的高和宽。
回归的简单思路就是:
-
先做平移 :
G x ’ = A w ∗ d x ( A ) + A x G^{’}_{x} = A_{w}*d_{x}(A)+A_{x} Gx’=Aw∗dx(A)+AxG y ’ = A h ∗ d y ( A ) + A y G^{’}_{y} = A_{h}*d_{y}(A)+A_{y} Gy’=Ah∗dy(A)+Ay
2.再做缩放:
G
h
’
=
A
h
∗
d
h
(
A
)
+
A
h
G^{’}_{h} = A_{h}*d_{h}(A)+A_{h}
Gh’=Ah∗dh(A)+Ah
G w ’ = A h ∗ d w ( A ) + A w G^{’}_{w} = A_{h}*d_{w}(A)+A_{w} Gw’=Ah∗dw(A)+Aw
可见,此时需要学习的参数为dh(A),dw(A),dx(A),dy(A)。对应的学习目标可定义如下:
t
x
=
(
G
x
−
A
x
)
A
x
t_{x} = \frac{(G_{x}-A_{x})}{A_{x}}
tx=Ax(Gx−Ax)
t y = ( G y − A y ) A y t_{y} = \frac{(G_{y}-A_{y})}{A_{y}} ty=Ay(Gy−Ay)
t h = l o g G h A h t_{h} = log\frac{G_{h}}{A_{h}} th=logAhGh
t w = l o g G w A w t_{w} = log\frac{G_{w}}{A_{w}} tw=logAwGw
可用线性回归模型来定义对d*(A)的学习过程:
d
∗
(
A
)
=
W
∗
T
∗
ϕ
(
A
)
d_{*}(A)=W_{*}^{T}*\phi(A)
d∗(A)=W∗T∗ϕ(A)
其中W*T是线性回归中需要优化的参数, [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-v1CS5YUO-1572327829915)(Faster R-CNN中的公式记录.assets/equation-1572316099509.svg)] 是对应anchor的feature map组成的特征向量 ,d*(A)是得到的预测值。为了让预测值不断逼近学习目标t*,设计损失函数为:
l
o
s
s
=
∑
i
=
1
100
(
t
∗
i
−
W
∗
T
∗
ϕ
(
A
i
)
)
loss = \sum_{i=1}^{100}{(t_{*}^{i}-W_{*}^{T}*\phi(A^{i}))}
loss=i=1∑100(t∗i−W∗T∗ϕ(Ai))
对应的函数优化目标为:
W
∗
‘
=
a
r
g
m
i
n
w
∗
(
∑
i
=
1
100
(
t
∗
i
−
W
∗
T
∗
ϕ
(
A
i
)
)
+
∣
∣
λ
W
∗
T
∣
∣
)
W^{`}_{*} = argmin_{w_{*}}(\sum_{i=1}^{100}{(t_{*}^{i}-W_{*}^{T}*\phi(A^{i}))}+||\lambda W_{*}^{T}||)
W∗‘=argminw∗(i=1∑100(t∗i−W∗T∗ϕ(Ai))+∣∣λW∗T∣∣)
可通过随机梯度下降算法对W*进行求解。
对于训练bouding box regression网络回归分支,输入是cnn feature Φ,监督信号是Anchor与GT的差距 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cq4xy6D5-1572327829915)(Faster R-CNN中的公式记录.assets/equation.svg)],即训练目标是:输入 Φ的情况下使网络输出与监督信号尽可能接近。那么当bouding box regression工作时,再输入Φ时,回归网络分支的输出就是每个Anchor的平移量和变换尺度 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jAplKRif-1572327829916)(Faster R-CNN中的公式记录.assets/equation.svg)] 。
3.RPN中的损失函数
整个RPN网络的损失包含回归损失和分类损失,总和的loss如下:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dUC12qkq-1572327829916)(Faster R-CNN中的公式记录.assets/equation-1572318371290.svg)]
其中,i表示候选框的索引,pi表示瑕疵框为前景的softmax概率,pi*表示对应的瑕疵框是否为真实瑕疵框的概率( 即当第i个anchor与GT间IoU>0.7,认为是该anchor是positive,pi*=1;反之IoU<0.3时,认为是该anchor是negative,pi*=0;至于那些0.3<IoU<0.7的anchor则不参与训练 ),t代表预测瑕疵框的位置,t*代表真实瑕疵框的位置。
1.分类损失:即是rpn_cls_loss层计算的softmax_loss,用于训练RPN的分类层训练
其中:
L
c
l
s
(
p
i
,
p
i
∗
)
=
−
l
o
g
[
p
i
∗
p
i
+
(
1
−
p
i
∗
)
(
1
−
p
i
)
]
L_{cls}(p_{i},p_{i}^{*}) = -log[p_{i}^{*}p_{i}+(1-p_{i}^{*})(1-p_{i})]
Lcls(pi,pi∗)=−log[pi∗pi+(1−pi∗)(1−pi)]
可见这是一个经典的二分类交叉熵损失,对于每一个anchor计算对数损失,然后求和除以总的瑕疵框数量。
2.回归损失:即是rpn_reg_loss层计算的smooth L1 loss,用于RPN网络的回归层进行训练。应当注意的是smooth L1 loss前乘以了pi*,这表示回归损失只计算positive的损失,即只关心前景框的回归。
其中:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MXXVqeP0-1572327829916)(Faster R-CNN中的公式记录.assets/20181212134143118.png)]
其中σ = 3,为smooth L1 loss的参数。值得注意的是lambda的设定,其作用是为了平衡分类损失和回归损失的。在论文中,设定Nreg为feature map的像素总数(为输入图片的尺寸MxN/16),显然如果不加入lambda会使得回归损失过小。其中pi*被看作是rpn_bbox_inside_weights,而lambda/Nreg被看作是rpn_bbox_outside_weights。