膨脹卷積 (Dilated Convolution,也稱為空洞卷積),與標準的卷積核不同,膨脹卷積在 kernel 中增加了一些空洞,從而可以擴大模型的感受野。
1.膨脹卷積和標準卷積區別
我們先通過下圖看一下膨脹卷積和標準卷積的區別,採用的卷積核都是 3×3 的。膨脹卷積有一個超參數 dilation rate,表示卷積核的間隔,標準卷積的 dilation rate 為 1,下圖的膨脹卷積 dilation rate 為 2。
2.為什麼需要膨脹卷積
用 CNN 進行圖像處理時,通常需要經過多次卷積和 pooling 操作增大模型的感受野。pooling 可以減少圖像的尺寸,再使用卷積核可以增大感受野;多個卷積核堆疊也可以增大感受野。經過卷積和 pooling 的 feature map 會比較小,這時可以傳到全連接網絡進行分類。
但是在進行圖像分割時,需要針對每個像素點進行預測,因此還要把減小尺寸後的 feature map 通過 up sampling 的方法 (如 deconv 反卷積) 轉回原始圖像尺寸再進行預測。如下圖所示:
這一過程的主要問題:
信息丟失,pooling 操作是不可逆轉的,通過對 feature map 進行 up sampling 還原圖像尺寸時丟失信息。無法重構小的物體圖像,如果一個物體佔 4×4 的像素,則經過 4 次 pooling 操作之後,物體的信息就無法重構了。為了避免使用 pooling 等操作擴大感受野,《MULTI-SCALE CONTEXT AGGREGATION BY DILATED CONVOLUTIONS》中提出了膨脹卷積 (dilated convolution)。膨脹卷積會在卷積的過程中增加一些空洞,略過空洞的點,如下圖所示。
上圖中的三個卷積核尺寸都是 3×3。
(a) 中的卷積為標準的卷積,即 dilation rate = 1,此時這個卷積核的感受野大小為 3×3。
(b) 中的卷積核跟在 (a) 的卷積操作後面,但是採用膨脹卷積,dilation rate = 2,即卷積的空洞為 1,此時每個卷積操作的點的感受野為 3×3,整個卷積核的感受野為 7×7。
(c) 中的卷積核跟在 (b) 的卷積操作後面,dilation rate = 4,即卷積空洞為 3,此時每個卷積點對應的感受野為 7×7,整個卷積核的感受野為 15×15。
在 NLP 中也可以利用膨脹卷積,使模型獲得更大的上下文信息,如下圖所示。
第一層卷積層使用尺寸為 3 的標準卷積核,第二層使用尺寸為 3 的膨脹卷積核 (dilation rate 為 2)。這樣第二層的每一個點感受野變成了 7。
3.膨脹卷積的一些問題
膨脹卷積替代了傳統的 max-pooling 和 strided convolution,能夠增大感受野並保持 feature map 的尺寸和原始圖片一致。但是膨脹卷積仍然存在一些問題,在論文《Understanding Convolution for Semantic Segmentation》中提到:
gridding problem,如果我們疊加多個相同的膨脹卷積,會發現感受野中有很多像素沒有利用上,出現大量空洞。此時,會丟失數據之間的連續性及完整性,不利於學習。下圖展示了連續進行 3 次相同膨脹卷積的效果 (卷積核大小為 3×3,dilation rate = 2)。
長距離的信息有時是不相關的,膨脹卷積擴大了感受野,因此可以取得長距離信息,但是有些長距離信息和當前點是完全不相關的,會影響數據的一致性。為了解決上述問題,論文中提出了混合膨脹卷積 HDC (hybrid dilated convolution)。HDC 主要措施:
使多個膨脹卷積後的感受野內不存在空洞,假設有 n 個膨脹卷積核,dilation rate 分別是 [r1, r2, ..., rn]。如果 [r1, r2, ..., rn] 能使下式滿足,則說明感受野不會存在空洞,下式中的 Mi 指第 i 層可以使用的最大的 dilation rate,K 使卷積核尺寸。
不同的卷積層使用不同的 dilation rate,對於一組膨脹卷積,設置不同的 dilation rate,dilation rate 逐漸增大。例如 3 個卷積核可以分別設置 dilation rate 為 [1, 2, 5]。這樣最後一層有比較大的感受野,同時不會丟失大量的局部信息,如下圖所示。
4.參考文獻
MULTI-SCALE CONTEXT AGGREGATION BY DILATED CONVOLUTIONS
Convolutional Sequence to Sequence Learning
Understanding Convolution for Semantic Segmentation