SPP论文小结

名词

feature map:每一种卷积核都能提取一张特征图(feature map), 也就是说有多少种不同的卷积核,就会多少个不同的feature map, 因为不同的卷积核可以进行不同的特征提取. 其不仅包括提取出的特征内容,还包括它们对应的空间位置。见Figure2。而且每个过滤器,filter,会被特定的语义内容所激活,filter55被圆形,filter66被对号形状。
这里写图片描述
Spatial pyramid pooling [14], [15] (popularly known as spatial pyramid matching or SPM [15]), as an extension of the Bag-of-Words (BoW) model
Bow:词袋模型

LRN : represents Local Response Normalization
翻转变换(flip): 沿着水平或者垂直方向翻转图像;

训练过程

单一尺寸训练

输入尺寸固定为224*224,这个大小是从初始图片crop裁剪来的。裁剪是为了data augmentation。

多级池化操作

对某一级来说,第n级,其把feature maps分成n*n块。
对L级池化,下一个全连接层fc6将连接L个输入。如3级池化操作,将连接(3*3,2*2,1*1)

单一尺寸训练的目的主要是为了体现多级池化操作。

多尺寸训练

但既然是为了解决多尺度问题,这里也用了多尺度训练,现在是采用两种设定好的尺度:224*224和180*180,180不是从224裁剪来的,而是按同一种方式缩放得到的。
按两个尺寸分别训练两个网络。180网络的SPP层输出和224SPP层输出长度大小一样。同样的,180网络在每一层得参数和224的参数也一样。换句话说,不同尺寸的网络之间共享参数。
为了减小切换网络的开销,这里用不同尺寸训练一个网络,一次epoch用224,下一个用180.事实证明,多尺度训练的收敛效率和单尺度的收敛效率近似。

多尺寸训练的目的主要是为了仿真不同输入尺寸,尽管其实现的是被优化好的固定尺寸。

单一尺寸和多尺寸仅用于训练,测试用的是任意大小的尺寸。

模块

EdgeBoxes

feature maps

见名词部分。

SPPLayer

之前的网络使用sliding window pooling,其滑动窗口的数量取决于其input尺寸大小。
Spatial pyramid pooling会产生spatial bin,其数量是固定的,和尺寸大小没有关系。spatial bins的大小和图片大小成比例关系。
SPPLayer是替换的最后一个卷积层后面的池化层。

SPP用于分类

SPP可以独立于网络架构所被使用。

准备
  1. 数据。图片放缩到256*256.裁剪成224*224.并使用了flipping和color altering来增加数据。
  2. Dropout。用于两个全连接层
  3. 学习率 0.01.
多级池化提升准确率

多级池化表现良好。对物体变形以及空间布局都有一定的鲁棒性。

多尺度训练提升准确率

之前的CNN解决方法大多是基于testing来解决多尺度问题,本文是第一篇在训练过程中着眼于解决多尺度问题。

完整图像表示提升准确率

多视角组合事实上要比单幅完整图像表现更好。但完整图像仍然是有其优点的。
1. 虽然使用了很多不同的视角,但实验证明,完整图像及其flip,仍然能增加0.2%的准确率。
2. 使用整幅图片和传统方法保持一致。
3. 在一些领域,如图片索引,它们更需要一张图片显示,而不是得分。

feature maps 上的多视角测试

特征映射上的多视角测试。

SPP实验结果

no-SPP网络与SPP网络相比,后者性能提升。其得益于多级池化。
整张图片resize至短边为指定大小和crop到指定大小,前者性能提升,得益于其维持了图片的全部内容。
resize短边至指定大小和warp至指定大小,前者性能提升,得益于图片的未扭曲。

对于VOC2007,采用392大小效果最好,因为,VOC2007数据集中的对象只占图片的较小一部分,而在ImageNet中,则要占较大一部分。

SPP用于目标检测

RCNN对每个区域都用CNN提取特征,非常耗时,也让特征提取成为了RCNN的瓶颈所在。SPP对整张图片生成feature maps,大大减少了时间消耗。

特点

  1. SPP使用多级pooling维度,传统的滑动窗口pooling只用单一pooling窗口尺寸。
  2. 发现网络越深,效果越好。

问题

为什么需要设计多种的滤波器,全联接的不行么

为了权值共享,来减少参数。可以通过输入图像的大小以及卷积核的大小来确定隐含层的神经元的个数,对于32*32的图像,6个feature map,公式为:(32-5+1) * (32 -5 +1) = 28 * 28 个隐层神经元。也就是每一个feature map的大小就是28 * 28 。那么C1一共有 (5*5 +1)*6个参数,其中5*5为卷积核的大小,1为一个bias参数, 6为6种卷积核。

