空洞卷積 Dilated Convolution
通常的卷積操作,除了需要指定輸入輸出通道數,還需要確定卷積核大小 kernei_size、步長 stride、填充大小 padding。
Conv1d(384, 48, kernel_size=3, stride=1, padding=1)
空洞卷積則是在此基礎上增加了 dilation 引數,用於控制卷積核的擴張程度。dilation 值預設為 1,手動將其指定為大於 1 的數會發生很有趣的事。
Conv1d(384, 48, kernel_size=3, stride=1, padding=2, dilation=2)
以上面這個程式碼為例,當 dilation 為 2 時,雖然卷積核大小為 3 不會變,但其元素之間會多出一個空洞,使得卷積核的覆蓋範圍從 3 個元素變為 5 個元素。
顯而易見的,空洞卷積有一大好處:增加摺積核的感受視野。對於那些需要更長上下文資訊的任務,例如音訊處理和語義分割,空洞卷積比常規卷積更有優勢。
通常不要連續使用相同 dilation 的空洞卷積,因為這樣會造成致命的區域性資訊丟失。
參考來源
- “Dilated Convolution”,https://www.geeksforgeeks.org/dilated-convolution/
- 玖零猴,“吃透空洞卷積(Dilated Convolutions)”,https://zhuanlan.zhihu.com/p/113285797