SqueezeNet
2017年的文章,和后面的幾篇文章一對比思路顯得比較老套:大量的1*1的卷積和少量的3*3卷積搭配(小卷積核),同時盡量的減少通道數目,達到控制參數量的目的。SqueezeNet的核心在於Fire module,Fire module 由兩層構成,分別是squeeze層+expand層,如下圖所示,squeeze層是一個1*1卷積核的卷積層,expand層是1*1 和3*3卷積核的卷積層,expand層中,把1*1 和3*3 得到的feature map 進行concat。整個網絡就是將多個Fire module 堆疊而成。其論文中對比實驗目標是AlexNet,可見這個工作的確是老了……
具體操作情況如下圖所示(略有誤,Expand應該有一通路是3*3核心的):
Fire module 輸入的 feature map 為 H*W*M 的,輸出的 feature map 為 H*M*(e1+e3),可以看到 feature map 的分辨率是不變的,變的僅是維數,也就是通道數,這一點和 VGG 的思想一致。
Xception
『高性能模型』Roofline Model與深度學習模型的性能分析
Xception 基於Inception_v3,X表示Extreme,表示Xception 做了一個加強的假設:卷積可以解耦為空間映射和通道映射。
下圖表示標准的v3子模塊:
下圖表示簡化結果:
假設出一個簡化版 inception module 之后,再進一步3 個 1*1 卷積核統一起來,變成一個 1*1 的,后面的3個3*3的分別負責一部分通道
和標准的深度可分離卷積略有不同的是:
原版Depthwise Conv,先逐通道卷積,再1*1卷積; 而Xception是反過來,先1*1卷積,再逐通道卷積
原版Depthwise Conv的兩個卷積之間是不帶激活函數的,而Xception在經過1*1卷積之后會帶上一個Relu的非線性激活函數
MobileNet_v1
2017年的成果,思想來源於同屬Google的Xception,引入了深度可分離卷積降低計算量,本網絡比較傳統,就是一層dw一層pw的疊加(3x3 Depthwise Conv+BN+ReLU 和 1x1 Pointwise Conv+BN+ReLU),結構如下:
ShuffleNet_v1
2017年的文章,和MobileNet一樣使用了pw+dw,但是這里把dw視為極限的群卷積:組數等度輸入特征數目,此時的計算瓶頸在於pw,作者提出:同樣使用群卷積替代pw,為了解決特征間通信,作者提出channels shuffle的思路,即在群卷積版pw前將特征重新排列組合。另外ShufflwNet也是對ResNet進行修改的產物。
MobileNet_v2
2018年的文章,針對架構直白的MobileNet_v1,這一版本着重討論了relu在feature 數目少時的數據坍縮,並提出使用ResNet來解決的方案,作者實際對ResBlock的改造也不復雜:
- 將原來的:pw->conv->pw轉化為pw->dw->pw,這個很好理解,單純的降低計算量
- 將上一步中的沙漏型特征層數變化改為梭子型,保證第一個pw后的relu6和dw后的relu6的數據坍縮最小(C-pw->6C-dw->6C-pw->C)
- 將最后一個pw后的relu取消,因為此pw輸出feature 數目較小,容易引起坍縮
ShuffleNet_v2
2018年的文章,作者提出了一個新的衡量效率的量:內存訪問消耗時間(memory access cost),並根據這個量提出了4點發現,修改v1版本網絡,由於鏈接博客已經給了很詳細的說明,這里不再贅述。