【论文解读】SPPnet

论文:Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition

介绍

    基于卷积的深度神经网络显著提高了图像分类的准确率,但在训练和测试的过程中也存在一个技术上的争议点:当前普遍流行的卷积神经网络(CNNs)要求输入为固定尺寸的图像,例如:224x224、96x96等,因而限制了图像的比例和尺寸。对于任意大小的图像,当前流行的做法如图1所示,就是对图片进行裁切(crop)或缩放(warp),以使其达到限定大小。但是这种做法是有明显的问题的,裁切完的图像可能没有包含完整的目标,缩放也可能导致非需要形变。

    【论文解读】SPPnet_第1张图片

                                                       图1.图像裁切和缩放

    你可能会问为毛CNNs要求固定大小的输入呢?这得从CNNs的网络结构来找原因。CNNs由卷积层再加上全连接层构成,卷积层实际上就是用一个滑动窗口对输入图像进行操作,以提取特征图,它对输入图像大小并没有要求。但是,全连接确是要求固定大小输入。也就是说固定大上输入仅仅是因为全连接层的原因,所以我们就可以在这里作文章。

    在这篇论文中我们引入了空间金字塔池化层(SPP:spatial pyramid pooling)来消除网络对固定大小输入的限制。具体说来,就是在最后一层卷积层后增加了一个SPP层,SPP层将对特征图进行池化,生成固定大小的输出,进而导入到全连接层。可以看作是在网络深层结构上进行了信息的“聚合”,从而避免一开始的裁切和缩放。此外,在我们看来这也更符合大脑认识图像的逻辑。

含SPP的深度网络

卷积层和特征图

      卷积层的输出为特征图(feature maps),他们不仅包含了响应的强度(strength),同时还包含了响应的位置。图2展示了一些可视化后的特征图。图2(c)显示了ImageNet数据集中激活最强的若干图像。可以看到一个过滤器能够被一些语义内容激活。例如,第55个过滤器(图2,左下)对圆形十分敏感;第66层(图2,右上)对^形状(哈哈,就是那个的嘎吱窝那里)特别敏感;第118个过滤器(图2,右下)对v形状非常敏感。这些输入图像中的形状会激活相应位置上的特征图(图2中的箭头)。 值得注意的是,图2中生成的特征图并没有固定输入尺寸。深度卷积曾生成的特征图和传统方法中生成的特征图很相似。这些传统方法中,SIFT向量或图像碎片被密集地抽取出来,在通过矢量量化,稀疏化或Fisher核函数进行编码。这些编码后的特征构成了特征图,然后通过词袋(BoW)或空间金字塔进行池化。类似地,深度卷积的特征也可以这样做。

【论文解读】SPPnet_第2张图片

                                                                                图2:特征图可视化

金字塔空间池化层

        卷积层接受任意大小的输入,同时它们的输出大小也是不固定的。而分类器(如:SVM/softmax)或全连接层需要固定大小的输入向量。这种向量可以使用词袋(BoW:Bag of Words)方法通过池化特征来生成。空间金字塔池化对BoW进行了改进,在局部空间块(local spatial bins)中进行池化以保留空间信息。这些空间块的尺寸和图像的尺寸是成比例的,因此块的数量也是固定的。而前述深度网络的滑窗池化则依赖于输入图像的尺寸。

                【论文解读】SPPnet_第3张图片

                                                                 图3.含SPP的网络结构

 

训练包含SPP的网络

    理论上讲,上述网络结构可以用标准的反向传播进行训练,与图像的大小无关。但事实上,从CPU的实现来看它更倾向于固定尺寸的输入。我们给出的训练方案既利用了GPU实现上的优势,同时也保留了SPP的行料。

单一尺寸训练

        首先,考虑使用由图像中裁切得到固定大小输入(224x224)的网络。裁剪的目的是数据增强。对于一个给定尺寸的图像,先计算空间金字塔池化所需要的块(bin)的大小。试想一个尺寸是axa(也就是13×13)的conv5之后的特征图。对于nxn块的金字塔,我们实现一个滑窗池化过程,窗口大小为win = 上取整[a/n],步长str = 下取整[a/n]. 对于L层金字塔就要实现L个这样的层。然后将L个层的输出进行拼接,再送入全连接层。图4展示了一个3层金字塔池化(3x3,2x2,1x1)的示例配置。                           【论文解读】SPPnet_第4张图片

 

多尺寸训练

        含有SPP的网络可以应用于任意尺寸,为了解决不同图像尺寸的训练问题,我们考虑一些预设好的尺寸。现在考虑这两个尺寸:180×180,224×224。我们使用缩放而不是裁剪,将前述的224的区域图像变成180大小。这样,不同尺度的区域仅仅是分辨率上的不同,而不是内容和布局上的不同。对于接受180输入的网络,我们实现另一个固定尺寸的网络。本例中,conv5输出的特征图尺寸是axa=10×10。我们仍然使用win = 上取整[a/n],str = 下取整[a/n],实现每个金字塔池化层。这个180网络的空间金字塔层的输出的大小就和224网络的一样了。这样,这个180网络就和224网络拥有一样的参数了。换句话说,训练过程中,我们通过使用共享参数的两个固定尺寸的网络实现了不同输入尺寸的SPP-net。为了降低从一个网络(比如224)向另一个网络(比如180)切换的开销,我们在每个网络上训练一个完整的epoch,然后在下一个完成的epoch再切换到另一个网络(权重保留)。依此往复。实验中我们发现多尺寸训练的收敛速度和单尺寸差不多。多尺寸训练的主要目的是在保证已经充分利用现在被较好优化的固定尺寸网络实现的同时,模拟不同的输入尺寸。除了上述两个尺度的实现,我们也在每个epoch中测试了不同的sxs输入,s是从180到224之间均匀选取的。后面将在实验部分报告这些测试的结果。
        注意,上面的单尺寸或多尺寸解析度只用于训练。在测试阶段,是直接对各种尺寸的图像应用SPP-net的。

你可能感兴趣的:(深度学习,论文)