無(wú)人機因為硬件計算能力較弱,要在其上實(shí)現實(shí)時(shí)的目標檢測,需要算法參數量小、占用內存少、推斷時(shí)間短。常見(jiàn)的算法往往難以直接應用。
一種比較直接的做法是對模型進(jìn)行剪枝,盡量減少模型卷積層不必要的通道。
今天arXiv新上論文SlimYOLOv3: Narrower, Faster and Better for Real-Time
UAV Applications,作者對YOLOv3的改進(jìn)版進(jìn)行了剪枝,在參數量、占用內存、推斷時(shí)間大幅減少的情況下,在無(wú)人機目標檢測數據集上實(shí)現了與原算法可比較的檢測精度。
作者已將代碼開(kāi)源,包含訓練和測試部分,值得從事相關(guān)工程開(kāi)發(fā)的朋友參考。
以下是作者信息:
作者全部來(lái)自北京理工大學(xué)。
下圖為作者發(fā)明的三種設置下的SlimYOLOv3 相比較基線(xiàn)版本的YOLOv3的結果:
YOLOv3-tiny 是YOLOv3的一種快速算法,但精度下降太多。
YOLOv3-SPP1 是YOLOv3加上SPP模塊的改進(jìn),其比原始YOLOv3精度要高。
YOLOv3模型中加入SPP模塊的示意圖,作者是在原第5和第6卷積層之間加SPP模塊
YOLOv3-SPP3 是該文作者YOLOv3-SPP1的改進(jìn),其有3個(gè)SPP模塊,比YOLOv3-SPP1精度更高,是本文模型剪枝的基礎模型。
SlimYOLOv3-SPP3-50/90/95,是YOLOv3-SPP3模型剪枝率分別為50%、90%、95%的三個(gè)模型。
可見(jiàn)模型剪枝可大幅改善模型在無(wú)人機上的部署,有一定的精度損失,但遠比YOLOv3-tiny要好。
剪枝過(guò)程
什么是深度模型的剪枝?就像論文名字中的更窄(Narrower),它是要減少模型通道數。
去除每個(gè)卷積層中不重要的特征通道。所以需要合理地評估特征通道的重要性。
下圖可以較為明了地說(shuō)明整個(gè)過(guò)程。
YOLOv3經(jīng)過(guò)稀疏訓練,得到各通道的尺度因子,然后去除那些尺度因子小的通道,將剪枝得到的模型SlimYOLOv3在數據集上進(jìn)一步微調,得到檢測結果,然后進(jìn)入下一輪的稀疏訓練。以上剪枝過(guò)程是迭代重復的,直到滿(mǎn)足一定的模型條件,比如模型剪枝率達到一定要求。
實(shí)驗結果
作者通過(guò)上述方法,在配置為 Intel(R) Xeon(R) E5-2683 v3 CPU @ 2.00GHz (56 CPUs), 64GB RAM, 4 個(gè) NVIDIA GTX1080ti GPU的 Linux 機器上訓練,得到三個(gè)剪枝模型,并在無(wú)人機目標檢測數據集 VisDrone2018-Det上進(jìn)行了實(shí)驗,結果如下:
可見(jiàn)在精度稍有下降的情況下,推斷時(shí)間(Inference time)、參數量(Parameters)、內存占用(Volume)大幅減少,更適合在無(wú)人機部署。
下圖為各算法結果比較的柱狀圖,更加直觀(guān)。

檢測結果示例:

作者已將代碼開(kāi)源,各位讀者可以非常方便地進(jìn)行訓練和測試。
每個(gè)步驟僅需要一行命令!
原始模型訓練:
./darknet/darknet detector train VisDrone2019/drone.data cfg/yolov3-spp3.cfg darknet53.conv.74.weights稀疏訓練:
python yolov3/train_drone.py --cfg VisDrone2019/yolov3-spp3.cfg --data-cfg VisDrone2019/drone.data -sr --s 0.0001 --alpha 1.0通道剪枝:
python yolov3/prune.py --cfg VisDrone2019/yolov3-spp3.cfg --data-cfg VisDrone2019/drone.data --weights yolov3-spp3_sparsity.weights --overall_ratio 0.5 --perlayer_ratio 0.1模型微調:
./darknet/darknet detector train VisDrone2019/drone.data cfg/prune_0.5.cfg weights/prune_0.5/prune.weights論文地址:
https://arxiv.org/pdf/1907.11093v1.pdf
代碼地址:
https://github.com/PengyiZhang/SlimYOLOv3
感謝論文作者的分享!
更多閱讀:
移動(dòng)端70+fps!谷歌新出高效實(shí)時(shí)視頻目標檢測
ThunderNet:國防科大、曠視提出首個(gè)在A(yíng)RM上實(shí)時(shí)運行的通用目標檢測算法
聯(lián)系客服