YOLO3模型剪枝系列(一)環境的搭建

前言

現在深度學習算法模型的剪枝(prune)和壓縮正逐漸成爲一個熱點。畢竟,AI應用落地最終都會落實到模型在各個平臺上的部署和運行。但是現有複雜些功能的算法模型都存在一個實時性問題。 就以yolov3完整版算法模型爲例子,在intel cpu上調用openv DNN API來推理它大概需要1秒左右,在海思3519av100上運行,光推理就要有140ms。 此外,複雜模型除了推理速度慢的缺點外,還有就是模型本身size也很大,yolo3完整版模型就有260多MB,這意味着模型加載時間長,且消耗內存大。 

正是因爲這些缺點,越來越多的人開始研究 如何在保證準確度條件下來對算法模型進行壓縮和剪枝。注意,這裏的關鍵詞是保證準確度。如果沒有這個條件,那就不用費勁研究剪枝了,直接用模型的變體,比如yolo3-tiny, mobilenetv3-yolo3等。 yolo3-tiny在海思3519a上只需要20ms左右的推理時間,完全滿足實時性要求。 但是實際使用就知道,比較複雜的物體識別,比如說識別種類數目比較多,圖像上有很多密集型小目標等,Yolo3-tiny等變體小模型還是不能滿足要求。 

環境搭建

現在模型剪枝的方向有很多,我參考的開源項目是這個:https://github.com/tanluren/yolov3-channel-and-layer-pruning

其參考的paper我大概看了一下,原理相對還是算比較簡單的,就是想對每個conv channel通道做scale,然後對scale factor做lasso迴歸(L1 Regularization),看看最終哪些channel的scale facctor很小,接近於0,如果某些channel的scale factor很小,那說明它們對模型output沒啥貢獻,可以考慮把它們從網絡模型去除掉。注意,是把網絡模型中整條通道上參數(從輸入到輸出)都去除掉。論文還提到,由於BN層中剛好有scale因子gamma,而且BN是現代深度學習模型的標配,使用非常普遍,所以方便起見,就直接對gamma係數來做L1正則化。

回到上面提到的開源項目,其主要思路就是稀疏訓練->剪枝->fine tune訓練。 必要的話,可以對這三個環節進行多次迭代。如何判斷需要幾次迭代,這裏面有些經驗成分。 

關於該開源項目腳本運行前的環境搭建,它需要使用python3.x以上的版本,然後使用pip3 install來裝下面的軟件。下面這個截圖就是該項目根目錄下的requirements.txt內容。

torch需要裝1.2以上的版本,其安裝命令: pip3 install torch==1.2

torch包很大, 大概有700多MB,下載還是需要很長時間。 

接下來就可以運行稀疏訓練腳本了,但是遇到了下面這個問題:

File "train.py", line 487, in <module>
    from torch.utils.tensorboard import SummaryWriter
  File "/usr/local/lib/python3.6/dist-packages/torch/utils/tensorboard/__init__.py", line 4, in <module>
    raise ImportError('TensorBoard logging requires TensorBoard with Python summary writer installed. '
ImportError: TensorBoard logging requires TensorBoard with Python summary writer installed. This should be available in 1.14 or above.

 看log提示說,torch1.14以上的版本有這個問題,但是我明明裝的是torch1.2。 據網上說,torch1.2有bug,建議裝最新的torch就可以避免這個問題。 這個說法有待考證,希望知道的朋友給我說一聲。 

最後我的解決方法是, 另外安裝了tensorboardX, 其命令:pip3 install tensorboardX

另外,將train.py中的代碼:

     from torch.utils.tensorboard import SummaryWriter

改成:

        from tensorboardX import SummaryWriter

就ok了。  

 

 

 

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