论文阅读笔记 之 Fast R-CNN

论文主要基础(前作)(先看完这两篇论文后再食用fast-RCNN更佳,可参考我之前的两篇博客)
R-CNNSPP-Net

提出问题

R-CNN与SPP-Net有以下缺点:
① 多阶段训练。需要分别训练特征提取网络、SVM分类器、边框回归部分,训练不连续,耗费时间
② 对于SVM和边框回归的训练,需要从每个建议区域提取特征并存储到磁盘中,需要占据大量的存储空间
③ SPP-Net的训练中,空间金字塔池化层的反向传播非常低效,这里是SPP-Net的训练策略问题,并非模型问题

本文在算法流程设计以及网络结构方面解决了问题①②,而通过改变训练策略解决了问题③

RCNN还有输入尺寸必须固定的问题,SPP-Net中使用SPP结构解决了此问题,本文中参考SPP-Net,在网络中增加了简化的SPP结构,称为RoI池化层。

本文贡献

① 比RCNN、SPP-net更高的检测准确率mAP
② 训练过程是单阶段的(总体结构仍属于two-stage方法),使用了一个多任务损失函数
③ 训练时能够更新所有网络层
④ 不需要磁盘空间来缓存特征

本文最终成果:
基于VGG16的Fast RCNN算法在训练速度上比RCNN快了将近9倍,比SPP-net快大概3倍;测试速度比RCNN快了213倍,比SPP-net快了10倍。在VOC2012上的mAP在66%左右。

网络结构

在这里插入图片描述

算法流程

首先对于每一张图使用selective search方法生成2000+个RoIs(感兴趣区域,相当于RCNN中的region proposals)

然后将整张图片输入到卷积网络中,得到该图片对应的feature map,然后根据卷积网络的尺寸映射关系能够得到每个RoI对应的特征图R_hω,在原文中使用一个四维向量(r,c,h,ω)来表示,r,c为左上角的坐标,h,ω是它的高度和宽度。

而后将R_hω输入到RoI池化层进行处理。在RoI pooling layer中,是将R_hω划分成H×W个部分,对于每个部分独立进行最大池化。通过上述步骤就可以实现对于任意尺寸的RoI得到固定长度为H×W的特征向量。(就是SPP Net中的SPP结构的简化版本

最后再分别输入到两个全连接层,分别进行softmax类别预测以及边框回归。

可以看到,Fast R-CNN是通过直接使用softmax代替SVM,将边框回归部分并入整体网络结构的方法,来解决文章开始所提出的问题①和问题②,而问题③是通过优化训练时的batch组成来解决的。

训练batch组成选择

SPP Net中SPP部分梯度反向传播非常低效,其原因如下所述(参考资料[2]):
SPP-net是先把所有图像用SS计算的RoIs存起来,再从中每次随机选128个RoIs作为一个batch进行训练,这128个RoIs最坏的情况来自128张不同的图像,那么,要对128张图像都送入网络计算其特征,同时内存就要把128张图像的各层feature maps都记录下来(反向求导时要用),所以时间和空间上开销都比较大;(RoI-centric sampling)

而Fast R-CNN虽然也是SS计算RoIs,但每次只选2张图像的RoIs(一张图像上约2000个RoIs),再从中选128个作为一个batch,那么训练时只要计算和存储2张图像的Feature maps,所以时间和内存开销更小。(image-centric sampling)

损失函数

Fast R-CNN损失函数采用多任务损失函数,即结合分类损失以及定位损失,其形式如下:
在这里插入图片描述
第二部分为定位损失,其中[u≥1]为示性函数,当u≥1时值为1,其它为0,其实就是类别u为背景类时不计算定位损失。
定位损失采用smooth_L1损失函数,形式如下:
在这里插入图片描述
其详细解释可参考资料[3]

其它改进

Fast R-CNN训练过程中样本的抽取方法与SPP-Net一致:
在IOU>0.5的RoIs中取25%作为正样本,在IOU<0.5的RoIs中抽取IOU最大的作为负样本

因为需要对每个感兴趣区域输入到网络后部分的全连接层进行处理,因此全连接层的计算会占用大量的时间,作者还使用了SVD方法来缩减全连接层的计算时间。

检测结果

VOC07+2012数据集的检测结果如下:
在这里插入图片描述

总结

Fast R-CNN是在SPP-Net基础上改进的,改进的方面有:
① 使用softmax代替了SVM进行分类,同时将边框回归并入了网络结构中。这就避免了分阶段训练带来的诸多问题。
② 对SPP结构进行了简化。SPP使用多个尺度池化(其论文中例子是三个,1×1,2×2,4×4),而fast rcnn只使用了一个尺度。(其实说是尺度不太准确,算是将特征图分别划分成了m×m个部分,对每个部分分别池化)
③ 训练策略中在N(文中设为2)张图片的RoIs中抽取R(文中设为128)个组成一个batch. 节省了存储空间,提高了反向传播的效率。
④ 损失函数相应的使用了多任务损失函数。

主要在这几方面对SPP-Net进行了改进,在其它部分基本与SPP-Net无异。

主要缺点

① 延续了R-CNN、SPP-Net的使用ss方法提取region proposals,这一方式比较耗时

模型评估

作者分别对多任务训练、尺度不变性策略、训练数据数量、SVM对比softmax、proposals数量这5个方面进行了实验验证。全部在VOC2007数据集上进行的实验。
1、 多任务训练(本文提出的单阶段训练)相比于多阶段训练是否有提升

作者分别在三个规模的模型上进行了对比实验,可以看出,无论有没有边框回归模块,使用multi-task训练得到的mAP总比stage-wise训练得到的结果要高1~3个百分点。
同时作者注意到,将边框回归模块并到模型中也能够提升mAP。
在这里插入图片描述
2、 实现尺度不变性策略的方式:暴力法(单尺度)或者图像金字塔(多尺度)
在这里插入图片描述
可以发现,使用多尺度能够小幅度提升mAP但是耗费时间却大幅度增加。并且L模型(VGG16)的单尺度的结果mAP已经比R-CNN(多尺度)的结果66.0%要高
结论:单尺度能够在效率与准确率之间达到更好的折衷。

3、 训练数据数量对结果的影响
作者分别在16.5K个图片的数据集和21.5K张图片的数据集上进行了实验,结果发现相比于数量相对小的数据集,在数量多的数据集上得到的mAP提升了2~3个百分点。

4、 SVM与softmax的效果
在这里插入图片描述
使用softmax的提升较小(但也是提升,至少说明不逊于SVM)

5、 Proposals的数量对实验结果的影响
在这里插入图片描述
结果发现提升proposals的数量并不能对mAP有大幅度的提升,反而还出现了下降

参考文献及资料

[1]论文原文:https://arxiv.org/abs/1504.08083
[2] https://zhuanlan.zhihu.com/p/159376875
[3] https://cloud.tencent.com/developer/article/1441560

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值