卷积神经网络——目标检测之Fast R-CNN论文翻译

论文连接
https://arxiv.org/abs/1504.08083

相关论文翻译链接
R-CNN:https://blog.csdn.net/itlilyer/article/details/107190083
Faster R-CNN:https://blog.csdn.net/itlilyer/article/details/108049850
Mask R-CNN:https://blog.csdn.net/itlilyer/article/details/108441734

0. 摘要

本文针对目标检测问题提出了基于区域的快速卷积网络方法(Fast Region-based Convolutional Network:Fast R-CNN)。Fast R-CNN建立子以前工作的基础上,使用深度卷积网络对目标对象进行有效的分类。与以往的实现方案相比,Fast R-CNN使用了几项创新技术来提高训练和测试的速度,同时也提高了检测的精度。**Fast R-CNN与R-CNN相比,训练超深VGG16网络的速度快了9倍,测试的执行效率快了213倍,并且在PASCAL VOC 2012上达到了更高的mAP。**与SPP网络相比,Fast R-CNN训练VGG16快了3倍,测试快了10倍,而且精度更高。Fast R-CNN是用python和C++(使用Caffe)来实现的,可以在https://github.com/rbgirshick/fast-rcnn获取源码,遵循开源MIT License。

1. 介绍

最近,通过使用深度卷积网络显著的提高了图片分类和目标检测的精度。与图片分类相比,目标检测更具有挑战性,需要更加复杂的方法来解决检测问题。由于这些复杂性,当前方法的模型训练需要通过多个阶段实现,并且速度慢而且不够优雅。
**这些复杂性是由于目标检测需要精准的定位目标,这就带来了两个主要的挑战。第一,必须处理大量的候选目标位置(通常称为"提议、建议")。第二,这些候选位置只是一个粗略的位置,必须对其精化才能实现精确定位。**这些问题的解决方案需要考虑到速度、精度和简单易实现,并取折中方案。
本文中,我们精简了基于卷积网络的最新目标检测方法的训练过程。我们提出了只有一个阶段的训练算法,在该阶段中既可以进行候选目标分类的训练也可以候选目标的位置优化训练。
该方法可以训练一个非常深的检测网络(VGG16),比RCNN快9倍,比SPPnet快3倍。在执行过程中,该检测网络处理一张图片用0.3秒(不包括生成候选区域的时间),同时在PASCAL VOC 2012上最高精度mAP达到了66%(RCNN 62%)。

1.1 R-CNN 和 SPPnet

RCNN通过使用深度卷积网络来为候选目标进行分类,获得了非常好的目标检测精度。但是,RCNN的缺点也非常的明显:

  1. 训练需要通过多个阶段完成。 首先,第一阶段RCNN使用选出的目标通过log损失函数来对卷积网络进行微调。然后,第二阶段将卷积网络的特征值传入SVMs。用这些SVM替换微调中训练的softmax分类器,作为新的目标检测器。第三阶段,训练边框回归。
  2. 训练消耗大量的空间和时间成本。 对于SVM和边框回归的训练,需要为每张图片中的每个选出的目标来提取特征,并写入硬盘。对于非常深的网络,像VGG16,如果用GPU处理VOC07的trainval数据集的5000张图片需要花费2.5天。这些特征值还会占用数百GB的存储空间。
  3. 检测速度慢。 测试时,要从每张测试图片中的每个选中的目标中提取特征。VGG16的检测速度为47s/image(一个GPU上)。
    RCNN速度慢,主要原因是它要为每一个候选目标(object proposal) 都要进行前向传播的计算,计算结果在这些候选目标之间不能够共享。空间金字塔池化网络(SPPnets)就是通过共享计算实现加速的RCNN升级版。 SPPnet为整张图片计算出一个特征图(feature map),然后使用从这个特征图中抽取出候选目标所对应的特征值进行分类计算。 将特征图中候选目标对应的那部分特征值,使用最大池化(max_pooling)成固定大小(比如:6x6),通过这种方式来提取候选目标(proposal)的特征值。池化会有多种尺寸的结果,然后将他们连接成为空间金字塔池。 SPPnet将RCNN的速度提高了10到100倍。由于候选区域特征提取更快,训练速度也减少年3倍。
    SPPnet同样有明显的弱点。与RCNN一样,也是多阶段训练,包括:提取特征值、使用log损失函数对网络微调、训练多个SVM分类器、最后拟合边界回归。特征值同样需要写入硬盘。 与RCNN不同的是,SPPnet中用的微调算法不能更新空间金字塔池化层前面的卷积层的参数。不出所料,这种约束(固定的卷积层)限制了非常深的网络的精度。

