“卷積神經網路(Convolutional Neural Network,CNN)”之問

wuliytTaotao發表於2019-03-05

Q1:CNN 中的全連線層為什麼可以看作是使用卷積核遍歷整個輸入區域的卷積操作?

A1:以 AlexNet 為例,AlexNet 最後 3 層為全連線層,第一個全連線層的輸入層是由卷積層做拉伸而得。對於第一個全連線層中的任一個神經元 \(FC_i^{(1)}\),其都和輸入層中所有神經元相連,如果我們將輸入層神經元排列成 6×6×256,即對輸入層不進行拉伸,那麼神經元 \(FC_i^{(1)}\) 就相當於對輸入層乘以一個 6×6×256 的 filter(即 filter 的大小和 feature map 是一樣的),經啟用函式後得到的就是該神經元 \(FC_i^{(1)}\) 的輸出。如果有 4096 個 filter,那麼第一個全連線層就會有 1×1×4096 個神經元。
  之後情況類似,用 4096 個 1×1×4096 的 fiter 進行卷積即可得到第二層全連線層(1×1×4096),用 1000 個 1×1×4096 的 fiter 進行卷積即可得到第三層全連線層(1×1×1000)。所以全連線層也可以看成是卷積核遍歷整個輸入區域的卷積操作。

“卷積神經網路(Convolutional Neural Network,CNN)”之問
圖 1 AlexNet

Q2:1×1 的卷積核(filter)怎麼理解?

A2:首先需要搞清楚,1×1 的 filter 都幹了些什麼。
1)不改變 feature map 的大小。即當 stride 和 padding 分別為 1 和 0 時,使用 1×1 的 filter 對大小為 6×6 的 feature map 進行卷積,並不會改變 feature map 的大小。
2)會改變 channel 的數量,以此來達到升維和降維。下一層 channel 數量由該層 filter 的個數決定。
3)增加了非線性。下一層每一個 channel 的 feature map 中任意一點都是上一層同一位置所有 channel 的非線性組合(因為有非線性啟用函式)。
4)channel 間資訊的互動。

Q3:什麼是感受野(Receptive field)?

A3:感受野是指卷積神經網路每一層特徵圖(feature map)上的神經元在原始影象上對映的區域大小。
  圖 2 中,原始影象上的畫素點只能看到本身,故可以認為其感受野為 1×1;conv1 中神經元能看到原始影象的 3×3,故其感受野為 3×3;而 conv2 中神經元能看到原始影象 5×5 的區域,故其感受野為 5×5。

“卷積神經網路(Convolutional Neural Network,CNN)”之問
圖 2 卷積

Q4:對含有全連線層的 CNN,輸入影象的大小必須固定?

A4:以圖 1 中展示的 AlexNet 為例,如果 CNN 的輸入層大小改變,那麼 AlexNet 全連線層的輸入層(由卷積層拉伸而得的)神經元個數是會改變的,或者說拉伸前 feature map 的大小變了,後面的全連線操作也沒法做了(全連線層引數的個數都改變了)。
  完全卷積網路(Fully Convolutional Network,FCN)的輸入影象可以為任意大小,當然輸出結果的大小和輸入影象大小相關。FCN 的做法就是把全連線層換成了卷積層,引數個數沒變。如圖 3 把 AlexNet 最後三層全連線層變為卷積層,就得到一個 FCN。

“卷積神經網路(Convolutional Neural Network,CNN)”之問
圖 3 AlexNet to FCN

Q5:什麼是 Global Average Pooling(GAP)?

“卷積神經網路(Convolutional Neural Network,CNN)”之問
圖 4 Fully connected layer and Global Average Pooling (GAP) layer

A5:Global Average pooling(GAP)和 (local)average pooling 其實就是一個東西,只是 pooling 時對 feature map 作用的區域有區別:global 意味著對 feature map 的整個區域,即對一個 feature map 的整個區域求均值最後得到一個值;而 local 則意味著 feature map 中的一小塊區域,如 2×2、3×3 等。

“卷積神經網路(Convolutional Neural Network,CNN)”之問
圖 5  CNN
“卷積神經網路(Convolutional Neural Network,CNN)”之問
圖 6  CNN with Global Average Pooling (GAP) layer

  那麼 GAP 有沒有什麼好處呢?由於沒有了全連線層,輸入就不用固定大小了,因此可支援任意大小的輸入;此外,引入GAP更充分的利用了空間資訊,且沒有了全連線層的各種引數,魯棒性強,也不容易產生過擬合;還有很重要的一點是,在最後的 mlpconv層(也就是最後一層卷積層)強制生成了和目標類別數量一致的特徵圖,經過GAP以後再通過softmax層得到結果,這樣做就給每個特徵圖賦予了很明確的意義,也就是categories confidence maps。參見部落格 憑什麼相信你,我的CNN模型?(篇一:CAM和Grad-CAM) -- 賓狗

Q6:什麼是 depthwise separable convolution?Depthwise convolution 和 pointwise convolution 分別又是什麼?

A6:Depthwise separable convolution 將一個標準的卷積操作(如 LeNet、AlexNet 等網路中的卷積)分為兩個部分,分別是 depthwise convolution 和 pointwise convolution。Separable convolution 的引數數量少於標準卷積。

“卷積神經網路(Convolutional Neural Network,CNN)”之問
圖 7  standard convolution

  Depthwise convolution 中 filter 的個數和輸入資料的 channel 數一致,且每個 filter 的大小為 W×H×1(W 和 H 分別為輸入層 feature map 的寬、高),每一個 filter 只和輸入資料對應的一個 channel 做 convolution。Depthwise convolution 在每一個 channel 上獨立地執行 spatial convolution,channel 之間沒有互動,只利用了 feature map 上的空間資訊。

“卷積神經網路(Convolutional Neural Network,CNN)”之問
圖 8  depthwise convolution

  Pointwise convolution 中 filter 的個數任意,filter 的個數決定了輸出層 channel 的數目,其每個 filter 大小為 1×1×C(C 為輸入層的 channel 數)。Pointwise convolution 將 depthwise convolution 生成的 feature channels 投影到新的 channel space,這一步輸入層 channel 之間的資訊進行了互動。

“卷積神經網路(Convolutional Neural Network,CNN)”之問
圖 9  pointwise convolution

  將圖 8 中展示的 depthwise convolution 和圖 9 的 pointwise convolution 拼接起來,就是一個 depthwise separable convolution。

References

語義分割中的深度學習方法全解:從FCN、SegNet到各代DeepLab -- 量子學園
一文讀懂卷積神經網路中的1x1卷積核 -- Amusi
深度神經網路中的感受野(Receptive Field) -- 藍榮禕
FCN的學習及理解(Fully Convolutional Networks for Semantic Segmentation)-- 凹醬deep
關於 global average pooling -- 默一鳴
憑什麼相信你,我的CNN模型?(篇一:CAM和Grad-CAM) -- 賓狗
卷積神經網路中的Separable Convolution -- 尹國冰

相關文章