SPP-Net 论文笔记

简介

SPP-net是何凯明团队在rbg大神提出R-CNN之后提出的比较有创新性的网络,其主要贡献在于:
1.打破了CNN网络需要输入固定大小的图像的限制,利用Spatial Pyramid Pooling方法,不需要像以前一样需要对图像进行裁剪等操作,而是直接将entire image输入。

2.利用SPP-Net进行图像分类以及目标检测,虽然对于精度并没有特别明显的提升,但是在object detect中,相比较与rbg大神的R-CNN,检测速度的提升是显著的。

下面对SPP-Net进行简要介绍:

Q1: 为什么CNN网络需要固定大小的输入?

卷积层不需要固定大小的输入,全连接层需要固定大小的输入,因为卷积层类似于滑动窗口,输出的特征图会代表着输入图像的空间特征,但是全连接层是WX+b的线性函数,其输入X与W息息相关,需要维度相同,所以需要固定大小的输入。

Q2:SPP-Net网络是什么样的?

如下图,图1是SPP-Net网络的结构图,图2是SPP Layer的结构图。

根据图1,我们可以很直观的观察到,传统的网络需要首先对图像进行变换,然后送入CNN网络以及全连接层,得到输出结果,而SPP-Net首先将图像输入到CNN网络中,在全连接层之前,进行 Spatial Pyramid Pooling操作,然后再接全连接层,得到输出结果。

这里写图片描述

图1:上面是传统的CNN网络,下图是SPP-Net网络

Q3:SPP-Layer是什么样的?

SPP的过程观察图2可以得到清晰的理解,作者通过对任意大小的feature map,采用多个spatial bin进行下采样(本文采用的方法是max pooling)然后将不同的spatial bin得到的结果进行组合,得到固定大小的feature。

利用这样的网络,可以通过将图像缩放到不同的大小,比如:224或者180。输入图像的尺寸不同,经过SPP Layer便可以提取到不同尺寸的特征。

这里写图片描述

图2:SPP Layer

Q4: SPP Layer 在进行下采样的过程中,如何选取pooling的kernel_size以及stride?
  • 对于图像大小一致(a*a),采用( n*n )大小的bin,win = ceil( a / n ), stride = floor( a / n )
  • 对于图像大小不一致(w*h),采用( n*n )大小的bin,win = ceil(w / n, h / n),stride = floor( w/n , h/n )

如下图是一个SPP Layer的例子;

这里写图片描述

图2:3级SPP Layer参数示意图,上层conv的特征图大小是13*13

Q5: SPP 具有哪些优点?
  1. SPP可以无视输入图像的大小,产生相同大小的特征。
  2. SPP利用不同大小的spatial bins,可以更好的提取目标的信息,对目标形变具有更好的鲁棒性。
  3. SPP可以提取不同尺寸的图像特征。
  4. SPP可以使用不同size and scale的图像进行训练。
Q6: SPP-Net的训练时如何进行的?
  • single-size training
    该方法参照以前的方法,需要将input image 变换到相同大小(如:224/*224),然后在最后一个卷积层后面接SPP-Layer,然后接全连接层。

  • multi-size training
    该方法将input image变换到多个尺寸(比如:224、180),然后每一个full epoch交替使用尺寸为180、224进行训练

利用多尺寸训练,可以模仿不同的图像尺寸的大小,平衡固定的参数。

Q6、作者的实验结论都有哪些呢?

此处可以吐槽一下,作者提出的SPP-Layer的想法很简单,但是作者做的实验确实有点多,很丰富。

  • 用于对比实验的网络基础架构
    作者在三个网络基础架构上进行分类精度实验的对比,这三个网络分别为:ZF-5、ConvNet-5(5个conv,conv2和conv3后接pooling)、Overfeat-5/7(相比较与ZF以及ConvNet,Overfeat提供更大的特征图18*18,ZF-5是13*13,更大的filer number),网络结构详情,如下图所示:

这里写图片描述

图4,网络结构示意图

实验对比结果,在此不粘贴了,这里只说一下结论,如果想看实验数据,可以看论文里面的说明:

  • 多级池化即(SPP)提高了识别精度。
  • 多尺度图像训练,可以提高识别精度。
  • full-image,可以提高识别精度。
Q7: 如何进行多尺度的测试?

作者给出了参考方法:
1.将图像缩放到6个尺寸:[224, 256, 300, 360, 448, 560]
2.计算每一个特征图。
3.对每一个特征图,提取18个views,分别为:中间,4个角,4个边的中间,是否镜像。

SPP-Layer在object detection中的应用

Q1: 如何将SPP-Layer使用在object detection中?

这里类比R-CNN进行说明,对R-CNN不了解的,可以查看我上一篇博客。

  • R-CNN,首先利用SS方法,提取2000个左右的候选框,SPP-Net同样需要。
  • R-CNN,对每个候选框需要resize到固定大小,然后输入到CNN网络中进行训练。SPP-Net将整张图像输入到CNN中,在全连接层之前,对每一个SS提取的候选区域,利用SPP-Layer提取固定特征,然后送入到后面FC层进行训练,如下图所示:

这里写图片描述

SPP-Layer在object detection中的结构示意图

  • R-CNN利用线性SVM进行分类,SPP-Net采用同样的方法。
  • 对于正负样本的定义,R-CNN与SPP-Net基本相同。

  • 另外作者提出可以使用 multi-scale feature extraction提高精度,即将图像缩放至{480,576,688,864,1200},然后在进行特征提取时候,作者选择最接近尺寸224*224的scale的尺寸进行特征提取。

Q2:实验结果如何呢?

实验结果发现,对于精度的提升不大,但是时间消耗上提升特别明显。

这里写图片描述

这里写图片描述

这里写图片描述

猜你喜欢

转载自blog.csdn.net/chunfengyanyulove/article/details/79618597