論文地址:HetConvhtml
做者對已有的新型卷積劃分以下:標準卷積、Depthwise 卷積、Pointwise 卷積、羣卷積(相關介紹見『高性能模型』深度可分離卷積和MobileNet_v1),後三種卷積能夠取代標準卷積,使用方式通常是 Depthwise + Pointwise 或者是 Group + Pointwise 這樣的兩層取代(已有網絡架構中的)標準卷積的一層,成功的在不損失精度的前提下實現了 FLOPs 提高,可是帶來反作用是提升了網絡延遲(latency),所謂 latency 直觀來講就是網絡的層數增長了,因爲GPU加速、並行計算要求前一層的結果出來後後一層才能開始運算,因此層數加多並不利於這些工具,做者使用 latency 衡量這一因素。
網絡
模題型壓縮做者認爲主要成果有:connection pruning 、filter pruning 和 quantization(量子化),其中做者認爲 filter pruning 比較主流(花了必定篇幅介紹),且不須要特殊的硬件/軟件才能實現,但其問題在於:架構
a、訓練步驟繁瑣框架
b、存在精度損失工具
其通常步驟是:訓練好原模型;對模型參數權重進行分析;裁剪模型參數;從新(迭代)訓練彌補精度損失。能夠看到十分繁瑣,這裏多說一句,由於我並不太瞭解模型剪枝,簡單的調研了一下,其原理是咱們假設模型參數絕對值越大則其約重要,因此對一個卷積核種全部值的絕對值進行求和,而後排序就知道哪些核不重要了(Pruning filters for efficient convnets)。post
咱們上面提到的都是對已有網絡進行加速,或者是剪枝,或者是替換,實際上網絡加速有兩個大方向:性能
a、妥協網絡精度,目的是在低端硬件上運行,在精度和準確率之間尋求平衡點,通常會從新設計一個網絡結構spa
b、保持網絡 FLOPs 不變,突破精度,通常體如今對現有網絡進行更復雜化的改造升級
設計
做者基於以上兩種思路的共同訴求,提出了新的 HetConv(多相卷積),以同一個卷積層內的 filter 大小再也不一致爲創新點,達到即下降 FLOPs 又不損失精度的效果。orm
相比已有卷積加速技術 HetConv 對標準卷積是1換1的過程,不會帶來 latency;相比網絡剪枝,訓練時常大大縮短,訓練精度不會打折。
HetConv 的核由3*3以及1*1兩種組成,將所有卷積核劃分爲若干組,每組除含有一個3*3的核外其餘均爲1*1的核。下圖所示爲相同的核數(M)不一樣的每組中的核數(P)的 HetConv 層對比示意,對比對象爲相應層中的某個卷積核。注意理解 P 的意義,後面將會大量參考此參數。
固然,若是某一層的卷積核們徹底一致這個網絡的語義信息很明顯是有問題的,因此單層的核實際分佈以下:
這樣看來咱們就很熟悉了:將 Depthwise 和 Pointwise 融合到同一層中,固然這個說法不徹底準確,不過其設計思路應該就是這樣。
以後做者分別對比了 D+P、G+P 和 HetConv 的複雜度,計算過程很簡單(對卷積複雜度實在不熟悉的話參見:『高性能模型』卷積複雜度以及Inception系列),且我的以爲計算過程有瑕疵以及對比方式不是頗有說服力,故感興趣的話看原文第3節吧。
最後做者說每組中核心數(P)越大加越快,符合直覺:
我的感受這個卷積設計應該可以起到加速做用(相對已有方法),可是準確度不太相信可以如做者所說媲美 D+P 、 G+P 或者標準卷積,因此本文將貼出做者的實驗分析,且想看看後續是否有人驗證其實用性。另外感受實現起來有點麻煩(不修改框架源碼的話),建立3*3的核並置零1*1的空餘位好說,如何高效的鎖定其值爲0感受現有 API 實現比較麻煩(每次更新參數後修改一次過低效了),哎,源碼苦手。不過要是這個東西真的有用,後續各大框架都會跟進就是了。
最基本的實驗是基於 VGG16 和 cifar-10 的,結果如上表所示,實驗思路就是將不一樣的加速卷積(HetConv、D+P、G+P)取代 VGG16 的原有卷積層,上表中的後綴表示網絡層組成明細:
XXX Pα: XXX is the architecture, and part value is P = α;
XXX Pα SE: SE for Squeeze-and-Excitation with reduction-ratio = 8;
XXX GWCβ PWC: GWCβ PWC is the groupwise convolution with group size β followed by pointwise convolution;
XXX DWC PWC: DWC PWC is epthwise convolution followed by pointwise convolution;
XXX PC: PC is part value P = number of input channels (input depth).
SE 網絡的論文我還沒怎麼看,就知道其原理大概是給每一個特徵加了個權重,因此暫時不瞭解 reduction-ratio 參數,不過這對本篇論文的理解影響不大。
第三行(P4 開頭)展現了 HetConv 相對 Group 卷積的優點,最後一行展現了其相對深度可分離卷積的優點,而整個表格則反映了 P 值對網絡的影響,綜合來看,HetConv 確實是又好又快。
上圖展現了模型壓縮方法之間的比較,其餘方法論文列表以下:
3:Auto-balanced filter pruning for efficient convolutional neural networks. AAAI, 2018.
21:Pruning filters for efficient convnets. ICLR, 2017.
25:Structured bayesian pruning via log-normal multiplicative noise. In NIPS, pages 6775–6784, 2017.
以後做者使用 ResNet、 MobileNet 並使用 ImageNet 數據集進行了實驗,實驗內容都和上面的類似,幾點意外是加了 SE 的 ResNet 過擬合了(cifar-10)因此準確率低了一點,替換了 HetConv 的 MobileNet 效能更強勁,準確率反超了 使用 D+P 組合的基本模型,實驗結果表格這裏就不貼了,感興趣的話查看原文便可。