5.5 Faster R-CNN
学习目标
-
目标
-
了解Faster R-CNN的特点
-
知道RPN的原理以及作用
-
-
应用
-
无
-
在Fast R-CNN还存在着瓶颈问题:Selective Search(选择性搜索)。要找出所有的候选框,那我们有没有一个更加高效的方法来求出这些候选框呢?
5.5.1 Faster R-CNN介绍
SPPnet和Fast R-CNN等研究已经减少了这些检测网络的运行时间,使得区域提出计算成为一个瓶颈。
在Faster R-CNN中加入一个提取边缘的神经网络,也就说找候选框的工作也交给神经网络来做了。这样,目标检测的四个基本步骤(候选区域生成,特征提取,分类,位置精修)终于被统一到一个深度网络框架之内。
在这项工作中,引入了一个区域提出网络(RPN)。
5.5.1.1 RPN网络
-
RPN是一个全卷积网络,可以同时在每个位置预测目标边界和目标分数。RPN经过端到端的训练,可以生成高质量的区域提出,由Fast R-CNN用于检测。
Faster R-CNN可以简单地看成是区域生成网络+Fast R-CNN的模型,用区域生成网络(Region Proposal Network,简称RPN)来代替Fast R-CNN中的选择性搜索方法,整个系统是一个单个的,统一的目标检测网络。RPN模块告诉Fast R-CNN模块在哪里寻找。结构如下:
-
1、首先向CNN网络(VGG-16)输入图片,Faster RCNN使用一组基础的conv+relu+pooling层提取feature map。该feature map被共享用于后续RPN层和全连接层。
-
2、Region Proposal Networks。RPN网络用于生成region proposals,faster rcnn中称之为anchor bbox(anchor)
-
3、后续就是Fast RCNN操作
注:RPN模块作为这个统一网络的“注意力”,告诉Fast R-CNN模块在哪里寻找。
5.5.1.2 RPN原理
-
作用:区域提议网络(RPN)以任意大小的图像作为输入,输出一组矩形的目标提议,每个提议都有一个目标得分
-
过程:
-
在最后一个共享的卷积层输出的卷积特征映射上滑动小网络,这个网络全连接到输入卷积特征映射的nxn的滑动空间窗口上,每个滑动窗口映射到一个低维向量上(论文中两种:对于ZF是256-d,对于VGG是512-d),还会得到每个滑窗位置考虑k种(在论文设计中k=9)可能的参考窗口(论文中称为anchors)。这个向量输出给两个同级的全连接的层:回归层(reg)和分类层(cls)。
-
1、在每一个滑动窗口的位置,我们同时预测k个区域建议,所以reg层有4k个输出,即k个box的坐标编码。
-
2、cls层输出2k个得分,即对每个建议框是目标/非目标的估计概率(为简单起见,是用二分类的softmax层实现的cls层,还可以用logistic回归来生成k个得分)
-
-
实现过程:
-
全卷积网络:为nxn的卷积层,后接两个同级的1x1的卷积层(分别对应reg和cls)
5.5.1.3 平移不变的anchor
5.5.2 Faster RCNN训练
Faster R-CNN的训练分为两部分,即两个网络的训练。
5.5.2.1 RPN训练:
-
目的:从众多的候选区域中提取出score较高的,并且经过regression调整的候选区域
RPN网络被ImageNet网络(ZF或VGG-16)进行了有监督预训练,利用其训练好的网络参数初始化;为了训练RPN,给每个anchor分配一个二进制的标签(是不是目标)。分配正标签给两类anchor:
1、正负样本标记
-
某个ground truth(GT)大于0.7的IoU交叠的anchor。注意到一个GT可能分配正标签给多个anchor
-
负标签给与所有GT的IoU比率都低于0.3的anchor。非正非负的anchor对训练目标没有任何作用
2、RPN网络的损失函数
3、RPN的回归实质
RPN的回归于Faster RCNN的回归计算损失的时候有哪些不同呢?
RPN网络中bounding-box回归的实质其实就是计算出预测窗口。这里以anchor窗口为基准,计算Ground Truth对其的平移缩放变化参数。在真正去计算回归损失的时候,预测值和目标值之间会有一个变化。因为是以anchor窗口为基准,所以只要使这两组参数越接近,以此构建目标函数求最小值,那预测窗口就越接近Ground Truth,达到回归的目的。
4、优化过程参数
RPN,通过反向传播和随机梯度下降端到端训练。每个mini-batch由包含了许多正负样本的单个图像组成。
-
1、随机采样256个anchor,计算mini-batch的损失函数,其中采样的正负anchor的比例是1:1。
-
如果一个图像中的正样本数小于128,就用负样本填补这个mini-batch。
-
-
2、通过从零均值标准差为0.01的高斯分布中获取的权重来随机初始化所有新层(最后一个卷积层其后的层),所有其他层(即共享的卷积层)是通过对ImageNet分类预训练的模型来初始化的
-
3、调整ZF网络的所有层,以及conv3_1,并为VGG网络做准备,以节约内存。在PASCAL数据集上对于60k个mini-batch用的学习率为0.001,对于下一20k个mini-batch用的学习率是0.0001。动量是0.9,权重衰减为0.0005。(论文中作者使用的是caffe训练的)
5、共享卷积训练
RPN和Fast R-CNN都是独立训练的,要用不同方式修改它们的卷积层。因此我们需要开发一种允许两个网络间共享卷积层的技术,因此我们需要开发一种允许两个网络间共享卷积层的技术,而不是分别学习两个网络。
-
原因是Fast R-CNN训练依赖于固定的目标建议框,而且并不清楚当同时改变建议机制时,学习Fast R-CNN会不会收敛。
论文开发了一种实用的4步训练算法,通过交替优化来学习共享的特征。
-
第一步:依上述训练RPN,该网络用ImageNet预训练的模型初始化,并端到端微调用于区域建议任务。
-
第二步:利用第一步的RPN生成的建议框,由Fast R-CNN训练一个单独的检测网络,这个检测网络同样是由ImageNet预训练的模型初始化的,这时候两个网络还没有共享卷积层。
-
第三步:用检测网络初始化RPN训练,但去固定共享的卷积层,并且只微调RPN独有的层,现在两个网络共享卷积层了。
-
第四步:保持共享的卷积层固定,微调Fast R-CNN的fc层。这样,两个网络共享相同的卷积层,构成一个统一的网络。
细节:有些RPN建议框和其他建议框大量重叠,为了减少冗余,我们基于建议区域的cls得分,对其采用非极大值抑制(non-maximum suppression, NMS)。我们固定对NMS的IoU阈值为0.7,这样每个图像只剩2k个建议区域。
5.5.2 Faster R-CNN效果
1、PASCAL VOC 2007和2012测试集检测结果
检测器是Fast R-CNN和VGG16。训练数据:“07”:VOC 2007 trainval,“07++12”: VOC 2007 trainval+test和VOC 2012 trainval的并集。对RPN,用于Fast R-CNN训练时的建议框是2k。
-
1、数据集的增加也提高了效果
-
2、RPN的效果更好
注:使用300个建议框的原因是经过大量实验得到300左右框是mAP效果比较高的。其它数量都会下降。anchors的数目,论文文中提到对于1000×600的一张图像,大约有20000(~60×40×9)个anchors,忽略超出边界的anchors剩下6000个anchors,利用非极大值抑制去掉重叠区域,剩2000个区域建议用于训练; 测试时在2000个区域建议中选择Top-N(论文中为300个区域建议)用于Fast R-CNN检测。
2、多尺度与参数对比
-
论文当中的测试结果显示多级别的建议框对比例的测试mAP会有提高,还有参数\lambdaλ为10合适。
问题:FasterRCNN的检测对于小物体检测的效果(论文实现细节部分)
多尺度特征提取可能提高准确率但是不利于速度与准确率之间的权衡。VOC2007系列的图片像素尺寸大小不一,但是横向图的尺寸大约在500375左右。 MS COCO 数据集是这样定义小目标的(不同数据集定义不一样)。面积小于 32 32 的物体,MS COCO 就认为它是一个小物体。这样相当于一个典型的PASCAL图像(~500x375)经过卷积之后变为10*10个像素大小。
-
原因:卷积、池化等操作进行下采样导致分辨率损失严重,导致不容易检测小目标
-
解决办法:论文中通过对输入图片进行rescale,FasterRCNN会将原图像最短边rescale到600的大小。其实要检测小物体,既需要一张足够大的featmap来提供更加精细的特征和做更加密集的采样
2、测试性能
在一块K40 GPU上的用时(ms),测试性能如下:
-
在2K个SS建议框需要1~2秒,平均1.51秒;如果采用VGG-16这个版本只需要198ms,采用ZF网络的帧率为17fps。没采用ZF是因为mAP相比VGG版本来讲低了许多
5.5.3 Faster R-CNN总结
-
优点
-
提出RPN网络
-
端到端网络模型
-
-
缺点
-
训练参数过大
-
小目标检测效果不好
-
可以改进的需求:
-
RPN(Region Proposal Networks) 改进对于小目标选择利用多尺度特征信息进行RPN
-
速度提升,如YOLO系列算法,删去了RPN,直接对proposal进行分类回归,极大的提升了网络的速度
5.5.4 总结
-
Faster R-CNN的改进特点
-
RPN的原理过程
-
RPN的训练的样本、损失函数以及优化训练过程
-
Faster R-CNN的效果的提高