RCNN、Fast RCNN、Faster RCNN

RCNN

  1. 用selective search 的方法得到2000多个候选框,然后用CNN网络提取候选框区域的特征,再用SVM对其进行分类。
  2. 第一篇将卷积神经网络用与物体检测和物体分割任务
  3. 在数据缺乏的情况,用辅助任务进行预训练,然后在目标任务中进行微调,能够大幅度提升目标任务的精度,可谓迁移学习的鼻祖

SPPnet

  1. 利用空间金字塔池化(spacial pyramid pooling),可将任意大小的特征图池化成固定长度的向量,使得分类网络可以输入不同尺寸的输入图。在网络深层进行信息的整合(aggregation),避免在输入网络之前对图像进行裁剪和缩放。
  2. 改进RCNN单图多次特征提取的不足,改为一次性提取全图特征,然后进行空间金字塔池化,得到候选框目标的特征向量
  3. SPP层的有点:1)是网络在不同大小输入的情况下得到相同长度的输出向量;2)SPPooling 的窗口是多尺度的;3)因为输入的尺度是可变的,因而SPPooling出来的特征也是尺度可变的。
    4.

Fast RCNN

解决RCNN遗留问题:

  1. 训练分多个步骤(先训练特征提取网络, 再训练分类SVM),再Fast RCNN中通过 ROIPooling 的方法将特征提取网络和分类定位网络连接起来,实现 end-to-end 训练
  2. 训练繁琐耗时: 需要把分类特征先提取并存盘,然后再训练SVM,耗时耗存储。end-to-end之后,这些都可以避免
  3. 前向检测太慢:一种图N个候选框需要裁图N次,并依次提取特征然后预测。 Fast RCNN 则直接一次性提取整张图的特征,然后分别pooling候选区域的特征
  4. 多任务:同时输出分类和框的定位。作者表示多任务对于分类精度有提升,但是我看提升的量并不是很显著(+0.8mAP和+1.1mAP)
  5. 用图像金字塔的方式实现多尺度(尺度不变性)。然而作者实验表明,图像金字塔对于分类精度的提升很微弱。
  6. Softmax比SVMs稍微好一点点
  7. region proposals 不是越多越好

仍然没有解决的是

  1. region proposal 需要预训练

一些疑问

  1. 再RCNN中,直接用候选框裁图,并缩放到固定尺寸,这一步间接实现了尺度不变性。而再Fast-RCNN中需要做图像金字塔来实现尺度不变形。 也就是说 ROIPooling未能实现尺度不变性,或者效果不佳?

Faster RCNN

继SPPnet,Fast RCNN 后续工作,提出RPN (Region Proposal Network)。Fast RCNN没有解决的是候选框的选取工作需要用其他方法(例如Selective Search)获得。本文最大的贡献在于把特征提取网路同时用作候选框的选取即RPN网络。为了达成这个目的提出Anchor机制,保持移动不变性的同时,做到的检测的多尺度特性和克服了目标物体的比例多变问题。RPN网络的大致流程如下图:

anchor 机制

RPN 网络是全卷积网络(FCN)配合anchor的使用很好地保持了平移不变性。Anchor 的大小和宽高比很好地解决了目标的多尺度问题和比例问题。

训练时如何为anchor设定标签

  1. 对于和真值物体位置的IOU>0.7的所有anchor设为正样本
  2. 当所有anchor的IOU都不满足1的时候,把IOU最大的anchor设定为正样本,这么做是为了防止gound truth box 找不到对应的anchor
  3. 所有IOU < 0.3 的anchor都标为负样本
  4. 即不是正样本,也不是负样本的anchor不参与监督训练

Loss 说明

  1. 作者实验表明分类loss和回归loss的比例 $\lambda$ 在相当大的范围内都可行,所以对于分类loss和回归loss的两个归一化系数$N_{cls}$ 、$N_{reg}$ 实际上可以简化省略。

训练RPN 与正负样本平衡

随机选取256个anchor样本,并且保持正负比例1:1,如果正样本不够,则用负样本填充。

任然未知的问题

虽然Anchor在一定程度上解决了多尺度的问题,但是这个多尺度是有一定的能力范围的,跟rpn对应未知的感受野有极大的关系,文章对此没有详细讨论。