【目标检测(三)】Fast RCNN——让RCNN模型能端到端训练

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 网络结构变化

image.png

与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保持一致。

image.png

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卷积层)

image.png

2.5 多任务损失函数设计

多任务损失函数即整合了分类任务的loss和回归任务的loss,从而实现端到端的训练流程,损失函数如下:

image.png

其中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坐标和宽高的偏差值,如下图所示:

image.png

image.png

边界框损失函数这里有几点需要注意:

  • 边界框损失函数中的λ[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算法即可。

image.png

模型采用mini-batch sampling方式训练:

  • batch_size=128
  • 一个batch来自两张图片,每张图片各自取64个候选区域,正负样本比为1:3,正样本判定条件为IOU值大于0.5,负例的判定条件是IOU要在0.1-0.5之间,是一种难例挖掘的策略。

3. Fast RCNN效果及缺点

3.1 效果和贡献

image.png

如上图所示,总结来说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网络解决了这个问题)

Reference

  1. arxiv.org/pdf/1504.08…
  2. github.com/rbgirshick/…
  3. cloud.tencent.com/developer/a…
  4. www.bilibili.com/video/BV1af…
  5. blog.csdn.net/chaipp0607/…

おすすめ

転載: juejin.im/post/7035536130007105567
おすすめ