『高性能模型』輕量級網絡梳理

牆裂推薦:那些Network能work的本質到底是啥?html

 

SqueezeNet

輕量化網絡: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與深度學習模型的性能分析post

『高性能模型』卷積複雜度以及Inception系列性能

Xception 基於Inception_v3,X表示Extreme,表示Xception 作了一個增強的假設:卷積能夠解耦爲空間映射和通道映射。學習

下圖表示標準的v3子模塊:spa

下圖表示簡化結果:.net

假設出一個簡化版 inception module 以後,再進一步3 個 1*1 卷積核統一塊兒來,變成一個 1*1 的,後面的3個3*3的分別負責一部分通道

htm

和標準的深度可分離卷積略有不一樣的是:

    原版Depthwise Conv,先逐通道卷積,再1*1卷積; 而Xception是反過來,先1*1卷積,再逐通道卷積
    原版Depthwise Conv的兩個卷積之間是不帶激活函數的,而Xception在通過1*1卷積以後會帶上一個Relu的非線性激活函數

MobileNet_v1

『高性能模型』深度可分離卷積和MobileNet_v1

2017年的成果,思想來源於同屬Google的Xception,引入了深度可分離卷積下降計算量,本網絡比較傳統,就是一層dw一層pw的疊加(3x3 Depthwise Conv+BN+ReLU 和 1x1 Pointwise Conv+BN+ReLU),結構以下:

ShuffleNet_v1

『高性能模型』輕量級網絡ShuffleNet_v1及v2

2017年的文章,和MobileNet同樣使用了pw+dw,可是這裏把dw視爲極限的羣卷積:組數等度輸入特徵數目,此時的計算瓶頸在於pw,做者提出:一樣使用羣卷積替代pw,爲了解決特徵間通訊,做者提出channels shuffle的思路,即在羣卷積版pw前將特徵從新排列組合。另外ShufflwNet也是對ResNet進行修改的產物。

MobileNet_v2

『高性能模型』輕量級網絡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

『高性能模型』輕量級網絡ShuffleNet_v1及v2

2018年的文章,做者提出了一個新的衡量效率的量:內存訪問消耗時間(memory access cost),並根據這個量提出了4點發現,修改v1版本網絡,因爲連接博客已經給了很詳細的說明,這裏再也不贅述。

相關文章
相關標籤/搜索