论文地址:https://arxiv.org/pdf/1504.08083.pdf
代码链接:https://github.com/rbgirshick/fast-rcnn.
《Fast R-CNN》是2015年发表在cs.CV上的一篇论文,Fast R-CNN的全称是Fast Region-based Convolutional Network快速的基于区域的卷积神经网络,它是针对目标检测方法R-CNN的改进,主要加快了模型的训练和预测速度。与R-CNN比较,其训练时速度提升9倍,预测时速度提升213倍,预测一张图片R-CNN需要47s,Fast R-CNN只需0.3s;提高了模型准确率,从R-CNN的62%提升到66%;同时降低了模型复杂度,使用一个end-to-end模型。
为什么训练速度和预测提速不同?上篇翻译R-CNN原理时,提到,训练和预测使用的数据不同,训练时从单张图片中选取32个正例,96个负例,共128张“小图”分别转换成227x227大小,然后提取特征;预测时,从图中选择2000个备选区域,也在转换后提取特征。它们处理图片的数量相差20倍。Fast R-CNN优化了提取图像特征部分,因此提速也几乎相差20倍。
在Fast R-CNN之前,目标识别的主流算法主要是R-CNN和SPPnets。R-CNN是分多阶段训练的模型,它用CNN模型提取区域特征,然后代入SVM分类模型给备选区域分类,最终再代入回归模型调整区域边框;为了将特征提供给分类和回归模型使用,CNN需要将数据存盘,这就需要大量存储空间以及读写操作;另外,在测试阶段,需要对每一个备选区域分别代入CNN网络提取特征,使得预测速度很慢,无法实现实时的目标检测。
SPPnets(Spatial pyramid pooling networks)空间金字塔池化网络,不再对每一个备选区单独计算特征,而是计算整个图像特征,然后通过最大池化的方法从中算出每个备选区的特征,多种输出大小构成了特征金字塔。它对R-CNN的预测有10-100倍提速,对训练也有3倍提速。但也存在一些问题,比如仍然使用多模型管道的方法构建模型,过程数据需要存盘;且并不精调金字塔之前的特征提取网络,限制了模型的精度。
论文中的模型改进了上述问题,它的主要贡献是:
- 提高了目标检测的准确率
- 综合多种损失函数,建立end-to-end模型
- 训练时可更新所有网络层参数
- 不需要把特征存储在磁盘上
构建模型
Fast R-CNN原理图如下:
模型的输入是整张图片以及备选区域的位置(如图中红框),使用之前训练好的深度学习网络(Deep ConvNet如VGG-16)提取特征产生特征表(conv feature map),利用RoI最大池化层(RoI pooling layer)对于每一个感兴趣的区域(RoI:regions of interest)从特征表中提取固定长度的特征向量(feature vector),然后再经过全连接网络(Fcs)最终将处理好的数据传入两个网络,一个分类器(softmax)用于判定区域的类别,另一个回归器用于精调目标区域的边界(bbox regressor)。
RoI池化层
使用RoI池化层RoI pooling layer是其中一个重要方法,下图展示了一张图片中的两个备选区域a和b,可以看到它们的大小形状都不同(支持任意大小的区域),假设将它们分别进行目标是3x3的RoI池化(论文的中池化目标为7x7),如将a1中提取的特征通过最大池化转换到a1’(多合一)。这样无论选区大小,都能提取出等长的feature vector。也可将其看作一种特征金字塔算法,只是这个金字塔只有一层。
预训练网络
文中对于基础网络有三部分修改:第一用RoI池化替代特征网络最后一个池化层,第二将最后的全连接层和用于分类的Softmax层用分类(判别目标区域类别)和回归(精调目标框)两部分替代;第三将输入修改成完整张图片和一系列备选区域。
Fast R-CNN共享了全图特征,在前向和后向传递时共享了内存,不像相对R-CNN对一张图片多次提取特征,减少了复杂度使得反向传递调参变成可能。
损失函数
Fast R-CNN有两种输出,每个备选区属于各类别的概率,以及回归计算出的各备选框位置(x,y,w,h)。对每一个备选区计算以下损失函数:
其中p是属于各个分类的概率,u是类别的ground-truth(真实分类),t是针对各个类别预测的位置,v是备选框位置的ground-truth,损失由两部分组成:分类损失Lcls和回归损失(计算位置)Lloc,其中[u>=1]意思是只对大于等于1的分类区域计算Lloc(一般背景区域类别为0,背景区域没有备选框),λ用于平衡两个损失的权重比例,由于对v做了归一化处理,文中的λ都使用1。
回归损失的具体计算方法如下:
上式中使用的是smooth l1距离:smooth方法在零点附近使用平方函数使函数变得平滑;相对于l2距离,l1在计算距离时对异常值不敏感,避免大的误差导致调参时的巨大波动。
最小采样
Fast R-CNN最小采样有包含两张图片,128个区域,每张图片中包括64个RoI,其中25%正例是与ground-truth区域交集0.5以上的区域,其余为与ground-truth交集0.1-0.5的区域作为背景区域,尽量多地使用“难负例”以加快模型收敛速度。在训练阶段,图像有50%被垂直翻转。
RoI池化的反向传播,通过误差函数对输入Xi的偏导数计算:
其中L是误差函数,xi是RoI池化层的输入特征,yrj是该层的输出,r是备选区域RoI中更小的块(也可理解成点),j是第j个具体的通道(通道用于提取某一种具体特征), i是R区域内部某一小块的索引号。
更具体一点,再使用刚才的例子:此时只考虑单一的备选区域RoI(R),其中包含r个小块(下例中一共9小块x1~x9),假设通道j用于筛选颜色最深的区域,下图中最深的是右下边被蓝线框出的x9区域,这里i索引值为9,将x9的值作为输出y。
目标检测
目标检测过程与训练阶段略有不同,网络的输入是整张图片和事先计算出的备选坐标,每张图片一般包含2000个备选区域,将每一区域缩放成224x224大小;网络的输出是每个备选区属于各个分类的概率,以及针对于每一个分类精调后的备选框坐标。用估计的概率为每类指定检测的置信度r,最后利用NMS(non-maximum suppression)消除同一类别中冗余的备选框。
在目标检测过程中,卷积层对每张图片只提取一次特征,而每个备选区域,都需要经过全连接层计算,全连接层的计算量和卷积层的计算量各占一半,文中使用SVD分解方法将一个全连接层W分解成两个全连接层,优化了全连接层的计算时间,减少了网络参数。对比效果如下图所示:
模型效果
下图展示了Fast R-CNN与之前模型的效果对比:
Fast R-CNN的速度有明显提升。
与SPPnet不同的是,Fast R-CNN不仅对全连接层调参,也对底层的卷积网络精调参数,对不同层调参效果对比如下:
可以看到调参越多,效果越好。但过深的调参将花费更多时间,需要在时间和精度上选择平衡点,作者认为在较大的网络上conv3_1以上层调参比较合理,在中小型网络上conv2以上比较合理。
其它评估
多任务训练
多任务训练就用同一模型解决一个以上的问题,比如本文中使用同一模型预测目标类别以及精调备选框。它不仅比模型组合更方便使用,且模型在训练过程中还能相互推进。下表展示了测试结果:
第一列只训练了分类器,没有做备选框的精调。
第二列使用多任务训练,但在测试时未使用精调备选框处理,以便与第一列的分类效果对比,可以看到即使只看分类器效果,在大中小三种模型中,多任务训练的mAP也平均高于单任务训练效果0.8-1.1个百分点。
第三列分别训练分类和精调模型,训练精调模型时,分类模型参数被冻住,不相互影响。
第四列是多任务训练最终的效果。
缩放不变性
论文中尝试了两种方法以实现尺度不变性,一种方法是通过蛮力学习,图像在训练和预测阶段都被转换成事先定义的大小,然后代入模型训练,模型在训练过程中学习尺度不变性;另一种方法是图像金字塔方法,在训练过程中抽取不同缩放比例的图片作为数据扩充,在测试阶段,对每个目标区域进行尺度归一化。
下图展示了对比结果:
其结果差别很小,且多尺度计算花费了更多的时间,这可能由于卷积神经网络可以直接学到尺度不变的规律,因此,作者认为使用600像素的图片训练即可。
是否需要更多的训练数据?
DPM类模型在使用几百上千个图片训练后,精度mAP就已经饱合,不再提升。深度学习神经网络则需要更多的数据。文中使用VOC07和VOC12的训练验证集数据,将训练数据量提升到16.5K,训练模型在VOC07测试集中的效果从69.9%提升到70.0%。另外一个实验是使用VOC07的训练验证和测试集加VOC12的训练验证集共21.5k数据,并用更小的学习率和更多的迭代次数训练模型,然后对VOC10和VOC12测试,mAP提升分别为66.1%68.8%和65.7%68.4%。
SVM和Softmax哪个更好?
下图对比了展示效果,可以看到,整体效果差别不大,在使用Fast R-CNN框架的情况下,Softmax略优于SVM。Fast R-CNN只在精调部分加入了Softmax,而SVM是从头训练的分类模型。另外,Fast R-CNN在计算类别得分时引入了类间的竞争。
更多备选区效果是否更好?
目标检测有两种主流方法:使用稀疏的备选框(如选择性搜索)和稠密的备选框,稀疏的备选框使用层叠方法,它拒绝了大部分候选框,只对少部分做评估。这种方法提高了DPM模型和Fast R-CNN的精确度。
文中使用选择性搜索从每张图中选择1000-10000个候选区域进行实验,从图中蓝色实线可以看到,一开始随着备选区域的增加mAP有少量提升,后面随着数据继续增加mAP不升反降。也就是说太多的备选区不但没有帮助,反而可能有害。
上图中也针对稠密备选框做了一些实验,具体请见Dense相关图示。
相关概念
RoIs
regions of interest感兴趣的区域,可以简单地理解成备选框,每个RoI由四个值描述(r,c,h,w),分别是左个角点坐标和区域的宽高。
proposals
候选的目标区域,一般指在图片内部划出的矩形。
网友评论