【论文学习】Fast R-CNN

论文地址:Fast R-CNN

1. Abstract

Fast R-CNN也是主要应用在目标检测的一种方法,它建立在前人工作的基础上,利用深度卷积网络更加高效地对目标进行分类。与之前的工作相比,Fast R-CNN采用了一些在提升检测精度的同时也提升训练速度和测试速度的创新点。Fast R-CNN训练深度VGG16比R-CNN快9倍,测试速度快213倍,在PASCAL VOC2012数据集上mAP更高。与SPPnet相比,Fast R-CNN训练VGG16块3倍,测试快10倍,精度更高。

2. Motivation

深度卷积网络有效地提高了图片分类(image classification)和目标检测(object detection)的准确度。与图片分类相比,目标检测挑战难度更大,因为它解决起来更为复杂。由于这种复杂度,现有的训练模型的方式缓慢而且不友好。目标检测要求对目标的精确的定位,也就导致了两个基本困难。一是必须处理大量候选目标位置(proposal);二是这些候选位置仅提供了粗略定位,要实现高精度必须进一步细化。
这篇论文把精简了最先进的基于卷积神经网络的目标检测的训练过程,提出了一种一阶段(single stage)训练算法,联合学习分类object proposals和精细相应的空间位置。
R-CNN在2014年提出,它有三个缺点:
1. 多阶段流水线训练。这种训练方式步骤繁琐,首先微调网络,然后提取特征训练SVM,最后训练bounding box。
2. 训练过程空间和时间消耗都很大。从每个图片中的object proposal中提取出来的特征都要写进磁盘,这样就导致空间消耗很大。
3. 目标检测十分缓慢。测试的时候,特种从每一个测试图片中的每个object proposal提取出来而导致检测耗时长。
R-CNN主要是因为对每个object proposal进行卷积网络的前向运算而没有共享计算。SPPnet通过共享计算加速R-CNN。其主要是对整个输入图片计算一个卷积特征图,然后利用从共享的特种图中提取出的特征向量对每个object proposal进行分类。通过max pooling将候选框内的特征图转化为固定的输出来提取针对候选框的特征。多个输出大小被池化然后连接成空间金字塔池化(spatial pyramid pooling)。SPPnet的一些缺点,比如多阶段流水线训练、特征写入磁盘。但是与R-CNN不同的地方是,微调不能更新空间金字塔池化之前的卷积层,这样就限制了深层网络的精度。SPPnet之所以不能更新在空间金字塔池化层前面的权重,根本原因是在每个训练样本(即RoI)来自不同的图像时,SPP反向传播是十分低效的,而这是R-CNN和SPPnet的训练方法。这种低效源自于每个RoI都有很大的接受域,经常横跨整个输入图片。因为前向过程必须处理整个接受域,训练输入很大(通常是整个图像)。
与R-CNN和SPPne相比,Fast R-CNN除了有更好的检测质量之外,它使用多任务loss单状态训练;可以更新所有的网络层;不需要磁盘写入特征缓存。
最终结果在VGG16上进行训练,比R-CNN快9倍,比SPPnet快3倍,检测图片过程仅需0.3秒,在PASCAL VOC2012上的top准确率达到了66%,R-CNN仅有62%。

3. Design

