论文原文链接:https://arxiv.org/abs/1506.01497
作者博士论文链接:http://cdmd.cnki.com.cn/Article/CDMD-10358-1016103247.htm
(博士论文中很多地方相当于论文的翻译,而且更详细,推荐看)
虽然网上已经有一大堆优秀的博客介绍了Faster R-CNN,但还是希望自己也写一遍,加深理解。
摘要
最先进的目标检测网络基于候选区域算法来生成候选目标位置。像SPP-net和Fast R–CNN这样先进的模型已经减少了目标检测网络的运行时间,也暴露出候选区域的计算(速度)是一个瓶颈。本文介绍一种候选区域网络(RPN),这中网络可以和检测网络共享整个图像的卷积特征,从而使生成候选区域的时间成本几乎降为0。RPN网络实际上是一个全卷积网络,它可以同时预测目标的边界框以及对应的置信度。RPN通过端到端的训练来产生高质量的候选区域,之后用于Fast R-CNN作目标检测。我们进一步通过共享卷积特征将RPN和Fast R-CNN合并成一个网络。利用最近神经网络中流行的“注意力”机制, RPN会告诉这个网络应该去关注哪里。当使用VGG-16模型的时候,我们的检测系统在GPU上的检测速度为5fps(包含所有的步骤),并且在PASCAL VOC 2007、VOC 2012和MS COCO数据集上取得了最好的检测精度(每个图像只使用300个候选区域)。在ILSVRC和COCO 2015年的比赛中,一些任务中的第一名用的方法是基于Faster R-CNN和RPN的。代码在网上已公开。
背景和动机
Fast R-CNN仍然采用选择性搜索算法来生成候选区域,这成了目标检测速度的瓶颈。选择性搜索算法的速度在CPU上大概为每张图片2秒,远达不到实时性的要求。作者因而提出区域生成网络(Region Proposal Networks, RPN),利用卷积神经网络直接生成高质量的候选区域,速度大概是每张图片10毫秒。
模型
Faster R-CNN分为两个部分:(1)一个全卷积网络(RPN网络)用于生成候选区域;(2)Fast R-CNN模块,利用生成的候选区域进行目标检测。
RPN网络
RPN网络是一个全卷积网络,它的输入是一张任意大小的图片,输出是系列候选矩形框(包含位置信息和置信度信息)。在具体的实现上,RPN以一个卷积神经网络的输出特征图作为输入(当使用ZF网络时,为5个卷积层后的输出特征图,在输入为224×224时,特征图大小为13×13)。之后在特征图上使用大小为n×n的卷积核(滑窗)进行卷积(如3×3),最后分别接入两个不同的1×1卷积层用于分类和回归。对于分类,采用softmax输出每个滑窗对应的原图区域(感受野)包含目标和不包含目标的概率。对于回归,输出对应目标区域的位置信息。
Anchor (锚点)
由于需要检测的目标大小和长宽比都不同,为了适应各种目标的检测,作者在RPN网络中引入锚点的机制。具体来将,就是在上面每个滑窗的位置,以滑窗的中心为中心产生k个不同的大小和长宽比的区域(文中采用3种大小和3种长宽比,所以k=9),然后映射到原图上。对于一个W×H的特征图,当滑窗的步长取1时,会生成WHk个锚点(每个位置生成k个锚点,一共有WH个位置)。
加入Anchor机制后,RPN网络的分类层输出的维度是2k(2对应是否为目标的概率,用softmax函数),回归层输出的维度是4k(4对应矩形框的位置,即左上角和右下角的坐标)。
多尺度Anchor和平移不变性
平移不变性是计算机视觉中很重要的一点。对于一个识别或者检测问题,当图像中的目标位置发生变化时,模型应该同样能识别或者检测出目标。卷积神经网络中解决平移不变性的思路有两种:
(1)对输入图像进行多尺度采样,即用不同的大小和长宽比的原图输入网络(图像金字塔);
(2)滤波器(滑窗)采用多尺度。
而作者在Faster R-CNN中采用的是基于Anchor的多尺度,即单一尺度的输入图片、单一尺度的滑窗、多尺度的Anchor的机制。这种方法相当于上面两种有着更高的计算效率。
损失函数
和Fast R-CNN一样,Faster R-CNN的损失函数依然由类别损失和位置回归损失两部分组成,如下:
其中,是一个Batch中的一个锚点的标号,是该锚点被预测是目标的概率。当锚点为正样本时,对应的值为1,反之为0。是一个4维向量,由预测的边界框位置确定,对应的由标注框确定,直观上,和越接近,说明预测的框越准确(下面边界框回归会详细介绍)。
采用对数损失,即,
采用鲁棒回归损失(smooth L1)即:
这里需要重点说下边界框回归,其实这个概念在R-CNN中就已经提出来了。Fast R-CNN和Faster R-CNN一直在沿用。它的作用是为了提高候选框的精度。对于一个包含目标的矩形框,它和标注的矩形框(ground truth)之间可能还有些差距,这个时候我们希望通过回归的方式来逐渐逼近标注框。
如上图所示,我们希望矩形框通过回归的方式变换成,理想情况下,应该无限逼近ground truth 。从到的变换可以用下面的公式表示:
上式中,前两个公式相当于对矩形框的中心坐标做平移变换,后两个公式相当于对宽和高做尺度变换,,,,是变换的参数,由矩形框所在的特征图上的对应区域的特征确定。当矩形框和ground truth 很接近的时候(即重叠程度比较大),可以把这个变换近似看成线性变换来处理,即,,,可以看作是的线性函数,记作不难发现,当
时,结果为ground truth ,因此,我们可以把当作优化的目标构造正则化最小二乘损失函数来优化,如下:
在Faster R-CNN中,会针对k个锚点分别训练k个回归器,这k个回归器参数不共享。
训练过程
Faster R-CNN的训练过程分成4个步骤:
- 训练区域生成网络。利用ImageNet预训练好的网络进行微调。
- 利用第一步生成的候选区域训练Fast R-CNN检测网络(网络是预训练好的)。
- 利用第二步训练好的检测网络初始化区域生成网络,固定所有共享的卷积层,只微调区域生成网络特有的参数(实现共享卷积层)。
- 保持共享的卷积层不变,微调检测网络特有的参数。
检测结果
模型 | 训练集 | 测试集 | mAP | 每张图片处理速度 |
---|---|---|---|---|
Faster R-CNN, VGG-16 | VOC 2007 train | VOC 2007 test | 69.9 | 198ms |
Faster R-CNN, VGG-16 | VOC 2007+2012 train | VOC 2007 test | 73.2 | 198ms |
Faster R-CNN, VGG-16 | VOC 2012 train | VOC 2012 test | 67.0 | 198ms |
Faster R-CNN, VGG-16 | VOC 2007 train&test + VOC 2012 train | VOC 2012 test | 70.4 | 198ms |
在使用VGG-16作为预训练模型时,检测速度是5fps,当使用ZF作为预训练模型时,检测速度是17fps,当然,精度会随之下降。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:目标定位和检测系列(7):Faster R-CNN - Python技术站