Fast R-CNN (2015)阅读笔记

Fast R-CNN 原文链接

一、解决问题

当前的方法采用多级流水线(卷积、SVM、位置回归都分别单独训练)的方式训练模型,既慢且精度不高。

二、解决方法

使用多任务损失的单阶段训练算法,联合学习候选框分类和修正他们的空间位置。

(一)结构和流程

Fast R-CNN网络将整个图像和一组候选框(通过SS算法在原图中得出候选框,在经过计算得出候选框在特征图中的位置,有其左上角坐标(r,c)及其高度和宽度(h,w)的四元组(r,c,h,w)定义)作为输入。网络首先使用几个卷积层(conv)和最大池化层来处理整个图像,以产生卷积特征图。然后,通过**RoI池化层(可以看做一种经过简化的特殊SPP层)**对于每个候选框从特征图中对应的部分提取固定长度的特征向量。每个特征向量被送入一系列全连接层中,其最终分支成两个同级输出层 :一个输出K个类别加上1个背景类别的Softmax概率估计,另一个为K个类别的每一个类别输出四个实数值(4个值表示K=K个类别的一个类别的检测框位置的修正)。如下图。
在这里插入图片描述

(二)具体细节

1.ROI池化层

RoI池化层使用最大池化将任何有效的RoI内的特征转换成具有H×W(例如,7×7)的固定尺度的小特征图。RoI最大池化通过将大小为h×w的RoI窗口分割成H×W个网格,子窗口大小约为h/H×w/W,然后对每个子窗口执行最大池化,并将输出合并到相应的输出网格单元中。同标准的最大池化一样,池化操作独立应用于每个特征图通道。RoI层只是SPP-net中使用的空间金字塔池层的特殊情况,其只有一个金字塔层

2.使用预训练卷积初始化fast R-CNN网络

当使用预训练网络初始化fast R-CNN网络时,要经历三个变换:
1.最后的最大池化层由RoI池层代替,其将H和W设置为与网络的第一个全连接层兼容的配置(例如,对于VGG16,H=W=7)。
2.网络的最后一格全连接层和Softmax(其被训练用于1000类ImageNet分类)被替换为前面描述的两个同级层(全连接层和K+1个类别的Softmax以及类别对应的检测框回归)。
3.网络被修改为采用两个数据输入:图像的列表和这些图像中的RoI的列表。

3.微调(没有理解明白)

用反向传播训练所有网络权重是Fast R-CNN的重要能力。首先说明为什么SPP-net无法更新空间金字塔池化层之前的卷积层权重。
根本原因是当每个训练样本(即RoI)来自不同的图像时,通过SPP层的反向传播是非常低效的,这是由训练R-CNN和SPPnet网络的方法导致的。
低效的部分是因为每个RoI可能具有非常大的感受野,通常跨越整个输入图像。由于正向传播必须处理整个感受野,训练输入很大(通常是整个图像)。
我们提出了一种更有效的训练方法,通过image-centric sampling的方式对训练期间的特征共享。在Fast RCNN网络训练中,随机梯度下降(SGD)的小批量是被分层采样的,首先采样N个图像,然后从每个图像采样R/N个RoI。关键的是,来自同一图像的RoI在向前和向后传播中共享计算和内存。减小N,就减少了小批量的计算。例如,当N=2和R=128时,得到的训练方案比从128幅不同的图采样一个RoI(即R-CNN和SPPnet的策略)快64倍。

这个策略的一个令人担心的问题是它可能导致训练收敛变慢,因为来自相同图像的RoI是相关的。这个问题似乎在实际情况下并不存在,当N=2和R=128时,我们使用比R-CNN更少的SGD迭代就获得了良好的结果。
除了分层采样,Fast R-CNN使用了一个精细的训练过程,在微调阶段联合优化Softmax分类器和检测框回归,而不是分别在三个独立的阶段训练softmax分类器(为了训练卷积层),SVM和回归器。

4.损失函数

(1)分类损失函数

交叉熵损失函数。因为标签是one-hot形式,所以只由真实类别u对应的softmax结果概率觉得。 L c l s ( p , u ) = − l o g p u L_{cls}(p,u)=-logp_{u} Lcls(p,u)=logpu

(2)位置回归损失函数

smooth L1损失函数,比较真实分类u对应的预测平移缩放参数 t u = ( t u x , t u y , t u w , t u h ) t_{u}=(t_{ux},t_{uy},t_{uw},t_{uh}) tu=(tux,tuy,tuw,tuh) 和真实平移缩放参数 v = ( v x , v y , v w , v h ) v=(v_{x},v_{y},v_{w},v_{h}) v=(vx,vy,vw,vh) 的差距:
L l o c ( t u , v ) = ∑ i ∈ x , y , w , h s m o o t h L 1 ( t u i − v i ) L_{loc}(t_{u},v)=∑_{i∈{x,y,w,h}}smooth_{L1}(t_{ui}−v_{i}) Lloc(tu,v)=ix,y,w,hsmoothL1(tuivi) s m o o t h L 1 ( x ) = { ( x ) = 0.5 x 2 , ∣ x ∣ &lt; 1 ∣ x ∣ − 0.5 , o t h e r w i s e s smooth_{L1}(x)= \begin{cases} \mathcal(x)=0.5x^{2}, &amp;\text{$|x|&lt;1$}\\ \mathcal|x|−0.5, &amp;\text{$otherwises $} \end{cases} smoothL1(x)={(x)=0.5x2,x0.5,x<1otherwises

(3)总体损失函数

L ( p , u , t u , v ) = L c l s ( p , u ) + λ [ u ≥ 1 ] L l o c ( t u , v ) L(p,u,t_{u} ,v) = L_{cls}(p,u) + λ[u ≥ 1]L_{loc}(t u ,v) L(p,u,tu,v)=Lcls(p,u)+λ[u1]Lloc(tu,v)当u=0时(背景)λ=0,即识别为背景的情况下,位置回归不参与损失函数计算。当u=1,2,3,…,k(第1,2,3,…,k类)时,λ=1。

5.奇异值分解(SVD)

图像分类任务中,用于卷积层计算的时间比用于全连接层计算的时间多,而在目标检测任务中,selective search算法提取的建议框比较多(约2k),几乎有一半的前向计算时间被花费于全连接层,就Fast R-CNN而言,RoI池化层后的全连接层需要进行约2k次计算,因此在Fast R-CNN中可以采用SVD分解加速全连接层计算。
在实现时,相当于把一个全连接层拆分为两个全连接层,第一个全连接层不含偏置,第二个全连接层含偏置。
实验表明,SVD分解全连接层能使mAP只下降0.3%的情况下提升30%的速度。

三、效果

Fast R-CNN训练VGG16网络比R-CNN快9倍,测试时间快213倍,并在PASCAL VOC上得到更高的精度。
Fast R-CNN训练VGG16网络比SPP-net快3倍,测试速度快10倍,并且更准确。

参考

Fast R-CNN论文详解
【论文翻译】Fast R-CNN

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值