FastRCNN步骤
- 使用选择化搜索生成候选区域
- 使用深度神经网络提取特征
- 将生成的候选区域映射到特征图上,使用ROI池化缩放到统一尺寸(7×7)
- 将ROI池化后的特征图展平,然后通过多个全连接层
- 并行使用两个全连接层来预测类别和边界框
FastRCNN和RCNN区别
RCNN是先提取多个候选区域,然后把候选区域输入到卷积神经网络,这样在前向传播的时候会有许多的重复计算,而FastRCNN是直接将整张图片输入到卷积神经网络得到特征图,然后将候选区域映射到特征图上,这样就避免了重复计算。
训练样本采样
从选择化搜索得到的大约2000个候选区域中随机采样64个,其中一半为正样本,一半为负样本,当候选框和真实边界框的IOU大于0.5,那么认为是正样本,而候选框和所有边界框的IOU的最大值在0.1-0.5之间的则认为是负样本。
ROI池化
ROI池化可以将不同大小的特征图映射到相同大小,比如想要映射到n×n大小,那么就将原来的特征图划分成n×n个格子,每一个格子都包含了一些数值,对每一个格子使用max pooling,就可以得到n×n大小的特征。
分类器
假设N为类别个数,那么softmax对应的全连接层应该是N+1个节点。
边界框回归器
假设N为类别个数,那么边界框回归器输出(N+1)×4个值,每一个类别都对应4个值,分别为
(
d
x
,
d
y
,
d
w
,
d
h
)
(d_x, d_y,d_w,d_h)
(dx,dy,dw,dh)。
边界框回归:
G
x
^
=
P
w
d
x
(
P
)
+
P
x
G
y
^
=
P
w
d
y
(
P
)
+
P
y
G
w
^
=
P
w
e
d
w
(
P
)
G
h
^
=
P
h
e
d
h
(
P
)
\hat{G_x}=P_wd_x(P)+P_x \\ \hat{G_y}=P_wd_y(P)+P_y \\\\ \hat{G_w}=P_we^{d_w(P)} \\ \hat{G_h}=P_he^{d_h(P)}
Gx^=Pwdx(P)+PxGy^=Pwdy(P)+PyGw^=Pwedw(P)Gh^=Phedh(P)
其中,
P
x
,
P
y
,
P
w
,
P
h
P_x,P_y,P_w,P_h
Px,Py,Pw,Ph分别为候选框中心x,y坐标和宽高。
G
x
^
,
G
y
^
,
G
w
^
,
G
h
^
\hat{G_x},\hat{G_y},\hat{G_w},\hat{G_h}
Gx^,Gy^,Gw^,Gh^是最终预测的边界框中心和宽高。
损失函数
FastRCNN使用的是多任务损失(Multi-task):
其中,p为softmax的输出概率,u为真实的标签,
u
≥
1
u\ge 1
u≥1表示只有类别不是背景的时候才有边界框回归损失。
分类损失使用的是交叉熵损失,而边界框回归损失使用的是smoothL1损失: