CondeseNetV2:清華與華爲出品,保持特徵的新鮮是特徵複用的關鍵 | CVPR 2021

論文提出SFR模塊,直接重新激活一組淺層特徵來提升其在後續層的複用效率,而且整個重激活模式可端到端學習。由於重激活的稀疏性,額外引入的計算量非常小。從實驗結果來看,基於SFR模塊提出的CondeseNetV2性能還是很不錯的,值得學習

來源:曉飛的算法工程筆記 公衆號

論文: CondenseNet V2: Sparse Feature Reactivation for Deep Networks

Introduction


 目前大多數SOTA卷積網絡都只能應用於算力充足的場景,而低算力場景往往是多數算法落地的實際場景,所以輕量級網絡的研究是十分重要的。近期有研究認爲DenseNet的長距離連接是低效的,較深的層往往將早期特徵認定爲過時並在生成新特徵時將其忽略,造成了額外的內存和計算消耗。
 爲了緩解這一低效的設計,CondenseNet在訓練過程中根據權重動態逐步裁剪不重要的層間連接,而ShuffleNetV2則通過分支和shuffle的設計使得層間連接隨着層間距離增大而減少。對於這兩個網絡的具體介紹,可以看看公衆號之前發的兩篇解讀:《CondenseNet:可學習分組卷積,原作對DenseNet的輕量化改進 | CVPR 2018》《ShuffleNetV1/V2簡述 | 輕量級網絡》

 儘管上面的兩個改進網絡都有其提升,但論文認爲直接淘汰淺層特徵做法過於激進,淺層特徵還是可能包含對生成深層特徵有用的信息。在仔細研究後,論文提出了特徵重激活(feature reactivation)的概念。整體思路如圖1c所示,更新淺層特徵從而可以更高效地被深層特徵複用。
 但需要注意的是,如果直接更新全部特徵會帶來過度的計算量,影響整體的效率。實際上,從DenseNet的成功可以看出,大部分的特徵是不需要每次都更新的。爲此,論文提出可學習的SFR(sparse feature reactivation)模塊,通過學習的方式選擇淺層特徵進行重新激活,僅引入少量計算量就可以保持特徵的"新鮮"。在應用時,SFR模塊可轉換分組卷積,複用當前的加速技術保證實踐性能。
 論文基於SFR模塊和CondeseNet提出了CondenseNetV2,在性能和特徵複用程度上都有很不錯的表現,能媲美當前SOTA輕量級網絡。實際上,SFR模塊可簡單地嵌入到任意卷積網絡中,論文也將SFR模塊嵌入ShuffleNetV2進行了相關實驗,效果也是槓槓的。

Method


Sparse Feature Reactivation

  • Feature reuse mechanism

 先定義DenseNet中的特徵複用機制。假設block共\(L\)層,每層的特徵輸出爲\(x_{l}\)\(x_0\)爲block輸入。由於當前層會以稠密連接的形式複用前面所有層的輸出,\(l\)層的複合函數會接受所有的前層特徵作爲輸入:

 在CondenseNet中,\(H_l\)爲可學習分組卷積(LGC),用於自動學習輸入的分組以及去掉不重要的連接。而在ShuffleNet中,\(H_l\)的輸入會根據與當前層的距離進行丟棄。上面的兩種網絡設計傾向於丟棄冗餘的長距離連接,取得了很不錯的性能提升,然而這樣的設計可能會阻礙高效的特徵複用機制的探索。實際上,導致深層不再使用淺層特徵的主要原因是特徵\(x_l\)一旦產生就不再改變。爲此,論文提出計算消耗少的SFR模塊,使得過時的特徵可以被廉價地複用。

  • Reactivating obsolete features

 對第\(l\)層引入重激活模塊\(G_l(\cdot)\),該模塊將層輸入\(x_l\)轉換爲\(y_l\),用於激活前面的層輸出特徵。定義激活操作\(U(\cdot, \cdot)\)爲與\(y_l\)相加,稠密層的輸入重激活可公式化爲:

