文章目录
一、引言
Fast R-CNN发表于2015年,是一种基于卷积神经网络做目标检测的算法,它是建立在之前R-CNN的基础上使用深度卷积神经网络进行高效的目标检测。
R-CNN的缺点:
- 测试速度慢
- 训练速度慢
- 训练所需空间大(因为每张图片所提取的特征向量都需要存储在硬盘之中)
- 训练是多阶段的:首先使用log loss 在目标建议(object proposal)上微调ConvNet;然后让 SVM 适应 ConvNet 的特征;最后训练 bounding-box regressor。
- 使用VGG16网络 在 GPU 上每张图片需要 47秒
Fast-R-CNN创新点:
- 使用VGG-16神经网络(R-CNN用的AlexNet);
- 与R-CNN相比,训练速度快9倍、测试速度快213倍、mAP更高;
- 与SPP-Net相比,训练速度快3倍、测试速度快10倍、mAP更高。
二、Introduction-介绍
近期,卷积网络在图像分类和目标检测领域能够显著提升准确率。目标检测任务比图像分类任务复杂得多。多阶段的流程导致速度很慢。
R-CNN流程为:从输入图像找出2k个左右的候选框,对每个候选框进行裁剪缩放,对每个候选框提取特征向量,使用SVM进行分类,使用bbox回归修正位置)。
复杂来源于要精确定位。精确定位的两个挑战:
- 如何产生候选框
- 候选框只是粗略的定位,如何去修正
解决方法需要取权衡速度、精度或复杂度。
本论文,简化训练过程,提出一个基于卷积的顶尖的目标检测器。是一个单阶段的训练算法:联合了分类、边框回归。loss合并、梯度回传。
2.1 R-CNN and SPP-Net
R-CNN的缺点细节说明:
- Training is a multi-stage pipeline。训练分多步骤。先fine-tunning预训练网络,然后针对每个类别训练SVM分类器,最后对每个类别都用回归模型对bbox回归。且候选框由Selective Search方式获得。繁杂。
- Training is expensive in space and time。每次特征都需要写入磁盘,费空间;每次都再读入特征,费时间;
- Object detection is slow。测试时对每个候选框都要卷积特征提取,重复步骤太多。
R-CNN慢主要是因为每次都使用卷积提取每个候选框的特征向量,而没有共享计算
SPP-Net的提出是通过共享计算而加速。SPPnet对整个图像卷积计算特征,再去特征图上找与候选框对应的。再使用不同尺寸的最大池化操作(金字塔池化层)得到特征向量,拼接这些向量得到最终的向量。
如下图所示,使用4×4、2×2、1×1的尺寸进行最大池化后,将三个结果拼接在一起得到最终的向量。
SPP较R-CNN,测试速度快10~100倍,训练速度快3倍。
SPPnet的缺点:
- multi-stage pipeline.和R-CNN缺点一样,是多阶段的。
- Feature are written to disk.需要写入磁盘,费时费空间。
- fine-tuning algorithm不能更新金字塔池化层之前的卷积层,受限严
重。
解释一下为什么不能更新金字塔池化层前的参数:
严格说,SPP-Net也可以反向传播,但是会复杂很多。Ross大神在Fast R-CNN中给出的解释是:SPP训练样本来自不同图像导致反向传播效率低下。我的理解是:SPP-Net中fine-tuning的样本是来自所有图像的所有RoI打散后均匀采样的,即RoI-centric sampling,这就导致SGD的每个batch的样本来自不同的图像,需要同时计算和存储这些图像的Feature Map,过程变得expensive.
2.2 本文贡献
- 更高的mAP;
- 训练阶段是single-stage,使用multi-task loss;
- 训练阶段可以更新所有层;
- 特征缓存不需要磁盘存储。
三、网络结构
- 输入整张图像和使用Selective Search提取的一系列候选框的信息;
- 整张图像经过一系列卷积层和最大池化层,生成feature map;
- 找到对应各候选框的feature map部分,输入RoI池化层,得到固定长度的特征向量;
- 经过全连接层,分流为两个分支,一个分支是k+1个神经元的FC层+softmax(k是类别数);另一个分支是对每个类都做回归的FC层,有4个神经元。
更详细的算法流程图如下图所示。
3.1 RoI pooling layer
RoI:Region of Interest,是整个特征向量图中的一个矩形(也就是候选区域所对应的那部分特征向量)。RoI被定义为 ( r , c , h , w ) (r,c,h,w) (r,c,h,w), ( r , c ) (r,c) (r,c)是top-left corner, ( h , w ) (h,w) (h,w)是height和width。
该层使用最大池化,将输入特征向量划分为H×W的网格大小,对每个网格通道独立地做最大池化,最终得到H×W×通道数的特征。
RoI pooling层实际上是SPPnet金字塔池化层的简化版。
有时特征向量并不能被完全等分为H×W,因此有两种操作:
- 有舍操作(下左图);
- 无舍操作(下右图);
一般不采取有舍操作。
3.2 Pre-trained networks
实验预训练了3个网络:CaffeNet,VGG_CNN_M_1024,VGG-16,有5个最大池化层和5~13个不等的卷积层。
使用这些网络初始化Fast R-CNN前,需要以下修改:
-
用RoI pooling layer取代网络的最后一个池化层;上面提到RoI层是划分特征向量为H×W个网格,由于VGG16的最后一个池化层是7×7,因此H=7,W=7。
-
最后一个FC层和softmax被替换成fast R-CNN框架图介绍的两个并列层;
-
输入两组数据到网络:一组图片和每一个图片的一组RoIs;
3.3 Fine-tuning for detection
针对之前提到的SPPnet不能更新金字塔池化前的参数:
Fast R-CNN采用分层采样思想,先采样出N张图像(image-centric sampling),在这N张图像中再采样出R个RoI,具体到实际中,N=2,R=128,同一图像的RoI共享计算和内存,也就是只用计算和存储2张图像,消耗就大大减少了。
这个策略,比从128张图中各采样1个RoI快64倍。
除了分层采样,Fast-R-CNN还将分类、回归放在一个网络中,合并loss,合成一个单阶段的fine-tuning。
3.3.1 Multi-task loss
多任务损失,将R-CNN中多阶段的损失合并。
2个输出层:
①分类(类别概率,
p
=
(
p
0
,
.
.
.
,
p
K
)
p = (p_0, . . . , p_K)
p=(p0,...,pK),)
②回归(位置偏移量,
t
k
=
t
x
k
,
t
y
k
,
t
w
k
,
t
h
k
t^k = t^k_x, t^k_y, t^k_w, t^k_h
tk=txk,tyk,twk,thk)
每个训练的RoI被label为GT的类别
u
u
u和GT的回归目标
v
v
v。
使用Multi-task可以有效提升mAP
3.3.2 Mini-batch sampling
在fine-tuning 阶段,每个SGD mini-batch 是2张图片,每张图片64个RoI。
- 若候选框与所有GT框的IoU<0.1,不作样本;
- 若候选框与某GT框的IoU在[0.1,0.5),作负样本, u = 0 u=0 u=0;
- 若候选框与某GT框的IoU≥0.5,作正样本, u ≥ 1 u≥1 u≥1;
从正样本中取25%的RoI,从负样本中取75%的RoI。在训练过程中,随机50%的概率水平翻转图片,以增加数据集,除此之外没有其他数据增强的方式。
四、SVD分解
在分类任务中,卷积层耗费的计算时间更长;
而在该目标检测任务中,由于RoI数量多,几乎有一半的前向计算时间用于全连接层。使用SVD分解全连接层,可以加速全连接层的计算。
简而言之,就是将一个全连接层分解为两个全连接层。
经过SVD操作后,在mAP仅降低0.3%的情况下,速度提升了30%。
五、实验
5.1 VOC 2007
预训练模型都是使用的VGG16,且使用了bbox回归。
5.2 VOC 2010
5.3 VOC 2012
5.4 训练时间与测试时间
- 前面提到,预训练了3个网络:CaffeNet,VGG_CNN_M_1024,VGG-16。标记CaffeNet为 S S S, VGG_CNN_M_1024为 M M M,VGG-16为 L L L。
- Fast R-CNN明显有加速训练与测试时间的效果;
- SVD操作虽然使准确率稍有降低,但速度上再次提升了很多。
5.5 微调哪些层
在R-CNN论文中提到,微调只微调了全连接层;SPPnet也只微调了全连接层。因此想探讨一下微调卷积层的重要性。VGG16中有13个卷积层。
- 第一列——只微调全连接层;第二列——从第三个卷积层开始微调;第三列——从第二个卷积层开始微调;
- 微调卷积层后,Fast-R-CNN效果比SPPnet好;
- 从第二层卷积层开始微调比第三层开始微调高0.3%mAP;
但论文中提到,虽然conv_2的mAP比conv_3高0.3%,但是训练时长分别为12.5h和9.5h。训练时长提升了1.3倍。所以从conv_3开始微调是更好的选择。
5.6 softmax v s vs vs SVM
分类时,使用softmax多分类,比多个SVM分类器准确率高。