池化方法總結(Pooling)

2021-07-09 10:35:33 字數 2152 閱讀 4237

在卷積神經網路中,我們經常會碰到池化操作,而池化層往往在卷積層後面,通過池化來降低卷積層輸出的特徵向量,同時改善結果(不易出現過擬合)。

為什麼可以通過降低維度呢?

因為影象具有一種「靜態性」的屬性,這也就意味著在乙個影象區域有用的特徵極有可能在另乙個區域同樣適用。因此,為了描述大的影象,乙個很自然的想法就是對不同位置的特徵進行聚合統計,例如,人們可以計算影象乙個區域上的某個特定特徵的平均值 (或最大值)來代表這個區域的特徵。[1]

池化作用於影象中不重合的區域(這與卷積操作不同),過程如下圖。

我們定義池化視窗的大小為sizex,即下圖中紅色正方形的邊長,定義兩個相鄰池化視窗的水平位移/豎直位移為stride。一般池化由於每一池化視窗都是不重複的,所以sizex=stride。

最常見的池化操作為平均池化mean pooling和最大池化max pooling:

平均池化:計算影象區域的平均值作為該區域池化後的值。

最大池化:選影象區域的最大值作為該區域池化後的值。

重疊池化正如其名字所說的,相鄰池化視窗之間會有重疊區域,此時sizex>stride。

**中[2]中,作者使用了重疊池化,其他的設定都不變的情況下, top-1和top-5 的錯誤率分別減少了0.4% 和0.3%。

空間金字塔池化可以把任何尺度的影象的卷積特徵轉化成相同維度,這不僅可以讓cnn處理任意尺度的影象,還能避免cropping和warping操作,導致一些資訊的丟失,具有非常重要的意義。

一般的cnn都需要輸入影象的大小是固定的,這是因為全連線層的輸入需要固定輸入維度,但在卷積操作是沒有對影象尺度有限制,所有作者提出了空間金字塔池化,先讓影象進行卷積操作,然後轉化成維度相同的特徵輸入到全連線層,這個可以把cnn擴充套件到任意大小的影象。

空間金字塔池化的思想來自於spatial pyramid model,它乙個pooling變成了多個scale的pooling。用不同大小池化視窗作用於卷積特徵,我們可以得到1x1,2x2,4x4的池化結果,由於conv5中共有256個過濾器,所以得到1個256維的特徵,4個256個特徵,以及16個256維的特徵,然後把這21個256維特徵鏈結起來輸入全連線層,通過這種方式把不同大小的影象轉化成相同維度的特徵。

對於不同的影象要得到相同大小的pooling結果,就需要根據影象的大小動態的計算池化視窗的大小和步長。假設conv5輸出的大小為a*a,需要得到n*n大小的池化結果,可以讓視窗大小sizex為

疑問:如果conv5輸出的大小為14*14,[pool1*1]的sizex=stride=14,[pool2*2]的sizex=stride=7,這些都沒有問題,但是,[pool4*4]的sizex=5,stride=4,最後一列和最後一行特徵沒有被池化操作計算在內。

spp其實就是一種多個scale的pooling,可以獲取影象中的多尺度資訊;在cnn中加入spp後,可以讓cnn處理任意大小的輸入,這讓模型變得更加的flexible。

4.        reference

[1]    ufldl_tutorial  

[2]    krizhevsky, i. sutskever, andg. hinton, 「imagenet classification with deep convolutional neural networks,」in nips,2012.

[3]    kaiming  he, xiangyu zhang, shaoqing ren, jian su,spatial pyramid pooling in deep convolutional networks for visual recognition,lsvrc-2014 contest

池化層 Pooling 的反向傳播

參考部落格 cnn網路中另外乙個不可導的環節就是pooling池化操作,因為pooling操作使得feature map的尺寸變化,假如做2 2的池化,假設那麼第l 1層的feature map有16個梯度,那麼第l層就會有64個梯度,這使得梯度無法對位的進行傳播下去。其實解決這個問題的思想也很簡單...

池化技術總結

導言 池化是乙個幾乎所有做深度學習的人都了解的乙個技術,大家對池化如何進行前向傳播也都了解,池化的作用也了解一二。然而,池化如何回傳梯度呢,池化回傳梯度的原則是什麼呢,最大池化與平均池化的區別是什麼呢,什麼時候選擇最大池化 什麼時候選擇平均池化呢。主要用的池化操作有平均池化 最大池化 全域性平均池化...

池化技術 執行緒池

執行緒池 任務 等待任務 全域性的任務佇列queue無任務且無銷毀,任務新增函式 等待add的signal 載入任務 add將新建任務指標task賦予queue 執行任務 執行緒池內任一rtn獲取當前佇列的頭 第乙個任務task 執行,並將此任務從佇列中剔除 退出執行緒池內某一rtn 根據實際的程式...