Fast R-CNN 目标检测【论文笔记】

0 Abstract

     Fast R-CNN 是在R-CNN的基础上进行的改进,它在训练和测试速度及目标检测精度上均有提高。相 在VGG16模型上,相对于R-CNN, Fast R-CNN在训练时间上提高了9倍,在测试时间上提高了213倍;相对于SPP-Net,Fast R-CNN在训练时间上提高了3倍,在测试时间上提高了10倍。

1 Intoduction

     作者首先提出了目标检测中的R-CNN和SPPNet的缺点。
     对于R-CNN,它的训练阶段是一个多阶段的过程,包括生成目标候选区域、提取特征、训练SVM、拟合边界框回归量(Bounding-box regressors);并且在空间和时间方面代价巨大;此外在测试阶段时检测一张图片需要47s。
     对于SPPNet,同与R-CNN一样,该训练阶段也是是一个多阶段过程,涉及提取特征、使用log loss微调网络、训练SVM、最后拟合边界框回归。与R-CNN不同的是,SPP中提出的微调算法无法更新空间金字塔池池化层之前的卷积层,即固定卷积层限制了深度网络的准确性。
     其次作者提出了对于R-CNN和SPPNet的缺点改进后的Fast R-CNN的优点:

  1. 与R-CNN 、SPP相比,目标检测精度更高
  2. 单阶段训练,使用多任务损失
  3. 训练阶段可以更新网络的所有层参数
  4. 不需要硬盘存储特征缓存

2 Fast R-CNN网络架构

在这里插入图片描述
Fast R-CNN算法示意图如上图所示,其检测步骤如下:

  1. 输入一个完整图像和一系列候选区域(注意这里的候选区域也是RoI ( Regions of Interest ) );
  2. 通过深度网络中的卷积层(VGG、Alexnet、Resnet等中的卷积层)和最大池化层对整张图像进行特征提取,得到图片的特征图;
  3. 对于每个候选区域,RoI池化层从特征图中提取出固定长度的特征向量;
  4. 固定长度的特征向量作为之后全连接层的输入,全连接层的输出为两个并行输出层,分别为softmax分类器和boxbounding回归器;前者估计图片中K个物体的概率和背景的概率,后者输出四个实数值,用于表示对应某类物体的边界框。

接下来对网络架构进行详细的总结:

2.1 RoI池化层

      对于任何在有效候选区域中的特征,RoI池化层通过最大池化方法将该特征转换为固定大小的特征向量表示。每个RoI是一个包含卷积特征图的矩形窗口,通过4元组(r,c,h,w)来定义,矩形左上角顶点为(r,c),矩形的高和宽为(h,w)
      RoI池化层将RoI区域划分成h×w个子网格,然后最大池化每一个子网格内的值,最后输出相应的h×w的网格结果。同标准最大池化一样,RoI池化是对特征图的每个通道独立进行的。可以把RoI池化看作是特殊的单层SPP池化,其中h和w是超参数。

2.2 对预训练好的网络进行微调

      为将提前训练好的AlexNet、VGG16等网络调整为Fast R-CNN模型,作者对AlexNet、VGG16等网络进行了三方面的调整:

  1. 将网络最后一个卷积层的池化层替换为RoI池化层;
  2. 将网络末端的一个全连接层和softmax层替换为并行输出层,一种一路为一个全连接层和输出为K+1(K个分类加1个背景类)种类的softmax层,另一路为一个全连接层和一个特定类型的边界框回归器(由四个参数定义一个边界框);
  3. 将网络的一个输入变为两个输入:一系列图片和一系列RoI。

2.3 微调