CNN是怎么减少参数的

  • 局部连接。生物对物体的认知从局部走向全局。图像的像素也是局部之内关系比较密切,和远处的像素相关性较弱。所以,每个神经元不需要对全部像素负责,只需要对局部感知。对1000*1000的图像而言,全局连接的神经元每个要对1000*1000个像素连接。对10*10的卷积核,只要连接10*10的像素区域,其对应只有10*10=100个参数,而不是1000*1000=10^6个参数。这个过程就相当于卷积了。

  • 权值共享。原先,对每个神经元/卷积核,其针对每一个10*10区域的参数都是不一样的,所以对1000*1000的区域大小,stride=10的话,也有100*100个10*10参数。但对于每个卷积核其负责的任务只是寻找并提取某一类特征,所以每个10*10可以共享参数。这样只需要10*10个参数了。该如何理解权值共享呢?首先从生物学意义上来看,相邻神经元的活性相似,从而它们可以共享相同的连接权值。其次单从数据特征上来看,我们可以把每个卷积核当作一种特征提取方式,而这种方式与图像等数据的位置无关。这就意味着,对于同一个卷积核,它在一个区域提取到的特征,也能适用于于其他区域。如果要提取多个特征,可以使用多个卷积核,如,50个。参数共:50*10*10=5000个。

  • 池化。池化可以减少参数,防止过拟合。

为什么全连接层要求固定大小的输入

全连接层后的分类器分的类别是固定的,在前面的特征维数也要固定。一次学10维,一次学100维,无法训练一个良好的分类器。

CNN最成功的应用是在CV,那为什么NLP和Speech的很多问题也可以用CNN解出来?AlphaGo里也用了CNN。这几个不相关的问题的相似性在哪里?CNN通过什么手段抓住了这个共性?

以上几个不相关问题的相关性在于,都存在局部与整体的关系,由低层次的特征经过组合,组成高层次的特征,并且得到不同特征之间的空间相关性。如下图:低层次的直线/曲线等特征,组合成为不同的形状,最后得到汽车的表示。
这里写图片描述
CNN抓住此共性的手段主要有四个:局部连接/权值共享/池化操作/多层次结构。

  局部连接使网络可以提取数据的局部特征;权值共享大大降低了网络的训练难度,一个Filter只提取一个特征,在整个图片(或者语音/文本) 中进行卷积;池化操作与多层次结构一起,实现了数据的降维,将低层次的局部特征组合成为较高层次的特征,从而对整个图片进行表示。

在训练时多尺度和在测试时多尺度有什么提升和进步

训练时多尺度训练,可以提高模型的尺度不变性并减小过拟合。多尺度训练,对一个单一的网络,用多个共享权值的网络来近似,每个网络使用独立的固定大小的尺寸来训练。这一epoch用一种尺寸,在下一epoch用另一尺寸,结果证明,这种训练方法花费的时间和传统训练方法别无二致,但提高了检测的准确率。

full-view image representation

非极大值抑制和边界框回归的顺序

ratios 和 scales的区别

ratios : 比率
scales: 比例

spatial bin的含义

standard 10-view prediction

十视角。文内的十视角即裁剪出的10个224*224window/region

cite

空间金字塔匹配(Spatial Pyramid Matching): https://blog.csdn.net/GarfieldEr007/article/details/50451978
CNN中减少参数:http://www.cnblogs.com/hejunlin1992/p/7583444.html
SPPNet:
https://blog.csdn.net/u013989576/article/details/72496068
https://blog.csdn.net/tinyzhao/article/details/53717136

拓展阅读

Visualizing and Understanding Convolutional Networks
论文解析:https://zhuanlan.zhihu.com/p/24833574
SIFT
Bow
深度学习中增加数据的四种方法:https://www.cnblogs.com/love6tao/p/5841648.html

模型可视化

feature map与原图很接近,说明它没有学到什么特征;或者它几乎是一个纯色的图,说明它太过稀疏,可能是我们feature map数太多了(feature_map数太多也反映了卷积核太小)。可视化有很多种,比如:feature map可视化、权重可视化等等

论文优缺点

优点

  • 之前的方法一般是通过crop,warp等方法把图片调整为网络所需要的输入尺寸。但crop,裁剪的结果可能没有包含住整个目标。warp,可能会把图片拉扯成不期望的扭曲,变形。卷积层通过滑动窗口的方式输出feature maps表征对应特征的激活点。事实上,卷积层不需要固定输入大小,它对于任意尺寸的输入都可以生成对应的feature maps。真正需要固定输入大小的是全连接层,这是由它本身的特性决定的,全连接层的输入维度要固定,不然一次十维,一次二十维,不能正确完成训练。本文通过在卷积层后加了SPP层,把feature maps生成一个固定大小的尺寸,传给后面的全连接层。这样就移除了网络对输入尺寸的限制。

  • RCNN的特征计算部分非常耗时,因为它对每张图片的数以千计的region都单独使用CNN提取特征。而本文不论region/window的数量的多少,只从整张图片上运行一次卷积层,只从整张图片上计算一次feature maps,避免了重复计算卷积特征。

猜你喜欢

转载自blog.csdn.net/san_junipero/article/details/80951751
SPP