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

2020-11-29 TechWeb

首先細講一下 Max pooling。

Max pooling

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

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

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

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 步驟如下:

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 特徵。其具體的滑窗方式如下圖所示:

圖中示意的是三種窗口大小,圖中『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 方式效果比較好,計算複雜度也比較低。

本文轉自雷鋒網,如需轉載請至雷鋒網官網申請授權。

點讚 0

相關焦點

  • 入門| CNN也能用於NLP任務,一文簡述文本分類任務的7個模型
    基於詞級 ngram 的詞袋模型 那麼,什麼是 n-gram 呢? 簡要了解一下當在文本數據上使用卷積網絡時會發生什麼。為了解釋這一點,我從 wildm.com(一個很好的博客)中找到了這張非常有名的圖(如下所示)。 了解一下使用的例子:I like this movie very much!(7 個分詞) 每個單詞的嵌入維度是 5。
  • cnn.com網站被封
    cnn.com網站被封 美亞 00年10月19日 【原創】 作者: 中關村在線     CNN(美國有線電視新聞網)是全球最大也是最盈利的新聞機構之一,在全球有非常高的知名度
  • 小白學CNN以及Keras的速成
    下面就給一個簡單的例子,來看一看Keras到底有多簡單。各種各樣的方式都有不同的人去嘗試,攻略也是一大推,這使得不少的小白直接倒在了選擇材料的路上,一直在補先修知識,待到熱情結束就放棄了學習,連卷積網絡都不知道是什麼,大大地打擊了大家的學習熱情。今天,sherlock在這裡給大家推薦一個學習材料,保證你能夠快速入門cnn,出去裝逼也能夠和別人聊幾句。這個材料是什麼呢,就是大名鼎鼎的standford的cs231n這門課程。
  • 在多目標識別方面,maskr-cnn已經取得了一些進展
    maskr-cnn是業界首款實用的全卷積神經網絡模型,為計算機視覺中的多目標識別與自動對焦,開創性的成為計算機視覺發展的新方向。無論是基於計算機視覺的自動對焦系統、模式識別系統,還是圖像識別,maskr-cnn都是有標誌性意義的。它強調平滑準確的計算輸入、檢測框和定位點,訓練過程與特徵提取過程採用多級感受野融合技術進行自動優化提高目標解析度及精度,以及做出精度更高的語義推理判斷。
  • 傳說中的「懸魂梯」,走上去就下不來?這到底是什麼原理
    傳說中的「懸魂梯」,走上去就下不來?這到底是什麼原理在自然界和宇宙中仍然存在著很多神奇的地方,當我們無意間闖入這些領域的時候,就會讓我們的認知產生一定的錯覺,甚至還會表現出詭異害怕。傳說中的懸魂梯,走上去就下不來,這到底是什麼原理呢?
  • 讓你徹底明白yield語法糖的用法和原理及在C 函數式編程中的作用
    如果大家讀過dapper源碼,你會發現這內部有很多方法都用到了yield關鍵詞,那yield到底是用來幹嘛的,能不能拿掉,拿掉與不拿掉有多大的差別,首先上一段dapper中精簡後的Query方法,先讓大家眼見為實。
  • 一位中國博士把整個CNN都給可視化了,可交互有細節,每次卷積ReLU...
    關注前沿科技 量子位郭一璞 發自 雲凹非寺量子位 報導 | 公眾號 QbitAICNN是什麼?美國有線電視新聞網嗎?但每次,當小白們想了解CNN到底是怎麼回事,為什麼就能聰明的識別人臉、聽辨聲音的時候,就懵了,只好理解為玄學:好吧,維基百科解決不了的問題,有人給解決了。這個名叫CNN解釋器在線交互可視化工具,把CNN拆開了揉碎了,告訴小白們CNN究竟是怎麼一回事,為什麼可以辨識物品。
  • ResNet——CNN經典網絡模型詳解(pytorch實現)
    同時ResNet的推廣性非常好,甚至可以直接用到InceptionNet網絡中。下圖是ResNet34層模型的結構簡圖。在ResNet論文中說通過數據的預處理以及在網絡中使用BN(BatchNormalization)層能夠解決梯度消失或者梯度爆炸問題。如果不了解BN層可參考這個連結。但是對於退化問題(隨著網絡層數的加深,效果還會變差,如下圖所示)並沒有很好的解決辦法。所以ResNet論文提出了residual結構(殘差結構)來減輕退化問題。
  • .| 深度學習理論與實戰:提高篇(14)——​Mask R-CNN代碼簡介
    shapes = self.random_image(height, width) self.add_image("shapes", image_id=i, path=None, width=width, height=height, bg_color=bg_color, shapes=shapes) 其中add_image是在基類中定義
  • 量子通訊原理到底是什麼詳細資料分析
    量子通訊原理到底是什麼詳細資料分析 佚名 發表於 2020-12-06 17:55:00   近日媒體報導表示,此前將舉辦的2020天翼智能生態博覽會上,中國電信在展示臺上放出了兩臺樣本機,分別是由華為和中興的手機改造來的
  • 火是一種怎樣的存在,有什麼科學原理?火到底是什麼狀態?
    火是一種怎樣的存在,有什麼科學原理?火到底是什麼狀態?火是一種現象,並非什麼固態、液態、氣態或者等離子態。就像風一樣,我們無法把它像物質一樣看待。我們之所以看到火,就是因為物質進行物理化學反應產生的光熱導致的而已。
  • 華為很嚇人的技術GPUTurbo到底是什麼原理竟然可以提升運行速度?
    後來這項嚇人的技術發布後,根據很多用戶的使用反饋來看,確實是提升了手機的性能,原本華為的低端機辦成了中端機,中端機就變成了旗艦機,那旗艦機就更加的不得了了。那這個GPUTurbo到底是什麼原理呢?當然這是GPUTurbo是華為的機密,如果有人完全知道原理,也就可以在推出一個新的GPUTurbo了。
  • 混沌擺到底是什麼原理?用手輕輕觸碰,有趣的科學現象發生了
    混沌擺到底是什麼原理?用手輕輕觸碰,有趣的科學現象發生了不知道各位小夥伴有沒有人認識混沌擺呢?混沌擺到底是什麼原理?用手輕輕觸碰,有趣的科學現象發生了,究竟是怎麼一回事呢?下面小編就帶大家來看一看吧,混沌擺是為了模擬一種混亂無序的狀態而製成的,是一種非常有趣的運動。
  • 二極體在電路中到底做什麼用的
    人們利用這些不同特性構成各種具體的應用電路,分析不同電路中的二極體工作原理時,要用到二極體的不同特性,選擇二極體的什麼特性去分析電路是最大困難之一,只有掌握了二極體的各種特性,才能從容地分析二極體電路的工作原理,以下就根據產品和電路圖來給大家介紹二極體在電路中到底做什麼用的!整流電路圖
  • CNN 10 - October 16, 2020
    本期視頻連結:  https://pmd.cdn.turner.com/cnn/big/cnn10/2020/10/14/ten-1016.cnn_3450078_768x432_1300k.mp4本期內容簡介:Coronavirus Cases Rise in Most U.S
  • 詳解Python在資料庫測試中的應用
    對於我們的測試工作而言,Python最吸引我們的特性有如下幾個方面:  1 具備語言粘合劑的能力  2 解釋執行的機制  3 語法簡單易學  4 相對較高的性能  語言粘合劑是比較形象的說法,具體的說,Python支持通過引入自帶的cytpes庫,達到在python腳本中執行已有的動態庫中的代碼的目標。
  • 揭秘 | 傳說中的「懸魂梯」,到底是什麼
    傳說中的懸魂梯,走上去就下不來,這到底是什麼原理呢?對於懸魂梯這個東西,在中國的歷史記載以及西方文學中都可以查到關於它的記錄,懸魂梯的學名叫做潘洛斯階梯,是英國數學家提出的一個很有名的幾何理論。這個懸魂梯中有上樓也有下樓,但是按照我們平常上下樓的感知來說,人類是有一定的感覺的,上樓會感覺自己的身體在慢慢抬高,下樓感覺自己的身體得慢慢降落。但是懸魂梯就恰恰利用了這種重力的原理,巧妙地把握了階梯差。
  • CNN 10 - October 29, 2020
    本期視頻連結:  https://pmd.cdn.turner.com/cnn/big
  • 答讀者問,法瑪斯步槍的槓桿延遲開鎖到底是個什麼原理
    前兩天我在寫斯洛伐克VHS突擊步槍時,或許是因為這玩意長得像法瑪斯,就有弟兄跑來問法瑪斯的結構到底是啥。我尋思這是個問題,因為很多人或許知道法瑪斯是槓桿延遲半自由槍機,但不一定知道這半自由到底是怎麼回事兒,所以狗子這篇和大家捋捋這。
  • CNN 10
    希望儘早看到CNN10視頻的朋友請在瀏覽器中打開下面網址,然後把網頁存為瀏覽器的書籤或加入收藏夾,這樣就可以每天第一時間收看CNN10的視頻了。END 關注微信訂閱號: CNN學生英語新聞關注微信訂閱號: FancyEnglish更多英語視頻盡在:www.fancyenglish.com遇有點擊「閱讀原文」後「無法打開網頁」的情況,請嘗試登陸CNN10官網:http://edition.cnn.com/cnn10