Q: 为什么SPPnet不能更新空间金字塔池化层之前的卷积层参数?

      SPP层反向传播效率很低, 其根本原因是每一个训练样本(例如RoI)均来自不同的图片,而我们知道反向传播需要用到正向传播过程中的数据,则导致需要存储的数据量巨大!!!

      SPP-Net中fine-tuning的训练样本是来自所有图像的所有RoI打散后均匀采样的,即RoI-centric sampling,这就导致SGD的每个batch的样本来自不同的图像,需要同时计算和存储这些图像的Feature Map,过程变得expensive;Fast R-CNN采用分层采样思想,先采样出N张图像(image-centric sampling),在这N张图像中再平均采样出R个RoI,即每张图片采样出R/N个RoI,同一图像的RoI共享计算和内存。

      论文中举了一个例子说到:设N = 2, R = 128,也就是说只用计算和存储2张图像卷积正向传播过程中的数据,那么需要存储的数据量相比R-CNN和SPP小了64倍!

      Fast R-CNN 通过 单阶段微调同时优化softmax分类器和边界框回归器来简化训练过程,该单阶段微调的组成(损失、小批量采样策略、RoI池化层的方向传播、SGD超参数)如下所示。

  • 多任务损失
          给定带有真实类别u和真实边界框v的训练RoI,同时训练分类和边界框回归的多任务损失函数定义为:
    在这里插入图片描述
    其中
    在这里插入图片描述
         即为softmax输出的预测概率p对于真实类型u的交叉熵损失函数Lcls(p,u) = -ulogp - (1-u)log(1-p);
    公式中[u≥1]表示当u≥1成立时返回1,否则返回0。

     之前提到softmax输出u+1个类型,其中加1表示背景类,而在这里若RoI中没有真实标注的边界框而仅存在背景类时,[u≥1]返回0,即此时Lloc项为0。

     对于边界框回归:

在这里插入图片描述
在这里插入图片描述
Q2:注意这里使用L1范数而非L2范数的原因是:
     L1范数的鲁棒性较强,它不像R-CNNSPPnet中使用的L2范数对异常值那么敏感。当回归目标无边界时,使用L2范数训练时需要仔细调整learning rate以避免梯度爆炸,而使用L1范数消除了对于学习率的敏感性。

     将真实的回归目标 vi 标准化为均值为0,方差为1,λ=1

  • 小批量抽样(Mini-batch sampling)
    对于每个小批量样本,RoI与真实边界框的IoU大于0.5的标记为u≥1;取IoU为区间[0.1, 0.5)中最大值为背景,标记为u=1;数据增广方法采用概率为0.5的图像水平翻转。

  • 通过RoI池化层的反向传播
    xi表示RoI池化前的特征图上的像素点,yrj表示第r个RoI池化后的第j个的像素点,RoI的前向传播为
    在这里插入图片描述

     其中i*(r, j)表示如果第r个RoI的第j个像素点的来源,是最大池化时选出的最大的那个点对应的坐标;
     但是这里由于一个RoI池化前的像素点xi可能和多个不同的yrj有映射关系(因为存在多个候选框,候选框之间可能有重叠),因此反向传播过程的公式为:
在这里插入图片描述

  • SGD超参数
          用于分类和回归的全连接层的权重按照0为均值,标准差为0.01和0.001初始化,偏置均初始化为0;momentum设置为0.9,权重衰减设置为0.0005。

3 Fast R-CNN检测

      奇异值分解(Singular Value Decomposition,SVD)是一种矩阵分解(Matrix Decomposition)的方法。假设有 m×n的矩阵A,那么 SVD 就是要找到如下式的这么一个分解,将 A 分解为 3 个矩阵的乘积:

Am×n=Um×mΣm×nVTn×n

      其中对于分解后的三个矩阵计算方法 参考这里。

      在Python 中可以使用 numpy 包的linalg.svd()函数来求解 SVD。

      论文中提到,在目标检测过程中,需要处理的RoIs区域数量非常大,几乎一半的前向传播时间都花在全连接层的计算当中,对全连接层的权重W采用奇异值分解(SVD)可以加快计算速度。原因是SVD可以减少参数数量。

      而采用SVD后对于网络模型的改动为:和权重W相关的单一全连接层改为两个全连接层,第一个全连接层的权重为Σm×nVTn×n(偏差为0),第二个全连接层的权重为Um×m(偏差和改动之前的全连接层偏差相同)

4 总结

     Fast R-CNN 是在R-CNN基础上进行的改进,实验大多实在VGG-16模型上进行的。其改进共可分为三个方面,以上都有详细提到, 这里做一个最后的总结:

  1. 提出了RoIPooling,避免了R-CNN中对提取的region proposals进行先缩放再逐一卷积获取特征的步骤,加速了整个网络的学习处理过程,这是巨大的改进;并且RoIPooling是可导的,因此使得整个网络可以实现end-to-end learning,这点可以认为是Fast R-CNN相对于R-CNN最大的改进之处;

  2. 采用了Multi-task loss进行边框回归,在R-CNN中也有这方面的实验;

  3. 利用了截断的奇异值分解(Truncated SVD for faster detection)加速了网络计算;

  4. 下图展示了SPP和RoI pooling的区别。
    在这里插入图片描述

参考博客1

欢迎关注【OAOA

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值