論文:https://arxiv.org/abs/1707.06168
源碼:https://github.com/yihui-he/channel-pruning
本篇論文來自ICCV2017年的論文,是曠世的工作。因爲之復現AMC的論文發現源碼中使用了權重重構 (weight reconstruction)的方法,於是乎查了出處發現來源於這篇論文。本文的思想算是channel prune早期的idea,作者試圖從channels中找到最具代表性的weight,然後使用 Lasso 迴歸來選擇保留權重,然後重構剩下的權重使其能儘可能的還原原始的輸出。
簡介
CNN模型加速的方法目前可以分爲三種方式
1、optimized implementation:FFT 計算層面優化,針對GPU進行一些矩陣計算的優化
2、quantization:模型量化,將float類型使用整型integer表示,例如哈夫曼編碼、二值化網絡…
3、structured simplification:結構簡化,本文就是基於這種方式,(張量分解,稀疏連接,裁剪通道的粗粒度剪枝)
裁剪通道的方式存在一種問題,當我們對當前層裁剪之後改變了通道數量,因爲要保證通道對齊,所以就會導致下一層的通道被強制裁剪,因此作者考慮使用reconstruction的方式重構權重。
相關工作
該章節再次介紹了這三類的CNN加速的一些代表性算法:optimized implementation,quantization ,structured simplification 在此處不進行贅述。
方法
剪枝方法分兩步走
one step :使用Lasso 迴歸裁剪多餘的通道
具體做法,當裁剪一個 c 個通道的權重時,待裁剪權重W的shape爲 ,從feature map中採樣 尺寸的 X, 的 Y。其中 c’ (),定義列向量 爲mask層(決定保留哪些channel)。因此爲了最小化裁剪前後的誤差,可將問題建模如下
事實上這個問題屬於NP-hard問題,爲了便於求解論文中給等式加入了l1正則項
並且提出了兩步走求解的方法
首先固定再求解,固定了W之後這個問題可以用Lasso迴歸解決
其中
經過上一步求解後,此時可以固定求解W,此時問題就變成了簡單地最小二乘法可以解決的了
實驗結果
作者對VGG Resnet Xception 分別在 ImageNet ,Cifar10 , 和 VOC2007數據集上進行了實驗
分別於 first k 和 max response 對比有着更優秀的效果
first k 就是 ranking 截取前k個
max response 就是所謂的絕對值求和比大小排序
論文中使用這種裁剪方式在不同的模型和不同的任務上進行了大量的對比試驗,詳情可以看論文。
結論
綜上所述,論文提出了一種用於減少深度學習網絡的推理時間通道修剪方法。提升網絡處理效率,同時保持準確性。在ImageNet、CIFAR-10和PASCAL VOC上,VGG網和類resnet網都具有令人信服的速度和準確性。
這種權重重構的方法的優勢在於使用了數學工具進行了建模優化,相較於其他直接裁剪而影響下層通道的方法具備優勢,重構後的權重讓輸出更接近原始featuremap。