Fast R-CNN
R-CNN与SppNet存在的问题
- 训练过程是多级pipeline。R-CNN首先使用目标候选框对卷积神经网络使用log损失进行fine-tunes。然后,它将卷积神经网络得到的特征送入SVM。这些SVM作为目标检测器,替代通过fine-tunes学习的softmax分类器。在第三个训练阶段,学习bounding-box回归器。
- 训练在时间和空间上是的开销很大。对于SVM和bounding-box回归训练,从每个图像中的每个目标候选框提取特征,并写入磁盘。对于VOC07 trainval上的5k个图像,使用如VGG16非常深的网络时,这个过程在单个GPU上需要2.5天。这些特征需要数百GB的存储空间。
- 目标检测速度很慢。在测试时,从每个测试图像中的每个目标候选框提取特征。用VGG16网络检测目标时,每个图像需要47秒(在GPU上)。
核心思想
模型流程
输入一张图片,通过 selective search方法提取 roi区域,通过cnn提取这样图像的特征,根据原图候选框的相对位置映射到feature map,通过roi pooling 固定输出,通过全连接层,并行的执行分类与回归。
ROI Pooling
ROI Pooling可以看作 SppNet 的 spatial pyramid pooling 的特殊情况,sppnet对feature map 分成多个尺度,roi pooling只分成一个尺度。
roi的好处:有一种解释是空间金字塔池化不可导,不能进行反向传播,roi pooing则可以。
多任务损失的单阶段训练
损失函数的定义是将分类的loss和回归的loss整合在一起,其中分类采用log loss,即对真实分类(下图中的pu)的概率取负log,而回归的loss和R-CNN基本一样。分类层输出K+1维,表示K个类和1个背景类。
其中 p u 为标签的类别与预测的类别,采用交叉熵损失, lambda 为常数,为了平衡损失,防止某个损失过大,当u =1 时,说明不是背景类,可以回归精修候选框,反之则不计算回归损失,这样就可以共同
端到端训练
采样策略
在sppnet中,一个batch有很多张图像,一张图像又采集了很多张候选框,由于当时的显存也不大,这导致很难进行反向传播,在 fast rcnn中每次只拿出两个图片,每张图像生成64个候选区域,也就是大概一个batch 128,IOU正负样本策略与RCNN基本一致。
Fast R-CNN存在的问题
Fast RCNN的主要缺点在于region proposal的提取使用selective search,目标检测时间大多消耗在这上面(提region proposal 2~3s,而提特征分类只需0.32s),这也是后续Faster RCNN的改进方向之一。