1.2 贡献

我们提出了一个新的训练算法解决了RCNN和SPPnet的缺点,并且提升了速度和精度。我们称这个方法为Fast RCNN,因为它的训练和测试速度相对较快。Fast RCNN有以下几个优点:

  1. 比RCNN和SPPnet的检测指标(mAP)更高。
  2. 训练只有一个阶段,使用多任务的loss
  3. 可以通过训练更新网络中所有层的参数
  4. 不需要硬盘空间来缓存特征值
    Fast RCNN是用Python和C++(Caffe)实现的,可以在https://github.com/rbgirshick/fast-rcnn获取,基于开源的MIT License。
    在这里插入图片描述

2. Fast RCNN的架构和训练

图1中展示了Fast RCNN的架构。Fast RCNN将整张图片和一组候选目标(object proposal)作为输入。**首先,该网络通过几个卷积和池化层为整张图片生成一个卷积特征图(feature map)。然后,使用感兴趣区(ROI)池化层为每个候选目标从特征图中提取一个固定大小的特征向量。**所有的特征向量都被输入到一系列的全连接层,最后会分成两个并行的输出层:一个输出用来计算K个类别加上一个背景类别(个人理解:不属于k个类别的其他所有种类)的概率估计值;另一层的输出是每一个类别的四个实数(个人理解:输出的是一个候选目标对应到所有类的四个值)。每四个实数标记了一个类别的准确位置的坐标。

2.1 RoI池化层

RoI池化层**使用最大池化把所有关注的有效区域内的特征值转换为具有固定大小 HxW 的特征图(例如,7x7),H和W是该层的超参,不受任何RoI的影响。**在本文中RoI是卷积特征图中的一个矩形。每个RoI都是四元组(r,c, h, w),(r,c)指定矩形的左上角,(h,w)指定高和宽。
RoI max pooling的实现过程:将大小为h x w的RoI 窗口划分为H x W个子窗口组成的网格,每个子窗口的大小大约是h/H x w/W,然后对每个子窗口执行max pooling作为对应网格单元的输出值。(简单说就是先划分成H x W的网格,然后取每个格子中的最大值)。对于特征图的每个通道要像标准的最大值池化(max pooling)一样单独执行池化操作。RoI层值是SPPnet中空间金字塔池化的一个特例,只有一个金字塔层。我们使用[11]中给定的子窗口池化计算方法。

2.2 使用预训练网络初始化Fast RCNN

我们实验了三个预训练的ImageNet网络,每个网络都包含5个最大池化层,卷积层数从5到13不等(4.1章节有更详细的描述)。如果要用预训练的网络来初始化Fast RCNN,需要经过三次转换:
第一,将最后一个最大池化层替换为RoI 池化层,RoI配置的H和W要与网络的第一个全连接层匹配(例如,VGG16中H=W=7)。
第二,将网络最后的全连接层和softmax(这是训练用来做1000类别的ImageNet分类的)替换为前面描述过的两个并行层(一个全连接层和K+1分类的softmax和特定类别的边框回归,个人理解:这里应该是分类和回归前面都带有一个全连接层)
第三,网络的输入修改为两个:一组图片和这些图片对应的RoI。

2.3 检测微调

用反向传播来训练网络所有的权重是Fast RCNN非常重要的能力。 首先,我们解释一下为什么SPPnet不能更新空间金字塔池化层前面的卷积层权重。

根本原因是来自不同图片的训练样本(也就是RoI)在方向传播通过SPP的各层的效率是非常低的, 而SPP和RCNN训练正是用的这种方式。效率地下的原因是每个RoI可能有一个非常大的感受野&#x

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值