R-CNN系列推演:
每一篇都是前一篇或者前几篇的改造版,所以按顺序看会比较好。
今天看一下SPPnet。
论文题目:Spatial Pyramid Pooling in Deep Convolutional
Networks for Visual Recognition
下载连接:https://arxiv.org/pdf/1406.4729.pdf
SSPnet这篇论文是针对R-CNN的缺点进行改造,文章内容不是特别多,所以泛读一下。
可以看一下我前两天整理的R-CNN精读
R-CNN模型回顾
R-CNN是首次提出两阶段目标检测的模型。
具体操作 先从图片中提取2000个候选框,然后每个候选框放到CNN里抽特征,然后再给SVM分类。
R-CNN模型要求输入尺寸必须固定为227 * 227。
为什么R-CNN要求固定输入?
卷积层对于输入没有要求,因为就是滑动嘛。但是全连接层就不一样了,全连接层的参数和输入图片大小有关,因为他要连接所有的像素点,所以要指定输入输出的神经元个数,规定输入的feature map大小。
SSPnet模型提出背景
因为R-CNN要求输入尺寸必须固定成227 * 227,但对于图片的无论是剪裁(crop)还是变形(warp),都会对识别精度产生影响,所以作者想提出一种方法解决从全连接层这个问题,让模型不再固定输入。
R-CNN模型的速度也很慢,主要是每一张提取了2000个候选框,每个候选框进行变形然后送给CNN。
作者改进的思路和方法
改进思路一
改进图片输入固定尺寸导致图片变形的问题。
作者提出了一种名为 空间金字塔池化(SSP)的模型,该模型应用于最后一个卷积层之后,全连接层之前,SSP将接受不同输入尺寸的feature map,转化成固定输出的尺寸。
两种模型的对比:
这就根本解决了R-CNN固定输出尺寸的问题,这里其实也是固定了输出尺寸,但与R-CNN根本区别是,R-CNN先将图片进行了扭曲或者裁剪,然后再给CNN,此时CNN的特征提取就是基于已经变形过的图片了,必然有失精度,而在SPP模型中,图片是原图输入给CNN进行特征提取,提取完特征之后再变形,这样在CNN这块就没有损失了。
改进思路二
改进R-CNN训练慢的问题。
因为需要提取2000个候选框放到CNN里所以导致R-CNN训练大幅减慢。
作者提出了一种思路方法,就是对每一个图片不进行候选框提取,而是将整个图片都放到CNN中去提取整个图片的feature map,然后通过选择性搜索(SS)得到候选区域,让候选区域和feature map直接映射,得到候选区域的映射特征向量。
SPP为什么能输出固定的长度?
论文中给出了下面这张图:
最下面的黑色方框就是卷积层的最后一层输出的feature map。空间金字塔池化包含了很多金字塔层(上图中包含3层)只不过拆开放了,他们应该是叠在一起的,最左边是第一层。
实际上SSP结构就是多层最大池化层。设定的金字塔尺度为n×n bins(对于不同大小图片是固定的),上图三层左起分别是4 * 4,2 * 2,1 * 1,将这三张网格放到下面这张特征图上,就可以得到16+4+1=21种不同的块(Spatial bins),我们从这21个块中,每个块提取出一个特征,这样刚好就是我们要提取的21维特征向量,最终一共可以输出固定的(16+4+1)*256特征。
SPP模型训练过程
论文中说了两种训练方式,一种是single-size,一种是Multi-size。
single-size
单尺寸训练。
上面也说了SPP最大的优点就是不拘泥于输入的尺寸,但是由于硬件和框架方面的问题,这里使用了固定尺寸的输入进行了训练(输入为224 * 224)。
**Multi-size **
多尺寸训练。
实际上就是在当前固定输入尺寸的情况下模拟SPP的理论上不要求输入尺寸的情况。
使用两个尺度进行训练:224x224、180x180。训练时,224x224通过crop得到,180x180的通过缩放224x224得到。之后迭代训练,即用224的图片训练一个epoch,再用180的图片训练一个epoch,交替进行。
两种尺度下,在SPP后,输出特征维度都为 (9+4+1)x256,参数共享,后面跟全连接层,收敛速度和单尺度训练的相近。
小总结
这篇论文主要是对R-CNN的改进,所以用一张两模型的对比表格在好不过了。
R-CNN | SPP |
---|---|
一张图片提取2000个候选框 ,并强制缩放到固定尺寸后送给CNN | 整张图片直接送给CNN |
CNN提取每个候选框的feature map | CNN得到整张图的feature map,通过SS得到候选区域与feature map直接映射得到特征向量 |
将CNN提取的feature map 送给SVM分类,送给BB回归进行定位修复 | 映射的特征向量给SSP,SSP输出固定大小的特征向量,再给 FC,再SVM+回归 |
SPP相较于R-CNN,精度UP! 速度UP!