1. 程式人生 > >關於 global average pooling

關於 global average pooling

Golbal Average Pooling 第一次出現在論文Network in Network中,後來又很多工作延續使用了GAP,實驗證明:Global Average Pooling確實可以提高CNN效果。


Fully Connected layer
很長一段時間以來,全連線網路一直是CNN分類網路的標配結構。一般在全連線後會有啟用函式來做分類,假設這個啟用函式是一個多分類softmax,那麼全連線網路的作用就是將最後一層卷積得到的feature map stretch成向量,對這個向量做乘法,最終降低其維度,然後輸入到softmax層中得到對應的每個類別的得分。

全連線層如此的重要,以至於全連線層過多的引數重要到會造成過擬合,所以也會有一些方法專門用來解決過擬合,比如dropout。

Golbal Average Pooling

global average pooling 與 average pooling 的差別就在 "global" 這一個字眼上。global 與 local 在字面上都是用來形容 pooling 視窗區域的。 local 是取 feature map 的一個子區域求平均值,然後滑動這個子區域; global 顯然就是對整個 feature map 求平均值了。

因此,global average pooling 的最後輸出結果仍然是 10 個 feature map,而不是一個,只不過每個 feature map 只剩下一個畫素罷了。這個畫素就是求得的平均值。
官方 prototxt 檔案 裡寫了。網路進行到最後一個 average pooling 層的時候,feature map 就剩下了 10 個,每個大小是 8 * 8。順其自然地作者就把 pooling 視窗設成了 8 個畫素,意會為 global average pooling 。可見,global average pooling 就是視窗放大到整個 feature map 的 average pooling 。

每個講到全域性池化的都會說GAP就是把avg pooling的視窗大小設定成feature map的大小,這雖然是正確的,但這並不是GAP內涵的全部。GAP的意義是對整個網路從結構上做正則化防止過擬合。既要引數少避免全連線帶來的過擬合風險,又要能達到全連線一樣的轉換功能,怎麼做呢?直接從feature map的通道上下手,如果我們最終有1000類,那麼最後一層卷積輸出的feature map就只有1000個channel,然後對這個feature map應用全域性池化,輸出長度為1000的向量,這就相當於剔除了全連線層黑箱子操作的特徵,直接賦予了每個channel實際的類別意義。
--------------------- 
作者:默一鳴 
來源:CSDN 
原文:https://blog.csdn.net/yimingsilence/article/details/79227668 
版權宣告:本文為博主原創文章,轉載請附上博文連結!