)
paper: https://arxiv.org/abs/1506.01497.
实验:
tensorflow: https://github.com/endernewton/tf-faster-rcnn.
caffe: https://github.com/rbgirshick/py-faster-rcnn.

为了解决什么问题

区域建议计算成为瓶颈,因为最新的物体检测网络依靠区域提议算法来假设物体的位置。像SPPnet 和Fast R-CNN 之类的先进算法减少了这些检测网络的运行时间。

快速R-CNN ,使用非常深的网络可以达到接近实时的速率,而忽略了在区域提案上花费的时间。 现在,建议是最新的检测系统中的测试时间计算瓶颈。

R-CNN

Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks

缺点
(1) 训练过程比较复杂,是一个多阶段训练的过程:先训练CNN,再训练SVM,最后训练bbox回归器

(2) 训练过程耗时、耗空间:训练SVM和bbox Regressor时,需要为每张图片提取候选框并存储到硬盘中。使用VGG16作为基础网络时,VOC07中的5000条数据作为训练集,需要使用几天时间,并且需要消耗几百G的内存

(3) 目标检测速度慢:测试过程中,需要为待检测图片提取候选框,比较耗时

Fast R-CNN

Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks
算法流程:
(1) 通过selective search获得候选框

(2) 将整张图片输入到基础CNN网络中,生成feature map

(3) 将候选框映射到feature map,通过ROI Pooling生成固定长度的特征向量

(4) 将生成的特征向量输入到两个Fully connected网络中,然后通过multi-task loss同时对类别和bbox回归其进行学习。

怎么解决这个问题:

在这项工作中,引入了一个区域提议网络(RPN),该区域提议网络与检测网络共享全图像卷积特征,从而实现几乎免费的区域提议。

RPN是一个完全卷积的网络,可以同时预测每个位置的对象边界和对象得分。对RPN进行了端到端的培训,以生成高质量的区域建议,Fast R-CNN使用这些建议进行检测。

通过共享RPN和Fast R-CNN的卷积特征,我们将RPN和Fast R-CNN进一步合并为一个网络-使用最近流行的带有“注意力”机制的神经网络术语,RPN组件告诉统一网络要看的地方。
在本文中,作者还发现RPN可以与Fast R-CNN网络联合训练,从而减少了训练时间。

区域提议网络(RPN)

它们与最新的对象检测网络共享卷积层。通过在测试时共享卷积,计算提议的边际成本很小(例如,每个图像10毫秒)。RPN是一种全卷积网络(FCN),可以专门针对生成检测建议的任务进行端到端训练。
RPN就是使用卷积神经网络直接产生Region Proposals,使用的方法的本质就是滑动窗口。RPN的设计比较巧妙,只需在conv layers最后一层输出的feature map进行滑动,利用anchor机制和bbox回归得到多尺度,多长宽比的region proposals。

输入:任一大小的图像
输出:一组矩形候选区域,这些候选框带有目标得分

RPN网络和目标检测网络Fast R-CNN共享conv layers,论文中建议使用ZF(5层共享conv layers)或VGG-16 (13 共享conv layers)。
Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks
上图给出了RPN网络的主要结构。图中最下层为conv layers输出的feature map,可以看到:

(1)首先,对feature map进行卷积,卷积核大小为(nn512) (if VGG, #channel = 512),得到中间层intermediate layer。中间层的大小和feature map一样。其中,每一个特征点可以被表示成512维的向量。

(2)然后,图中以一个特征点为例,给出了RPN如何为该点生成region Proposals。

RPN的 Loss function
Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks
Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks

在这里,cls:二分类binary class label,cls和reg层的输出分别由{pi}和{ti}组成。i是迷你批处理中锚的索引,pi是锚i作为对象的预测概率。
如果锚点为正,则地面真相标签pi为1,如果锚点为负,则为0。 ti是代表预测边界框的4个参数化坐标的向量,而ti是与正锚关联的地面真相框的4个参数化坐标。 分类损失Lcls是两个类别(对象与非对象)的对数损失。对于回归损失,我们使用Lreg(ti,ti*)= R(ti-ti*),其中R是在2中定义的鲁棒损失函数(平滑L1)。pi* , Lreg表示仅对正锚(pi* = 1)**渗入损失,否则将其禁用(pi* = 0)。

两个项通过Ncls和Nreg归一化,并通过平衡参数λ加权,在论文中使λ=10来进行运算效果是最好的。
其中x,y,w和h表示框的中心坐标及其宽度和高度。 变量x,xa和x*分别用于预测框,锚定框和真实框(对于y、 w、 h同样)。 可以将其视为从锚定框到附近的地面真实框的边界框回归。

Fast R-CNN(基于区域的卷积神经网络)模型

快速R-CNN是用于对象检测的单个统一网络。RPN模块充当此统一网络的“注意”。
图片通过卷积层得到功能图,通过局部提案网络得到提案,最上一层是投资回报层,再把数据给分类器。
由两个模块组成。 第一个模块是提出区域的深层全卷积网络,第二个模块是使用提出的区域的Fast R-CNN检测器。
Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks
输入:原始图像
输出:候选框+前景背景类标签

令RPN与目标检测网络Fast R-CNN共享conv layers,相当于引入了attention机制,RPN可以告诉Fast R-CNN需要关注的区域,可以大大减少计算候选框的时间。

比较

Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks
从上图中可以看到:

(1)R-CNN首先使用Selective search提取region proposals(候选框);然后用Deep Net(Conv layers)进行特征提取;最后对候选框类别分别采用SVM进行类别分类,采用回归对bounding box进行调整。其中每一步都是独立的。

(2)Fast R-CNN在R-CNN的基础上,提出了多任务损失(Multi-task Loss), 将分类和bounding box回归作为一个整体任务进行学习;另外,通过ROI Projection可以将Selective Search提取出的ROI区域(即:候选框Region Proposals)映射到原始图像对应的Feature Map上,减少了计算量和存储量,极大的提高了训练速度和测试速度。

(3)Faster R-CNN则是在Fast R-CNN的基础上,提出了RPN网络用来生成Region Proposals。通过网络共享将提取候选框与目标检测结合成一个整体进行训练,替换了Fast R-CNN中使用Selective Search进行提取候选框的方法,提高了测试过程的速度。

论文中使用的数据集

1.PASCAL VOC
VOC2007:中包含9963张标注过的图片, 由train/val/test三部分组成, 共标注出24,640个物体。 VOC2007的test数据label已经公布, 之后的没有公布(只有图片,没有label)。
VOC2012:VOC2012数据集是VOC2007数据集的升级版,一共有11530张图片。

2.MS COCO
微软COCO数据集,图像包括91类目标,328,000影像和2,500,000个label。

实验环境

要求:软件
注意如果您在编译时遇到问题,并且使用的是最新版本的CUDA / cuDNN,办理要求Caffe和pycaffe(参见:来自Caffe安装说明)
注意: Caffe 必须支持Python层!

要求:硬件
对于训练较小的网络(ZF,VGG_CNN_M_1024),具有至少3G内存的良好GPU(例如Titan,K20,K40等)(2万)
要使用VGG16训练Fast R-CNN,您需要K40(约11G内存)(1.65w)
要使用VGG16训练Faster R-CNN的端到端版本,GPU内存3G就足够了(使用CUDNN)

现状

Faster R-CNN py已弃用

FAIR的对象检测研究平台,实现了流行的算法,如Mask R-CNN和RetinaNet。

相关文章: