@改进1:RFCN
论文:R-FCN: Object Detection via Region-based Fully Convolutional Networks 【点击下载】
MXNet代码:【Github】
一. 背景介绍
RCNN 在目标检测上取得了很大的成功,比如 SPPnet、Fast R-CNN、Faster R-CNN 等,这些方法的典型特征都是 一个二分网络,以 ROI Pooling 为界,前面子网络用于特征提取,后面子网络用于 目标检测(Per ROI),带来的问题是 后面的子网络需要对每一个 ROI(Candidate)进行重复计算。
这种模式的形成是有原因的:Detection 来自于前期的分类网络(如 AlexNet、VGG),最后一个 Spatial Pooling 层直观对应到 RoI Pooling,这算是一个历史问题。
新提出的几个网络(ResNet、GoogLeNets)原生就是全卷积网络,因此也就将这种结构天然的对应到 Detection 问题上,想在 ResNet 上实现Detection,需要增加一个 ROI Pooling 层,但插入的位置很关键(每个 ROI 候选框对应一次计算,对应 后面子网的计算量 x N):
- 越靠近 Input - 对应 ROI-Wise 检测子网越深,准确度也就越高;
- 越靠近 Output - 对应 ROI-Wise 子网越浅,针对每个 ROI 计算量就越小,效率提高;
PS:减少 Proposal(ROI)的数量也是一个好办法,这对 Proposal 的要求会比较高(根据得分排序),先不讨论这种思路。
通过上面 可选的方案对比,可以看到 R-CNN 直接输入 Proposal,因此整个网络都用作检测,Faster 保留了后面10层用于检测,而作者新提出的方法则是 将 101 层全部用于共享,那么这种方案的可行性是怎么来保证的呢?
二. 提出框架
作者首先分析了 分类/检测 这两类问题的区别:
● 分类问题 - 具有平移不变性(Translation Invariance);
● 检测问题 - 在一定程度上具有平移敏感性 (Translation Variance);
通过 RoI pooling 的插入,打破了原卷积网络的平移不变性,但这种做法牺牲了训练和测试效率(Region-Wise)。
针对上述问题,作者提出了 一种新的卷积层 - Position Sensitive 的 Score Map,Score Map 包含了位置信息,如下图所示:
有两个关键层: