張寶朋,康謙澤,李佳萌,郭俊宇,陳少華
(大連交通大學計算機與通信工程學院,遼寧大連 116028)
目標檢測是計算機視覺中的重要分支,廣泛應用于圖像分割、物體追蹤、關鍵點檢測等任務,主要分為Two Stage 和One Stage 兩類算法。Two Stage目標檢 測算法包括R-CNN[1]、Faster RCNN[2]、Fast-RCNN[3]等算法,先進行區(qū)域生成,此區(qū)域通常稱為候選區(qū)域(Region Proposal,RP),即可能包含需要檢測物體的預選框,再通過卷積神經網(wǎng)絡進行分類;One Stage 目標檢測算法包括YOLO[4-6]系列、SSD[7]、RetinaNET[8]等算法,不使用RP,通過特征提取網(wǎng)絡提取圖像特征,直接利用提取的特征預測物體分類和位置。相較于Two Stage 目標檢測算法復雜的網(wǎng)絡結構,One Stage 目標檢測算法具有檢測速度快、模型簡單輕量的特點,適合部署在移動端嵌入式設備上。
YOLOv4 算法是YOLO 系列算法中的第4 版,相較于之前的YOLO 系列算法,在原有YOLO 目標檢測架構的基礎上,分別在加強特征提取、增強網(wǎng)絡模型非線性、防止過度擬合等方面做了優(yōu)化。從YOLOv1 到YOLOv4[9],YOLO 算法在經過數(shù)次迭代之后,逐漸彌補了許多缺陷,同時在保持速度優(yōu)勢的前提下,兼顧了檢測準確度和實時性能。
本文在YOLOv4 目標檢測算法的基礎上對其網(wǎng)絡結構進行改進,將CSPDarkNet53 主干特征提取網(wǎng)絡替換為改進的ShuffleNet V2 網(wǎng)絡,并使用深度可分離卷積替換原算法網(wǎng)絡中的普通卷積,進一步降低算法參數(shù)量、計算量和模型占用空間,使其滿足移動端嵌入式設備存儲容量小、算力低的要求。
YOLOv4 網(wǎng)絡結構如圖1 所示,主干特征提取網(wǎng)絡CSPDarkNet53 結合了CSPNet[10]和DarkNet53 的優(yōu)點,在提高網(wǎng)絡推理速度和準確性的同時,又能降低主干網(wǎng)絡的計算量。相較于YOLOv3,YOLOv4的頸部網(wǎng)絡NECK 采用空間金字塔池化(Spatial Pyramid Pooling,SPP)[11]和路徑聚合網(wǎng)絡(Path Aggregation Network,PANet)的網(wǎng)絡結構。SPP 可以使得圖片數(shù)據(jù)矩陣以固定大小的格式輸出到YOLOv4 的預測網(wǎng)絡模塊(Head),避免直接對圖片進行剪裁縮放造成數(shù)據(jù)信息丟失,進而導致預測網(wǎng)絡可信度降低。同時,在提取圖片各維度特征方面,不再使用YOLOv3 算法中的特征金字塔網(wǎng)絡(Feature Pyramid Networks,F(xiàn)PN),而是采用一種金字塔和倒金字塔并行的PANet 網(wǎng)絡結構。

圖1 YOLOv4 網(wǎng)絡結構Fig.1 YOLOv4 network structure
ShuffleNet V2 是一種適合部署在移動端的輕量化網(wǎng)絡結構。MA 等[12]在相同的硬件實現(xiàn)平臺上,分別對ShuffleNet V1 和MobileNet V2[13]的執(zhí)行情況進行研究,結合理論分析和實驗數(shù)據(jù)得出以下4 條輕量化網(wǎng)絡模型設計準則:
1)輸入輸出通道數(shù)相同,則內存占用量最小。
2)過多的分組卷積會增加內存占用量。
3)多路結構的網(wǎng)絡分支會降低并行性,應盡量減少網(wǎng)絡分支。
4)合理剪裁元素級運算,例如ReLU[14]和Add 函數(shù),可加快模型推理速度。
本文后續(xù)對ShuffleNet V2 和YOLOv4 網(wǎng)絡結構的改進也依據(jù)以上4 條設計準則展開。
ShuffleNet V2 網(wǎng)絡模型的基本組件(如圖2 所示)大致可分為:1)基本組件1,在特征圖輸入后有一個通道分支(Channel Split)操作,該操作將輸入通道數(shù)為c的特征圖分為c?c′和c′,左邊的分支不做任何操作,右邊的分支包含3 個卷積操作,并且2 個1×1卷積已經由ShuffleNet V1 中的分組卷積更換為普通卷積,再將這2 個分支通道中的數(shù)據(jù)用Concat+Channel Shuffle 操作進行合并,這樣不僅可以使得該基礎模塊的輸入輸出通道數(shù)一樣,而且避免了Add操作,加快模型了推理速度,最后進行通道重組(Channel Shuffle)操作;2)基本組件2,該組件沒有Channel Split 操作,因此輸出通道數(shù)是輸入通道數(shù)的2 倍,左右分支的操作過程和基本組件1 基本一致,此處不再贅述。

圖2 ShuffleNet V2 網(wǎng)絡模型的基本組件Fig.2 Basic components of ShuffleNet V2 network model
YOLOv4 目標檢測算法在采用眾多優(yōu)化策略改進自身不足后性能表現(xiàn)優(yōu)異,但在移動端設備部署目標檢測算法的背景下,根據(jù)應用環(huán)境的不同,算法不一定需要很高的精確度,但需要較快的預測速度,在移動端設備算力及內存資源有限的情況下,算法模型的大小也變得尤為重要。顯然,原YOLOv4 算法很難適用于移動端的目標檢測設備。
基于此,本文對YOLOv4 目標檢測算法進行改進,具體改進工作主要從以下2 個方面展開:
1)改進輕量化網(wǎng)絡模型ShuffleNet V2,使模型在進一步剪裁、壓縮和降低計算量和參數(shù)量的同時,盡可能地使其精度符合預期要求,并使用改進的ShuffleNet V2 網(wǎng)絡替換原YOLOv4 目標檢測算法中的主干特征提取網(wǎng)絡CSPDarkNet53。
2)剪裁YOLOv4頸部網(wǎng)絡尾部的CBL+Conv(CBL=Conv+BN+ReLU)結構,壓縮模型容量,降低計算量。
2.2.1 卷積剪裁
在觀察ShuffleNet V2 網(wǎng)絡模型的基本組件后發(fā)現(xiàn),在組件的單側分支中,輸入特征首先經過一個以普 通1×1 卷 積(Conv1×1)為主的Conv1×1+BN+ReLU 卷積處理模塊,然后進入一個DWConv3×3+BN 模塊,其中DWConv3×3 是一個卷積核大小為3的深度可分離卷積,最后進入一個普通Conv1×1,也就是說DWConv3×3 的前后各有一個普通的Conv1×1。在一般情況下,在深度可分離卷積前后使用1×1 卷積的目的有兩種,一種是為了升維或者降維,另一種是為了通道信息融合。在ShuffleNet V2 模型設計時為了遵循輕量化網(wǎng)絡模型設計準則中的準則1,每一分支的卷積層都需要保證輸入輸出通道相同,因此普通的Conv1×1 并不是為了對卷積核的通道數(shù)進行降維或者升維操作,而是為了融合通道信息,彌補深度可分離卷積的通道信息融合能力。
根據(jù)以上分析,在每一分支上使用2 個普通的Conv1×1 進行通道信息融合略顯冗余,使用1 個Conv1×1 便可以滿足移動端目標檢測設備對精度的要求。因此,將圖3 中虛線部分的普通Conv1×1 剪裁掉。

圖3 ShuffleNet V2 網(wǎng)絡模型基本組件的1×1 卷積剪裁Fig.3 1×1 convolution clipping in the basic components of ShuffleNet V2 network model
2.2.2 卷積核擴大
在卷積神經網(wǎng)絡中,感受野的大小是衡量這個網(wǎng)絡性能的重要指標參數(shù),更大的感受野可以提取到圖片中的更多細節(jié)特征。根據(jù)文獻[15]得到如下感受野反向計算公式:

其中:Ri是第i層卷 積層上的感 受野;Ri+1是 第i+1 層上的感受野;Si是第i層的卷積步長(Stride);Ki是第i層的卷積核大小。
根據(jù)式(1)可以得知,感受野的大小和卷積步長和卷積核大小有直接關系,擴大卷積步長和卷積核大小可以有效增大卷積層上的感受野。然而根據(jù)式(2)可以看出,擴大卷積步長和卷積核大小都會對卷積輸出產生影響,其中卷積步長的增大對卷積輸出的影響更為明顯。

其中:osize是卷積計算的輸出值;isize是輸入圖像的矩陣大小;p是對輸入圖像矩陣高或寬上的補充(padding)值;Ksize是卷積運算中的卷積核大小。由此可見,S的大小對osize的影響很大,S過大會嚴重影響卷積層對特征圖細節(jié)信息的提取,甚至完全遺漏掉兩次卷積操作的中間信息。
如圖4 所示,使用一個3×3 的卷積核對一個6×6的輸入特征圖進行卷積運算操作,其中黑色為參與1 次卷積計算部分,深灰色為參與2 次卷積計算部分,白色代表未參與卷積計算,淺灰色為第1、2 次卷積計算均有參與,虛線表示padding。在卷積運算時:如果Stride 為2,則卷積核大小范圍的邊緣部分數(shù)據(jù)參與2 次卷積計算,這樣既不會造成邊緣部分細節(jié)特征的丟失,又可以進一步加強提取邊緣交叉處不易于提取的特征值;如果卷積操作時Stride 為3,則卷積核大小范圍的邊緣部分數(shù)據(jù)僅參與過1 次卷積計算,即1 次特征值的提取,這樣很容易造成邊緣處特征信息的丟失;如果卷積操作時Stride 為4,則會完全丟失2 次卷積操作間的特征信息。

圖4 不同卷積步長的卷積操作Fig.4 Convolution operations with different convolution strides
由此可見,加大卷積步長和卷積核大小可以有效增加感受野,但是加大卷積步長會導致卷積操作中丟失部分特征信息,因此本文原本決定從擴大卷積核的大小入手,對深度可分離卷積進行一個卷積核的擴張,即將ShuffleNet V2 模型中原來的3×3 卷積核替換為5×5 卷積核,然而大尺寸的卷積核隨之帶來的是更多的參數(shù)量,在CNN 網(wǎng)絡中參數(shù)量的計算和輸入特征圖的參數(shù)無關,僅和卷積核的大小、BN 以及偏置有關。假設卷積核kernel=(K,S,C,O),其中K、S、C、O分別是卷積操作時卷積核大小、步長、特征圖輸入通道數(shù)、輸出通道數(shù)。卷積操作的參數(shù)量可以根據(jù)式(3)進行求解:

將K=5 和K=3 分別代入式(3),在輸入輸出通道數(shù)均相同的情況下,經計算得知K=5 時的參數(shù)量是K=3 時的2.6 倍。因此,本文借鑒文獻[16]方法,采用2 個3×3 卷積核級聯(lián)的方式代替5×5 卷積核,這種方式可以在有效降低計算量的同時,獲得和5×5 卷積核相同的感受野。簡化式(2),在Stride 為1 且不考慮padding 時得到式(4):

在卷積運算輸出方面,假設isize的大小為9,Ksize的值為5,代入式(4)經計算得出osize的值為5。在同樣情況下,將Ksize的值設為3,經過2 次級聯(lián)的3×3 卷積核運算后得出osize的值也是5。同理,在參數(shù)量方面,假定輸入輸出通道的值均為3,分別將K=5 和K=3 代入式(3),經計算可知5×5 卷積操作的參數(shù)量為234,兩個級聯(lián)的3×3 卷積操作的參數(shù)量為180,遠比一個5×5 卷積操作的參數(shù)量要低很多。
2.2.3 激活函數(shù)替換
Mish 函數(shù)是MISRA 于2019 年提出的一種新型激活函數(shù)[17],函數(shù)表達式如式(5)所示:

其中:x是由歸一化層傳入的參數(shù)值。
由如圖5 所示的Mish 激活函數(shù)示意圖可知:1)Mish 激活函數(shù)在負值時并非完全截斷,更好地保證了信息流入;2)Mish 激活函數(shù)無邊界,在左右極限的情況下梯度趨近于1,可避免梯度飽和;3)Mish 激活函數(shù)的梯度下降效果更好,可以盡可能地保證每一個點的平滑。基于此,本文將ShuffleNet V2 網(wǎng)絡模型中原本的ReLU 函數(shù)替換為Mish 激活函數(shù)。

圖5 Mish 激活函數(shù)示意圖Fig.5 Schematic diagram of Mish activation function
2.2.4 改進的ShuffleNet V2 最小基本組件
綜合以上關于ShuffleNet V2 網(wǎng)絡模型的改進方法,得到新的ShuffleNet V2 網(wǎng)絡模型最小基本組件,如圖6 所示。

圖6 改進的ShuffleNet V2 網(wǎng)絡模型最小基本組件Fig.6 Minimum basic components of improved ShuffleNet V2 network model
2.3.1 頸部網(wǎng)絡結構剪裁
通過分析YOLOv4 網(wǎng)絡結構可知,在其頸部網(wǎng)絡和YOLO-Head 之間有CBL+Conv 結構,然而特征圖在輸入到這一結構之前,就已經在頸部網(wǎng)絡中經過了5 次CBL 操作,而且如圖7 所示的CBL 操作中也包含Conv 操作,這樣共有6 次CBL 操作再加1 次Conv,然后輸入到YOLO-Head 中進行預測。因此,在頸部網(wǎng)絡和YOLO-Head 間進行1 次CBL+Conv 操作則顯得多余,刪除該操作不僅對后續(xù)的網(wǎng)絡預測沒有任何影響,而且還會加快網(wǎng)絡推理速度。

圖7 CBL 結構組成Fig.7 CBL structure composition
2.3.2 深度可分離卷積替換
通過進一步分析YOLOv4 網(wǎng)絡結構可知,其在頸部網(wǎng)絡中使用了大量的CBL 結構,而由于CBL 基本組成結構為CBL=Conv+BN+Leaky ReLU,因此頸部網(wǎng)絡中包含了大量的普通卷積運算,借鑒文獻[18]研究思想,采用深度可分離卷積代替普通卷積可以大大降低卷積運算的參數(shù)量,而在神經網(wǎng)絡中參數(shù)量的多少直接影響了網(wǎng)絡模型容量的大小和網(wǎng)絡模型在計算過程中的浮點數(shù)計算量(Floating Point Operations Per second,F(xiàn)LOPs)。普通卷積和深度可分離卷積示意圖如圖8、圖9 所示。由圖8、圖9可以看出,普通卷積是使用4 個3×3×3 的Filter(過濾器)對輸入特征圖進行卷積操作,先將特征圖的每個Channel(通道)和對應的Kernel(卷積核)做卷積運算,然后將3 個Channel 的運算結果融合成一個Map(圖層)輸出,而深度可分離卷積是將以上操作步驟分解為兩部分完成,首先使用3 個3×3×1 的Filter 對輸入特征圖的每個Channel 分別進行卷積得到由3 個Map 組成的特征圖,這一過程稱為逐通道卷積,然后再用4 個1×1×1 的Filter 對上一步的輸出特征圖進行卷積運算,最后輸出由4 個Map 組成的特征圖,這一過程稱為逐點卷積。逐通道卷積和逐點卷積經過以上運算流程共同組成深度可分離卷積[19]。

圖8 普通卷積示意圖Fig.8 Schematic diagram of ordinary convolution

圖9 深度可分離卷積示意圖Fig.9 Schematic diagram of depthwise separable convolution
由圖9 可以分析得出深度可分離卷積的參數(shù)量計算公式:

根據(jù)式(3)化簡后的深度可分離卷積參數(shù)量計算如下:

因為在逐通道卷積計算時,每個Filter 僅包含1 個Kernel,而普通 卷積的每個Filter 包 含3 個Kernel,相當于逐通道卷積時的Cdw=1,普通卷積和逐點卷積時Cpw=Cconv=Cinput,則深度可分離卷積和普通卷積的參數(shù)量比值[20]計算如下:

將圖8、圖9 的Filter 中卷積核大小和輸入輸出通道數(shù)代入式(6)、式(7)中可知:在普通卷積的情況下計算參數(shù)量Pconv為108,在深度可分離卷積的情況下計算參數(shù)量Pdw-conv為39。
假定輸出特征層的寬和高分別為wout和hout,那么普通卷積和深度可分離卷積的計算量公式如式(9)、式(10)所示:

經化簡后兩者的比值如下:

由此可知,將YOLOv4 頸部網(wǎng)絡中的普通卷積全部替換為深度可分離卷積能夠直觀有效地降低模型參數(shù)量和計算量。
2.3.3 改進的網(wǎng)絡結構
在使用卷積剪裁、擴大卷積核、替換深度可分離卷積等方式對ShuffleNet V2、YOLOv4 網(wǎng)絡結構進行輕量化改進后得到改進的YOLOv4 網(wǎng)絡結構,如圖10 所示。

圖10 改進的YOLOv4 網(wǎng)絡結構Fig.10 Improved YOLOv4 network structure
選用PC 和ZYNQ 7020 開發(fā)板卡為硬件實現(xiàn)平臺,PC 的硬件配置CPU 為AMD R5 4600H,GPU 為GTX 1660,ZYNQ 平臺為ALINX 公司的AX7020 型開發(fā)板,詳細的邏輯資源此處不再贅述。實驗數(shù)據(jù)集來自天津大學機器學習和數(shù)據(jù)挖掘實驗室開源的VisDrone 2020 數(shù)據(jù)集[21],該數(shù)據(jù)集由航拍無人機捕獲收集,橫跨中國多個城市的市內及郊區(qū)環(huán)境,包含豐富的視頻及圖片數(shù)據(jù)。
3.1.1 ShuffleNet V2 改進實驗對比
針對改進的ShuffleNet V2 網(wǎng)絡結構進行目標分類實驗,得出如表1 所示的ShuffleNet V2 消融實驗對比數(shù)據(jù),其中剪裁普通Conv1×1 結構后的網(wǎng)絡命名為ShuffleNet_lit,擴大卷積核后的網(wǎng)絡命名為ShuffleNet_2DW,替換激活函數(shù)后的網(wǎng)絡命名為ShuffleNet_M。
由表1 數(shù)據(jù)可知,除ShuffleNet_lit 外,ShuffleNet_M和ShuffleNet_2DW 相較于ShuffleNet V2 都提高了Top-1 準確率,其中ShuffleNet_2DW 提升效果更顯著,但是這兩個網(wǎng)絡在提高檢測精度的同時也帶來了FLOPs、參數(shù)量及模型容量的增加。改進的ShuffleNet V2 網(wǎng)絡的檢測精度較原網(wǎng)絡有了顯著提高,并有效降低了原網(wǎng)絡的計算量、參數(shù)量和模型容量。

表1 ShuffleNet V2 消融實驗數(shù)據(jù)對比Table 1 Comparison of ShuffleNet V2 ablation experimental data
3.1.2 YOLOv4 改進實驗對比
針對改進的YOLOv4 網(wǎng)絡結構進行目標分類實驗,得出如表2 所示的YOLOv4 消融實驗對比數(shù)據(jù),其中對頸部網(wǎng)絡剪裁后的網(wǎng)絡命名為YOLOv4_lit,替換深度可分離卷積的網(wǎng)絡命名為YOLOv4_DW。

表2 YOLOv4 消融實驗數(shù)據(jù)對比Table 2 Comparison of YOLOv4 ablation experimental data
由表2 數(shù)據(jù)可知,兩種改進方式分別對YOLOv4網(wǎng)絡的FLOPs、參數(shù)量和模型容量做了不同程度上的壓縮,其中采用深度可分離卷積代替普通卷積方式改進的YOLOv4_DW 網(wǎng)絡效果更明顯。
將YOLOv4 算法、改進 的YOLOv4 算法、文獻[22]算法和YOLOv5 算法[23]在相同軟硬件平臺和VisDrone 2020 數(shù)據(jù)集上進行目標檢測實驗,輸入圖片固定為800×800 像素,得到的平均精度均值(mean Average Precision,mAP)、檢測速度和模型容量結果如表3 所示。4 種算法在相同GPU 平臺和VisDrone 2020 數(shù)據(jù)集上的圖像目標檢測實驗可視化結果如圖11~圖14 所示。

