Notes on RCNN

  • 使用region proposal 方法获取一系列 candidate bounding box
  • 对每一个candidate bounding box 使用 CNN 提取特征
  • 对 candidate bounding boxes 进行 regression 获得最后的 bounding boxes
  • 根据一些阈值条件对获得的 bounding boxes 进行合并

过程详解


如上图所示, 首先, 通过某种 region proposal 方法(原论文中使用的是 selective search)来获取candidate bounding boxes. 接着把这些bounding boxes wrap 到 CNN 网络输入要求的大小. 然后把所有的 bounding boxes 进行 forward. 输出成有两个, 一个是 classifier, 一个 是bounding box regressor. 对每一个 bounding box 都可以获得一个类别概率和一组bounding box值, 然后根据类别概率决定是不是留下这个bounding box. 之后再把留下的bounding box 进行 merge.

# 具体操作
  1. 自己训练或者现在一个图像识别的模型, 例如 vgg16 等
  2. 如果是下载的模型, 要对模型进行 finetune, 例如, vgg16 的模型是1000类, 论文中使用的是VOC 数据集, 该数据集中共有 20 类, 那么, finetune 之后的类别应该是 21 类(其中 1 类是background)
  3. 特征提取. 首先通过 region proposal 方法获取 candidate, 然后, 把每一个 candidate wrap 到 CNN 的输入大小, 之后 forward through the CNN, 取得最后一个 pooling 层的输出作为 feature 并存储
  4. 对于每一类, 训练一个分类器用来对 region features 识别(论文中训练的是 SVM)
  5. Bounding box regression. 对于每一类, 训练一个回归模型, 用来 map cached features to offset to ground truth boxes.

    当进行预测的时候, 设置一个classify 的 threshold, 只有当class score 大约这个 threshold 的时候才保留结果

缺点

  1. 在 test/predict 的时候需要对所有的 region proposal 进行 forward, 因此, 速度比较慢
  2. 特征提取与 SVM 和 bounding box regressor 的训练是完全隔离的两个阶段, 因此, CNN 提取的特征不一定对 SVM 和 regressor 的训练非常合适
  3. 训练过程比较复杂

Reference

Rich feature hierarchies for accurate object detection and semantic segmentation
cs231n