特征提取模型系列之spp-net原理介绍

论文的链接:https://arxiv.org/pdf/1406.4729.pdf


背景介绍

spp-net的提出主要是基于这么一个问题,如下图(图片来自论文):
特征提取模型系列之spp-net原理介绍_第1张图片
我们一般用CNN时,输入都是固定大小的(比如224x224),当遇到不同大小的图片一般解决方法有两种:一种是取图片的几个子区域(crop)然后分别输入网络中,然后将得到的结果投票取多数的那个类别(个人感觉,crop时最好将图片固定在一定的规模,比如最小那个边是224,这样crop的时候才更有可能得到想要的区域);另一种是直接将原图resize到输入图片的大小。前者容易只取到目标物体的部分区域,后者则容易使得目标物体变形,不管哪个效果都容易让最后的分类结果变差。能不能让网络结构适应不同size的图片,这就是spp-net的目的。


模型介绍

作者的分析思路是这样子的:卷积层其实是可以适应不同size的图片,只不过输入图片size不同,输出的结果size也不同,而真正限制CNN要固定输入图片size的是全链接层,所以如果能在卷积层之后,全连接层之前加入某种层使得全连接获得的输入都是固定的大小的,那么就解决这个问题了。于是作者提出了SPP-pooling层,结构如下图(图片来自原论文):
图片来自原论文
特征提取模型系列之spp-net原理介绍_第2张图片
从卷积层获得的feature map,将其分成1x1,2x2,4x4…的小块,再在每个小块上做max pooling,这样最后得到的结果也就是固定大小的一个向量了。比如说feature map是32x32x256,然后把每一个32x32的feature map都分成1x1,2x2,4x4的小块,这样一个32x32的feature map就得到了长度为21(1+4+16)的一维向量,256个feature map最终串联在一起就得到了就得到了长度为21x256的一维向量,对于24x24x256的feature map,经过同样的结果,也是得到一个长度为21x256的一维向量,这样就实现了全连接层的固定大小输入了,也就让cnn能够适应不同size的图片输入。


实验

训练

  • single-size training:训练的过程与之前的CNN训练过程一样,输入都是固定的图片大小,只不过将最后一个卷积层和第一个全连接层之间加入spp-pooling层,关于spp-pooling层的参数设置,如下图(图片来自原论文):
    特征提取模型系列之spp-net原理介绍_第3张图片
    特征提取模型系列之spp-net原理介绍_第4张图片
    注意训练的时候也用到了crop,只不过这里crop的作用是为了增强数据集(data augmentation)。测试的时候可以用crop也可以不用crop(论文中为了公平比较用了crop,而后面的实验中也有不用crop的情况)。

  • multi-size training:与single-size training不同的是,输入的照片规模会有所不同,作者使用了180x180和224x224两种规模的图片,采用迭代式的方法(第一个epoch全部用180x180的图片,第二个epoch全部用224x224的图片,第三个epoch又是180x180的图片……)训练。

效果

作者做了几个实验,具体的内容请看论文,这里就不详述了,最后得到的结果就是:

  • spp-pooling层能提升准确率

  • multi-size training能提升准确率

  • 整张照片(不管size多少)比单个照片中的一个crop作为输入能提升准确率


小结

  • spp-pooling层能够让模型适应不同size的图片

你可能感兴趣的:(CV)