SlimYOLOv3:更窄、更快、更好的無人機目標檢測算法
- 2019 年 12 月 23 日
- 筆記
來源:https://zhuanlan.zhihu.com/p/78942216
《SlimYOLOv3: Narrower, Faster and Better for Real-Time UAV Applications》是arXiv, 25 Jul 2019的論文,作者全部來自北理,論文鏈接:
arxiv.org/abs/1907.1109。作者對YOLOv3的卷積層通道剪枝(以通道級稀疏化),大幅削減了模型的計算量(~90.8% decrease of FLOPs)和參數量( ~92.0% decline of parameter size),剪枝後的模型運行速度約為原來的兩倍,並基本保持了原模型的檢測精度。
具體是怎麼做的?通過稀疏訓練和通道剪枝獲得SlimYOLOv3的程式可用下圖概括:

首先來介紹下YOLOv3-SPP3,它是作者在YOLOv3基礎上做了一點改進得到的。YOLOv3分別在三個不同尺寸的特徵圖上構建detection header,作者將spatial pyramid pooling (SPP) module引入YOLOv3中。SPP module由四個並行的分支構成,分別是kernel size為1×1, 5×5, 9×9, 13×13的最大池化。如下圖所示,作者在每個檢測頭前面的第5和第6卷積層之間集成SPP模塊來獲得YOLOv3-SPP3。作者實際上後續以YOLOv3-SPP3作為baseline來進行稀疏訓練和通道剪枝等。

稀疏訓練。在YOLOv3每個卷積層後跟着的BN layer起到加速模型收斂、提高泛化能力的作用,批量標準化公式為:(其中
和
分別是輸入特徵的均值和方差,
和
是可訓練的比例因子和偏差)

自然地,作者直接採用
的絕對值(L1 regularization)來表徵通道的重要程度。稀疏訓練的損失函數是:(其中
,
是懲罰因子—— balances the two loss terms,作者在實驗中設置為0.0001)

通道剪枝,其實就是去除那些尺度因子小的通道、減少模型通道數,「更窄」。作者引入一個全局閾值
來決定某通道是否被剪掉,
被設置為所有
的n-th percentile,它即是剪枝率。此外,為了防止over-pruning、保持網絡連接的完整性,作者引入了一個局部安全閾值
,
是逐層級設置的,
被設置為當前卷積層中所有
的k-th percentile。作者將比例因子
同時小於
和
的通道去除。當然,YOLOv3中有一些特殊層需要特殊處理:maxpool layer和upsample layer(與通道數無關直接忽略)、route layer(concatenate其incoming layers對應的pruning masks來獲得route layer的pruning mask)、shortcut layer(所有與shortcut layer連接的layers需要有相同的channel number,為了匹配這些feature channels,遍歷這些層的pruning masks並執行OR操作來為這些層生成最終的pruning masks)。
接下來就是Fine-tuning(重訓SlimYOLOv3)和Iteratively pruning(迭代修剪直到滿足一定的條件,比如模型剪枝率達到一定要求,首選上圖所示的增量修剪策略,以防止過度修剪)。
模型:YOLOv3、YOLOv3-tiny(YOLOv3的tiny版本)、YOLOv3-SPP1(僅在第一個檢測頭前集成SPP模塊)、YOLOv3-SPP3、SlimYOLOv3-SPP3-50(n=50, k=90, 迭代剪枝2次)、SlimYOLOv3-SPP3-90(n=90, k=90)、SlimYOLOv3-SPP3-95(n=95, k=90)。
在VisDrone2018-Det dataset的驗證集上進行評估,各模型測試結果如下:


SlimYOLOv3-SPP3-50、SlimYOLOv3-SPP3-90、SlimYOLOv3-SPP3-95相比YOLOv3-SPP3而言,實際上reduces FLOPs (when input size is 832×832) by 57.1%, 85.9% and 90.8%, decreases parameters size by 67.4%, 87.5% and 92.0%, shrinks model volume by 67.5%, 87.4 and 92.0%, and reduces the inference time by 38.8%, 42.6% and 49.5%.
至於檢測精度,上面的柱狀圖表示很直觀了。
至於Billion floating point operations(BFLOPs) and accuracy (mAP) trade-off,下圖更為直觀:
