Fast RCNN比RCNN和SPPnet提高了速度和准确率;训练时,同样使用VGG16比RCNN快9倍,比SPPnet快3倍,测试时比RCNN快231倍,比SPPnet快10倍。
RCNN速度慢的主要原因 是它需要对每一个候选目标执行卷积ConvNet的前向传递,且不进行分享计算结果和参数。 RCNN是多阶段进行处理的,RCNN首先需要在候选目标上使用log损失函数来微调卷积网络,然后使用SVM来适应卷积网络,这些SVM会作为目标检测器取代之前通过微调得到的softmax分类器,最后使用边界框回归。 RCNN在训练时会消耗大量的时间和空间,在进行SVM和边界框回归处理时,特征需要从每个图像的每个候选目标中提取出来,并写入到磁盘,耗时且需要大量存储空间。 RCNN目标检测非常慢,在测试时使用GPU运行VGG16,每张图片需要47s。
训练时是多层次进行的,包含特征提取、使用损失函数微调网络、训练SVM,最后选择恰当的边界回归器(bound-box regression)进行处理,特征也要写到磁盘中。
与RCNN不同的是,SPPnet提出的微调算法不能更新在空间金字塔之前的卷积层(也就是不能更新权重参数,原因是因为当每个训练样本均来自不同的图像时,在SPP层执行反向传播的效率非常低效,效率低下的原因是每一个ROI(region of interest感兴趣区域)都有一个非常大的接收域,这个接收域一般都是跨越整个输入图像的,自从前向通过必须处理整个接收域,训练阶段开始要求输入非常大,一般需要输入整个图像。),SPPnet中固定的卷积层也限制非常深的网络的准确率。
更高的检测质量、训练时使用单层次进行且使用混合损失函数、训练时可以更新所有网络层、特征的存储不需要磁盘
输入整个图像和一个候选目标集合(也就是selectivesearch得到的2000个候选区域集合); 网络首先把整幅图像通过几个卷积层和最大池化层进行处理,得到一个卷积特征图; 然后对每个候选目标,ROI池化层从特征图中提取出一个固定长度的特征向量,把每个特征向量放入一系列的全连接层; 最后得到两个统计输出层,第一个输出一个离散的概率分布,通常概率分布是通过全连接层上对K+1个类别(k类+背景)进行softmax计算得到的。第二个输出边界框回归的偏移量——四个数值(r,c,h,w),针对特定的候选目标提出了尺寸不变平移和对数空间的高度、宽度偏移
ROI池化层使用max pool 把特征转化为固定空间范围为H×W的小特征图,H和W独立于任何特定的ROI。 ROI是卷积特征图中的矩形窗口,每一个ROI由一个四参数元组(r,c,h,w)定义,(r,c)是窗口左上角的坐标,h和w是高度和宽度。 ROI最大池化层的作用是在h×w大小的ROI窗口分割出H*W个子窗口,子窗口大小为h/H × w/W,然后将每个子窗口的值最大池化到对应的输出网格单元格中。像在标准最大池化层一样,对特征图的每个通道单独进行池化。 ROI层只是SPPnet空间金字塔的特殊一类,ROI层只有一层金字塔层。我们通过对子窗口池化得到ROI层。
每个网络有五个最大池化层,池化层位于5个卷积层和另外13个卷积层中间 当预训练网络初始化一个FAST R-CNN时,FAST R-CNN会经历三次转变:
使用ROI池化层取代最后一个最大池化层(也就是第五层最大池化层),ROI的H和W会设置的兼容网络第一个全连接层。使用先前描述的两个层(通过K+1类的全连接层和特殊类边界回归得到的SoftMax层)替代最后一个全连接层和SoftMax层(针对1000种类的ImageNet数据集进行分类而训练的)。修改使得网络需要两个输入:图像列表和这些图像中对应的ROI列表Fast RCNN通过在训练阶段共享特征,提高了效率; FAST R-CNN的训练过程中,对小批量SGD进行分层采样,首先是对N个图像进行采样,然后是每个图像的R/N个ROI样本(R是样本数,与RCNN一样,一般取2000)。同一图像的ROI在前向和反向传播的过程中,会分享计算结果和存储空间;把N的值变小,也会使小批量计算减少。这种策略比原本的方法快64倍,存在的问题是——可能会造成训练结果收敛减缓,因为来自同一图像的ROI是相关联的。 除了分层采样,FAST R-CNN还通过微调单一层次来共同优化softmax分类器和边界框回归,替代原本需要分别训练softmax分类器、SVM、回归器三个分离的层次。
发现了两种方法实现尺寸的不变性: 1.brute force learning 蛮力学习法 每个图像使用事先定义好的像素尺寸进行处理,网络直接从训练数据中学习对尺寸不变的目标进行检测。 2.使用图像金字塔 图像金字塔提供了近似尺寸不变性。测试时,图像金字塔被用来对每一个候选目标求取近似的尺寸不变性,当多尺寸方法训练时,每当一个图像被采样,随机选取一个金字塔尺寸,作为数据增长的模式。
对于整个图像分类的过程,时间主要消耗在全连接层和卷积层。 大型全连接层在使用截断的SVD(singular value decomposition奇异值分解)后,会加快处理数据的速度。 U是u×t大小的矩阵 ∑_t是t×t的对角矩阵 V是v×t的矩阵 为了压缩网络,将与W相连接的单一全连接层使用两个非线性的全连接层替代,第一个全连接层使用权重矩阵∑_t V^T (无偏差),第二个全连接层使用U(具有和W相关的初始偏差) 当ROI数量很大时,这种简单的压缩方法会提供更快的处理速度。