算法过程
- 使用SS算法将一张图像生成1k~2k个候选区域
- 将图像输入网络得到相应的特征图,将SS算法生成的候选框投影到特征图上获得相应的特征矩阵
- 将每个特征矩阵通过RoI pooling层缩放到7*7大小的特征图,接着将特征图展平通过一系列全连接层得到预测结果
1、使用SS算法将一张图像生成1k~2k个候选区域
这一部分和R-CNN算法一样。
2、将图像输入网络得到相应的特征图,将SS算法生成的候选框投影到特征图上获得相应的特征矩阵
Fast-RCNN将整张图像送入网络,紧接着从 特征图像上提取相应的候选区域。这些候选 区域的特征不需要再重复计算。
3、将每个特征矩阵通过RoI pooling层缩放到7*7大小的特征图,接着将特征图展平通过一系列全连接层得到预测结果
RoI Pooling层就是将特征矩阵划分为7x7的小块,然后对每个小块进行MaxPooling或者AveragePooling等操作,就会得到7x7的特征图。这样就可以不限制输入图像的尺寸了。如下图所示
分类器
- 两个FC全连接层并联,其中一个分类器进行
目标概率预测
,另一个用来边界框回归参数的预测
。
目标概率预测分类器
输出N+1
个类别的概率(N为检测目标的种类,1为背景)共N+1个节点
边界框回归器
输出对应N+1个类别的候选边界框回归参数
(
d
x
,
d
y
,
d
w
,
d
h
)
(d_x,d_y,d_w,d_h)
(dx,dy,dw,dh)共(N+1)*4
个节点。然后会根
据这些节点进行候选边界框的调整,公式如下:
G
^
(
x
)
=
P
w
d
x
(
P
)
+
P
x
\widehat{G}(x)= P_{w}d_{x}(P)+P_{x}
G
(x)=Pwdx(P)+Px
G
^
(
y
)
=
P
h
d
y
(
P
)
+
P
y
\widehat{G}(y)= P_{h}d_{y}(P)+P_{y}
G
(y)=Phdy(P)+Py
G
^
(
w
)
=
P
w
e
x
p
(
d
w
(
P
)
)
\widehat{G}(w)= P_{w}exp(d_{w}(P))
G
(w)=Pwexp(dw(P))
G
^
(
h
)
=
P
h
e
x
p
(
d
h
(
P
)
)
\widehat{G}(h)= P_{h}exp(d_{h}(P))
G
(h)=Phexp(dh(P))
其中
P
x
P_{x}
Px,
P
y
P_{y}
Py,
P
w
P_{w}
Pw,
P
h
P_{h}
Ph分别为候选框的中心x,y坐标和宽高
G
^
(
x
)
\widehat{G}(x)
G
(x),
G
^
(
y
)
\widehat{G}(y)
G
(y),
G
^
(
w
)
\widehat{G}(w)
G
(w),
G
^
(
h
)
\widehat{G}(h)
G
(h)分别是最终预测的边界框中心x,y坐标以及宽高。
损失函数
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\geq1]L_{loc}(t^u,v) L(p,u,tu,v)=Lcls(p,u)+λ[u≥1]Lloc(tu,v)
分类损失
用的是Softmax交叉熵损失函数
- 多分类问题 H = − ∑ i o i ∗ l o g ( o i ) H=-\sum_io_i^*log(o_i) H=−∑ioi∗log(oi)
- 二分类问题 H = − 1 N ∑ i = 1 N [ o i ∗ l o g o i + ( 1 − o i ∗ ) l o g ( 1 − o i ) ] H=-\frac{1}{N}\sum_{i=1}^N[o_i^*logo_i+(1-o_i^*)log(1-o_i)] H=−N1∑i=1N[oi∗logoi+(1−oi∗)log(1−oi)]
其中 o i ∗ o_i^* oi∗为真实标签, o i o_i oi为预测值,默认log以e为底等于ln
边界框回归损失
L
l
o
c
(
t
u
,
v
)
=
∑
i
∈
{
x
,
y
,
w
,
h
}
s
m
o
o
t
h
L
1
(
t
i
u
−
v
i
)
L_{loc}(t^u,v)=\sum_{i \in\left \{ x,y,w,h \right \}}smooth_{L_1}(t_i^u-v_i)
Lloc(tu,v)=i∈{x,y,w,h}∑smoothL1(tiu−vi)
s
m
o
o
t
h
L
1
(
x
)
=
{
∣
x
∣
−
0.5
,
o
t
h
e
r
s
0.5
x
2
,
i
f
∣
x
∣
<
1
smooth_{L_1}(x)=\left \{^{0.5x^2,{if\left | x \right |<1}}_{\left | x \right |-0.5,others}\right.
smoothL1(x)={∣x∣−0.5,others0.5x2,if∣x∣<1
-
t u t^u tu对应边界框回归器预测的对应类别 u u u的回归参数 ( t x u , t y u , t w u , t h u ) (t_x^u,t_y^u,t_w^u,t_h^u) (txu,tyu,twu,thu)
-
v v v对应真实目标的边界框回归参数 ( v x , v y , v w , v h ) (v_x,v_y,v_w,v_h) (vx,vy,vw,vh)
注意:在训练过程中并不需要把SS算法选定的候选区域全部进行训练,只训练64个RoI;此外这64个训练数据还将分为正负样本。
- 正样本:候选框与真实边界框的IoU大于0.5
- 负样本:与真实边界框的IoU取值范围在[0.1, 0.5]