卷积层是对图像的一个邻域进行卷积获得图像的邻域特征,亚采样层(池化层)就是使用pooling技术将小邻域内的特征点整合获得新的特征。
在完成卷积特征提取以后,对于每个隐藏单元,它都提取到 (r-a+1)×(c-b+1)个特征,把它看作一个矩阵,并在这个矩阵上划分出几个不重合的区域,而后在每一个区域上计算该区域内特征的均值或最大值,而后用这些均值或最大值参与后续的训练,这个过程就是池化。php
1 显著减小参数数量 |
经过卷积操做得到了图像的特征以后,若直接用该特征去作分类则面临计算量的挑战。而Pooling的结果可使得特征减小,参数减小。
例如:对于一个 96X96 像素的图像,假设咱们已经学习获得了400个定义在8X8输入上的特征,每个特征和图像卷积都会获得一个 (96 − 8 + 1) * (96 − 8 + 1) = 7921 维的卷积特征,因为有 400 个特征,因此每一个样本都会获得一个 892 * 400 = 3,168,400 维的卷积特征向量。学习一个拥有超过 3 百万特征输入的分类器十分不便,而且容易出现过拟合 (over-fitting)。html
2 池化单元具备平移不变性 |
pooling能够保持某种不变性(旋转、平移、伸缩等)
网络
1 通常池化(General Pooling) |
1) mean-pooling,即对邻域内特征点只求平均,对背景保留更好;app
2) max-pooling,即对邻域内特征点取最大,对纹理提取更好;ide
3) Stochastic-pooling,介于二者之间,经过对像素点按照数值大小赋予几率,再按照几率进行亚采样;post
特征提取的偏差主要来自两个方面:(1)邻域大小受限形成的估计值方差增大;(2)卷积层参数偏差形成估计均值的偏移。通常来讲,mean-pooling能减少第一种偏差,更多的保留图像的背景信息,max-pooling能减少第二种偏差,更多的保留纹理信息。在平均意义上,与mean-pooling近似,在局部意义上,则服从max-pooling的准则。学习
下面给出matlab中max-pooling的代码实现:
ui
function [outputMap, outputSize] = max_pooling(inputMap, inputSize, poolSize, poolStride) % ========================================================== % INPUTS: % inputMap - input map of the max-pooling layer % inputSize - X-size(equivalent to Y-size) of input map % poolSize - X-size(equivalent to Y-size) of receptive field % poolStride - the stride size between successive pooling squares. % OUTPUT: % outputMap - output map of the max-pooling layer % outputSize - X-size(equivalently, Y-size) of output map % ========================================================== outputSize = inputSize/ poolStride; inputChannel = size(inputMap, 3); padMap = padarray(inputMap, [poolSize poolSize],0, 'post'); outputMap = zeros(outputSize, outputSize, inputChannel, 'single'); for j = 1:outputSize for i = 1:outputSize startX = 1 + (i-1)*poolStride; startY = 1 + (j-1)*poolStride; poolField = padMap(startY:startY+poolSize-1,startX:startX+poolSize-1,:); poolOut = max(reshape(poolField, [poolSize*poolSize,inputChannel]),[],1); outputMap(j,i,:) = reshape(poolOut,[1 1 inputChannel]); end end
2.重叠池化(Overlapping Pooling) |
重叠池化的相邻池化窗口之间会有重叠区域。该部分详见参考文献[4]spa
3.空间金字塔池化(Spatial Pyramid Pooling) |
空间金字塔池化拓展了卷积神经网络的实用性,使它可以以任意尺寸的图片做为输入。该部分详见参考文献[3].net
[1]池化 http://ufldl.stanford.edu/wiki/index.php/%E6%B1%A0%E5%8C%96
[2]卷积神经网络初探 - Lee的白板报的我的空间 - 开源中国社区 http://my.oschina.net/findbill/blog/550565
[3]池化方法总结http://www.voidcn.com/blog/mao_kun/article/p-4986504.html
[4] Krizhevsky, I. Sutskever, andG. Hinton, “Imagenet classification with deep convolutional neural networks,”in NIPS,2012.
[5]http://yann.lecun.com/exdb/publis/pdf/boureau-icml-10.pdf
[6]http://yann.lecun.com/exdb/publis/pdf/boureau-cvpr-10.pdf
[7]http://yann.lecun.com/exdb/publis/pdf/boureau-iccv-11.pdf