经典论文重读---目标检测篇(二):Fast RCNN

核心思想

RCNN的缺点

R-CNN is slow because it performs a ConvNet forward pass for each object proposal, without sharing computation.

SPPnet的缺点

SPPnet also has notable drawbacks. Like R-CNN, training is a multi-stage pipeline that involves extracting features, fine-tuning a network with log loss, training SVMs, and finally fitting bounding-box regressors. Features are also written to disk

FAST RCNN贡献

The Fast R-CNN method has several advantages:

  1. Higher detection quality (mAP) than R-CNN, SPPnet
  2. Training is single-stage, using a multi-task loss
  3. Training can update all network layers
  4. No disk storage is required for feature caching

引言部分

深度卷积网络在图像识别和目标检测领域取得了很大的成功。目前的方法:RCNN、SPPnet、overfeat、segDeepM都有一定的局限性,他们都是多阶段的pipline,速度慢,结果不精确。

模型与网络越来越复杂是因为对物体定位的准确性要求越来越高,由此带来的两大挑战:

  • 要产生大量的候选框
  • 候选框只是一个粗略的定位,还需要进一步调整才能达到精确定位

由此作者提出了Fast RCNN,采用的是VGG16网络架构,并在当时取得了state-of-the-art的效果。

之后作者详细解释了下RCNN与sppnet的缺点,对于RCNN来说,主要有:

  • Training is a multi-stage pipeline.首先对卷积网络进行fine-tune,之后训练SVM分类器来代替采用softmax激活函数的全连接层,在之后训练一个边框回归器
  • Training is expensive in space and time.训练时间空间的复杂度都很高
  • Object detection is slow.检测速度慢

作者一针见血的指出,RCNN比较慢的原因在于:它对每一个proposal都过了一遍卷积网络,而SPPnet就没有采用这种策略,作者总结了下SPPnet的优点与缺点:

  • 优点在于:SPPnet计算出整个图像的feature map,然后为每个候选区域从feature map中提取出相应的feature vector(通过max pooling得到)
  • 缺点在于:SPPnet也是一个multi-stage pipeline,并且无法更新卷积层的参数

FAST RCNN

模型结构如下:

这里写图片描述

其中roi pooling层的引入对与速度的提升起到了至关重要的作用,作者对ROI pooling层进行了详解。roi pooling layer会通过max pooling的方式一个region proposal对应的feature map变为一个小型的feature map(在原文中是7x7的feature map)。根据原文可得具体操作如下:

  1. 根据输入的image得到对应的feature map,找到roi在feature map上对应的区域位置。
  2. 将roi在feature map上对应的区域位置划分成大小相同的 H×W H × W 个section(原文中是 7×7 7 × 7 )
  3. 对每一块section采用max pooling得到该roi最终的feature map

具体例子如下,来源于deepsense

这里写图片描述

FAST RCNN论文细节

rcnn,sppnet与FRCN在fine-tune上的差异

首先sppnet不能够通过 spatial pyramid pooling layer更新权值,而FRCN则可以通过反向传播更新权值。因为与RCNN一样,SPPnet每个ROI都来自不同的图片。并且每个ROI都有着非常大的感受野,而前向传导处理的是整个感受野,故训练的输入非常大。而对于FRCN,SGD minibatch是通过先随机采样N张图片,再从每张图片随机采样R/N个ROI作为一个minibatch的。(原文中 N=2,R=128 N = 2 , R = 128 )

除了以上的hierarchical sampling策略,FRCN并没有分阶段训练,而是采用streamlined training process直接对 softmax classifier and bounding-box regressors进行fine-tune和优化。

loss函数的设计

FAST RCNN有两个输出层:

  • 第一个输出: p=(p0,...,pk) p = ( p 0 , . . . , p k ) ,对于 k+1 k + 1 类物体每个的可能性大小, p p 由softmax层计算得出
  • 第二个输出:tk=(txk,tyk,twk,thk),即对于所有K种物体来说,他们的边框位置

文中使用联合了分类损失和边框回归损失作为多任务损失函数:

