CNN 用于目标检测。
- 使用 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.
具体操作
- 自己训练或者现在一个图像识别的模型,例如 vgg16 等
- 如果是下载的模型,要对模型进行 finetune, 例如,vgg16 的模型是 1000 类,论文中使用的是 VOC 数据集,该数据集中共有 20 类,那么,finetune 之后的类别应该是 21 类 (其中 1 类是 background)
- 特征提取。首先通过 region proposal 方法获取 candidate, 然后,把每一个 candidate wrap 到 CNN 的输入大小,之后 forward through the CNN, 取得最后一个 pooling 层的输出作为 feature 并存储
- 对于每一类,训练一个分类器用来对 region features 识别 (论文中训练的是 SVM)
- Bounding box regression. 对于每一类,训练一个回归模型,用来 map cached features to offset to ground truth boxes.
当进行预测的时候,设置一个 classify 的 threshold, 只有当 class score 大约这个 threshold 的时候才保留结果
缺点
- 在 test/predict 的时候需要对所有的 region proposal 进行 forward, 因此,速度比较慢
- 特征提取与 SVM 和 bounding box regressor 的训练是完全隔离的两个阶段,因此,CNN 提取的特征不一定对 SVM 和 regressor 的训练非常合适
- 训练过程比较复杂
Reference
Rich feature hierarchies for accurate object detection and semantic segmentation
cs231n