我的深度學習論文閱讀之旅(一)



0. 參考資料

對 CNN 的研究,目前集中在三個維度:channelfilter,和 residual
目標是把模型做小、做強、做到移動端,精度差點,沒關系,可以加數據,離線多跑幾輪。

1. Channel

無論 Xception,還是 ResNeXt,還有面向移動端的 ShuffleNetMobileNet。都是基於 Group Convolution思想在 channel 維度進行“網絡工程”,搭建新的模型。

Xception 的核心思想是:Depth-wise Separable Convolution

1.1 Group Convolution

image_1ceilmthn9nmbd4vpg1kpet6011.png-203.4kB
http://colah.github.io/posts/2014-07-Conv-Nets-Modular/img/Conv-9-Conv2Max2Conv2.png

推薦閱讀:

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.

下圖是一個變換群:
http://colah.github.io/posts/2014-12-Groups-Convolution/img/sqF-cayley-alt.png

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,分組卷積:
https://pic3.zhimg.com/80/v2-3afd323b9b3ac24ac4f0bdf781ee7c62_hd.jpg

如果對每個通道進行卷積,就是 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。

v2-854177e100d7d48dc5dda40306f5b311_hd1.jpg-29.3kB

1.3 Xception

利用上述結構重新設計 Inception model block,就是 Xception;重新設計 Resnet,就是 ResNeXt 架構。以達到在減少參數量的情況下增加模型的層數,既減少了存儲空間,還增強了模型的表達能力。

https://pic4.zhimg.com/80/v2-c6021144955230538e79a60beb3637eb_hd.jpg

通常來講,如果對 channel 進行分組卷積,各小組就分頭行動,互相沒有交流,這樣顯然沒有充分利用 channel 的信息。ShuffleNet 在分組之前,先將 channel 隨記打亂,這樣對信息的利用更充分,因此可以通過設計降低模型參數量而不影響模型的表達能力。

v2-85fc52ac1442d14095b1d316f993b220_hd1.jpg-27.1kB

2. Filter

2.1 Wavenet

經典 CNN 的 Filter 是在鄰域內采樣卷積,如 \(3 \times 3\) 卷積核是在 \(8\) 鄰域采樣。

v2-f1d70820666dbc728a83374548843479_hd1.jpg-41.5kB

但是,Filter 可以跨點采樣進行卷積,從而可以利用更大范圍內的信息,即 Dilated CNN,最早應用於圖像語義分割,去年谷歌提出的 Wavenet 模型將 CNN 拓展到語音識別和語音合成。

https://pic1.zhimg.com/80/v2-c4be30d360a55ec3773d741dda5c8a8e_hd.jpg

2.2 Dilated Resnet

將 Dilated CNN 的思想應用到 Resnet 架構中,就是 CVPR 2017 的 “Dilated Residual Networks”

v2-a97cd99361c3e165e804b2e21f35dc71_hd1.jpg-35.5kB

3. Connection

ResNet 的 Connection 方式是將輸入和輸出相加,形成一個殘差 Block。DenseNet 則更進一步,在每個 Block 內,將輸入和輸出直接拼接,而且在每一層都和之前所有層的輸出拼接,這樣可以減少中間層的通道數。

https://pic1.zhimg.com/80/v2-f03cee2b0ff0c4f90c901f88cc93d58f_hd.jpg

而最新的 Dual Path Networks 模型,則是融合了 ResNet 和 DenseNet 的優點:特征重利用和特征重提取。采用了雙通道架構:
https://pic1.zhimg.com/80/v2-34228eb695edbd5bad49013671b1153d_hd.jpg

可以預想,接下來,將會有模型融合以上三點的集大成者?

啟發與思考

現在越來越多的 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 的結合會不會成為以后降低參數量的標准配置?


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM