欢迎光临 x-algo
关注算法在工业界应用
Hi, 这是一个关注大数据算法在工业界应用的网站

Fast R-CNN结构介绍

看本文之前最好已经了解RCNNSPP-net,被SPP-net暴漏各种RCNN的弊端之后,RCNN作者做了升级,搞出来了Fast RCNN,无论是训练还是测试速度都比SPP-net要快,并且效果好。

结构

QQ20170113-3

现在整个结构开始变得比较简洁,借助SPP-Layer的思想,作者搞出来了「RoI pooling layer」,其实是换汤不换药。同时,不再使用线性SVM作为分类器,而直接变为softmax。

RoI pooling layer和SPP-layer的区别是,只有一种「pyramid level」,也就是只有一种固定大小,不像SPP-layer有多种。

Initializing from pre-trained networks

本文选择了三个预训练好的网络结构(Alexnet、VGG_CNN_M_1024、VGG16),并对网络结构进行下面三个修改:

  1. 将最后的pooling层改为固定大小的RoI Pooling层
  2. 将分类和检测放到一起,全连接后面分出来两个「兄弟」分支分别做分类和检测
  3. 输入变为一幅图+RoI列表

Fine-tuning for detection

由于输出的地方有两个label,所以损失函数需要考虑两部分,具体的损失函数为:

\(L=(p, u, t^u, v) = L_{cls}(p, u) + \lambda[u \ge 1]L_{loc}(t^u, v)\)

训练的时候并不是将一个RoI当做一个训练样本,逻辑上其实是将一个图片当做一个训练样本,前向传播的时候使用整个图进行,反向传播的时候同一个batch中同一个图共享参数,从而实现训练速度的极大提升。

Mini-batch sampling

训练中每个batch中有两张图,每个图有50%概率进行翻转,然后从中随机抽样64个RoI,其中正负样本的选取方式为:

  • 其中有25%的RoI中包含ground truth的50%(也就是有25%是正样本),lable值u>=1。
  • 剩余的包含ground truth比例为[0.1,0.5]标记为负样本(u=0).

Back-propagation through RoI pooling layers

多RoI会给训练带来一个问题,前向传播的时候没有问题,反向传播的时候就会出现多个RoI在pooling层冲突的情况;如果是max pooling,不冲突的时候选择max pooling来源反向传播即可,冲突的时候其实操作也很简单,就是直接累加

缩放不变性

  • 通过训练不同大小的模型
  • 选择样本的时候通过对样本(整图)随机的缩放

检测

再进行test的时候,每一个RoI都需要在全连接层进行计算,如果RoI特别多,就会导致计算效率的下降。所以,可以对全连接层进行SVD分解:

\(W=U\Sigma tV^T\)

通过控制 \(\Sigma\) 的大小,达到控制计算量的目的,下图VGG16的fc6和fc7分解之后带来的收益。

QQ20170113-4

 

设计评价指标

多目标训练

Fast R-CNN将分类和定位合并,目标函数变为两个损失之和。合并的好处除了简化结构之外,是否会对效果有影响?通过实现最后证实,多目标的效果要好,详细信息见论文吧。

多尺度输入的作用

通过实验发现,single scale和multi scale的差别不大,但是multi scale需要耗费很多的计算量。具体如下表:

QQ20170115-0

 

未经允许不得转载:大数据算法 » Fast R-CNN结构介绍

分享到:更多 ()

评论 抢沙发

*

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

关注大数据算法在工业界应用

本站的GitHub关于本站