Faster R-CNN 笔记

Faster R-CNN论文:Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Network


Fast R-CNN的缺点

基于Fast R-CNN的网络结构是当时最先进的目标检测网络结构,统称为Region-based CNN,而它们共同的问题就是,提出Region Proposal的过程(比如Selective Search、EdgeBoxes)太过耗时间。


Faster R-CNN提出的改进方法

Region Proposal由深度卷积网络(Region Proposal Networks, RPN)提出。RPN和分类网络共享特征提取网络。


Faster R-CNN的结构

Faster R-CNN论文中的网络结构示意图

Faster R-CNN的结构较之Fast R-CNN还要简洁。

1.输入:任意大小的图像

2.特征提取网络,输出feature map。

3.RPN:根据feature map,预测若干ROI的位置和尺寸,以及该ROI“包含目标的置信度”。ROI的表示采用了anchor方法,ROI为anchor经过映射(预测输出)得到的区域。详细的解释在后面。

4.ROI Pooling:在特征图像上,对于每个ROI而言,保留其里面的特征图内容。将保留的内容压缩成H×W长度的向量输出。

5.Classification


RPN

RPN以一个任意大小的特征图作为输入,预测若干ROI的位置和尺寸,以及该ROI“包含目标的置信度”。

在特征提取网络的最后一层输出的特征图上,一个n×n(论文中n取3)的窗口滑动遍历整个图像,每个窗口内的特征数据都分别被映射(d维1×1卷积)到一个较低维度(对Zeiler and Forgus网络而言是256-d,对VGG-16而言是512-d)的特征向量,这个特征向量输入至两个全连接层——分别对应Box-regression和Box-classification。对每个窗口将预测k个边界框,所以Box-regression全连接层有4k个输出(4个值反映一个边界框的位置和大小),Box-classification全连接层有2k个输出(表示对应的anchor“包含”或“不包含”目标,作者将它实现为具有2个类别的softmax层,实际上也可以改为实现为逻辑回归层,这样Box-classification层就有k个输出)。

映射的具体实现方式:先用3×3(256或512个)卷积核对特征图进行卷积,结果输入进cls和reg层。cls和reg层分别是1×1(2k个)和1×1(4k个)的卷积层——全连接层可以用1×1卷积层实现。

在滑动窗口的某个位置上,都预设了k个anchor,对于这个位置上预测出的k个选框而言,每个选框表示为一个anchor中的映射(作者将k取9,为3种尺度和3种长宽比的组合)。


RPN结构示意图。注意RPN有一两个分支的全连接层,这里的cls层判断是否包含对象,并不具备分类功能,别和后面的分类网络搞混了。

平移不变性

用此种方法设计anchor,模型对输入具有平移不变性,即,如果输入图像经过了一定的平移,RPN预测到的边框回归变换参数是不变的,只是对应的anchor位置变了。这种特性对比的是采用固定anchor(一般由聚类方法预先获得)各种方法,比如MultiBox或者YOLO2(3?)。

这种特性的一个好处是不用预先设定太多的anchor,相应地,全连接层参数会减少,模型过拟合的风险下降。

多尺寸问题

有些模型采用图像金字塔解决多尺寸问题,这种方法问题在于比较耗时(因为重复的特征被映射到新特征图的不同尺度上);有些模型采用不同尺寸的卷积核(卷积核金字塔),这种方法问题在于不同的卷积核使训练更为困难。Faster R-CNN中,多尺寸的anchor解决了该问题,并且对模型引入了相对而言最小的代价。


损失函数

在训练数据中,将以下两种anchor标记为“包含目标”:(1)与一个Ground Truth有最大重叠比例者;或(2)与任意一个Ground Truth的重叠比例达到0.7者。将未被标记为“包含目标”的anchor中,符合如下条件的标记为“不包含目标”:(1)与任何Ground Truth的重叠比例都未达到0.3者。剩余的既未被标记为包含目标又未被标记为不包含目标的anchor,将不对目标函数做出贡献。

训练RPN的损失函数为:

\begin{aligned} L\left(\left\{p_{i}\right\},\left\{t_{i}\right\}\right) &=\frac{1}{N_{c l s}} \sum_{i} L_{c l s}\left(p_{i}, p_{i}^{*}\right) \\ &+\lambda \frac{1}{N_{\text {reg}}} \sum_{i} p_{i}^{*} L_{\text {reg}}\left(t_{i}, t_{i}^{*}\right) \end{aligned}\\

