0. 參考資料
- Xception: Deep Learning with Depthwise Separable Convolutions. François Chollet, 2017.
- 如何評價谷歌的xception網絡?
- MobileNet V2 論文初讀
- 縱覽輕量化卷積神經網絡:SqueezeNet、MobileNet、ShuffleNet、Xception
- 無需數學背景,讀懂 ResNet、Inception 和 Xception 三大變革性架構
- 王井東詳解ICCV 2017入選論文:通用卷積神經網絡交錯組卷積
- 變形卷積核、可分離卷積?卷積神經網絡中十大拍案叫絕的操作
- CNN中千奇百怪的卷積方式大匯總
- 對深度可分離卷積、分組卷積、擴張卷積、轉置卷積(反卷積)的理解
- hellozting/InterleavedGroupConvolutions
- 可變形卷積網絡:計算機新“視”界
對 CNN 的研究,目前集中在三個維度:
channel
,filter
,和residual
。
目標是把模型做小、做強、做到移動端,精度差點,沒關系,可以加數據,離線多跑幾輪。
1. Channel
無論 Xception
,還是 ResNeXt
,還有面向移動端的 ShuffleNet
和 MobileNet
。都是基於 Group Convolution
思想在 channel 維度進行“網絡工程”,搭建新的模型。
Xception 的核心思想是:Depth-wise Separable Convolution
1.1 Group Convolution
推薦閱讀:
Mathematicians call these abstract patterns groups. There is an entire field of math dedicated to them. Connections between a group and an object like the square are called group actions.
下圖是一個變換群:
group 是相對於上一層的 channel 來說的。
假如 \(group_{size} = N\), 上一層的 \(\frac{Channel}{FeatureMap \times Filter}\) 的數目為 \(M\)
簡單的講就是把 channel 做 \(N\) 等分,然后每一份(一個 group)分別與上一層的輸出的\(\frac{M}{N}\) 個 channel 獨立連接,之后將每個 group 的輸出疊在一起(concatenate),作為這一層的輸出 channel。
Group Convolution 是指將 channels 細分成多個 group,然后再分組進行 Convolution。這種思想始於 2012 年 AlexNet 的雙 GPU 架構設計,相當於把 channels 均分到兩個 GPU,分組卷積:
如果對每個通道進行卷積,就是 Depthwise Convolution
。
1.2 Separable Convolution
在卷積層中間插入 \(1 \times 1\) 卷積,即 pointwise convolution
。舉個例子,對經典的卷積操作,如果 OD 是 \(256\),ID 是 \(128\),卷積核大小 \(3\times3\),需要的參數為 \(128 \times 3 \times 3 \times 256=294912\) 個參數,而 Spearable
卷積方法,假如 \(DM=4\),這樣中間層的 channel 數為
\(128 \times 4=512\),再經過 \(1 \times 1\) 卷積降維到 \(256\) 個 channel,需要的總參數為:\(128 \times 3 \times 3 \times 4 + 128 \times 4 \times 1 \times 1 \times 256=135680\),參數量相當於普通卷積的 \(46\%\),還增加了通道數(\(128 \times 4=512\))增強了特征表達能力。
所以說,理想的卷積 Block 應該是先用 \(1 \times 1\) 卷積核降 channel,然后再進行 \(3 \times 3\) 卷積提取特征,最后再用 \(1 \times 1\) 卷積核降 channel。
1.3 Xception
利用上述結構重新設計 Inception model block,就是 Xception;重新設計 Resnet,就是 ResNeXt 架構。以達到在減少參數量的情況下增加模型的層數,既減少了存儲空間,還增強了模型的表達能力。
通常來講,如果對 channel 進行分組卷積,各小組就分頭行動,互相沒有交流,這樣顯然沒有充分利用 channel 的信息。ShuffleNet 在分組之前,先將 channel 隨記打亂,這樣對信息的利用更充分,因此可以通過設計降低模型參數量而不影響模型的表達能力。
2. Filter
2.1 Wavenet
經典 CNN 的 Filter 是在鄰域內采樣卷積,如 \(3 \times 3\) 卷積核是在 \(8\) 鄰域采樣。
但是,Filter 可以跨點采樣進行卷積,從而可以利用更大范圍內的信息,即 Dilated CNN,最早應用於圖像語義分割,去年谷歌提出的 Wavenet 模型將 CNN 拓展到語音識別和語音合成。
2.2 Dilated Resnet
將 Dilated CNN 的思想應用到 Resnet 架構中,就是 CVPR 2017 的 “Dilated Residual Networks”
3. Connection
ResNet 的 Connection 方式是將輸入和輸出相加,形成一個殘差 Block。DenseNet 則更進一步,在每個 Block 內,將輸入和輸出直接拼接,而且在每一層都和之前所有層的輸出拼接,這樣可以減少中間層的通道數。
而最新的 Dual Path Networks 模型,則是融合了 ResNet 和 DenseNet 的優點:特征重利用和特征重提取。采用了雙通道架構:
可以預想,接下來,將會有模型融合以上三點的集大成者?
啟發與思考
現在越來越多的 CNN 模型從巨型網絡到輕量化網絡一步步演變,模型准確率也越來越高。現在工業界追求的重點已經不是准確率的提升(因為都已經很高了),都聚焦於速度與准確率的 trade off,都希望模型又快又准。因此從原來 AlexNet、VGGnet,到體積小一點的 Inception、Resnet 系列,到目前能移植到移動端的 mobilenet、ShuffleNet(體積能降低到 \(0.5\) mb!),我們可以看到這樣一些趨勢:
卷積核方面:
- 大卷積核用多個小卷積核代替;
- 單一尺寸卷積核用多尺寸卷積核代替;
- 固定形狀卷積核趨於使用可變形卷積核;
- 使用 \(1 \times 1\) 卷積核(bottleneck 結構)。
卷積層通道方面:
- 標准卷積用 depthwise 卷積代替;
- 使用分組卷積;
- 分組卷積前使用 channel shuffle;
- 通道加權計算。
卷積層連接方面:
- 使用 skip connection,讓模型更深;
- densely connection,使每一層都融合上其它層的特征輸出(DenseNet)
啟發
類比到通道加權操作,卷積層跨層連接能否也進行加權處理?bottleneck + Group conv + channel shuffle + depthwise
的結合會不會成為以后降低參數量的標准配置?