Fast R-CNN论文笔记

论文链接:Fast R-CNN

摘要:

这篇论文提出了一个快速的基于候选区域的网络用于目标检测,叫做Fast R-CNN。Fast R-CNN是在之前的工作基础(R-CNN,SPPnet等)上改进的,相比于之前的工作,Fast R-CNN使用了几个创新的方法,不仅降低了训练和测试的时间,也提高了检测精度。使用VGG16作为主干网络,Fast R-CNN比R-CNN训练快9倍,测试快213倍,比SPPnet训练快3倍,测试快10倍。在PASCAL VOC 2012上实现了更高的mAP 66%,处理一张图像仅需0.3秒。

思路:

目标检测的复杂性主要在于如何精确定位目标的位置,有两个主要的挑战:要处理很多候选区域和优化这些候选区域的位置。在解决这两个挑战的同时,需要考虑算法的速度,准确性和简便性。

R-CNN有明显的几个缺点:1.训练时需要分阶段实施,先提取候选区域,然后训练CNN特征提取,再训练SVM分类器,最后进行边框回归。2.训练时需要大量时间和空间,耗费空间主要是要存储由CNN为每个候选区域提取的特征,用于训练SVM分类器,耗费时间是要单独用CNN提取每个候选区域上的特征。3.检测时很慢,主要是要花时间提取大量的候选区域。

R-CNN慢是因为没有共享提取候选区域特征时的计算,上面提到R-CNN是逐个提取候选区域的特征,其实是可以同时计算,然后从计算结果中提取出每个候选区域的特征,这样就快多了。SPPnet就是通过这种方式加速了候选区域特征提取的速度,SPPnet为整个输入图像计算共享特征图,然后使用从共享特征图中提取的特征向量对每个候选区域进行分类。每个候选区域的特征向量是使用最大池化来处理共享特征图上对应候选区域那部分特征图来生成一个固定大小的输出,然后通过空间金字塔池化将多个输出拼接成一个固定大小的向量。SPPnet测试速度比R-CNN快了10-100倍,训练也快了3倍。SPPnet也有明显的缺点,就是训练也是分阶段的,流程复杂,还有就是SPPnet中的微调算法没法更新空间金字塔池化层之前的卷积,这相当于固定了卷积层的数量,限制了深度神经网络的准确性。

作者针对R-CNN和SPPnet的缺点,做了改进,不仅提高了速度,还提高了精度。 Fast R-CNN的主要优点:1.检测质量(mAP)高于R-CNN, SPPnet。2.训练是端到端的,使用多任务损失函数。3.训练可以更新所有网络层。4.不需要磁盘存储特征。

Fast-R-CNN网络架构:

Fast R-CNN论文笔记

上图就是Fast-R-CNN的网络架构图, 和R-CNN差不多,也需要先生成候选区域,只不过是不用逐个处理这些候选区域。网络的输入是整张图和所有候选区域的坐标。然后,对于每个候选区域,一个感兴趣区域(RoI)池化层从特征图中提取一个固定长度的特征向量。然后将特征向量输入全连接层后,将全连接层的输出分别输入到两个分支,一个用于计算该候选区域属于类别概率,一个用于计算边框回归。每组4个值为K类中的一个类编码改进的边界框位置。

 The RoI pooling layer:

Fast R-CNN论文笔记

RoI池化层使用最大池化操作将特征图内任何含有候选区域的区域转换成一个固定大小的Fast R-CNN论文笔记的小特征图。H和W是层里面的超参数,和任意的RoI无关。在论文中,RoI是一个矩形窗口到一个卷积特征图的映射。每个RoI都由一个四元组定义(r,c,h,w)定义(这里的r,c,h,w是通过候选区域坐标和对应特征图下采样的比例来确定的,如上图所示),分别指定RoI的左上角坐标(r,c)和高宽(h,w)。通过将Fast R-CNN论文笔记窗口划分为一个Fast R-CNN论文笔记网格,每个网格是一个子窗口,大小近似是Fast R-CNN论文笔记,然后在每个子窗口使用最大池化,将输出值放到对应的网格中。每个特征图上的池化操作都是独立的。RoI层只是SPPnets中使用的空间金字塔池层的特殊情况,但SPPnets中只有一个金字塔级。

初始化预训练模型:

作者使用了三个网络在ImageNet上进行预训练,每个网络都有五个池化层以及5到13个卷积层。将这些预训练好的网络应用到Fast-RCNN时,需要做一些调整:第一是将最后一个最大池化层用RoI替换,将H和W设置成能兼容第一个全连接层的输入即可。第二是网络的最后一个全连接层和softmax层使用两个分支替换,一个用来计算目标所属概率,一个用来回归边框。第三是将网络的输入改成可以输入图像和候选区域坐标。

微调检测网络: 

通过反向传播来训练网络是Fast R-CNN一个很重要的能力。作者先解释为什么SPPnet不能更新空间金字塔前面的卷积层,主要原因是当每个训练样本(即RoI)来自不同的图像时,SPP层的反向传播效率非常低,这正是R-CNN和SPPnet网络训练的方式。效率低下的原因在于,每个RoI可能有一个非常大的感受野,通常覆盖整个输入图像。由于前向传播必须处理整个感受野,所以训练输入尺寸很大(通常是整个图像)。作者提出使用一个高效的方法来微调,即先输入N张图像,然后在这N张图像上取R/N个RoI区域用于微调,相比于R-CNN和SSPnet从不同特征图上取RoI要高效的多,因为同一张图上的RoI是可以共享计算的,但是可能造成收敛慢因为同一幅图上的ROI是相关的,但是实际上并没有出现这种情况。除了上述分层采样外,Fast R-CNN使用了一个端到端的训练过程,在微调阶段,它联合优化了一个softmax分类器和一个边框回归器,而不是在三个独立的阶段训练一个softmax分类器、支持向量机和回归器,这样优化更加高效。

Multi-task loss

 Fast R-CNN的损失是由两部分组成的,一部分计算RoI类别损失,一部分计算RoI边框偏移损失,每个RoI都有真实标注,包括所属类别和真实坐标,通过计算网络预测出的类别和边框与真实标注的差值来优化网络。

Fast R-CNN论文笔记

 

Fast R-CNN论文笔记是由网络预测出每个RoI所属的类别概率, 总共K个类别,加一个背景共K+1,u是RoI真实的类别,如果是背景则u=0,Fast R-CNN论文笔记表示背景不参与边框回归计算,Fast R-CNN论文笔记是RoI的真实坐标,v是回归的目标框。其中类别损失计算如下:

Fast R-CNN论文笔记

 边框回归计算如下:

Fast R-CNN论文笔记

采用L1计算损失的原因是,L1损失对于异常点比L2损失鲁棒性要强。如果存在某些边框非常大,L2计算损失可能就会梯度爆炸。Fast R-CNN论文笔记控制这两个任务损失的平衡,论文中的实验取得是1。

Mini-batch sampling:

微调网络时(就是训练时)作者每个批次输入128个RoI,分别来自两张输入图像,每张图上取64个RoI。这些RoI中,有25%是和真实标注IOU大于等于0.5的,并且类别标注u>=1,背景则为0。其余的RoI取自和真实标注有最大IOU,并且IOU必须在[0.1,0.5)区间中。在训练过程中,图像水平翻转的概率为0.5。没有使用其他数据增强。

Back-propagation through RoI pooling layers:

因为在前向传播时,仅仅是在特征图上将含有候选区域部分的值进行了最大池化操作,输入到了下一层,有很多其他的值并没有参与任何运算,也没有传到下一层,所以反向传播时,那部分数值也不求偏导。

Fast R-CNN论文笔记

r代表第r个RoI,j代表第r个RoI的第j个输出。

SGD hyper-parameters:

softmax分类和边界盒回归所用的全连通层分别由标准偏差为0.01和0.001的零均值高斯分布初始化。偏差初始化为0。全局学习速率为0.001。在VOC07或VOC12训练中,运行SGD进行30k的小批量迭代,然后将学习率降低到0.0001,再进行10k的迭代训练。

Scale invariance:

作者探讨了两种实现尺度不变目标检测的方法:(1)通过蛮力学习和(2)使用图像金字塔。在蛮力方法中,每个图像在训练和测试期间都按照预先定义的像素大小进行处理,直接resize到固定尺寸,以兼容网络需要的输入尺寸。网络必须直接从训练数据中学习尺度不变性。相比之下,多尺度方法通过图像金字塔为网络提供了近似的尺度不变性。在测试时,使用图像金字塔对每个对象建议进行近似尺度标准化。在多尺度训练中,每次采样图像时,都随机抽取一个金字塔尺度,作为数据增强的一种形式以适应不同尺度的目标。由于GPU内存的限制,只对较小的网络进行多尺度训练实验。

网络测试与加速:

网络测试时,需要输入一副图像和对应的候选区域,然后网络会对这些候选区域进行打分和回归校正,在使用非极大值抑制决定最终的检测结果。对于全图像分类,与卷积层相比,计算全连通层所花费的时间较小。相反,对于检测,要处理的roi数量较大,计算全连通层花费了近一半的前向推理时间(见图2)。大的全连通层很容易被截断SVD(奇异值分解)压缩而加速。任意一个u × v的矩阵W,都可以分解为如下表达:

Fast R-CNN论文笔记

U是一个u × t矩阵,包含W的了前t个左奇异值向量, Σt是一个t x t的对角阵,包含了W的前t个奇异值,V是一个v x t的矩阵,包含了W的前t个右奇异值。截断的奇异值分解将W的参数量由uv变成t(u+v),当t远小于min(u,v)时,将大大较小参数量。所以在计算时,可以将一个全连接层拆分成两个进行计算,即一个左奇异值矩阵,一个右奇异值矩阵,就可以加快计算速度,并且性能不怎么损失,因为保留了主要的前t个奇异值,也就保留了大部分有用的信息。

Fast R-CNN论文笔记

实验结果:

Fast R-CNN论文笔记

Fast R-CNN论文笔记

 

Fast R-CNN论文笔记

Fast R-CNN论文笔记

 

Fast R-CNN论文笔记