【模型剪枝】Network Slimming:卷積核剪枝

paper:Learning Efficient Convolutional Networks through Network Slimming

這是一篇做剪枝的paper,2017的ICCV文章。

主要亮點在於直接使用BN層的gamma參數進行剪枝評估。在卷積核的級別做剪枝,非常方便好用。

問題:

這篇paper中,Lamda的選擇標準和閾值標準沒有給出,應該就是作者實驗試出來的。

因此,lamda能不能通過網絡學習得到呢,這樣其實更實用。


Idea

先看Batch Norm(BN): 

image

image

上圖是剪枝的示意圖,可以看到,是在卷積核層面進行的剪枝。

一般情況下的網絡剪枝是通過額外增加一些對原網絡層的計算,得到卷積層的重要性信息。

Network Slimming:想法比較巧妙,通過BN層gamma參數進行重要性評估。(每一個channel有一個gamma值,作者認爲gamma值反映了該通道的重要性)。

剪枝的過程就是將小的值對應的卷積覈減掉。

如上圖,橙色對應的部分會被剪枝掉。

因此呢,非常重要的就是gamma參數的選擇過程了!


gamma參數

image

上圖表示了gamma參數的分佈情況。

圖一爲對gamma參數不做任何限制,分佈比較分散,直接剪枝影響網絡性能。

圖2和3分別表明,在使用不同的lambda進行L1 norm的情況。約束的情況是不同的。

image ,g(s) = |s|

作者在損失函數中增加了BN層gamma參數的L1正則化。Lamda代表加入的損失的權重值。

剪枝完成後做fine-tune。迭代進行。微調過程如下:

Prune

整個fine tune的示意圖如下所示:

image

具體步驟如下:

1、導入initial network

2、通過修訂的損失函數訓練,訓練到一定準確率後根據gamma參數和要剪枝的比率計算閾值thresh。

3、將低於thresh的卷積核剪枝。

4、fine-tune一定的epoch,使map等參數升高。

重複進行234步驟,使網絡達到較好的性能

 

Experiment

在CIFAR-10和CIFAR-100在分類上的實驗結果。

image

壓縮和加速效果比較明顯

image

現有問題

除了前面所說的lambda參數的學習外,感覺還有這麼一點問題:

針對卷積核的剪枝,其實非常有效的可以減少運算量。但是我們想要實現的硬件芯片中時,應該如何做呢。

這樣沒有block化的模塊,應該如何設計和應用,也是目前的一個問題。

 

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