工作流

Fast RCNN

工作流大部分与 RCNN 一致。区别在于:

  • 用 CNN with Softmax 替换 SVM 分类器,从而允许分类器与回归器(regressor)一起训练。
  • 引入了 ROI Pooling 操作,避免特征提取时的重复运算;

具体工作流与 RCNN 对比如下:

# 步骤 RCNN Fast RCNN
1 候选框提取 Selective Search Selective Search
2 预处理
3 特征提取 每个区域单独提取 提取整张图片,再用 ROI Pooling
4 分类 SVM CNN
5 非极大值抑制
6 边界框回归

ROI Pooling

ROI pooling 其实源于 SPPNet (TPAMI 2015) 的 Spatial Pyramid Pooling(SPP),如下图所示:

SPP

SPP 的好处是将任意大小的特征 pooling 为固定大小的特征。以上图为例,输入的特征大小为 $H \times W \times 256$,SPP 的操作步骤如下:

  1. 将特征图在 $h \times w$ 维度上切成 $4 \times 4$ 份,并对每一份 $\frac{h}{4} \times \frac{w}{4} \times 256$ 维特征进行 max pooling 操作,再 concat 起来得到 $16 \times 256$ 维特征;
  2. 按照一样的套路得到 $4 \times 256$ 维、$1 \times 256$ 维特征;
  3. 将这些特征全部 concat 起来得到 $(16 + 4 + 1) \times 256$ 维特征。

与 SPP 相比,Fast RCNN 采用的 ROI pooling 只使用了一种切割的维度(以 VGG-16 为例,$H = W = 7$,即只切成 $7 \times 7$ 份)。

注意,当 ROI Pooling 切割的区域边界不是整数时(例如 $7 \times 7$ 特征切成 $2 \times 2$ 区域),此处直接使用了 直接取整 的方式,因此可能导致其实后面的 BBR 不准确,该问题在后续的 Mask R-CNN 中提出的 ROI Align 有所改进(大致就是遇到非整数的情况则使用 双线性插值)。

CNN with Softmax

TODO

训练过程

  1. 预训练 CNN(作者使用了 3 个模型,分别为 AlexNet、VGG 简化版、VGG-16)。
  2. 微调 CNN
    • 替换最后的 max pooling 层为 ROI pooling 层;
    • 修改最后的 fc + softmax 层为 2 个分支,分别是 fc + softmax 层和 regressor 层。
    • 损失函数为 TODO
  3. 用 truncated SVD 压缩 fc 层。

优缺点

  • (+) 单阶段(single-stage)训练,可以把分类器(SVM 替换成了 CNN)和回归器一起训练。
  • (+) ROI pooling 节省了大量的计算量。
  • (+) 不需要保存中间提取的特征用于边界框回归。
  • (+) 同时训练分类与回归可以涨点。
  • (+) 换成了更深的 VGG-16 模型,又涨点。
  • (-) 依然被 Selective Search 算法拖慢速度。

参考