其中,p_{i}是anchor包含目标的置信度,p_{i}^*表示anchor实际上是否包含目标,L_{cls}log损失函数,N_{cls}为mini-batch size;t_{i}是表示anchor到预测的边界框的四维变换向量,t_{i}^*是anchor到Ground Truth的变换向量,L_{reg}Smooth_{L_{1}}损失函数,前面乘p_{i}^*表示只有包含目标的anchor才对边框回归损失有贡献,N_{reg}是有匹配的Ground Truth的anchor数,\lambda 为调整权重的超参数。

边框位置和大小回归计算公式和R-CNN、Fast R-CNN里一样:

\begin{aligned} t_{\mathrm{x}} &=\left(x-x_{\mathrm{a}}\right) / w_{\mathrm{a}}, \quad t_{\mathrm{y}}=\left(y-y_{\mathrm{a}}\right) / h_{\mathrm{a}} \\ t_{\mathrm{w}} &=\log \left(w / w_{\mathrm{a}}\right), \quad t_{\mathrm{h}}=\log \left(h / h_{\mathrm{a}}\right) \\ t_{\mathrm{x}}^{*} &=\left(x^{*}-x_{\mathrm{a}}\right) / w_{\mathrm{a}}, \quad t_{\mathrm{y}}^{*}=\left(y^{*}-y_{\mathrm{a}}\right) / h_{\mathrm{a}} \\ t_{\mathrm{w}}^{*} &=\log \left(w^{*} / w_{\mathrm{a}}\right), \quad t_{\mathrm{h}}^{*}=\log \left(h^{*} / h_{\mathrm{a}}\right) \end{aligned}\\


RPN的训练

在Faster R-CNN中,RPN和分类网络(基于Fast R-CNN)是分开训练的。

训练集采样

采样策略类似Fast R-CNN,取少量图像中的多个ROI,只是Faster R-CNN更加极端,每个mini-batch只取1张图片,采样其中的256个有标记的区域建议作为样本,并尽可能地保证正样本和负样本的比例在1:1。

超参数

和Fast R-CNN基本一样。略。

关于RPN和Fast R-CNN的共享特征提取网络在训练时的处理方法

方案1:交替训练

用初始权重训练RPN;然后将RPN输出的Region Proposal作为Fast R-CNN的输入,用初始权重训练Fast R-CNN(这时RPN和Fast R-CNN并不共享权重);然后再将特征提取网络作为RPN的初始化权重,并保持特征提取网络权重不变,仅对RPN的全连接层进行finetune(此时RPN和Fast R-CNN共享权重)...这个过程被迭代执行若干次。

这个方法是论文中所有实验采用的方法。

方案2:Approximate joint training(近似联合训练)

将RPN和Fast R-CNN串联成一个网络(即完整的Faster R-CNN结构),此时前向传播如同Faster R-CNN被设计的那样如常进行,且反向传播也正常进行,因为RPN和Fast R-CNN都有Loss,在反向传播时这两个Loss将被结合(我猜可能就是加权相加吧...)起来考虑。

作者表示它的问题在于忽略了对Region Proposal的坐标的偏导,而这其实也是网络的响应...好把这句话我完全没看懂,但是结合下面一个方案说的,我的理解是:在Fast R-CNN里直接将Region Proposal作为固定输入了,而没有考虑它实际上是RPN的输出,所以在反向传播时没有考虑它对Fast R-CNN的Loss的贡献。而实际上Region Proposal的坐标明显和RPN的权重有关。

不过在实验中,这个方案能够加快训练速度,而且表现也基本符合预期,所以不失为一种可用的训练方案。

方案3:Non-approximate joint training(非近似联合训练)

这个方案如同方案2,但是也将Region Proposal坐标的偏导考虑进去了。如作者所言,这个解决方案的实现较为困难,已超过了本论文的讨论范围。

明明Fast R-CNN的训练是很简单的,到了Faster R-CNN,训练网络却如此复杂。不过好处在于, RPN 训练出来能被各种其他的网络应用。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容