成就
- 在训练VGG16时比R-CNN 9 faster,测试时间213 faster
- 在 PASCAL VOC 2012上实现了更高的mAP
- 相比于SPPnet,在训练VGG16时 3 faster,测试10 faster,并且更准确
Fast R-CNN 提出原因
- SPP-net有明显的缺点,其提出的微调算法并不能更新卷积层的参数,这限制了比较深的网络的准确性
Fast R-CNN的优点
- 比起R-CNN和SPPnet有更高的mAP
- 训练时单阶段,使用多任务损失
- 训练时可以更新所有的网络层
- 特征缓存不需要磁盘存储
Fast R-CNN
思想
- 网络先用几个卷积层和最大池化层处理整张图片,以产生一个卷积特征映射
- 对每个目标proposal一个RoI池化层,从特征映射上提取一个固定长度的特征向量
- 每一个特征向量被传入一串全连接层,最终分支到两个输出层:
- 一个是对(K(目标类别)+1(背景类别))个类别产生softmax概率估计
- 一个是对K个目标类别的其中每一个输出四个实数值,这四个值为该类别bounding-box的位置
RoI池化层
描述
RoI池化层使用max pooling将所有有效的RoI内的特征转化为小的特征映射(用固定的 H × W H\times W H×W大小的空间范围),H和W是独立于任何特定RoI层的超参数。本文中RoI是卷积特征映射中的一个矩形窗。每一个RoI用一个元组(r,c,h,w)表示,其中(r,c)代表左上角的位置,(h,w)代表矩形窗的高和宽。
工作方式
- 将 h × w h\times w h×w的RoI窗口划分成一个 H × W H\times W H×W的网格,每个子窗口的大小为 h / H × w / W h/H \times w/W h/H×w/W
- 对每个子窗口中的值取max pooling,得到对应的输出网格单元
说明
- pooling独立地应用于每一个feature map通道,和标准的max pooling一样
- RoI层只是SPPnets中使用的SPPlayer的一个特例,即只有一个pyramid级别
使用预先训练的网络初始化
本文使用三个预先训练好的ImageNet网络进行实验,当使用预先训练的网络初始化Fast R-CNN网络时,会经历三次转换。
- 将最后一个max pooling层替换为一个RoI pooling层,该层通过设置H和W与网络的第一个全连接层相兼容
- 网络最后一个全连接层和softmax(为1000类别的ImageNet分类而训练)替换为两个层(全连接层+对K+1个类别softmax、全连接层+特定类别bounding-box回归)
- 网络修改为两种数据输入:一系列的图片和这些图片中一系列的RoIs
检测微调
Fast R-CNN重要的性能之一是可以通过反向传播训练所有的网络权重。本文的训练方法是在训练过程中充分利用特征共享。在Fast R-CNN训练过程中,SGD minibatch是分层取样的,首先对N张图片取样,然后在每张图片中取样R/N个RoIs。关键是,来自同一张图片中的RoIs在前向和后向传播的过程中共享计算和内存。使N变小可以减少minibatch的计算。
除此之外,Fast R-CNN将softmax分类器和bounding-box回归器放在一起优化,而不是分为三个独立的阶段分别训练softmax分类器、SVMs和回归器。该过程包括loss, mini-batch sampling strategy, back-propagation through RoI pooling layers, and SGD hyper-parameters.
多任务损失函数
一个Fast R-CNN包括两个输出层:
- softmax层输出一个离散的概率分布(对每一个RoI),即目标分别为K+1个类别的概率大小, p = ( p 0 , . . . , p k ) p=(p_0,...,p_k) p=(p0,...,pk)
- 另一层输出bounding-box回归偏移量, t k = ( t x k , t y k , t w k , t h k ) t^k=(t_{x}^{k},t_{y}^{k},t_{w}^{k},t_{h}^{k}) tk=(txk,tyk,twk,thk)(k代表第k个类别), t k t^k tk表明了相对于一个目标候选区域的比例不变转化和对数空间上的高度/宽度变换
多任务损失函数就是将分类训练的损失函数和bounding-box回归的函数组合在一起形成一个损失函数,并用λ平衡两部分之间的比例。
小批量取样
在微调过程中,每一次SGD mini-batch都是从随机选择的N=2张图片中组建而成的。本文使用的mini-batch大小是R=128,从每张图片的64个RoIs中取样。本文从与groundtruth bounding-box的IoU>=0.5的目标候选区域中选取25%的RoIs。这些RoIs包含标着前景目标类别的实例,即u>=1;剩余的RoIs,即与groundtruth bounding-box的IoU位于[0.1,0.5)的RoIs为背景实例,对应u=0。
ps:不明白具体实现
在RoI池化层反向传播
读不下去了……
需要学习
- RoI池化层反向传播实现思路
- 下文有关SGD超参数内容
如有问题 请多多指正