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的结构较之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种长宽比的组合)。
平移不变性
用此种方法设计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的损失函数为:
其中,是anchor包含目标的置信度,表示anchor实际上是否包含目标,为损失函数,为mini-batch size;是表示anchor到预测的边界框的四维变换向量,是anchor到Ground Truth的变换向量,为损失函数,前面乘表示只有包含目标的anchor才对边框回归损失有贡献,是有匹配的Ground Truth的anchor数,为调整权重的超参数。
边框位置和大小回归计算公式和R-CNN、Fast R-CNN里一样:
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 训练出来能被各种其他的网络应用。