1. 程式人生 > 實用技巧 >神經網路基本組成 - 感受野、空洞卷積 14

神經網路基本組成 - 感受野、空洞卷積 14

1. 深入理解感受野
感受野(Receptive Field) 是指特徵圖上的某個點能看到的輸入影象的區域, 即特徵圖上的點是由輸入影象中感受野大小區域的計算得到的。 舉個簡單的例子, 如圖3.10所示為一個三層卷積網路, 每一層的卷積核為3×3, 步長為1, 可以看到第一層對應的感受野是3×3, 第二層是5×5, 第三層則是7×7

卷積層和池化層都會影響感受野, 而啟用函式層通常對於感受野沒有影響。 對於一般的卷積神經網路, 感受野可式(3-9) 和式(3-10)計算得出。

其中, RFl+1RFl分別代表第l+1層與第l層的感受野, k代表第l+1層卷積核的大小, Sl代表前l層的步長之積。 注意, 當前層的步長並不影響當前層的感受野。

通過上述公式求取出的感受野通常很大, 而實際的有效感受野(Effective Receptive Field) 往往小於理論感受野。 從圖3.10也可以看出, 雖然第三層的感受野是7×7, 但是輸入層中邊緣點的使用次數明顯比中間點要少, 因此做出的貢獻不同。 經過多層的卷積堆疊之後, 輸入層對於特徵圖點做出的貢獻分佈呈高斯分佈形狀。

理解感受野是理解卷積神經網路工作的基礎, 尤其是對於使用Anchor作為強先驗區域的物體檢測演算法, 如Faster RCNNSSD, 如何設定Anchor的大小, Anchor應該對應在特徵圖的哪一層, 都應當考慮感
受野。 通常來講, Anchor的大小應該與感受野相匹配, 尤其是有效的感受野, 過大或過小都不好。

在卷積網路中, 有時還需要計算特徵圖的大小, 一般可以按照式(3-11) 進行計算 。

其中, ninnout分別為輸入特徵圖與輸出特徵圖的尺寸, p代表這一層的padding大小, k代表這一層的卷積核大小, s為步長

2. 詳解空洞卷積(Dilated Convolution
空洞卷積最初是為解決影象分割的問題而提出的。 常見的影象分割演算法通常使用池化層來增大感受野, 同時也縮小了特徵圖尺寸, 然後再利用上取樣還原影象尺寸。 特徵圖縮小再放大的過程造成了精度上的損失, 因此需要有一種操作可以在增加感受野的同時保持特徵圖的尺寸不變, 從而替代池化與上取樣操作, 在這種需求下, 空洞卷積就誕生了。

在近幾年的物體檢測發展中, 空洞卷積也發揮了重要的作用。 因為雖然物體檢測不要求逐畫素地檢測, 但是保持特徵圖的尺寸較大, 對於小物體的檢測及物體的定位來說也是至關重要的。
空洞卷積, 顧名思義就是卷積核中間帶有一些洞, 跳過一些元素進行卷積。 在此以3×3卷積為例, 其中, 圖3.11a是普通的卷積過程, 在卷積核緊密排列在特徵圖上滑動計算, 而圖3.11b代表了空洞數為2的空洞卷積, 可以看到, 在特徵圖上每2行或者2列選取元素與卷積核卷積。 類似地, 圖3.11c代表了空洞數為3的空洞卷積。

在程式碼實現時, 空洞卷積有一個額外的超引數dilation rate, 表示空洞數, 普通卷積dilation rate預設為1, 圖3.11中的bcdilation rate分別為23

在圖3.11中, 同樣的一個3×3卷積, 卻可以起到5×57×7等卷積的效果。 可以看出, 空洞卷積在不增加引數量的前提下, 增大了感受野。假設空洞卷積的卷積核大小為k, 空洞數為d, 則其等效卷積核大小k'計算如式(3-12) 所示。

在計算感受野時, 只需要將原來的卷積核大小k更換為k'即可。

空洞卷積的優點顯而易見, 在不引入額外引數的前提下可以任意擴大感受野, 同時保持特徵圖的解析度不變。 這一點在分割與檢測任務中十分有用, 感受野的擴大可以檢測大物體, 而特徵圖解析度不變使得物體定位更加精準。

PyTorch對於空洞卷積也提供了方便的實現介面, 在卷積時傳入dilation引數即可。 具體如下:

 1 import torch
 2 from torch import nn
 3 # 定義普通卷積, 預設dilation為1
 4 conv1 = nn.Conv2d(3, 256, 3, stride=1, padding=1, dilation=1)
 5 print(conv1)
 6 >> conv2d(3, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
 7 
 8 # 定義普通卷積, 預設dilation為1
 9 conv2 = nn.Conv2d(3, 256, 3,stride=1, padding=1, dilation=2)
10 print(conv2)
11 >> Conv2d(3, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), dilation=(2, 2))
View Code

當然, 空洞卷積也有自己的一些缺陷, 主要表現在以下3個方面:
·網格效應(Gridding Effect) : 由於空洞卷積是一種稀疏的取樣方式, 當多個空洞卷積疊加時, 有些畫素根本沒有被利到, 會損失資訊的連續性與相關性, 進而影響分割、 檢測等要求較高的任務
·遠距離的資訊沒有相關性: 空洞卷積採取了稀疏的取樣方式, 導致遠距離卷積得到的結果之間缺乏相關性, 進而影響分類的結果。
·不同尺度物體的關係: 大的dilation rate對於大物體分割與檢測有利, 但是對於小物體則有弊無利, 如何處理好多尺度問題的檢測, 是空洞卷積設計的重點。
對於上述問題, 有多篇文章提出了不同的解決方法, 典型的有圖森未來提出的HDCHybrid Dilated Convolution) 結構。 該結構的設計準則是堆疊卷積的dilation rate不能有大於1的公約數, 同時將dilation rate設定為類似於[1,2,5,1,2,5]這樣的鋸齒類結構。 此外各dilation rate之間還需要滿足一個數學公式, 這樣可以儘可能地覆蓋所有空洞, 以解決網格效應與遠距離資訊的相關性問題, 具體細節可參考相關資料。