成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

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

移動開發 開發
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。

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

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 的方式。 

圖片來源:Day 2 Lecture 6 Content-based Image Retrieval

上面所總結的 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 能夠在一定程度上加大感興趣區域的權重,降低非物體區域的權重。其具體的特征表示構建過程如下圖所示:

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

其核心的過程是 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 方式效果比較好,計算復雜度也比較低。

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

責任編輯:張子龍 來源: 雷鋒網
相關推薦

2023-10-11 08:29:54

volatileJava原子性

2009-06-09 22:11:44

JavaScriptObject

2023-03-29 08:24:46

Rune類型開源項目

2022-10-08 00:00:00

Spring數據庫項目

2020-03-05 10:28:19

MySQLMRR磁盤讀

2020-10-14 06:22:14

UWB技術感知

2020-09-27 06:53:57

MavenCDNwrapper

2020-09-22 08:22:28

快充

2010-11-01 01:25:36

Windows NT

2011-04-27 09:30:48

企業架構

2021-01-21 21:24:34

DevOps開發工具

2023-07-12 15:32:49

人工智能AI

2021-07-07 05:07:15

JDKIterator迭代器

2024-02-04 00:01:00

云原生技術容器

2021-09-01 23:29:37

Golang語言gRPC

2021-02-05 10:03:31

區塊鏈技術智能

2013-06-09 09:47:31

.NetPDBPDB文件

2010-04-22 14:14:29

Live-USB

2019-10-30 10:13:15

區塊鏈技術支付寶

2021-09-03 09:12:09

Linux中斷軟件
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 中文字幕一级毛片 | 国产 欧美 日韩 一区 | 91新视频 | 日韩精品欧美精品 | 99免费在线观看视频 | 中文字幕视频在线观看 | 精品国产一区二区三区av片 | 黄色av网站在线免费观看 | 在线观看av网站 | 毛片在线免费播放 | 国产一级在线观看 | 国产特级毛片aaaaaa喷潮 | 超碰在线国产 | 人人射人人插 | 国产视频第一页 | 欧美激情黄色 | 成人精品一区二区三区 | 成人黄色三级毛片 | 国产欧美精品 | 亚洲小视频 | 精品小视频 | 精品一区精品二区 | 久久国产视频播放 | 精品国产黄色片 | 日韩综合一区 | 久久精品国产99国产精品 | 国产高清视频在线观看播放 | 欧美日本在线观看 | 国产高清自拍视频在线观看 | 超碰国产在线 | 国产精品久久99 | 香蕉一区 | 国产日韩欧美在线 | 国产日产精品一区二区三区四区 | 超碰97在线免费 | 91香蕉嫩草| 久久精品美女 | 日本欧美国产在线观看 | 亚洲精品一区二区网址 | 超碰在线播| 午夜影院在线观看 |