圖11 YOLOv4 算法在VisDrone 2020 數(shù)據(jù)集上的圖像目標檢測結果Fig.11 Image target detection results of YOLOv4 algorithm on VisDrone 2020 dataset

圖12 改進的YOLOv4 算法在VisDrone 2020 數(shù)據(jù)集上的圖像目標檢測結果Fig.12 Image target detection results of improved YOLOv4 algorithm on VisDrone 2020 dataset

圖13 文獻[22]算法在VisDrone 2020 數(shù)據(jù)集上的圖像目標檢測結果Fig.13 Image target detection results of the algorithm in reference[22]on VisDrone 2020 dataset

圖14 YOLOv5 算法在VisDrone 2020 數(shù)據(jù)集上的圖像目標檢測結果Fig.14 Image target detection results of YOLOv5 algorithm on VisDrone 2020 dataset

表3 目標檢測算法性能對比Table 3 Performance comparison of target detection algorithms
由表3 和圖11、圖12 和圖13 檢測結果可知,YOLOv4 算法、改進的YOLOv4 算法和文獻[22]算法在VisDrone2020 數(shù)據(jù)集上具有大致相同的檢測結果,但是改進的YOLOv4 算法相較于YOLOv4 算法,在mAP 上降低了1.8 個百分點,檢測速度卻提高了27%,模型容量降低了23.7%,相較于文獻[22]算法,在mAP 上降低了0.5 個百分點,模型容量增加了13%,但運行速度卻提高了18.75%。
由表3 和圖14 檢測結果可知,YOLO5 算法在檢測速度和模型容量上均比改進的YOLOv4 算法有著極大的提高,但是在mAP 上卻比改進的YOLOv4 算法降低了7.9 個百分點,而且對比圖12 和圖14 可以看出,YOLO5 算法對小目標的檢測效果并不理想,甚至有些小目標未檢測到,不適用于目標較多、目標尺度不均的復雜檢測環(huán)境。
使用改進的YOLOv4 目標檢測算法分別在GPU平臺和ZYNQ 平臺上進行目標檢測實驗,結果如表4所示,這種縱向對比實驗主要是為了衡量在相同功耗下,該算法能否發(fā)揮ZYNQ 功耗低、數(shù)據(jù)并行處理能力強的優(yōu)勢。改進的YOLOv4 算法在ZYNQ 平臺和VisDrone 2020 數(shù)據(jù)集上的圖像目標檢測可視化結果,如圖15 所示。

表4 改進的YOLOv4 算法在不同硬件平臺上的性能對比Table 4 Performance comparison of the improved YOLOv4 algorithm on different hardware platforms
對比表4 和圖12、圖15 中的數(shù)據(jù)及檢測結果可知,改進的YOLOv4 算法在GPU 平臺上的檢測速度更快,但是由于該縱向對比實驗并不是為了證明GPU 和ZYNQ 檢測速度,而是通過對比兩者的功耗比,即處理一張圖片所消耗的功率,從而驗證改進的YOLOv4 算法能否發(fā)揮出ZYNQ 在處理任務時既速度快又功耗低的優(yōu)勢。通過對比和分析表4 中數(shù)據(jù)可知,雖然GPU 的處理速度比ZYNQ 快了1.6 倍,但是在功耗方面,GPU 卻是ZYNQ 的10 倍多。顯然,本文改進的YOLOv4 目標檢測算法充分發(fā)揮了ZYNQ 平臺的優(yōu)勢,非常適合部署在以ZYNQ 為硬件實現(xiàn)平臺的移動端目標檢測環(huán)境中。
本文在改進ShuffleNet V2 和YOLOv4 網(wǎng)絡結構的基礎上,提出一種輕量化的目標檢測算法,并將其部署在GPU 和ZYNQ 平臺上。實驗結果表明,該輕量化算法在GPU 平臺上運行時檢測精度僅減少1.8 個百分點的情況下,降低了模型容量并提高了檢測速度,充分發(fā)揮了ZYNQ 平臺并行高速數(shù)據(jù)處理及低功耗的優(yōu)勢。下一步將繼續(xù)研究目標檢測算法的輕量化改進方法,在盡可能降低計算量、參數(shù)量和模型容量的前提下,進一步提升檢測精度和檢測速度。