L(p,u,tu,v)=Lcls(p,u)+λ[u1]Lloc(tu,v)Lcls=logpuLloc(tu,v)=i(x,y,w,h)smoothL1(tuivi)smoothL1(x)={0.5x2|x|0.5if|x|<1otherwise(1) (1) L ( p , u , t u , v ) = L c l s ( p , u ) + λ [ u ≥ 1 ] L l o c ( t u , v ) L c l s = − l o g p u L l o c ( t u , v ) = ∑ i ∈ ( x , y , w , h ) s m o o t h L 1 ( t i u − v i ) s m o o t h L 1 ( x ) = { 0.5 x 2 i f | x | < 1 | x | − 0.5 o t h e r w i s e

其中每个RoI区域都有 ground-truth class u和ground-truth bounding-box regression target v。即 v=(vx,vy,vw,vh) v = ( v x , v y , v w , v h ) ,当 u1 u ≥ 1 [u1] [ u ≥ 1 ] 取值为1,否则为0(即为背景)。超参数 λ λ 是用来调整两个任务的损失权重的,在文中设置为 λ=1 λ = 1 .

通过RoI池化层的反向传播

普通的max pooling层的反向传播示意图如下,参考博客

这里写图片描述

通过反向传播求出梯度,对于输入层节点 xi x i 和输出层节点 yj y j

Lxi={0,Lyj,δ(i,j)=0δ(i,j)=1 ∂ L ∂ x i = { 0 , δ ( i , j ) = 0 ∂ L ∂ y j , δ ( i , j ) = 1

因为由链式法则有 Lxi=Lyjyjxi ∂ L ∂ x i = ∂ L ∂ y j ∂ y j ∂ x i ,而 yjxi=1 ∂ y j ∂ x i = 1 , δ(i,j) δ ( i , j ) 的含义表示为 xi x i 不在 yj y j 范围内,或者 xi x i 不是最大值

而对于roi pooling layer的反向传播,作者则是采用如下方法:

这里写图片描述

对于不同候选区域,节点8都存在梯度,所以反向传播中损失函数 L 对输入层节点 xi x i 的梯度为损失函数 L 对各个有可能的候选区域 r( 被候选区域r的第j个输出节点选为最大值 )输出 yrj y r j 梯度的累加:

Lxi=rj[i=i(r,j)]Lyrj ∂ L ∂ x i = ∑ r ∑ j [ i = i ∗ ( r , j ) ] ∂ L ∂ y r j

[i=i(r,j)] [ i = i ∗ ( r , j ) ] 表示输入层第 i 节点是否被候选区域 r 的第 j 个输出点选为最大值输出.

尺度不变性

有两种实现尺度不变性的方式:

  • “brute force” learning(蛮力学习法)
  • image pyramids(图像金字塔)

对于蛮力学习法,每个图像在训练和测试阶段被预先处理成特定的大小,期望网络能够学习到尺度不变性。

对于多尺度方法,主要通过图像金字塔提供尺度不变性。在测试阶段,使用图像金字塔将每个object proposal归一化。再训练阶段,则在每次对图像采样时对金字塔的尺度进行随机采样,以此作为数据增强。

作者说到采用小网络时才进行多尺度训练,因为后面的实验证明类似于vgg16的深层网络可以很好的从单一尺度学习尺度不变性。

截断奇异值分解进行FRCN检测

SVD(Singularly Valuable Decomposition)奇异值分解主要用于数据压缩,其表明任意矩阵均存在满秩分解,如下:

这里写图片描述

具体解释和证明过程详见博客

那么截断SVD在这里有什么用处呢?对于单纯的图像分类,卷积层花费的时间比全连接层计算的时间多得多。但对于检测,由于RoI数量众多,基本上一般的前向传播时间用于对这些RoI在全连接层进行计算:

这里写图片描述

列如对于全连接层的输出Y与输入X,有如下关系:

Y=W×X Y = W × X

其中W是权重矩阵,其维度为
u×v u × v
,而使用SVD,我们可以讲权重矩阵W近似表示为:
W=UDVT W = U D V T

矩阵U的维度为
u×t u × t
,矩阵D是一个
t×t t × t
的对角矩阵(包含矩阵W的前t个奇异值),矩阵V的维度为
v×t v × t
(包含矩阵W的前t个右奇异值)。通过截断SVD,可以将计算的维度从 uv u v 降到 t(u+v) t ( u + v ) ,并且当 t<<min(u,v) t << m i n ( u , v ) 时,计算效率将得到显著提升,此时单个全连接层被两个全连接层替代:

这里写图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值