1 Motivation
作者之前提出的R-CNN速度实在是太慢了,无论是在训练过程还是在预测过程,速度都难以让人忍受。SPPnet 改进了R-CNN运行慢的缺定,但是 SPPnet 不能对 spatial pyramid pooling 层进行 fine-tune,这就限制了深度网络的精度。作者提出了新的网络—— Fast R-CNN,结合了 R-CNN 和 SPPnet 的优点,同时改正了二者的缺点。
2 Innovation
提出了 Fast R-CNN 网络。
3 Adavantages
Fast R-CNN 在提高了训练和测试速度的同时提高了目标检测的精度,比 R-CNN 和 SPPnet 快,又比它们的精度高。
Fast R-CNN 训练 VGG16 比 R-CNN 快9倍,在测试中快213倍,而且在 PASCAL VOC 2012 有更高的 mAP。对比 SPPnet,训练快3倍,测试快10倍,精度更高。
4 Related Work
R-CNN
R-CNN 有以下缺点:
- 训练是一个多阶段的 pipline。首先对卷积网络进行 fine-tune,接着训练SVM用来对目标进行分类,最后训练 bounding-box 回归器提高目标定位的精准度。
- 在空间和时间上训练的代价太大。当训练非常深的网络,例如 VGG16,训练5k张图片需要2.5个GPU-days。训练过程提取的特征需要存放到硬盘,需要几百G的存储空间。
- 目标检测过程很慢。使用 VGG16 进行在GPU中对一张图片进行检测需要47s。
SPPnet
SPPnet首先对整个图片计算 feature map,然后从 feature map 中提取特征向量对每个 object proposal 进行分类,这样比 R-CNN 快。通过 spatial pyramid pooling 把 object proposal 的 feature map 转成固定大小的特征向量。
SPPnet的缺点是:训练过程也是多阶段的 pipline。而且,不能对 spatial pyramid pooling 层进行 fine-tune,这就限制了网络的精度。
5 Model
Fast R-CNN 的架构如下:
Fast R-CNN 输入的是一张图片和多个 RoI,然后接一个卷积网络,可以是 AlexNet、VGG_CNN_M_1024、VGG16 等。接着,对每个RoI,使用 RoI pooling 层提取一个固定长度的特征向量,最后经几个全连接层,接着来到一个分岔路口,一个用来预测目标的类别,使用softmax,而不是R-CNN的svm,另外一个用来预测目标的位置。这样处理,Fast R-CNN 就是一个多任务网络。最后对每个类使用非极大值抑制算法去掉重复的 bounding-box。
RoI pooling 层使用 max pooling,把不同大小的 RoI 转换成固定大小的 的 feature map。每个RoI由元组 表示,其中 表示 RoI 的左上角, 表示高度和宽度。RoI pooling 把 RoI 分成 大小的网格,网格里的每个小窗体大小为 。然后,取每个小窗体最大的一个值作为小窗体的输出,注意,是对每个 feature map 通道进行 RoI max pooling。
对 pre-trained netwrok 进行初始化时,要进行3步处理。第一步,把最后一层 max pooling layer 改成 RoI pooling layer。第二步,把最后一层 FC 和 softmax 改成两个兄弟层,分别作为对K+1个类别进行分类的 FC+softmax 层和 bounding-box regressors。
因为在检测阶段全连接层比较耗费时间,因此作者对全连接层进行优化。作者使用 truncated SVD 压缩巨大的全连接层。对于一个全连接层的参数矩阵
,大小为
,使用SVD分解
:
其中, 是包含 的前t个左奇异向量的 的矩阵, 是包含 的前t个奇异值的 对角矩阵, 是包含前t个右奇异向量的 的矩阵。Truncated SVD 减少了参数,从 到 。为了压缩网络,一个全连接层分为两个全连接层,中间没有使用激活函数。第一层使用参数 ,没有偏置b,第二层使用参数 和原来的偏置b。这种方法有效地加快了检测的速度。
改进前和改进后 Fast R-CNN 的检测运行时间如下:
6 Learning
Loss function
Fast R-CNN 要预测K+1个类,其中1指背景,预测结果是
,其中
是背景的预测概率。因为 Fast R-CNN 是端对端学习算法,损失函数要同时包含目标分类的损失和 bounding-box regression的损失。对于每个RoI,损失函数为:
其中,p表示预测概率, 表示目标对象的bounding-box, 表示RoI的实际类u的预测bounding-box。 是目标分类的损失项。指示函数 表示 取值为1,否则取值为0。如果预测结果是背景( ),那么不需要计算 bounding-box regression的损失。 权衡两个损失项,作者取值为1。
的形式是:
其中
这是一个鲁棒性的 损失,敏感度比 低。当回归目标没有限制时,使用 损失要小心地调整学习率以防梯度爆炸。
SGD mini-batch
作者使用SGD mini-batch进行训练,每个batch采样N张图片,每张图片采用R/N个RoI。N值越小,mini-batch的计算量越少,因为同一张图片可以共享 feature map。作者使用 , ,少SGD迭代次数就得到比R-CNN更好的结果。
在RoI的采样过程中,作者的25%的RoI都是从和 ground-truth bounding box 的 IoU 大于等于0.5的 object proposal 中选取,其他75%的RoI是选择IoU在 范围的 object proposal,这75%的RoI都是作为背景。在训练过程中,图片有0.5的机率进行水平翻转。
SGD hyper-paramters
对于全连接层,softmax classification 的参数使用均值为0标准差为0.01的高斯分布进行初始化。Bounding-box regression的参数使用均值为0标准差为0.001的高斯分布进行初始化。偏置初始化为0。
权重的学习率为1,偏置的学习率为2,全局的学习率为0.001。作者在训练 VOC 07 和 VOC 12 数据集时,30k mini-batch iteration 之后,把学习率降为0.0001,再训练10k iteration。作者使用0.9作为 momentum 参数,0.0005作为参数衰减率。
7 Experiment
实验的对比结果如下:
训练时间和测试时间对比如下:
作者得出的结论:
- R-CNN 在 VOC 07, 2010 和 2012 的数据集中取得了最好的mAP结果。
- 训练和测试都比 R-CNN 和 SPPnet 快。
- 在VGG16中对卷积层进行 fine-tune 可以提高mAP。
R-CNN 的代码实现地址:https://github.com/rbgirshick/fast-rcnn