fast RCN论文笔记

Fast-RCNN提高了 训练和测试上的速度+准确率

提出了一种单阶段训练算法同时可以用来分类目标的proposal和他们的空间位置

1.1  RCNN 的三个缺陷:
  • 训练是一个三阶段的pipeline:fine-tunes(ConvNet)+SVM(ConvNet features)+bounding-box regressors
  • SVM和BB regressors从proposal中提取出来的特征需要存到硬盘上,费时费空间
  • 测试阶段从图片中提取特征耗时太多
SPP通过共享计算,对一张图片一次卷积——得到一个共享特征图shared feature map,抽取feature vectors进行分类。从shared feature map里面的部分(对应proposal)抽取特征经过max-pool固定大小(如6x6),再传入SPP。

        SPP的缺陷:与RCNN相同,不同点在于SPP的调优fine-tune算法没法更新SPP前的卷积层,SPP的微调只更新SPP层后面的全连接层,限制了网络的精度。(原因下文给出)


2  Fast -RCNN 的架构和训练

fast RCN论文笔记
fast RCN论文笔记
fast RCN论文笔记


输入:an image + a set of object proposals(2000个proposals)

  1. an image通过深度网络产生一个conv feature map
  2. feature map与proposal是ROI projection存在映射关系,对于每一个proposal,从feature map中通过ROI pooling layer 提取固定大小的feature vector,传入一系列的FC层产生两个分支的输出层
  3. 两个输出层:一个是分类的estimate概率分数,另一个是每一种类别的四个值,用于调整refine位置。((a fully connected layer and softmax over K +1 categories and category-specific bounding-box regressors
    除了提取proposals其他过程是joint training的,测试阶段做一个NMS(非极大值抑制)


2.1 The ROI pooling layer
每个ROI由四个tuple(r, c, h, w)定义
将h x w 的ROI窗口分割为 H X W 的格子grid(每个子窗口的大小为h/H x w/W )然后通过max-pool的方法将子窗口与格子对应起来。
这个层可以理解为SPP-net的SPP层中的只有一层金字塔的特例。

2.2 从预训练网络中初始化
预训练的网络有五个max-pooling layers和5-13个卷积层
用预训练的网络初始化一个Fast-RCNN,需要三个transformation变换过程:
  1. 最后一个max pooling layer被RoI pooling layer替换(类似SPP),这个RoI pooling layer可以与网络的第一个FC兼容
  2. 网络最后的全连接层与softmax(原本是1000个类)被两个姐妹分支层替代(描述上面有)
  3. 网络被改成采取两个输入:N个图片和R个RoI



2.3 为检测设计的fine-tuning
使用后馈传播训练网络权重是Fast-RCNN最重要的能力

    为什么SPP-net中无法更新SPP前的权重:
博客说法:这是因为卷积特征是线下计算的,从而无法在微调阶段方向传播误差。而Fast-RCNN中则是通过image-centric sampling提高了卷积层特征提取的速度,从而保证了梯度可以通过SPP层(即ROI pooling层)反向传播。
反向传播需要计算每一个ROI感受野的卷积层,通常会覆盖整个图像,如果一个一个用ROI centric sampling的话又慢有耗内存

原文:The root cause is that back-propagation through the SPP layer is highly inefficient when each training sample (i.e. RoI) comes from a different image, which is exactly how R-CNN and SPPnet networks are trained. The inefficiency stems from the fact that each RoI may have a very large receptive field, often spanning the entire input image. Since the forward pass must process the entire receptive field, the training inputs are large (often the entire image).
当训练来自不同图片的样本的时候,后馈穿过SPP层是低效的,这种低效是因为,每一个ROI可能有一个非常大的感受野(经常padding到一整张图片)训练输入很大。

SPPnet采用了ROI-centric sampling的方法:从所有的图片的所有的ROI中均匀取样,这样每个SGD的mini-batch中包含了不同图像中的样本。



FRCN的有效训练方法:
(也是利用了特征共享)
SGD(stochastic gradient descent)的minibatch是hierarchically 采样的:采样N张图片+每张图片采样R/N个ROIs
(从同一张图片提取的ROI共享计算和内存)(使用N=2 和 R=128时,训练时间比从128张图片采样一个ROI要快64倍,后者是RCNN和SPP采用的方式 )

Fast R-CNN uses a streamlined training process with one fine-tuning stage that jointly optimizes a softmax classifier and bounding-box regressors
只有一个微调阶段的流水线处理,jointly同时最优化 softmax classifier和 BB regressors

fine-tuneing包含多个过程:多任务损失(muti-task loss)、小批量取样(mini-batch sampling、ROI pooling层的反向传播(back propagation through ROI pooling layers)、SGD超参数(SGD hyper parameters)

多任务损失函数Muti-task loss
两个姐妹分支输出层:
  • 离散概率分布p=(p0,p1,p2,,,,pk) over K+1categories
  • BB回归:fast RCN论文笔记,k表示类别的索引

把两个输出的损失写到一起:
fast RCN论文笔记
u是正确的类别,v是BB 回归的目标
其中,第一项是正确分类的损失函数:
fast RCN论文笔记

第二项是位置坐标的损失函数:
BB regression target目标值:
 fast RCN论文笔记
预测值:
fast RCN论文笔记
[u>=1]表示当u>1取1 否则取0
对于背景ROI,没有ground-truth 的记录notion,所以第二项直接忽略
fast RCN论文笔记

L1 loss了解一下,文中说比L2 更less sensitive to outliers(离散点),即更加鲁棒

λ控制两个损失函数之间的平衡,实验中设为1

Mini-batch sampling:
上面有说,hierarchically sampling,mini-batch大小为R时,每张图片采样R/N个
在选取的样本中,25%的ROI是IOU(目标与背景)超过0.5的,75%是IOU在[0.1,0.5)之间的,小于0.1的视为难以辨认,训练过程中图片有0.5的概率进行水平翻转horizontally flip



通过ROI pooling layer的后馈传播

x是pooling的输入单元,y是pooling的输出单元,
Yrj 部分在纸上

ROI pooling层的后馈函数计算损失函数对每个输入变量x的偏导数:
fast RCN论文笔记

对于每一个mini-batch 的ROI r和每一个输出单元Yrj,若果y是x pooling来的,损失函数L对Y的偏导数计入累积值。
这一块不是很懂


SGD超参数
没什么好讲的,见原文

2.4 Scale invariance尺度不变性
SPPnet使用了两种实现尺度不变的方法:
  • single-size training:在训练阶段和测试阶段,每一张图片都以一个提前定义好的大小进行处理。(博客:直接将image设置为某种scale,直接输入网络训练,期望网络自己适应这个scale,学习尺度不变性
  • multi scale training:生成一个图像金字塔,在训练阶段,每次从一张图像的金字塔尺寸随意采样,在测试阶段,对于每一个目标proposal,图像金字塔被用尺度归一化。(不是很懂)
本文使用了第一种方法,以为第二种耗时性能提高不明显。



3.1 使用truncated SVD来加速检测
在这里我们加速的是全连接层,当ROI的数量比较多的时候很有效

truncated 截短的,截平的,截断的,截成平面的

使用SVD,一个uxv的矩阵可以如下分解:
fast RCN论文笔记
右边分别对应 [u x t] [t x t] [v x t]
  1. U是一个u x t的矩阵包括(comprise)W的前t个left的奇异向量 U is a u × t matrix comprising the first t left-singular vectors of W
  2. E 是一个对角矩阵,包含W中 t个最top的singular values 
  3. V 类似上面两个,包含右

Truncated SVD将参数的数量从uv减少到t*(u+v) ,t要远远小于min(u,v)
一个对应到W的全连接层被两个全连接层代替,中间以一个 低维数据相连,没有非线性部分
fast RCN论文笔记

论文解决几个问题:

  1. 哪些层需要fine-tune
对于较深的网络,穿过ROI pooling layer的训练是很重要的,即较深的网络中,卷积层的微调是很有意义的,效果有很大的差异,而较浅的网络中,全连接层的微调已经足够。
公认事实:conv1层是不需要微调的,没意义
在论文的实验中,conv3-conv13上的微调是necessary的

  1. 多任务训练的作用
  • 避免了多阶段的流水线训练任务
  • 提高了精度,准确率

  1. SVM outperform softmax?
FRCN使用的是softmax分类器,RCNN和SPP使用的是SVM,结果softmax的效果稍微比SVM好一点点。

  1. 并非proposal的数量越多越好,甚至会slightly hurt accuracy





state-of-the-art最先进的,已经发展的,达到最高水准的


















FRCN大致就是一个joint training 版本的SPP-net,改进如下:


花了一天整理的