这里写图片描述
Fast R-CNN网络首先用一些卷积层和max pooling处理整个输入图片以此产生一个特征图。然后对于每个object proposal都用一个Roi(region of interest)层从特征图中提取出一个固定大小的特征向量。每个特征向量被送进一系列的全连接层中,这些全连接层最终分成两个同级的输出层:一个计算K+1(K个类别+background)个类别的softmax概率,另一个给K个类别的每一个类都输出四个值,每组4个值表示K个类中每个类的bounding box的细化位置。
RoI pooling layer适用max pooling把任何有效的RoI内部的特征转化为一个固定大小H×W的特征图。Fast R-CNN中,RoI是一个卷积特征图的矩形窗口。RoI max pooling通过将大小伟h×w的RoI窗口分割成H×W的网格,子窗口大小为h/H×w/W,然后对每个子窗口max pooling,把输出放入网格对应的单元。Pooling操作独立地应用在每个特征图的通道中。RoI layer只是SPPnet中空间金字塔池化层的特例,因为RoI layer是一个只有一层金字塔的结构。
作者用三个预训练的ImageNet进行实验,每个网络有5个max pooling层和5-13个卷积层。(细节)预训练网络初始化Fast R-CNN时需要有三个转换:
1. 最后一个max pooling layer替换为RoI pooling layer,H、W要与网络的第一个全连接层适应。
2. 网络的最后一个全连接层和softmax由两个同级层替换(一个全连接层和K+1个类的softmax、特定类别的bounding box)。
3. 网络有两个输入:图片列表和其中的RoI列表。
为了在训练的时候充分利用特征共享,Fast R-CNN训练时,随机梯度下降(SGD,stochastic gradient descent)的mini batch是分层采样的。首先采样N张图片,然后从每个图片中采样R/N个RoI,来自同一张图像的RoI在前向和反向传播过程中共享计算和内存。N比较小就减少了mini-batch的计算量。这样会导致训练收敛变慢因为来自同一个图片的RoI是相关的。除了分层采样,Fast R-CNN使用了精简的训练过程,在微调阶段联合优化softmax分类器和bounding box回归器,而不是在三个阶段softmax分类器、训练SVM、和回归器。
Fast R-CNN网络的两个同级输出层第一个输出的是在K+1个类上的离散概率分布,第2个输出的是bounding box的回归偏置。每一个训练的RoI都用真值u和bounding box回归目标v进行标记。使用多任务损失函数L用来联合训练分类和bounding box回归。
这里写图片描述
其中, Lcls=logpu L c l s = − log ⁡ p u 是类真值的log损失。
第二个任务损失, Lloc L l o c 是定义在类u的bounding box真值元组 v=(vx,vy,vw,vh) v = ( v x , v y , v w , v h ) 和预测元组 tu=(tux,tuy,tuw,tuh) t u = ( t x u , t y u , t w u , t h u ) 之间的损失。就背景RoI而言,没有bounding box的概念,因而 Lloc L l o c 被忽略掉。就bounding box回归,损失函数使用
这里写图片描述
其中,
这里写图片描述
smooth函数是一个鲁棒的 L1 L 1 损失,比R-CNN和SPPnet的 L2 L 2 损失对异常值更不敏感。回归目标无界时, L2 L 2 训练的损失可能需要仔细调整学习率来防止梯度爆炸。公式1中的控制两种损失之间的平衡
在fine-tuning过程中,每一个SGD的mini-batch由2个图片组成,均匀地随机选择。mini-batch的大小通常为128,每个图片采样64个RoI。反向传播需要计算RoI池化层的偏导。
作者采用两种方式实现尺度不变目标检测的方法:
· brute force学习
· 使用图像金字塔
如果是brute force,每一个图片被处理成一个预设定的大小,网络必须直接从训练数据中学习尺度不变目标检测。相反,多尺度方法通过一个图像金字塔向网络提供了近似的尺度不变性。在测试的时候,图像金字塔用来对每一个object proposal进行近似缩放归一化。
在利用Fast R-CNN进行目标检测的时候,在网络微调结束之后,检测过程就相当于运行前向传播过程,网络把一张图片和待计算概率的 R R 个object proposal列表作为输入,对于每个测试的RoI r,前向传播输出一个类别后验概率分布 p p 和一个预测的相较于r的bounding box偏置集合。
对于整个图片的分类,全连接层的时间消耗与卷积层相比是很小的,但是在检测的时候,由于RoI数量的巨大,接近一半前向计算的时间都花在全连接层。使用截断SVD(truncated SVD)可以轻易的对大型全连接层进行加速。
这里写图片描述
利用SVD,可以把一个u×v权重矩阵W的层近似分解为
这里写图片描述
其中,U是一个u×t的矩阵,包含W的前t个左奇异向量, t ∑ t 是一个t×t的对角矩阵,包含W的前t个奇异值,V是一个v×t的矩阵,包含W的前t个右奇异向量。截断SVD把参数量从 uv u v 减少到了 t(u+v) t ( u + v ) 。为了压缩网络,与W对应的单全连接层由两个全连接层替代,在他们之间没有非线性激活。这些层中的第一层用权重矩阵 tVt ∑ t V t (没有biases),第二层用权重矩阵U。

4. Experimental

实验用了三个预训练的ImageNet模型,分别是三个大中小的模型(L,M,S)。L是非常深的VGG16模型,M是VGG_CNN_M_1024,S是使用R-CNN的AlexNet。

VOC 2010 和2012 上的结果

这里写图片描述
Fast R-CNN在VOC 2012上的top结果是65.7%。VOC 10上,SegDeepM的mAP比Fast R-CNN略高(67.2% vs 66.1%)。

VOC 2007的结果

在VOC2007上主要是Fast R-CNN和R-CNN、SPPnet之间的比较。所有的方法都来自于同样的预训练的VGG16的网络并且使用了bounding box回归。SPPnet在训练和测试的时候使用5个尺度。Fast R-CNN比SPPnet性能好说明了使用单尺度训练和测试,微调卷积层可以使mAP大幅度提升。
这里写图片描述

训练和测试的时间

这里写图片描述
表4比较了Fast R-CNN、R-CNN、SPPnet在不同大小的模型上的训练时间、和测试速率、测试加速还有在VOC2007上的mAP。对于VGG16,没有使用截断SVD,Fast R-CNN比R-CNN处理图片快了146倍,使用的话则快了213倍。训练时间减少了9倍。与SPPnet相比,Fast R-CNN训练快了2.7倍,没有使用截断SVD测试快了7倍,使用则快了7倍。
截断SVD可以把检测时间缩短30%以上,mAP也仅有很小的下降(0.3%),无需再模型压缩后进行额外的微调。

5. Analysis

这里写图片描述
多任务训练避免管理顺序任务的管道,因而多任务训练十分方便。测试多任务训练能否提升检测精度的实验结果在表6中显示,表6中的模型没有bounding box回归。结果证实多任务训练相对于单独的分类训练提高了精度。
这里写图片描述
实现尺度不变检测有两种策略:brute force(单尺度)和图像金字塔(多尺度)。表7显示了1个尺度或者5个尺度进行训练和测试S和M模型的结果。多尺度方法消耗了大量的计算时间但是mAP增加却很少。在L模型下(VGG16),实施方法局限于单尺度,但是却得到了66.9%的mAP。表1中最后一列的实验结果也说明更多的训练数据会有更好的mAP。
这里写图片描述
表8比较softmax和SVM两种分类器那种效果更好。在S、M、L三种网络中,使用softmax的结果都比相应的使用SVM分类器的mAP要高。与先前的多级训练方法相比,“一次性”微调是足够的。softmax与SVM相比,在分类RoI的时候引入了较少的类之间的竞争。作者也做了实验证明随着候选区域的增加而mAP会在某个峰值之后下降。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值