時間:2019年9月7日 星期六
主講人: 張祥雨 (曠視)
高效模型設計的基本思路
- 輕量級架構
- 模型裁剪
- 模型搜索
- 低精度量化
- 知識蒸餾
- 高效實現
輕量級架構設計思路
-
原則1:有限的計算複雜度實現儘可能高的模型表示能力
-
高效的卷積計算方式
深度可分離卷積
例如 Xception 、 MobileNet v1 -
增加有效的通道數量
Bottleneck 結構
例如 ResNeXt 、 MobileNet v2 -
特徵服用 、 多特徵融合
例如 DenseNet、Res2Net
-
-
原則2:提高模型的實際運行速度
理論複雜度和實際執行速度並不完全對等
影響實際執行速度的原因
- 理論計算量
- 計算、訪存比
- 模塊並行度
- 設備特性/實現效率
如何提高實際執行速度
-
卷積的輸入輸出通道數應儘可能接近
-
謹慎使用分組卷積
-
減少網絡碎片
-
逐元素(Element-wise)運算的開銷不可忽視
設計舉例 —— ShuffleNet v1
- 設計思路 : 深度可分離卷積 + 多層分組卷積
- 問題:各個分組之間缺少信息交流
- 解決: 引入通道重排 (channel shuffle )
-
結構特點
-
類似 ResNet 結構單元
-
“快速” 降採樣
-
-
性能
-
準確度大幅超過 MobileNet v1
-
移動端高效執行
-
-
問題
- 分組卷積執行低效 (尤其在GPU 上)
設計舉例 —— ShuffleNet v2
-
設計要點
- 採用輸入輸出通道數相等的卷積 (G1)
- 用通道切分 ( channel split )代替分組卷積 (G2、G3)
- 取消 Identity Shortcut ,用 Concat 替代 (G4)
- 合併主元素運算 (G4)
-
特徵複用
-
ShuffleNet v2+ 更強的特徵保溼
- AutoML超參搜索 + Swish 激活函數
<img src=“https://leanote.com/api/file/getImage?fileId=5d74c312ab644160a90063d2”
- AutoML超參搜索 + Swish 激活函數
-
ShuffleNet V2.large
-
SE Block
Model |FLOPs | #Params |Top-1 | Top-5 |
-
| - | - | - | - |
ShuffleNetV2.Large | 12.7G | 140.7M | 18.56 | 4.48 |
SENet | 20.7G | - | 18.68 | 4.47 |
coco 2018 物體檢測 單模型 mmAP 56+
-
-
應用
- 數據清洗
- 數據蒸餾
設計舉例 —— ThunderNet
物體檢測模型舉例
- 設計要點
- backbone : 修改版 ShuffleNet v2
- 檢測器模塊 : LightHead R-CNN
- 多尺度融合
- Attention機制
設計舉例 —— DFANet
語義分割模型舉例
- 設計要點
- backbone : Xception
- 高分辨率、低通道數特徵圖
- 多尺度特徵融合、特徵複用
- 應用舉例 : 移動端實時虛化
相關資源
https://github.com/megvii-model/ShuffleNet-Series
模型搜索
效率
- 大數據集、複雜業務流程下能否高效搜索?
- 能否針對不同的速度、資源消耗等限制因素,快速生成滿足要求的網絡結構
性能
- 直接搜素 vs 遷移搜索
- 對於超大搜索空間,能否挖掘出高效結構(超越手工設計水平)
靈活性
- 能否支持 “ hard constraint”
- 是否支持多搜素任務、多種限制條件
- 能否對需要預訓練的任務模型進行搜索
挑戰 “不可能三角”
難點:同時兼顧效率、性能 和靈活性
通用模型搜索算法 —— Single Path One-Shot NAS
算法流程
-
訓練 SuperNet
- 根據搜索空間構造選擇塊 和 SuperNet
- 每次迭代,隨機選擇 SuperNet 中的一條路徑進行訓練
-
架構優化
- 使用遺傳算法生成候選結構
- 評估Supernet 對應的路徑的性能,作爲該候選結構的性能預測
-
對於不同的模型約束,只需要重新運行架構優化步驟,無需重新訓練 Supernet
混合精度量化搜索
搜索效率