zoukankan      html  css  js  c++  java
  • Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition

    Spatial Pyramid Pooling in DeepConvolutional Networks for Visual Recognition

    之前讲到r-cnn的时候强调,输入CNN的图像尺寸是固定的,这是因为深度卷积网络分为卷积层和全连接层,虽然卷积层对输入图像的大小没有要求,但是全连接层要求图片大小一致。SPP-net可以不管图片的大小/尺度产生一个固定长度的表示方式(representation)。

    本文以AlexNet为例,具有5个卷积层。将最后一个池化层(也就是最后一个卷积层之后的pool5)用spatial pyramid池化层代替。

    spp层

    卷积层接收任意尺寸的输入,输出尺寸也不同,而分类器或者全连接层需要固定尺寸的向量。spp(spatial pyramid pooling)产生固定尺度向量的同时,通过bin可以保留空间信息。这些空间bin的尺寸和图像尺寸成比例,因此bin的数量与图像大小无关。

    将最后一个池化层(也就是最后一个卷积层之后的pool5)用spatial pyramid池化层代替。spp的输出是kM维的向量,其中bin的数目是M,k是最后的卷积层的过滤器的数目。这不仅允许任意的宽高比,还允许任意的尺寸。如下图,其中256是conv5的过滤器的数量,conv5是最后一个卷积层,一共有3级bin,第1级bin的个数为4^2个,第2级为2^2个,第3级有1^2个。在每个bin中,我们池化每个过滤器的结果。

    训练

    单个尺寸

    输入固定尺寸(224x224)的图片,预先计算spatialpyramid 池化所需要的bin的大小。假设conv5之后的特征图的尺寸设为axa,bin为nxn,我们将这个池化通过一个滑动窗口池化实现,窗口尺寸win= ⌈a/n⌉,步长str=⌊a/n⌋,其中⌈·⌉表示向上取整,⌊·⌋表示向下取整。如果pyramid的水平是l(具有l级bin),我们实现l个这样的层。接下来的全连接层(fc6)会连接这l个输出。下图是一个水平是3的pyramid池化的例子,conv5的特征图大小为13x13,sizeX是池化窗口的大小,pool3x3、pool2x2、pool1x1分别有3x3,2x2和1x1个bin。


    尺寸不同

    有两张图,一张224x224,一张180x180。我们将224x224尺寸调整为180x180而非剪切,这样两张图片只是分辨率改变,内容和布局不变。我们实现一个固定输入尺寸的网络。con5之后的特征图尺寸axa=10x10。然后我们通过不同的bin,使用win和str去实现每个spp层。这个180-网络的spp层的输出和224-网络具有相同的固定长度。因此,180-网络和224网络每一层的参数一样。也就是说,我们通过两个分享参数的固定网络实现了不同输入尺寸的SPP-net。

    在训练中为了避免频繁更换网络的麻烦,采用先用224*224迭代训练一遍,然后复制参数用180*180的网络训练,如此循环。

    参考:

    http://blog.csdn.net/whiteinblue/article/details/43415035

  • 相关阅读:
    Android Media Playback 中的MediaPlayer的用法及注意事项(二)
    Android Media Playback 中的MediaPlayer的用法及注意事项(一)
    34. Search for a Range
    33. Search in Rotated Sorted Array
    32. Longest Valid Parentheses
    31. Next Permutation下一个排列
    30. Substring with Concatenation of All Words找出串联所有词的子串
    29. Divide Two Integers
    28. Implement strStr()子串匹配
    27. Remove Element
  • 原文地址:https://www.cnblogs.com/mandalalala/p/6798265.html
Copyright © 2011-2022 走看看