Faster R-CNN论文阅读
- 摘要
- Abstract
- 文章简介
- 1. 引言
- 2. Faster R-CNN 框架
- 2.1 RPN
- 2.2 损失函数
- 2.3 RPN的训练细节
- 3. Faster R-CNN的训练
- 4. 优缺点分析
- 总结
摘要
本篇博客介绍了 Faster R-CNN,这是一种双阶段的目标检测网络,是对 Fast R-CNN 的改进。为了解决 Fast R-CNN 中,计算效率低和区域推荐算法耗时长的问题,Faster R-CNN 提出了区域推荐的方法:Region Proposal Network(RPN),这种方法代替了传统的区域推荐算法。RPN 与 Fast R-CNN 共享卷积特征,减少了计算量,大幅提高了目标检测的速度,准确率也达到了新的高度。但它也存在一些不足,例计算复杂度较高、对小目标和遮挡目标的检测效果有限、训练时间较长以及超参数调优复杂。
Abstract
This blog introduces Faster R-CNN, a two-stage object detection network that improves upon Fast R-CNN. To address the issues of low computational efficiency and time-consuming region proposal algorithms in Fast R-CNN, Faster R-CNN proposes a novel region proposal method: the Region Proposal Network (RPN), which replaces traditional region proposal algorithms. By sharing convolutional features with Fast R-CNN, RPN reduces computational overhead, significantly enhances the speed of object detection, and achieves new heights in accuracy. However, it also has some limitations, such as high computational complexity, limited effectiveness in detecting small and occluded objects, lengthy training times, and complex hyperparameter tuning.
文章简介
Title:Faster R-CNN
Author:Shaoqing Ren, Kaiming He, Ross Girshick, and Jian Sun
URL:https://arxiv.org/abs/1506.01497
1. 引言
在 Faster R-CNN 算法的提出之前,最先进的目标检测算法依赖region proposal算法和 RCNN 网络。在 R-CNN 和 Fast R-CNN 中都是用selective search 的 region proposal 算法来生成候选区域的,Fast R-CNN通过引入 RoI Pooling 来避免大量的重复计算,从而显著提升了网络速度,而并没有解决 region proposal 算法耗时长的问题。Faster R-CNN 在 Fast R-CNN 的基础上提出了Region Propose Network(RPN)来生成候选区域,RPN 与检测网络共享图像卷积特征,只需非常少额外时间来生成候选区域。
2. Faster R-CNN 框架
Faster R-CNN 在 Fast R-CNN 的基础上,将 selective search 算法换成了 RPN 。Faster R-CNN的 backbone 还是 VGG16,卷积层生成的特征图分别送入 RPN和 RoI pooling层, 其中RPN用来产生候选区域并与特征图一起送入RoI Pooling层。后面的分类和边界款回归与Fast R-CNN的一样。
2.1 RPN
RPN 的输入是由 backbone (文中的backbone用了两种:ZF和VGG16)提取到的特征图,输出为一系列候选区域,每个候选区域包含一个边界框和一个得分(表示该区域包含目标的可能性)。
上图中的 256-d 是由 ZF 网络对原图进行特征提取后的特征图的通道数,对于不同的backbone特征提取网络,其通道数可能不一样,如VGG16的特征图通道数是256-d。
RPN 使用3*3的卷积核对特征图进行滑动窗口式的处理,之后分别通过两个
1
∗
1
1*1
1∗1 的卷积层,其中一个用于生成2K个得分,另外一个用于生成4K个边界框偏移量。
3
∗
3
3*3
3∗3卷积会遍历整个特征图,对于特征图中的每个点都会分配 K 个 anchor ,这些anchor就是初始检测框。原文中的 K 设置为9(有三种比例和是那种尺度)。每个anchor对应两个概率,前景和背景的概率,每个anchor有四个位置参数,左上角和右下角的坐标,对于每个anchor都要预测边界框的偏移量,所以边界框回归有4K个输出。
这里为何用两个并行的
1
∗
1
1*1
1∗1的卷积而不用全连接操作。
卷积操作可以保持特征图的空间结构,为每个位置生成多个anchor的类别得分和边界框偏移量。
原文中设置的anchor的长宽比有三种:{1:1,1:2,2:1},尺度也有三种,所以K是9,因此分类层经过卷积后有
2
∗
9
=
18
2*9=18
2∗9=18个通道,边界框回归层经过卷积层有
4
∗
9
=
36
4*9=36
4∗9=36个通道。
proposal层是为了生成region proposal,先按照输入的positive softmax scores由大到小排序anchors,提取前pre_nms_topN(e.g. 6000)个anchors,即提取修正位置后的positive anchors;然后限定超出图像边界的positive anchors为图像边界,并剔除尺寸非常小的positive anchors;最后对剩余的positive anchors进行NMS。
其实RPN最终就是在原图尺度上,设置了密密麻麻的候选Anchor。然后用cnn去判断哪些Anchor是里面有目标的positive anchor,哪些是没目标的negative anchor。
对于anchor,文中提到一个问题,有些anchor的尺寸比滑动窗口在原图中的感受野要大,为什么能够预测比感受野大的边界框呢?
通过一个小的感受野来预测比感受野大的目标的边界框是有可能的,当看到目标的一部分的时候也能粗略的预测出目标完整的位置区域。 这在实际使用中也使用中也是有效的。
2.2 损失函数
训练RPN时,每个anchor有一个二分类的类别标签(前景或背景)。与真实边界框具有最高交并比的anchor和与某真实边界框的IoU大于0.7的 anchor 作为正样本,类别标签为1,表示前景;与所有真实边界框的交并比都小于0.3的anchor作为负样本,类别标签为0,表示背景。注意:anchor是在原图上的,也是在原图上与真实边界框求的交并比。
在一张图像上的损失函数为:
其中,
i
i
i是anchor的索引,
p
i
p_i
pi表示anchor i 区域是前景的预测概率,
p
i
∗
p_i^*
pi∗表示anchor i 区域的类别标签(前景标签为1,背景标签为0),
t
i
t_i
ti表示预测边界框偏移信息的向量,
t
i
∗
t_i^*
ti∗表示标签为1的anchor对应的真实偏移信息,
N
c
l
s
N_{cls}
Ncls表示一个mini-batch中样本的数量,
N
r
e
g
N_{reg}
Nreg表示anchor位置的个数(不是anchor的个数),
λ
\lambda
λ为平衡参数,文中取10,使分类损失和边界框回归损失的系数大致相等。
分类损失在实际的实现中用的是二分类交叉熵损失:
L
c
l
s
(
p
i
,
p
i
∗
)
=
p
i
∗
log
(
p
i
)
+
(
1
−
p
i
∗
)
log
(
1
−
p
i
)
L_cls(p_i,p_i^*)=p_i^*\log(p_i)+(1-p_i^*)\log(1-p_i)
Lcls(pi,pi∗)=pi∗log(pi)+(1−pi∗)log(1−pi)这种损失只需要预测对每个 anchor 预测一个概率(为前景的概率)即可,所以对于特征图的每个点只需要预测 K 个而不是 2K 个分类概率。原论文中的 2K 个类别概率是想用多分类交叉熵损失:
L
c
l
s
(
p
i
,
p
i
∗
)
=
log
(
p
i
)
L_cls(p_i,p_i^*)=\log(p_i)
Lcls(pi,pi∗)=log(pi),其中的
p
i
p_i
pi是预测为真实标签的概率(前景或背景)。
回归损失与Fast R-CNN的回归损失一样使用smooth L1损失:
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^*)=\sum smooth_{L1}(t_i-t_i^*)
Lreg(ti,ti∗)=∑smoothL1(ti−ti∗)其中的累和是对每个anchor的四个参数而言的,
s
m
o
o
t
h
L
1
(
x
)
=
{
0.5
x
2
,
if
∣
x
∣
<
1
∣
x
∣
−
0.5
,
otherwise
smooth_{L1}(x)=\begin{cases} 0.5x^2 , & \text{if } |x| <1 \\ |x|-0.5, & \text{otherwise} \end{cases}
smoothL1(x)={0.5x2,∣x∣−0.5,if ∣x∣<1otherwise
回归损失前的系数
p
i
∗
p_i^*
pi∗是控制
p
i
∗
=
1
p_i^*=1
pi∗=1时才计算(效果与Fast R-CNN中的
[
u
≥
1
]
[u\geq 1]
[u≥1]一样),也就是anchor中是前景而不是背景,背景计算边界框回归无意义。
2.3 RPN的训练细节
RPN可以通过反向传播和随机梯度下降(SGD)进行端对端训练。文中 mini- batch 设为256,对正负样本进行 1:1 采样,若正样本不够,则用负样本填充。backbone的网络参数使用预训练好的,对于RPN单独的层,在标准方差为0.01的零均值高斯分布中随机取值来初始化层参数。在训练中采用动量和权重衰减。
3. Faster R-CNN的训练
文中对 Faster R-CNN的训练采取的是四步交替训练,用于联合训练RPN(Region Proposal Network)和Fast R-CNN模块。这种方法通过交替训练两个模块,逐步优化它们的参数,同时共享卷积特征。四步交替训练方法如下:
- 训练 RPN:
使用预训练的主干网络(如VGG16)初始化共享卷积层。对RPN的其他部分进行随机初始化。使用RPN的多损失函数进行优化,对RPN的特定层参数进行更新。目的是使RPN能够生成高质量的 region proposal。 - 训练 Fast RCNN:
对Fast RCNN的特定层进行随机初始化,使用预训练的主干网络初始化共享卷积层,用第一步训练的RPN生成 region proposal。用主干网络提取的特征图和RPN生成的 region proposal来训练Fast RCNN的特定层(RoI Pooling、分类、回归层),用的损失是Fast RCNN的多任务损失。 - 微调 RPN:
在第二步训练好的网络的基础上,固定Fast RCNN的特定层,重新训练网络,更新RPN和共享卷积层的参数。 - 微调 Fast RCNN:
在第三步训练好的网络上,固定RPN和共享卷积层,训练网络,更新Fast RCNN特定层的参数。
下表直观解释了每一步对哪些层进行了更新
步骤 | 更新参数 | 固定参数 |
---|---|---|
第一步:训练RPN | RPN的特定层(3x3卷积层、分类层、回归层) | 共享卷积层(backbone)、Fast R-CNN特定层的所有参数 |
第二步:训练Fast R-CNN | Fast R-CNN的特定层(RoI Pooling层、分类层、回归层) | 共享卷积层(backbone)、RPN特定层的所有参数 |
第三步:微调RPN | RPN的特定层(3x3卷积层、分类层、回归层)、共享卷积层(backbone) | Fast R-CNN特定层的所有参数 |
第四步:微调Fast R-CNN | Fast R-CNN的特定层(RoI Pooling层、分类层、回归层) | 共享卷积层(backbone)、RPN特定层的所有参数 |
在具体实现中,可以不采用四步交替训练,而直接合并损失函数,在每次反向传播中,同时更新 RPN、Fast R-CNN 和共享卷积层的参数。这种简化的训练流程可以缩短训练的时间,并且通过联合优化,可以使 RPN 和 Fast R-CNN 更好地协同工作。
注意
对于 anchor 超过边界的处理办法,训练时选择直接丢弃。而测试时需要对其进行裁剪,使其不超过边界。
4. 优缺点分析
优点
Faster R-CNN 使用 RPN 替代了传统的区域建议方法(如 Selective Search),直接通过卷积神经网络生成区域建议。RPN 可以高效地生成高质量的区域建议,和 Fast R-CNN 共享卷积特征,避免了重复计算,减少了计算开销。在实际的实现中,可以利用多任务损失进行端到端的训练,同时优化分类任务和回归任务,提高了模型的泛化能力和检测精度。
缺点
对小目标的检测效果较差,因为Faster R-CNN 的主干网络通常会对输入图像进行多次下采样,导致小目标的特征信息丢失。超参数较多,且训练时间较长。
总结
Faster RCNN 将传统目标检测模型中的区域推荐算法替换成了 RPN 网络,直接通过卷积神经网络生成 region proposal,将整个目标检测模型融合到一个卷积神经网络之中,大幅提升了目标检测任务的速度。
RPN 对卷积神经网络提取到的特征图先后进行
3
∗
3
3*3
3∗3的就滑动窗口操作和两个不同的
1
∗
1
1*1
1∗1的卷积操作,滑动窗口对特征图中的每个位置对应的原图区域应用不同大小和比例的 anchor ,判断原图中对应的 anchor 区域是前景和背景的概率,并生成 anchor 的偏移参数,对 anchor 进行修正。根据分类得分对所有 anchor 进行排序,保留得分最高的前 N 个。使用 NMS 去除重叠度较高的 anchor ,得到较准确的 region proposal。骨干网络提取的特征图和RPN生成的region proposal作为Fast RCNN的输入,经过RoI池化层后,分别经过分类和回归的全连接层,对region proposal进行分类并再次生成偏移参数,得到更精准的边界框。Faster RCNN 不仅大幅提高了目标检测的速度,也在准确率上达到了新高度。
但其训练参数和超参数较多,所以训练时间较长且调优难度较大,且其对小目标的检测效果较差。