paper:Learning Efficient Convolutional Networks through Network Slimming
這是一篇做剪枝的paper,2017的ICCV文章。
主要亮點在於直接使用BN層的gamma參數進行剪枝評估。在卷積核的級別做剪枝,非常方便好用。
問題:
這篇paper中,Lamda的選擇標準和閾值標準沒有給出,應該就是作者實驗試出來的。
因此,lamda能不能通過網絡學習得到呢,這樣其實更實用。
Idea
先看Batch Norm(BN):
上圖是剪枝的示意圖,可以看到,是在卷積核層面進行的剪枝。
一般情況下的網絡剪枝是通過額外增加一些對原網絡層的計算,得到卷積層的重要性信息。
Network Slimming:想法比較巧妙,通過BN層gamma參數進行重要性評估。(每一個channel有一個gamma值,作者認爲gamma值反映了該通道的重要性)。
剪枝的過程就是將小的值對應的卷積覈減掉。
如上圖,橙色對應的部分會被剪枝掉。
因此呢,非常重要的就是gamma參數的選擇過程了!
gamma參數
上圖表示了gamma參數的分佈情況。
圖一爲對gamma參數不做任何限制,分佈比較分散,直接剪枝影響網絡性能。
圖2和3分別表明,在使用不同的lambda進行L1 norm的情況。約束的情況是不同的。
,g(s) = |s|
作者在損失函數中增加了BN層gamma參數的L1正則化。Lamda代表加入的損失的權重值。
剪枝完成後做fine-tune。迭代進行。微調過程如下:
Prune
整個fine tune的示意圖如下所示:
具體步驟如下:
1、導入initial network
2、通過修訂的損失函數訓練,訓練到一定準確率後根據gamma參數和要剪枝的比率計算閾值thresh。
3、將低於thresh的卷積核剪枝。
4、fine-tune一定的epoch,使map等參數升高。
重複進行234步驟,使網絡達到較好的性能
Experiment
在CIFAR-10和CIFAR-100在分類上的實驗結果。
壓縮和加速效果比較明顯
現有問題
除了前面所說的lambda參數的學習外,感覺還有這麼一點問題:
針對卷積核的剪枝,其實非常有效的可以減少運算量。但是我們想要實現的硬件芯片中時,應該如何做呢。
這樣沒有block化的模塊,應該如何設計和應用,也是目前的一個問題。