CNN的池化工程理解

一 池化的過程

  卷積層是對圖像的一個鄰域進行卷積獲得圖像的鄰域特徵,亞採樣層(池化層)就是使用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

[8]http://ais.uni-bonn.de/papers/icann2010_maxpool.pdf

相關文章
相關標籤/搜索