Fast R-CNN - Fast Regin-based Convolutional Network for Objection Detection
R-CNN 采用深度网络来对 object proposals 分类以进行目标检测,其缺点如下:
由于 R-CNN 需要对每个 object proposal 进行 ConvNet 前向计算,且没有共享计算,造成其速度较慢.
SPPNets,Spatial Pyramid Pooling Networks,通过共享计算来提高 R-CNN 的速度.
SPPNets 对整张输入图片计算一个卷积 feature map,采用从共享特征图(feature map)提取的特征向量来对每个 object proposal 进行分类.
每个 proposal 的特征提取,是采用 max-pooling 将 proposal 的特征图的一部分转换成固定尺寸的输出(fixed-size output, e.g. 6*6) 得到的. 多个输出尺寸采用 pool 操作,并连接为空间金字塔池化(spatial pyramid pooling).
SPPNet 的测试效率,是 R-CNN 的 10 - 100 倍. 由于较快的特征提取速度,训练时间也降低了 3 倍.
但,SPPNet 的明显缺点在于:
相对于 R-CNN 和 SPPNet, Fast R-CNN 解决了以上它们的不足,并提升了速度和精度. 其优势在于,
Fast R-CNN 网络结构为:
Figure 1. Fast R-CNN 结构. 一张输入图片和多个 RoIs 作为全卷积网络的输入,每个 RoI 被池化到一个固定尺寸的特征图,并采用全连接层映射为一个特征向量. 对于每个 RoI,网络有两个输出向量:softmax 概率和 per-class bounding-box 回归偏移值. 网络是采用 multi-task loss 进行 end-to-end 训练的.
Fast R-CNN 采用整张图片和 object proposals 集作为网络输入.
网络首先几个卷积层和 max-pooling 层对整张图片处理,得到一个 conv feature map.
然后,对每一个 object proposal,采用 RoI pooling 层从 feature map 中提取一个固定长度的特征向量;
每个特征向量被送入一系列的全连接层,最终有两个分支:一个分支得到 softmax 概率值,共 K 个 object 类和一个 background 类;另一个分支针对 K 个 object 类输出四个实值,分别表示了每类 object 的 bounding-box 位置.
RoI 层可以简单的看成 SPPNet 中的 spatial pyramid pooling 层的一种特例.
RoI 是从原图RoI区域映射到卷积区域,最后pooling到固定大小的功能,通过池化把该区域的尺寸归一化成卷积网络输入的尺寸.
基于在 ImageNet 预训练的网络来初始化 Fast R-CNN 网络.
基于 VGG16 的训练网络输出部分如图:
Fast R-CNN 训练过程中,SGD 先采样 N 张图像,再对每张图片采样 R/NR/NR/N 个 RoIs,以分层采样 mini-batches.
相同图片的 RoIs 在前向和反向传播过程中,共享计算和内存.
Fast R-CNN 联合训练 softmax 分类器和 bounding-box 回归起,而分别训练 softmax 分类器,SVMs,回归器.
如图: