search
尋找貓咪~QQ 地點 桃園市桃園區 Taoyuan , Taoyuan

CNN中的maxpool到底是什麼原理?

雷鋒網按:本文整理自知乎問題「請問 CNN 中的 maxpool 到底是什麼原理,為什麼要取最大值,取最大值的原理是什麼?謝謝。」的下Yjango小白菜的回答。雷鋒網已獲得轉載授權。

首先細講一下 Max pooling。

Max pooling

在卷積后還會有一個 pooling 的操作,儘管有其他的比如 average pooling 等,這裡只提 max pooling。

max pooling 的操作如下圖所示:整個圖片被不重疊的分割成若干個同樣大小的小塊(pooling size)。每個小塊內只取最大的數字,再捨棄其他節點后,保持原有的平面結構得出 output。

圖片來源:cs231n

max pooling 在不同的 depth 上是分開執行的,且不需要參數控制。 那麼問題就 max pooling 有什麼作用?部分信息被捨棄后難道沒有影響嗎?

圖片來源:cs231n

Max pooling 的主要功能是 downsampling,卻不會損壞識別結果。 這意味著卷積后的 Feature Map 中有對於識別物體不必要的冗餘信息。 那麼我們就反過來思考,這些 「冗餘」 信息是如何產生的。

直覺上,我們為了探測到某個特定形狀的存在,用一個 filter 對整個圖片進行逐步掃描。但只有出現了該特定形狀的區域所卷積獲得的輸出才是真正有用的,用該 filter 卷積其他區域得出的數值就可能對該形狀是否存在的判定影響較小。 比如下圖中,我們還是考慮探測 「橫折」 這個形狀。 卷積后得到 3x3 的 Feature Map 中,真正有用的就是數字為 3 的那個節點,其餘數值對於這個任務而言都是無關的。 所以用 3x3 的 Max pooling 后,並沒有對 「橫折」 的探測產生影響。 試想在這裡例子中如果不使用 Max pooling,而讓網路自己去學習。 網路也會去學習與 Max pooling 近似效果的權重。因為是近似效果,增加了更多的 parameters 的代價,卻還不如直接進行 Max pooling。

Max pooling 還有類似 「選擇句」 的功能。假如有兩個節點,其中第一個節點會在某些輸入情況下最大,那麼網路就只在這個節點上流通信息;而另一些輸入又會讓第二個節點的值最大,那麼網路就轉而走這個節點的分支。

但是 Max pooling 也有不好的地方。因為並非所有的抓取都像上圖這樣的極端例子。有些周邊信息對某個概念是否存在的判定也有影響。 並且 Max pooling 是對所有的 Feature Maps 進行等價的操作。就好比用相同網孔的漁網打魚,一定會有漏網之魚。

下面對其他的 pooling 方法做一個簡單的整理(前一段時間整理的個人覺得比較不錯且流行的 pooling 方法)。

SUM pooling

基於 SUM pooling 的中層特徵表示方法,指的是針對中間層的任意一個 channel(比如 VGGNet16, pool5 有 512 個 channel),將該 channel 的 feature map 的所有像素值求和,這樣每一個 channel 得到一個實數值,N 個 channel 最終會得到一個長度為 N 的向量,該向量即為 SUM pooling 的結果。

AVE pooling

AVE pooling 就是 average pooling,本質上它跟 SUM pooling 是一樣的,只不過是將像素值求和后還除以了 feature map 的尺寸。作者以為,AVE pooling 可以帶來一定意義上的平滑,可以減小圖像尺寸變化的干擾。設想一張 224224 的圖像,將其 resize 到 448448 后,分別採用 SUM pooling 和 AVE pooling 對這兩張圖像提取特徵,我們猜測的結果是,SUM pooling 計算出來的餘弦相似度相比於 AVE pooling 算出來的應該更小,也就是 AVE pooling 應該稍微優於 SUM pooling 一些。

MAX pooling

MAX pooling 指的是對於每一個 channel(假設有 N 個 channel),將該 channel 的 feature map 的像素值選取其中最大值作為該 channel 的代表,從而得到一個 N 維向量表示。筆者在 flask-keras-cnn-image-retrieval中採用的正是 MAX pooling 的方式。

上面所總結的 SUM pooling、AVE pooling 以及 MAX pooling,這三種 pooling 方式,在筆者做過的實驗中,MAX pooling 要稍微優於 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 的大小,然後送進網路,得到第七層全連接層 4096 維的特徵;在 L=2 時,使用 128*128(步長為 32) 的窗口進行滑窗,由於網路的圖像輸入最小尺寸是 256*256,所以作者將其上採樣到 256256,這樣可以得到很多的局部特徵,然後對其進行 VLAD 編碼,其中聚類中心設置為 100,4096 維的特徵降到了 500 維,這樣便得到了 50000 維的特徵,然後將這 50000 維的特徵再降維得到 4096 維的特徵;L=3 的處理過程與 L=2 的處理過程一樣,只不過窗口的大小編程了 64*64 的大小。

作者通過實驗論證了 MOP pooling 這種方式得到的特徵一定的不變性。基於這種 MOP pooling 筆者並沒有做過具體的實驗,所以實驗效果只能參考論文本身了。

CROW pooling

對於 Object Retrieval,在使用 CNN 提取特徵的時候,我們所希望的是在有物體的區域進行特徵提取,就像提取局部特徵比如 SIFT 特徵構 BoW、VLAD、FV 向量的時候,可以採用 MSER、Saliency 等手段將 SIFT 特徵限制在有物體的區域。同樣基於這樣一種思路,在採用 CNN 做 Object Retrieval 的時候,我們有兩種方式來更細化 Object Retrieval 的特徵:一種是先做物體檢測然後在檢測到的物體區域裡面提取 CNN 特徵;另一種方式是我們通過某種權重自適應的方式,加大有物體區域的權重,而減小非物體區域的權重。CROW pooling ( Cross-dimensional Weighting for Aggregated Deep Convolutional Features ) 即是採用的后一種方法,通過構建 Spatial 權重和 Channel 權重,CROW pooling 能夠在一定程度上加大感興趣區域的權重,降低非物體區域的權重。其具體的特徵表示構建過程如下圖所示:

其核心的過程是 Spatial Weight 和 Channel Weight 兩個權重。Spatial Weight 具體在計算的時候,是直接對每個 channel 的 feature map 求和相加,這個 Spatial Weight 其實可以理解為 saliency map。我們知道,通過卷積濾波,響應強的地方一般都是物體的邊緣等,因而將多個通道相加求和后,那些非零且響應大的區域,也一般都是物體所在的區域,因而我們可以將它作為 feature map 的權重。Channel Weight 借用了 IDF 權重的思想,即對於一些高頻的單詞,比如 「the」,這類詞出現的頻率非常大,但是它對於信息的表達其實是沒多大用處的,也就是它包含的信息量太少了,因此在 BoW 模型中,這類停用詞需要降低它們的權重。借用到 Channel Weight 的計算過程中,我們可以想象這樣一種情況,比如某一個 channel,其 feature map 每個像素值都是非零的,且都比較大,從視覺上看上去,白色區域佔據了整個 feature map,我們可以想到,這個 channel 的 feature map 是不利於我們去定位物體的區域的,因此我們需要降低這個 channel 的權重,而對於白色區域占 feature map 面積很小的 channel,我們認為它對於定位物體包含有很大的信息,因此應該加大這種 channel 的權重。而這一現象跟 IDF 的思想特別吻合,所以作者採用了 IDF 這一權重定義了 Channel Weight。

總體來說,這個 Spatial Weight 和 Channel Weight 的設計還是非常巧妙的,不過這樣一種 pooling 的方式只能在一定程度上契合感興趣區域,我們可以看一下 Spatial Weight*Channel Weight 的熱力圖:

從上面可以看到,權重大的部分主要在塔尖部分,這一部分可以認為是 discriminate 區域,當然我們還可以看到,在圖像的其他區域,還有一些比較大的權重分佈,這些區域是我們不想要的。當然,從筆者可視化了一些其他的圖片來看,這種 crow pooling 方式並不總是成功的,也存在著一些圖片,其權重大的區域並不是圖像中物體的主體。不過,從千萬級圖庫上跑出來的結果來看,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 類似,採用的是一種變窗口的方式進行滑窗,只不過在滑窗的時候,不是在圖像上進行滑窗,而是在 feature map 上進行的 (極大的加快了特徵提取速度),此外在合併 local 特徵的時候,MOP pooling 採用的是 VLAD 的方式進行合併的,而 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 特徵。論文中作者對比了滑動窗口數量對 mAP 的影響,從 L=1 到 L=3,mAP 是逐步提升的,但是在 L=4 時,mAP 不再提升了。實際上 RMAC pooling 中設計的窗口的作用是定位物體位置的 (CROW pooling 通過權重圖定位物體位置)。如上圖所示,在窗口與窗口之間,都是一定的 overlap,而最終在構成 global 特徵的時候,是採用求和相加的方式,因此可以看到,那些重疊的區域我們可以認為是給予了較大的權重。

上面說到的 20 個 local 特徵和 1 個 global 特徵,採用的是直接合併相加的方式,當然我們還可以把這 20 個 local 特徵相加后再跟剩下的那一個 global 特徵串接起來。實際實驗的時候,發現串接起來的方式比前一種方式有 2%-3% 的提升。在規模 100 萬的圖庫上測試,RMAC pooling 能夠取得不錯的效果,跟 Crow pooling 相比,兩者差別不大。

上面總結了 6 中不同的 pooling 方式,當然還有很多的 pooling 方式沒涵蓋不到,在實際應用的時候,筆者比較推薦採用 RMAC pooling 和 CROW pooling 的方式,主要是這兩種 pooling 方式效果比較好,計算複雜度也比較低。



熱門推薦

本文由 yidianzixun 提供 原文連結

寵物協尋 相信 終究能找到回家的路
寫了7763篇文章,獲得2次喜歡
留言回覆
回覆
精彩推薦