Fast-RCNN提高了 训练和测试上的速度+准确率
提出了一种单阶段训练算法同时可以用来分类目标的proposal和他们的空间位置
1.1 RCNN 的三个缺陷:
- 训练是一个三阶段的pipeline:fine-tunes(ConvNet)+SVM(ConvNet features)+bounding-box regressors
- SVM和BB regressors从proposal中提取出来的特征需要存到硬盘上,费时费空间
- 测试阶段从图片中提取特征耗时太多
SPP通过共享计算,对一张图片一次卷积——得到一个共享特征图shared feature map,抽取feature vectors进行分类。从shared feature map里面的部分(对应proposal)抽取特征经过max-pool固定大小(如6x6),再传入SPP。
SPP的缺陷:与RCNN相同,不同点在于SPP的调优fine-tune算法没法更新SPP前的卷积层,SPP的微调只更新SPP层后面的全连接层,限制了网络的精度。(原因下文给出)
2 Fast -RCNN 的架构和训练
输入:an image + a set of object proposals(2000个proposals)
- an image通过深度网络产生一个conv feature map
- feature map与proposal是ROI projection存在映射关系,对于每一个proposal,从feature map中通过ROI pooling layer 提取固定大小的feature vector,传入一系列的FC层产生两个分支的输出层
- 两个输出层:一个是分类的estimate概率分数,另一个是每一种类别的四个值,用于调整refine位置。((a fully connected layer and softmax over K +1 categories and category-specific bounding-box regressors)
除了提取proposals其他过程是
joint training的,测试阶段做一个NMS(非极大值抑制)
2.1 The ROI pooling layer
每个ROI由四个tuple(r, c, h, w)定义
将h x w 的ROI窗口分割为 H X W 的格子grid(每个子窗口的大小为h/H x w/W )然后通过max-pool的方法将子窗口与格子对应起来。
这个层可以理解为SPP-net的SPP层中的只有一层金字塔的特例。