您的位置:首页 > 其它

对Fast rcnn论文的一个大致翻译

2017-05-17 15:47 246 查看
Fast R-CNN

1.前言

最近,深度卷积神经网络已经明显提高了图像分类和目标检测的精度。相比于图像分类,目标检测是一个更具挑战性的任务,因此它需要更复杂的方法去解决。由于这种复杂性,当前的方法训练模型时都是多级流水线,导致速度慢。

因目标检测需要对目标精确定位,因此目标检测任务的复杂性随之升高。这样造成了两个最基本的挑战:一是需要处理大量的候选目标位置(proposals);二是候选区域只提供对目标的粗略定位,对目标的精确定位需要重新定义。针对这些难题的解决方案通常在速度、精度和简易性之间折中。

在本篇文章中,我们精简了目前性能最优的基于卷积神经网络的目标检测算子的训练步骤。我们提出了一种单级训练算法,该算法可以同时对目标的候选区域分类并重新定义他们的空间位置。

该方法可以训练一个很深的检测网络(VGG16),9×faster than R-CNN and 3×faster than SPPnet. 在运行时间上,该检测网络每处理一张图片需要0.3s(包括选择目标候选区域的时间),在PASCAL VOC2012 上mAP为66%。

R-CNN and SPPnet

基于区域的卷积神经网络方法(R-CNN)完成了较高目标检测精度通过运用卷积神经网络对目标候选区域分类。但R-CNN具有明显的缺点:

训练过程是多级流水线。R-CNN首先使用log loss微调卷积神经网络提取候选区域的特征。Then, it fits SVMs to ConvNet features. 这些SVMs作为目标检测子,代替了通过微调学习到的softmax classifier. 在第三个训练级,学习边框回归。

训练过程在时间和空间上都花费巨大。对于SVM和边框回归训练,每一幅图像的每一个目标候选区域都需要提取特征,然后将其写入硬盘。对于非常深的卷积神经网络,比如VGG16,这个过程需要2.5 GPU-days 对于VOC07训练集上的5k幅图像。这些特征需要hundreds of gigabytes of storage.

目标检测过程很慢。测试时,也要分别从每幅图像每个目标候选区域提取特征。在GPU上,对于VGG16的网络,每幅图像需要47s.

R-CNN慢是因为它对于每一个候选区域都运行一次深度卷积网络(it performs a ConvNet forward pass for each object proposal),没有共享计算。空间金字塔池化网络(SPPnet)通过共享计算加速了R-CNN的速度。SPPnet方法对整幅输入图像计算卷积特征图,然后对每一个目标区域从共享特征图中提取特征向量,利用提取的这些特征向量对它们分类。features are extracted for a proposal by max-pooling the portion of the feature map inside the proposal into a fixed-size output. 池化多个输出尺寸,将它们级联成空间金字塔池化层。在测试时间上,SPPnet对R-CNN加速了10-100倍,训练时间降低了3倍,因为SPPnet对候选区域提取特征速度更快。

SPPnet也有显著的缺点。它和R-CNN相同的是,训练是多级流水线式,包括extracting features, fine-tuning a network with log loss, training SVMs, and finally fitting bounding-box regressors. 特征还得写入硬盘。但和R-CNN不同的是,微调算法不能用于空间池化层之前的卷积层。不出意外的,这些局限了(包括固定的卷积层)一个深层次网络的精度。

本文贡献

我们提出了一种新的训练算法,弥补了R-CNN和SPPnet的缺点,并同时提高了精度和速度。我们把这种方法叫做Fast R-CNN,是因为它训练和测试都比较快。Fast R-CNN方法有几个优点:

高检测精度than R-CNN and SPPnet

训练是单级的,using a multi-task loss

训练可以更新所有的网络层。

提取的特征不需要存储在硬盘。

2. Fast R-CNN 的架构和训练

Fast R-CNN需要一整幅图像和一系列目标候选区域作为输入。该网络首先用几个卷积层和最大池化层处理一整幅图像,产生一个卷积特征图。然后对于每一个候选的目标区域,一个感兴趣池化层从特征图中提取一个特定长度的特征向量,每一个特征向量被送到一系列全连接层中,最后分成两个兄弟输出层,one that produces softmax probability estimates over K object classes plus a catch-all “background” class,另一层对于每一个目标类别输出4个值,每个类别的四个值重新定义了这个类别的边框位置。

2.1 ROI pooling layer

ROI pooling layer 运用max pooling 将任何有效的感兴趣区域里的特征转化为一个小的特征图,该小的特征图有固定的尺寸H×W,H和W是独立于任何感兴趣区域的超参数。在本文中,ROI是一个在特征图上的长方形窗口,每一个ROI是由四个参数定义(r,c,h,w),(r,c)是左上角的角点坐标,h 是高,w是宽。

RoI max pooling 将h×w的RoI感兴趣窗口分成H×W的子窗口,然后最大池化每一个子窗口的值,将其转换成相应的子窗口输出。池化在每一个特征图通道独立应用,和标准最大池化一样。RoI层是空间金字塔池化层的一个特殊例子,这里只有一层。

2.2 预训网络初始化

我们实验中用到三个预训练ImageNet网络,每个网络中有5个max pooling layers和13个conv layers,当一个预训练网络初始化一个Fast R-CNN网络,它经历三种变换。

最后一个max pooling layers 被一个RoI pooling layer 代替,该RoI pooling layer设置成高H宽W,这是为了和网络的第一个全连接层兼容。

网络的最后一个全连接层和softmax被前面描述的两个兄弟层代替。

这个网络将两种数据作为输入,一系列的图像和这些图像中一系列的RoIs.

2.3 检测中的微调

使用back-propagation训练所有的网络参数是Fast R-CNN的一项重要能力。首先阐述一下为什么SPPnet不能更新空间池化层下面的参数。

根本原因是,当每个训练样本来自不同的图像时,通过SPP层的反向传播是非常低效的,这正是R-CNN和SPPnet的训练过程。这种低效的原因是每个RoI可能有一个大的可接受域,通常扩展到整幅图像。因为前向处理过程必须处理整个可接受区域,所以导致训练输入非常大。

我们提出了一种非常有效的训练方法,充分利用了训练过程中特征共享。在Fast R-CNN训练中,随机梯度下降方法中的mini batches被层次化采样,首先采N幅图像,然后R/N 个RoIs。严格地,同一幅图像的RoIs在前馈和反馈过程中共享计算和内存。

这个策略唯一可担心的是可能会导致训练的收敛速度变慢,因为同一幅图像中的RoIs都是相关的。这个担心在实际问题中不会出现,我们通过使用比R-CNN更小的SGD迭代速度得到了较好的结果。

除了结构性采样,Fast R-CNN使用了一种简化的训练程序,该训练程序使用了一种微调步骤可同时优化 a softmax classifier and bounding-box regressors, 而不是三个步骤,分别优化 softmax classifier, SVMs and regressors。

参考:

http://blog.csdn.net/u011534057/article/details/51241831

http://blog.csdn.net/qq_26898461/article/details/50906926
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: