0
雷鋒網(wǎng)按:本文整理自知乎問題“請問 CNN 中的 maxpool 到底是什么原理,為什么要取最大值,取最大值的原理是什么?謝謝。”的下Yjango和小白菜的回答。雷鋒網(wǎng)已獲得轉(zhuǎn)載授權(quán)。
首先細(xì)講一下 Max pooling。
Max pooling
在卷積后還會有一個 pooling 的操作,盡管有其他的比如 average pooling 等,這里只提 max pooling。
max pooling 的操作如下圖所示:整個圖片被不重疊的分割成若干個同樣大小的小塊(pooling size)。每個小塊內(nèi)只取最大的數(shù)字,再舍棄其他節(jié)點后,保持原有的平面結(jié)構(gòu)得出 output。
圖片來源:cs231n
max pooling 在不同的 depth 上是分開執(zhí)行的,且不需要參數(shù)控制。 那么問題就 max pooling 有什么作用?部分信息被舍棄后難道沒有影響嗎?
圖片來源:cs231n
Max pooling 的主要功能是 downsampling,卻不會損壞識別結(jié)果。 這意味著卷積后的 Feature Map 中有對于識別物體不必要的冗余信息。 那么我們就反過來思考,這些 “冗余” 信息是如何產(chǎn)生的。
直覺上,我們?yōu)榱颂綔y到某個特定形狀的存在,用一個 filter 對整個圖片進(jìn)行逐步掃描。但只有出現(xiàn)了該特定形狀的區(qū)域所卷積獲得的輸出才是真正有用的,用該 filter 卷積其他區(qū)域得出的數(shù)值就可能對該形狀是否存在的判定影響較小。 比如下圖中,我們還是考慮探測 “橫折” 這個形狀。 卷積后得到 3x3 的 Feature Map 中,真正有用的就是數(shù)字為 3 的那個節(jié)點,其余數(shù)值對于這個任務(wù)而言都是無關(guān)的。 所以用 3x3 的 Max pooling 后,并沒有對 “橫折” 的探測產(chǎn)生影響。 試想在這里例子中如果不使用 Max pooling,而讓網(wǎng)絡(luò)自己去學(xué)習(xí)。 網(wǎng)絡(luò)也會去學(xué)習(xí)與 Max pooling 近似效果的權(quán)重。因為是近似效果,增加了更多的 parameters 的代價,卻還不如直接進(jìn)行 Max pooling。
Max pooling 還有類似 “選擇句” 的功能。假如有兩個節(jié)點,其中第一個節(jié)點會在某些輸入情況下最大,那么網(wǎng)絡(luò)就只在這個節(jié)點上流通信息;而另一些輸入又會讓第二個節(jié)點的值最大,那么網(wǎng)絡(luò)就轉(zhuǎn)而走這個節(jié)點的分支。
但是 Max pooling 也有不好的地方。因為并非所有的抓取都像上圖這樣的極端例子。有些周邊信息對某個概念是否存在的判定也有影響。 并且 Max pooling 是對所有的 Feature Maps 進(jìn)行等價的操作。就好比用相同網(wǎng)孔的漁網(wǎng)打魚,一定會有漏網(wǎng)之魚。
下面對其他的 pooling 方法做一個簡單的整理(前一段時間整理的個人覺得比較不錯且流行的 pooling 方法)。
SUM pooling
基于 SUM pooling 的中層特征表示方法,指的是針對中間層的任意一個 channel(比如 VGGNet16, pool5 有 512 個 channel),將該 channel 的 feature map 的所有像素值求和,這樣每一個 channel 得到一個實數(shù)值,N 個 channel 最終會得到一個長度為 N 的向量,該向量即為 SUM pooling 的結(jié)果。
AVE pooling
AVE pooling 就是 average pooling,本質(zhì)上它跟 SUM pooling 是一樣的,只不過是將像素值求和后還除以了 feature map 的尺寸。作者以為,AVE pooling 可以帶來一定意義上的平滑,可以減小圖像尺寸變化的干擾。設(shè)想一張 224224 的圖像,將其 resize 到 448448 后,分別采用 SUM pooling 和 AVE pooling 對這兩張圖像提取特征,我們猜測的結(jié)果是,SUM pooling 計算出來的余弦相似度相比于 AVE pooling 算出來的應(yīng)該更小,也就是 AVE pooling 應(yīng)該稍微優(yōu)于 SUM pooling 一些。
MAX pooling
MAX pooling 指的是對于每一個 channel(假設(shè)有 N 個 channel),將該 channel 的 feature map 的像素值選取其中最大值作為該 channel 的代表,從而得到一個 N 維向量表示。筆者在 flask-keras-cnn-image-retrieval中采用的正是 MAX pooling 的方式。
圖片來源:Day 2 Lecture 6 Content-based Image Retrieval
上面所總結(jié)的 SUM pooling、AVE pooling 以及 MAX pooling,這三種 pooling 方式,在筆者做過的實驗中,MAX pooling 要稍微優(yōu)于 SUM pooling、AVE pooling。不過這三種方式的 pooling 對于 object retrieval 的提升仍然有限。
MOP pooling
MOP Pooling 源自 Multi-scale Orderless Pooling of Deep Convolutional Activation Features這篇文章,一作是 Yunchao Gong,此前在搞哈希的時候,讀過他的一些論文,其中比較都代表性的論文是 ITQ,筆者還專門寫過一篇筆記論文閱讀:Iterative Quantization 迭代量化。MOP pooling 的基本思想是多尺度與 VLAD(VLAD 原理可以參考筆者之前寫的博文圖像檢索:BoF、VLAD、FV 三劍客),其具體的 pooling 步驟如下:
來源:Multi-scale Orderless Pooling of Deep Convolutional Activation Features
Overview of multi-scale orderless pooling for CNN activations (MOP-CNN). Our proposed feature is a concatenation of the feature vectors from three levels: (a)Level 1, corresponding to the 4096-dimensional CNN activation for the entire 256256image; (b) Level 2, formed by extracting activations from 128128 patches and VLADpooling them with a codebook of 100 centers; (c) Level 3, formed in the same way aslevel 2 but with 64*64 patches.
具體地,在 L=1 的尺度下,也就是全圖,直接 resize 到 256*256 的大小,然后送進(jìn)網(wǎng)絡(luò),得到第七層全連接層 4096 維的特征;在 L=2 時,使用 128*128(步長為 32) 的窗口進(jìn)行滑窗,由于網(wǎng)絡(luò)的圖像輸入最小尺寸是 256*256,所以作者將其上采樣到 256256,這樣可以得到很多的局部特征,然后對其進(jìn)行 VLAD 編碼,其中聚類中心設(shè)置為 100,4096 維的特征降到了 500 維,這樣便得到了 50000 維的特征,然后將這 50000 維的特征再降維得到 4096 維的特征;L=3 的處理過程與 L=2 的處理過程一樣,只不過窗口的大小編程了 64*64 的大小。
作者通過實驗論證了 MOP pooling 這種方式得到的特征一定的不變性。基于這種 MOP pooling 筆者并沒有做過具體的實驗,所以實驗效果只能參考論文本身了。
CROW pooling
對于 Object Retrieval,在使用 CNN 提取特征的時候,我們所希望的是在有物體的區(qū)域進(jìn)行特征提取,就像提取局部特征比如 SIFT 特征構(gòu) BoW、VLAD、FV 向量的時候,可以采用 MSER、Saliency 等手段將 SIFT 特征限制在有物體的區(qū)域。同樣基于這樣一種思路,在采用 CNN 做 Object Retrieval 的時候,我們有兩種方式來更細(xì)化 Object Retrieval 的特征:一種是先做物體檢測然后在檢測到的物體區(qū)域里面提取 CNN 特征;另一種方式是我們通過某種權(quán)重自適應(yīng)的方式,加大有物體區(qū)域的權(quán)重,而減小非物體區(qū)域的權(quán)重。CROW pooling ( Cross-dimensional Weighting for Aggregated Deep Convolutional Features ) 即是采用的后一種方法,通過構(gòu)建 Spatial 權(quán)重和 Channel 權(quán)重,CROW pooling 能夠在一定程度上加大感興趣區(qū)域的權(quán)重,降低非物體區(qū)域的權(quán)重。其具體的特征表示構(gòu)建過程如下圖所示:
其核心的過程是 Spatial Weight 和 Channel Weight 兩個權(quán)重。Spatial Weight 具體在計算的時候,是直接對每個 channel 的 feature map 求和相加,這個 Spatial Weight 其實可以理解為 saliency map。我們知道,通過卷積濾波,響應(yīng)強的地方一般都是物體的邊緣等,因而將多個通道相加求和后,那些非零且響應(yīng)大的區(qū)域,也一般都是物體所在的區(qū)域,因而我們可以將它作為 feature map 的權(quán)重。Channel Weight 借用了 IDF 權(quán)重的思想,即對于一些高頻的單詞,比如 “the”,這類詞出現(xiàn)的頻率非常大,但是它對于信息的表達(dá)其實是沒多大用處的,也就是它包含的信息量太少了,因此在 BoW 模型中,這類停用詞需要降低它們的權(quán)重。借用到 Channel Weight 的計算過程中,我們可以想象這樣一種情況,比如某一個 channel,其 feature map 每個像素值都是非零的,且都比較大,從視覺上看上去,白色區(qū)域占據(jù)了整個 feature map,我們可以想到,這個 channel 的 feature map 是不利于我們?nèi)ザㄎ晃矬w的區(qū)域的,因此我們需要降低這個 channel 的權(quán)重,而對于白色區(qū)域占 feature map 面積很小的 channel,我們認(rèn)為它對于定位物體包含有很大的信息,因此應(yīng)該加大這種 channel 的權(quán)重。而這一現(xiàn)象跟 IDF 的思想特別吻合,所以作者采用了 IDF 這一權(quán)重定義了 Channel Weight。
總體來說,這個 Spatial Weight 和 Channel Weight 的設(shè)計還是非常巧妙的,不過這樣一種 pooling 的方式只能在一定程度上契合感興趣區(qū)域,我們可以看一下 Spatial Weight*Channel Weight 的熱力圖:
從上面可以看到,權(quán)重大的部分主要在塔尖部分,這一部分可以認(rèn)為是 discriminate 區(qū)域,當(dāng)然我們還可以看到,在圖像的其他區(qū)域,還有一些比較大的權(quán)重分布,這些區(qū)域是我們不想要的。當(dāng)然,從筆者可視化了一些其他的圖片來看,這種 crow pooling 方式并不總是成功的,也存在著一些圖片,其權(quán)重大的區(qū)域并不是圖像中物體的主體。不過,從千萬級圖庫上跑出來的結(jié)果來看,crow pooling 這種方式還是可以取得不錯的效果。
RMAC pooling
RMAC pooling 的池化方式源自于 Particular object retrieval with integral max-pooling of CNN activations,三作是 Hervé Jégou(和 Matthijs Douze 是好基友)。在這篇文章中,作者提出來了一種 RMAC pooling 的池化方式,其主要的思想還是跟上面講過的 MOP pooling 類似,采用的是一種變窗口的方式進(jìn)行滑窗,只不過在滑窗的時候,不是在圖像上進(jìn)行滑窗,而是在 feature map 上進(jìn)行的 (極大的加快了特征提取速度),此外在合并 local 特征的時候,MOP pooling 采用的是 VLAD 的方式進(jìn)行合并的,而 RMAC pooling 則處理得更簡單 (簡單并不代表效果不好),直接將 local 特征相加得到最終的 global 特征。其具體的滑窗方式如下圖所示:
圖片來源:Day 2 Lecture 6 Content-based Image Retrieval
圖中示意的是三種窗口大小,圖中‘x’代表的是窗口的中心,對于每一個窗口的 feature map,論文中采用的是 MAX pooling 的方式,在 L=3 時,也就是采用圖中所示的三種窗口大小,我們可以得到 20 個 local 特征,此外,我們對整個 fature map 做一次 MAX pooling 會得到一個 global 特征,這樣對于一幅圖像,我們可以得到 21 個 local 特征 (如果把得到的 global 特征也視為 local 的話),這 21 個 local 特征直接相加求和,即得到最終全局的 global 特征。論文中作者對比了滑動窗口數(shù)量對 mAP 的影響,從 L=1 到 L=3,mAP 是逐步提升的,但是在 L=4 時,mAP 不再提升了。實際上 RMAC pooling 中設(shè)計的窗口的作用是定位物體位置的 (CROW pooling 通過權(quán)重圖定位物體位置)。如上圖所示,在窗口與窗口之間,都是一定的 overlap,而最終在構(gòu)成 global 特征的時候,是采用求和相加的方式,因此可以看到,那些重疊的區(qū)域我們可以認(rèn)為是給予了較大的權(quán)重。
上面說到的 20 個 local 特征和 1 個 global 特征,采用的是直接合并相加的方式,當(dāng)然我們還可以把這 20 個 local 特征相加后再跟剩下的那一個 global 特征串接起來。實際實驗的時候,發(fā)現(xiàn)串接起來的方式比前一種方式有 2%-3% 的提升。在規(guī)模 100 萬的圖庫上測試,RMAC pooling 能夠取得不錯的效果,跟 Crow pooling 相比,兩者差別不大。
上面總結(jié)了 6 中不同的 pooling 方式,當(dāng)然還有很多的 pooling 方式?jīng)]涵蓋不到,在實際應(yīng)用的時候,筆者比較推薦采用 RMAC pooling 和 CROW pooling 的方式,主要是這兩種 pooling 方式效果比較好,計算復(fù)雜度也比較低。
雷峰網(wǎng)版權(quán)文章,未經(jīng)授權(quán)禁止轉(zhuǎn)載。詳情見轉(zhuǎn)載須知。