\(x_l^{out}\)爲重激活的輸出特徵,\(l\)層的可學習分組卷積操作\(H(\cdot)\)輸出新特徵\(x_l\)。此外,舊特徵\((x_i, i=1,\cdots,l-1)\)會被重新激活以提高其作用。

 顯然,重激活所有的特徵是不必要的,DenseNet的成功說明大部分特徵是不需要重新激活的,而且過多的重激活也會帶來過多的額外計算。爲此,論文希望能自動找到需要重激活的特徵,只對這部分特徵進行重激活。於是,論文提出了SFR(sparse feature reactivation)模塊,如圖2所示,基於剪枝的方法逐步達到這個目標。

  • Spare feature reactivation(SFR)

 重激活模塊\(G_l(\cdot)\)包含卷積層、BN層和ReLU層,卷積核的權值矩陣\(F\)的大小表示爲\((O, I)\)\(O\)\(I\)分別表示輸出維度和輸入維度。將\(G_l(\cdot)\)模塊的輸入\(x_l\)分成\(G\)組,權值矩陣\(F\)也隨之分爲\(G\)\(F^1,\cdots,F^G\),每個的大小變爲\((O,I/G)\)。注意這裏的分組不是將卷積變爲分組卷積,只是爲了方便稀疏化而進行的簡單分組,計算量和參數量沒改變。爲了將重激活連接稀疏化,定義稀疏因子\(S\)(也可以每組不同),使得每組在訓練後只能選擇\(\frac{O}{S}\)個維度進行重激活。
 在訓練期間,每個\(G_l(\cdot)\)中的連接方式由\(G\)個二值掩碼\(M^g\in\{0,1\}^{O\times\frac{1}{G}},g=1,\cdots,G\)控制,通過將對應的值置零來篩選出\(F^g\)中不必要的連接。換句話說,第\(g\)組的權值變爲\(M^g\odot F^g\)\(\odot\)爲element-wise相乘。
 SFR模塊參考了CondenseNet的訓練方法進行端到端訓練,將整體訓練過程分爲\(S-1\)個稀疏階段和最終的優化階段。假設總訓練週期爲\(E\),則每個稀疏階段的週期數爲\(\frac{E}{2(S-1)}\),優化階段的週期數爲\(\frac{E}{2}\)。在訓練時,SFR模塊先重激活所有特徵,即將\(M^g\)初始爲全1矩陣,隨後在稀疏階段逐步去掉多餘的連接。在每個稀疏階段中,\(g\)組內重激活\(i\)輸出的重要程度通過計算對應權值的L1-norm \(\sum^{I/G}_{j=1}|F^g_{i,j}|\)得到,將每個組中重要程度最低的\(\frac{O}{S}\)個輸出(除掉組內已裁剪過的)裁剪掉,即將\(j\)輸出對應的\(g\)組權值\(M^g_{i,j}\)設爲零。如果\(i\)輸出在每個組中都被裁剪了,則代表該特徵不需要重激活。在訓練之後,每組輸入只更新\(1/S\)比例的輸出,\(S\)的值越大,稀疏程度越高。

  • Convert to standard group convolution

 在測試階段,SFR模塊可轉換爲標準分組卷積和index層的實現,這樣的實現在實際使用中可以更高效地計算。如圖3所示,轉換後的分組卷積包含\(G\)組,輸出和輸入維度爲\((\frac{OG}{S}, I)\)。在分組卷積產生中間特徵後,index層用於重排輸出的順序,從而獲得\(y_l\)。在排序時,需要將相同序號的中間特徵相加再進行排序。

Architecture Design

 基於提出的SFR模塊,論文在CondenseNet的基礎上改造出CondeseNetV2的新稠密層,結構如圖4右所示。LGC層先選擇重要的連接,基於選擇的特徵產生新特徵\(x_l\)。隨後SFR模塊將\(x_l\)作爲輸入,學習重激活過時的特徵。跟CondenseNet一樣,爲了增加組間交流,每次分組卷積後面都接一個shuffle操作。從圖4的結構對比可以看出,CondenseNet和CondenseNetV2之間的差異在於舊特徵的重激活,CondenseNetV2的特徵複用機制效率更高。

 CondenseNetV2沿用了CondenseNet指數增長以及全稠密連接的設計範式,加入了SFR-DenseLayer。結構圖表1所示,SE模塊和hard-swish非線性激活依舊使用。表1展示的是參考用的基礎設計,調整的超參數或網絡搜索可以進一步提升性能。

Sparse Feature Reactivation in ShuffleNetV2

 SFR模塊可嵌入到任意CNN中,除了CondenseNet,論文還嘗試了ShuffleNet的改造。改造後的結構如圖5所示,論文稱之爲SFR-ShuffleNetV2,僅應用於非下采樣層。

Experiment


 對不同層的卷積核權值進行可視化,縱座標可認爲是來自不同層的特徵。可以看到,CondenseNet更關注相鄰層的特徵,而CondenseNetV2則也會考慮較早層的特徵。

 通過卷積核權值之和直接展示了層間的關聯層度,進一步展示了CondenseNet對較早層的複用程度較高。

 不同參數下的準確率對比,其中圖b的\(S=1\)即CondenseNet。

 論文提出了三種不同大小的CondenseNetV2,參數如表2所示,而ImageNet上的性能對比如表3所示。

 在ImageNet上對比各模塊的實際提升效果。

 與SOTA模塊在ImageNet上進行對比。

 在端側設備上進行推理速度對比。

 CIFAR數據集上的網絡對比。

 作爲檢測主幹網絡的性能對比。

Conclusion


 論文提出SFR模塊,直接重新激活一組淺層特徵來提升其在後續層的複用效率,而且整個重激活模式可端到端學習。由於重激活的稀疏性,額外引入的計算量非常小。從實驗結果來看,基於SFR模塊提出的CondeseNetV2性能還是很不錯的,值得學習。




如果本文對你有幫助,麻煩點個贊或在看唄~
更多內容請關注 微信公衆號【曉飛的算法工程筆記】

work-life balance.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章