[深度学习]Object detection物体检测之Fast R-CNN(4)

目录

1.introduction

2.The RoI pooling layer

3.Initializing from pre-trained networks

4.Fine-tuning for detection

5.Multi-task loss

6.Truncated SVD for faster detection

7.Result

8.Design evaluation


论文全称:《Fast R-CNN》

论文地址:https://arxiv.org/pdf/1504.08083.pdf

1.introduction

提出了两个目前的难题:

首先,必须处理大量候选对象位置(通常称为“proposal”)。其次,这些候选对象只提供了粗略的定位,必须进行refine以实现精确的定位。这些问题的解决方案通常会影响速度、准确性或简易性。

本论文提出了一种single stage的训练算法,该算法共同学习对目标proposal进行分类并refine其空间位置。

论文首先批斗了R-CNN和SPPNet的缺点。

对于R-CNN:

  1. Training is a multi-stage pipeline 训练是一个多级管道
  2. Training is expensive in space and time 训练时间和空间的消耗都很大
  3. Object detection is slow 检测速度很慢

这种慢是因为没有共享计算资源,不断的重复计算可能重叠的部分的卷积。虽然SPPNet解决了共享计算的问题,但也有缺点。

对于SPPNet:

  1. 与R-CNN一样,训练是一个多级管道
  2. 特性也写入磁盘
  3. 与R-CNN不同,fine-tuning算法不能更新spatial pyramid pooling之前的卷积层,固定的卷积层限制了深度网络的准确性。

对比起来Fast  R-CNN的优势在于:

  1.  Higher detection quality (mAP) than R-CNN, SPPnet 更高的准确率
  2.  Training is single-stage, using a multi-task loss 单级管道,多任务loss
  3.  Training can update all network layers 即fine-tuning过程也能更新卷积层参数
  4. No disk storage is required for feature caching 不需要额外的存储空间来存放feature

那么Fast R-CNN的结构就是下图这样:

首先将整张图片作为卷积网络的输入得到feature map,根据regions of interest 的映射关系在卷积后的feature map上针对每一个region的feature map进行RoI pooling,得到一个固定大小的feature vector,再把它作为fully connetion的输入。网络最后有两个分支输出,一个关于是softmax的分类概率输出(包括K+1类,其中+1代表背景类),一个是关于bounding-box的定位输出(为了定位的refine)。值得注意的是,这里所有的候选框依然是由selective search方法生成。

2.The RoI pooling layer

其实跟SPPNet里面的spatial pyramid pooling layer大同小异。他们都是对于输入的size没有要求,可以是任意大小,但是输出是固定了(例如7**7)。RoI pooling layer和spatial pyramid pooling layer区别在于前者是多个pyramid level后者只有一个。

3.Initializing from pre-trained networks

使用ImageNet的pre-trained networks需要经过三个变换才能作为Fast R-CNN的networks。

  1. 首先,最后一个最大池化层被RoI池化层所取代。
  2. 第二,网络的最后一个fully connetion层和softmax(经过ImageNet1000个分类的训练)被前面描述的两个分支层替换(一个完全连接层和softmax超过K + 1类别和特定于类别的边界框回归子层)。
  3. 第三,网络被修改为获取两个数据输入:image列表和这些image中的RoIs列表。

4.Fine-tuning for detection

这里解释了为什么SPPnet无法更新空间金字塔池层以上(卷积层)的权重。其根本原因是SPPNet的反向传播效率非常低,因为这些RoI都是来自不同的图像。这也是SPPNet和R-CNN所训练的方式。举例来说就是,从多张图片抽取一个RoI训练,那么这些RoI是来自不同的image的。同时这也是因为每个RoI都可能有一个非常大的接受域,通常横跨整个输入图像。由于前进通道必须处理整个接受域,所以训练输入很大(通常是整个图像)。简单点说就是输入太大了,根本没有达到分类某一个类别的要求,很多输入都是一整张的输入训练出来的networks效果可想而知。

而论文提出了一个feature sharing共享特征的训练方法。他们使用sampled hierarchically分层采样的SGD训练方式,先采样image,再采样image相关的RoIs。关键是,同一图像的RoIs在前后传递中共享计算和内存。与SPPNet和R-CNN从多张图片抽取一个RoI训练,Fast R-CNN是从同一张图片抽取不同的RoI训练。

但是这么做可能会导致收敛很慢,因为同一张image里的RoI是关联的,论文里说在实验里没有表现出收敛慢。

除了使用层级采样,还使用一个流线型的训练过程和一个fine-tuning阶段,联合优化softmax分类器和边界框回归器,而不是在三个单独的阶段训练softmax分类器、SVMs和边界框回归器。

5.Multi-task loss

左半部分是分类的loss,右半部分是边界框的loss。λ是平衡两个loss哪个更重要的因子,但本论文实验都是设为1.u>=1的含义是只计算不包括背景的分类的边界框的loss,u =0是背景类。

具体左半部分:跟以前的分类问题一样。

具体右半部分:t和v分别是预测框和真实框的(左上定点x坐标,左上定点y坐标,宽度,长度),smooth函数就是一个更鲁棒的L1损失函数,没有L2那么敏感(SPPNet和R-CNN使用L2损失函数

6.Truncated SVD for faster detection

在detection的时候由于有很多个region proposals,大部分的时间都浪费在了最后的全连接层,通过使用截断的SVD压缩大型完全连接层,可以很容易地加快它们的速度。这一部分可以参考https://blog.csdn.net/zhongkejingwang/article/details/43053513

主要思想是对全连接的W降维,减少计算量。

7.Result

  1. State-of-the-art mAP on VOC07, 2010, and 2012 
  2. Fast training and testing compared to R-CNN, SPPnet
  3. Fine-tuning conv layers in VGG16 improves mAP

结果就不贴出来了,具体可以查看论文。

8.Design evaluation

论文最后探讨了一些问题,包括:

Does multi-task training help?多任务训练有效果吗?

实验结果表明多任务效果更好。

Scale invariance: to brute force or finesse?缩放不变性:是使用单一尺度法还是多尺度?

实验结果表明对于很深的model单尺度会更好(他们的gpu在Largemodel下内存不够了),多尺度方法只提供了少量mAP的增加,而成本很高。综合考虑时间和算力还是决定使用单尺度。

Do SVMs outperform softmax?使用SVMs还是softmax?

与one-vs-rest SVMs不同,softmax在评价RoI时引入了类之间的竞争。但是这种提高很小。

Are more proposals always better?更多的候选框会更好吗?

以下实验表明,用更多的proposals对于深层分类器并没有帮助,甚至轻微地降低准确率。

猜你喜欢

转载自blog.csdn.net/sinat_33487968/article/details/83856865