1. Motivation:让RCNN能端到端训练
Fast RCNN是Ross Girshick大神继RCBB后的又一力作。RCNN的发表被视为深度学习目标检测的开山之作,后来何凯明的SPP Net解决了RCNN的冗余卷积计算问题,大幅提升了训练和推理速度,但是还是没能摆脱多阶段训练的缺陷,可参照上一篇SPP的技术博客。为了实现端到端训练,Fast RCNN必须要解决SPP方法梯度无法回传的问题,同时必须整合分类和bounding box回归任务。相比于之前的两个算法(RCNN和SPP Net),Fast RCNN主要提出了两点来实现端到端训练:
- 多任务损失函数
- ROI(Region Of Interest)
下面将详细进行解释。
2. Fast RCNN原理
2.1 Pipeline
整体来说,Fast RCNN分为4个步骤:
- 使用selective search方法,原始图像生成近2000个候选框。
- 将整张图像输入到CNN网络得到特征图,将selective search生成的候选框投影到特征图上得到相应的特征矩阵。
- 将每个特征矩阵输入到ROI pooling层缩放到
7*7
的特征图,接着把这个特征图flatten展平,得到固定维度的特征。 - 将展平后的特征输入到分类分支和回归分支中,得到分类和回归结果预测。
2.2 网络结构变化
与SPP Net相比,网络结构进行了调整:
- 提取特征的backbone由AlexNet换为了VGG,提取特征能力更强。
- SPP模块换为ROI Pooling。
- 整合分类和回归任务,使用多任务损失函数替代,目标检测任务就不需要分阶段训练。
- 提取到ROI特征向量后并联连接这两个分支。用softmax替代了SVM分类器(C+1类,包含background)。FC全连接边界框回归器替代了LR回归模型,新的边界框回归器输出对应(C + 1)个类别的候选框边界回归参数(dx, dy, dw, dh),共输出(C + 1) * 4个节点,如下图每4个一组,这里回归参数的含义与RCNN保持一致。
2.3 一张图片只进行一次卷积计算
这里作者借鉴的SPP Net的思路,将整张图片输入网络,接着从特征矩阵上提取候选区域,借助于原图和特征图的坐标存在对应关系,这些候选区域的特征就不需要重复计算。这里可以参考上一篇SPP Net技术博客,就不再详细介绍了。
2.4 Region of Interest
RoI可以看成是SPP的简化版本,原版SPP是多尺度池化后进行concat组成新特征,而RoI只使用一个尺度,可以将任意维度的特征矩阵缩放成固定维度。论文中的具体做法是,把高和宽都平均分为7*7
的小块,然后在每一个小块做max pooling操作,channel维度不变,这样做能使输出维度固定,同时RoI Pooling不是多尺度的池化,梯度回传非常方便,为fine-tune卷积层提供了条件。(SPP Net不能fine-tune卷积层)
2.5 多任务损失函数设计
多任务损失函数即整合了分类任务的loss和回归任务的loss,从而实现端到端的训练流程,损失函数如下:
其中p是分类器预测的softmax概率分布p=(p0, p1, ...)
, u对应目标真实类别标签,tu对应边界框回归器预测的对应类别u的回归参数,v对应真实目标框的回归参数。
分类损失函数为Negative Log Likelyhood Loss:(考虑到p使用softmax算出来的,相当于分类是用CrossEntropyLoss算出来的)
边界框回归损失函数,从RCNN和SPP Net的L2 Loss改为了Smooth L1 Loss,主要拟合Bbox坐标和宽高的偏差值,如下图所示:
边界框损失函数这里有几点需要注意:
- 边界框损失函数中的
λ[u>=1]
是艾佛森括号,作用就是背景类框不需要计算边界框loss,把目光聚焦在属于目标的边界框上。 - 选择Smooth L1的好处:
- L1 Loss的缺点是在0处不可导,且导致训练后期,预测值与 ground truth 差异很小时,L1 损失对预测值的导数的绝对值仍然为 1,而 learning rate 如果不变,损失函数将在稳定值附近波动,难以继续收敛以达到更高精度。
- L2 Loss的缺点是当x很大时,产生的loss也很大,容易造成训练不稳定。
- Smooth L1优点是当预测框与 ground truth 差别过大时,梯度值不至于过大,对outlier更加稳定,避免了梯度爆炸;当预测框与 ground truth 差别很小时,梯度值足够小。
2.6 训练过程和推理过程
下面这张图把Fast RCNN训练和推理过程描述的非常清楚。 训练过程:将整张图片输入到CNN网络中,同时进行ss算法提取候选框,在Conv5特征图中映射到候选框的特征矩阵,做ROI Pooling,规整到固定大小,然后经过全连接层,分别将全连接层后的特征输入到SoftMax分类器和Bounding box回归器中(根据输出维度需要再接一层FC),使用多任务组合损失函数进行计算和梯度回传,实现端到端的网络训练。
推理过程:与训练过程相同,为每一类加上后处理NMS算法即可。
模型采用mini-batch sampling方式训练:
- batch_size=128
- 一个batch来自两张图片,每张图片各自取64个候选区域,正负样本比为1:3,正样本判定条件为IOU值大于0.5,负例的判定条件是IOU要在0.1-0.5之间,是一种难例挖掘的策略。
3. Fast RCNN效果及缺点
3.1 效果和贡献
如上图所示,总结来说Fast RCNN的效果就是又提速又涨点,L维度上准确率比RCNN高0.9个点,训练速度上比RCNN快了8.8倍,测试速度上比RCNN快了146倍。它的主要贡献是首次实现深度学习目标检测网络的端到端训练,速度上有了较大的突破。
3.2 Fast RCNN问题和缺点
GPU上Fast RCNN跑网络推理只需要0.32s,但是跑selective search就需要2s,也就是说selective search严重制约了Fast RCNN的速度,成为了主要瓶颈。(后面Faster RCNN提出了RPN网络解决了这个问题)