Title:Fast-RCNN
Note data:2019/05/21
Abstract:作为计算机视觉三大问题之一,检测问题是相对较为复杂的任务。不仅需要知道是什么,还需要知道在哪里,分别是什么的问题,这正是我们目标检测需要做的东西。
Code:pytorch
目录
3.2 Initializing from pre-trained networks
Fast-RCNN论文解读
1 Abstract
论文提出一种基于R-CNN的Object Detectino模型Fast-RCNN
网络结构:在R-CNN基础上进行了一些结构上改进
创新:
- R-CNN中繁琐的特征提取操作被取代,只对整张图像全区域进行一次特征提取。
- 用RoI pooling取代最后一层的max pooling层,同时引入候选框信息,提取相应候选框特征
- Fast R-CNN 网络末尾采用并行的不同的全连接层,可同时输出分类结果和窗口回归结果,实现end-to-end的多任务训练(候选提取除外),也不需要额外的特征存储空间,R-CNN中这部分特征是供SVM和Bounding-box regression进行训练的
- 采用SVD对Fast R-CNN网络末尾并行的全连接层进行分解,减少计算复杂度,加快检测速度
动机:使得目标检测训练速度,测试速度,准确率提升。
论文提出了一种新的目标检测网络(Fast R-CNN)。 Fast R-CNN建立在先前的工作基础上(R-CNN),以使用深度卷积网络有效地对目标进行检测。 与之前的工作相比,Fast R-CNN采用了多项创新来提高训练和测试速度,同时提高了检测精度。 Fast R-CNN训练非常深的VGG16网络比R-CNN快9倍,在测试时间快213倍,并在PASCAL VOC 2012上实现更高的mAP。与SPPnet相比,快速R-CNN训练VGG16快3倍,测试 10倍更快,更准确。
2 Introduction
R-CNN中因为使用selective search算法提取2k个候选区域,在将这些候选区域输入到CNN中去提取特征,因为候选框的大量重合带来了一些不必要的计算浪费;同时R-CNN不算一个端到端的训练网络,因为其需要在ILSVRC2012样本下有监督训练,利用提取到的特征进行SVM训练,在对Bounding-box回归器进行训练;R-CNN训练过程中需要占用大量的内存;需要对候选框进行形变操作在输入CNN中进行特征提取。以上这些问题促使了fast-RCNN的出现。
在本文中,我们简化了最先进的基于卷积网络的目标检测器的训练过程。我们提出一个单阶段训练算法,共同学习分类候选框和改进他们的空间位置。
所得到的方法用来训练非常深的检测网络(例如VGG16) 比R-CNN快9倍,比SPPnet快3倍。在运行时,检测网络在PASCAL VOC 2012数据集上实现最高准确度,其中mAP为66%(R-CNN为62%),每张图像处理时间为0.3秒,不包括候选框的生成。
3 Architecture
fast-RCNN针对R-CNN中的一些问题,另外从SPPNet中获得一些灵感。
SPP nets通过共享计算对R-CNN进行加速。首先计算一整张输入image的conv feature map,然后通过共享的feature map提取feature vector,并以此对proposal进行分类。 用max-pooling对feature map提取proposal的feature(一个固定大小的输出),多个输出对应多种尺寸,然后送入SPP net。缺点:
- 训练也是多级的
- 训练阶段,特征被写入磁盘,消耗空间
- fine-tuning阶段,不能在SPP之前更新conv layer
针对这些缺点提出的的fast-RCNN有以下结构:
1. 输入:一张完整图像 一系列proposals(RoIs)
2. 通过若干个conv和max-pooling,生成一个固定大小的conv feature map
3. 每个feature map通过一个RoI pooling提取一个定长的feature vector
4. 每个feature vector输入到一系列fc layers,最后送入两个子输出层:一个用softmax进行概率估计,另一个为K classes输出四个数值(获得每类更加精确的bounding-box positions)
Fast R-CNN网络将整个图像和一组候选框作为输入。网络首先使用几个卷积层(conv)和最大池层来处理整个图像,以产生转换特征图。然后,对于每个候选框,感兴趣区域(RoI)池化层从特征图中提取固定长度的特征向量。每个特征向量被送到完全连接(fc)层的中,其最终分支成两个同级输出层 :对K个对象类产生softmax概率估计加上全部捕获的“背景”类的一层以及为K个对象类中的每一个类别输出四个实数值的另一层。每组4个值编码重新修正K个类中的一个的精确边界位置。
图1.Fast R-CNN架构。输入图像和多个感兴趣区域(RoI projection)被输入到完全卷积网络中。每个RoI被合并到固定大小的特征图中,再通过RoI池化层再通过完全连接的层(FC)映射到特征向量。网络对于每个RoI具有两个输出向量:softmax概率和每类边界回归偏移。该架构是端到端训练的,带有多任务损失。
整体流程图如下所示:
- 任意size图片输入CNN网络,经过若干卷积层与池化层,得到特征图;
- 在任意size图片上采用selective search算法提取约2k个候选框;
- 根据原图中候选框到特征图映射关系,在特征图中找到每个候选框对应的特征框【深度和特征图一致】,并在RoI池化层中将每个特征框池化到H×W【VGG-16网络是7×7】的size;
- 固定H×W【VGG-16网络是7×7】大小的特征框经过全连接层得到固定大小的特征向量;
- 第4步所得特征向量经由各自的全连接层【由SVD分解实现】,分别得到两个输出向量:一个是softmax的分类得分,一个是Bounding-box窗口回归;
- 利用窗口得分分别对每一类物体进行非极大值抑制剔除重叠候选框,最终得到每个类别中回归修正后的得分最高的窗口。
3.1 RoI池化层
RoI池化层使用最大池化将任何有效的感兴趣区域内的特征转换成具有H × W(例如,7×7)的固定空间范围的小特征图,其中H和W是层超参数,独立于任何特定的RoI层。在本文中,RoI是一个矩形窗口,成为一个特征映射。 每个RoI由指定其左上角(r; c)及其高度和宽度(h; w)的四元组(r; c; h; w)定义。
RoI最大池化工作通过除以h × w RoI窗口变成H × W网格,子窗口大小约为h/H ×w/ W,然后将每个子窗口中的最大值合并到相应的输出网格单元中。池化操作独立应用于每个特征图通道,比如在标准最大池中。RoI层只是SPPnets 中使用的空间金字塔池层的特殊情况,其中只有一个金字塔层。 我们使用[11]中给出的池化子窗口计算方法。总之RoI池化层去掉了SPP的多尺度池化,直接用MxN的网格,将每个候选区域均匀分成M×N块,对每个块进行max pooling。从而将特征图上大小不一的候选区域转变为大小统一的特征向量,送入下一层。
3.2 Initializing from pre-trained networks
我们实验了三个预训练的ImageNet网络,每个网络有五个最大池化层和五到十三个卷积层。当预训练网络初始化fast R-CNN网络时,其经历三个变换。
1. 首先,最后的最大池化层由RoI池层代替,其通过将H和W设置为与网络的第一完全连接层兼容来配置(例如,对于VGG16,H = W = 7)。
2. 其次,网络的最后完全连接层和softmax(其被训练用于1000类ImageNet分类)被替换为前面描述的两个同级层(完全连接的层和softmax在K + 1类别和类别特定的边界回归)。
3. 网络被修改为采用两个数据输入:图像的列表和这些图像中的RoI的列表。
3.3 特征提取方式
Fast R-CNN在特征提取上可以说很大程度借鉴了SPPnet,首先将图片用选择搜索算法(selective search)得到2000个候选区域(region proposals)的坐标信息。另一方面,直接将图片归一化到CNN需要的格式,整张图片送入CNN(本文选择的网络是VGG),将第五层的普通池化层替换为RoI池化层,图片然后经过5层卷积操作后,得到一张特征图(feature maps),开始得到的坐标信息通过一定的映射关系转换为对应特征图的坐标,截取对应的候选区域,经过RoI层后提取到固定长度的特征向量,送入全连接层。
3.4 Fine-tuning for detection
为什么SPPnet不能更新权重?
当训练样本来自不同image时,SPP layer的反向传播效率极低。(一个RoI可能有一个很大的receptive field,甚至对应整个image,而前向传播需要处理整个receptive field,因此训练阶段的输入极大)
Fast R-CNN训练采用SGD minibatches进行分层抽样:
1. 抽取N幅图像
2. 从每幅图像抽取R/N个RoIs(同一张图像的RoIs共享前向反向传播的计算和内存)
作者从对象建议框(object proposal)中选择25%的RoI,这些RoI与ground-truth bbox边界框至少有0.5的部分交叉重叠,也就是正样本,即 u >= 1。其余的RoI选那些IoU重叠区间在[0.1,0.5)的,作为负样本,即 u = 0,大约为75%。之所以选择负样本需要大于0.1的阈值是因为使用启发式的hard example mining(低于0.1的IoU作为难例挖掘的启发式)。在训练期间,图像有0.5的概率水平翻转。
类别 | 比例 | 方式 |
前景 | 25% | 与ground-truth bbox边界框重叠区间在[0.5,1] |
背景 | 75% | 与ground-truth bbox边界框重叠区间在[0.1,0.5) |
实际操作显示,并不会因为RoIs来自同一幅图像而降低收敛速度
one fine-tuning stage:优化softmax分类器与bounding-box regressors同时进行
Fast R-CNN结构图示
基本结构:
1. 图像归一化为224×224送入网络
2. 前五个阶段是基础的conv+relu+pooling形式
3. 在第五阶段结尾,输入P个候选区域(图像序号×1+几何位置×4)
roi_pooling(forward) roi_pooling将每个候选区域均匀分成M×N块,然后对每块进行max pooling,将特征图上大小不一的候选区域转变为大小统一的数据送入下一层。
feature输入到两个并行的fc layers中(multi-task):
- cls_score:输出K+1维数组,表示属于K类和背景的概率
- bbox_prdict:输出4*K维数组,表示分别属于K类时,应该平移缩放的参数
在R-CNN中的流程是先提proposal,然后CNN提取特征,之后用SVM分类器,最后再做bbox regression进行候选框的微调;Fast R-CNN则是将候选框目标分类与bbox regression并列放入全连接层,形成一个multi-task模型。
cls_ score层用于分类,输出K+1维数组p,表示属于K类和背景的概率。 bbox_predict层用于调整候选区域位置,输出4*K维数组t,表示分别属于K类时,应该平移缩放的参数。
4.结论
4 主要结果
三个主要结果支持本文的贡献:
- VOC07,2010和2012年的最高的mAP;
- 相比于R-CNN,SPPnet的 快速训练和测试。
- 在VGG16中微调卷积层改善了mAP。
我们的实验使用了三个经过预训练的ImageNet网络模型,这些模型可以在线获得(https://github.com/BVLC/caffe/wiki/Model-Zoo)。第一个是来自R-CNN3的CaffeNet(实质上是AlexNet)。 我们将这个CaffeNet称为模型S,即小模型。第二网络是来自14的VGG_CNN_M_1024,其具有与S相同的深度,但是更宽。 我们把这个网络模型称为M,即中等模型。最后一个网络是来自15的非常深的VGG16模型。由于这个模型是最大的,我们称之为L。在本节中,所有实验都使用单尺度训练和测试。
5.参考文献
[1] Fast R-CNN论文详解
[2] Fast R-CNN论文笔记
[3] Fast R-CNN论文详解(Fast R-CNN)