張寶朋,康謙澤,李佳萌,郭俊宇,陳少華
(大連交通大學(xué)計(jì)算機(jī)與通信工程學(xué)院,遼寧大連 116028)
目標(biāo)檢測是計(jì)算機(jī)視覺中的重要分支,廣泛應(yīng)用于圖像分割、物體追蹤、關(guān)鍵點(diǎn)檢測等任務(wù),主要分為Two Stage 和One Stage 兩類算法。Two Stage目標(biāo)檢 測算法包括R-CNN[1]、Faster RCNN[2]、Fast-RCNN[3]等算法,先進(jìn)行區(qū)域生成,此區(qū)域通常稱為候選區(qū)域(Region Proposal,RP),即可能包含需要檢測物體的預(yù)選框,再通過卷積神經(jīng)網(wǎng)絡(luò)進(jìn)行分類;One Stage 目標(biāo)檢測算法包括YOLO[4-6]系列、SSD[7]、RetinaNET[8]等算法,不使用RP,通過特征提取網(wǎng)絡(luò)提取圖像特征,直接利用提取的特征預(yù)測物體分類和位置。相較于Two Stage 目標(biāo)檢測算法復(fù)雜的網(wǎng)絡(luò)結(jié)構(gòu),One Stage 目標(biāo)檢測算法具有檢測速度快、模型簡單輕量的特點(diǎn),適合部署在移動端嵌入式設(shè)備上。
YOLOv4 算法是YOLO 系列算法中的第4 版,相較于之前的YOLO 系列算法,在原有YOLO 目標(biāo)檢測架構(gòu)的基礎(chǔ)上,分別在加強(qiáng)特征提取、增強(qiáng)網(wǎng)絡(luò)模型非線性、防止過度擬合等方面做了優(yōu)化。從YOLOv1 到Y(jié)OLOv4[9],YOLO 算法在經(jīng)過數(shù)次迭代之后,逐漸彌補(bǔ)了許多缺陷,同時在保持速度優(yōu)勢的前提下,兼顧了檢測準(zhǔn)確度和實(shí)時性能。
本文在YOLOv4 目標(biāo)檢測算法的基礎(chǔ)上對其網(wǎng)絡(luò)結(jié)構(gòu)進(jìn)行改進(jìn),將CSPDarkNet53 主干特征提取網(wǎng)絡(luò)替換為改進(jìn)的ShuffleNet V2 網(wǎng)絡(luò),并使用深度可分離卷積替換原算法網(wǎng)絡(luò)中的普通卷積,進(jìn)一步降低算法參數(shù)量、計(jì)算量和模型占用空間,使其滿足移動端嵌入式設(shè)備存儲容量小、算力低的要求。
YOLOv4 網(wǎng)絡(luò)結(jié)構(gòu)如圖1 所示,主干特征提取網(wǎng)絡(luò)CSPDarkNet53 結(jié)合了CSPNet[10]和DarkNet53 的優(yōu)點(diǎn),在提高網(wǎng)絡(luò)推理速度和準(zhǔn)確性的同時,又能降低主干網(wǎng)絡(luò)的計(jì)算量。相較于YOLOv3,YOLOv4的頸部網(wǎng)絡(luò)NECK 采用空間金字塔池化(Spatial Pyramid Pooling,SPP)[11]和路徑聚合網(wǎng)絡(luò)(Path Aggregation Network,PANet)的網(wǎng)絡(luò)結(jié)構(gòu)。SPP 可以使得圖片數(shù)據(jù)矩陣以固定大小的格式輸出到Y(jié)OLOv4 的預(yù)測網(wǎng)絡(luò)模塊(Head),避免直接對圖片進(jìn)行剪裁縮放造成數(shù)據(jù)信息丟失,進(jìn)而導(dǎo)致預(yù)測網(wǎng)絡(luò)可信度降低。同時,在提取圖片各維度特征方面,不再使用YOLOv3 算法中的特征金字塔網(wǎng)絡(luò)(Feature Pyramid Networks,F(xiàn)PN),而是采用一種金字塔和倒金字塔并行的PANet 網(wǎng)絡(luò)結(jié)構(gòu)。
圖1 YOLOv4 網(wǎng)絡(luò)結(jié)構(gòu)Fig.1 YOLOv4 network structure
ShuffleNet V2 是一種適合部署在移動端的輕量化網(wǎng)絡(luò)結(jié)構(gòu)。MA 等[12]在相同的硬件實(shí)現(xiàn)平臺上,分別對ShuffleNet V1 和MobileNet V2[13]的執(zhí)行情況進(jìn)行研究,結(jié)合理論分析和實(shí)驗(yàn)數(shù)據(jù)得出以下4 條輕量化網(wǎng)絡(luò)模型設(shè)計(jì)準(zhǔn)則:
1)輸入輸出通道數(shù)相同,則內(nèi)存占用量最小。
2)過多的分組卷積會增加內(nèi)存占用量。
3)多路結(jié)構(gòu)的網(wǎng)絡(luò)分支會降低并行性,應(yīng)盡量減少網(wǎng)絡(luò)分支。
4)合理剪裁元素級運(yùn)算,例如ReLU[14]和Add 函數(shù),可加快模型推理速度。
本文后續(xù)對ShuffleNet V2 和YOLOv4 網(wǎng)絡(luò)結(jié)構(gòu)的改進(jìn)也依據(jù)以上4 條設(shè)計(jì)準(zhǔn)則展開。
ShuffleNet V2 網(wǎng)絡(luò)模型的基本組件(如圖2 所示)大致可分為:1)基本組件1,在特征圖輸入后有一個通道分支(Channel Split)操作,該操作將輸入通道數(shù)為c的特征圖分為c?c′和c′,左邊的分支不做任何操作,右邊的分支包含3 個卷積操作,并且2 個1×1卷積已經(jīng)由ShuffleNet V1 中的分組卷積更換為普通卷積,再將這2 個分支通道中的數(shù)據(jù)用Concat+Channel Shuffle 操作進(jìn)行合并,這樣不僅可以使得該基礎(chǔ)模塊的輸入輸出通道數(shù)一樣,而且避免了Add操作,加快模型了推理速度,最后進(jìn)行通道重組(Channel Shuffle)操作;2)基本組件2,該組件沒有Channel Split 操作,因此輸出通道數(shù)是輸入通道數(shù)的2 倍,左右分支的操作過程和基本組件1 基本一致,此處不再贅述。
圖2 ShuffleNet V2 網(wǎng)絡(luò)模型的基本組件Fig.2 Basic components of ShuffleNet V2 network model
YOLOv4 目標(biāo)檢測算法在采用眾多優(yōu)化策略改進(jìn)自身不足后性能表現(xiàn)優(yōu)異,但在移動端設(shè)備部署目標(biāo)檢測算法的背景下,根據(jù)應(yīng)用環(huán)境的不同,算法不一定需要很高的精確度,但需要較快的預(yù)測速度,在移動端設(shè)備算力及內(nèi)存資源有限的情況下,算法模型的大小也變得尤為重要。顯然,原YOLOv4 算法很難適用于移動端的目標(biāo)檢測設(shè)備。
基于此,本文對YOLOv4 目標(biāo)檢測算法進(jìn)行改進(jìn),具體改進(jìn)工作主要從以下2 個方面展開:
1)改進(jìn)輕量化網(wǎng)絡(luò)模型ShuffleNet V2,使模型在進(jìn)一步剪裁、壓縮和降低計(jì)算量和參數(shù)量的同時,盡可能地使其精度符合預(yù)期要求,并使用改進(jìn)的ShuffleNet V2 網(wǎng)絡(luò)替換原YOLOv4 目標(biāo)檢測算法中的主干特征提取網(wǎng)絡(luò)CSPDarkNet53。
2)剪裁YOLOv4頸部網(wǎng)絡(luò)尾部的CBL+Conv(CBL=Conv+BN+ReLU)結(jié)構(gòu),壓縮模型容量,降低計(jì)算量。
2.2.1 卷積剪裁
在觀察ShuffleNet V2 網(wǎng)絡(luò)模型的基本組件后發(fā)現(xiàn),在組件的單側(cè)分支中,輸入特征首先經(jīng)過一個以普 通1×1 卷 積(Conv1×1)為主的Conv1×1+BN+ReLU 卷積處理模塊,然后進(jìn)入一個DWConv3×3+BN 模塊,其中DWConv3×3 是一個卷積核大小為3的深度可分離卷積,最后進(jìn)入一個普通Conv1×1,也就是說DWConv3×3 的前后各有一個普通的Conv1×1。在一般情況下,在深度可分離卷積前后使用1×1 卷積的目的有兩種,一種是為了升維或者降維,另一種是為了通道信息融合。在ShuffleNet V2 模型設(shè)計(jì)時為了遵循輕量化網(wǎng)絡(luò)模型設(shè)計(jì)準(zhǔn)則中的準(zhǔn)則1,每一分支的卷積層都需要保證輸入輸出通道相同,因此普通的Conv1×1 并不是為了對卷積核的通道數(shù)進(jìn)行降維或者升維操作,而是為了融合通道信息,彌補(bǔ)深度可分離卷積的通道信息融合能力。
根據(jù)以上分析,在每一分支上使用2 個普通的Conv1×1 進(jìn)行通道信息融合略顯冗余,使用1 個Conv1×1 便可以滿足移動端目標(biāo)檢測設(shè)備對精度的要求。因此,將圖3 中虛線部分的普通Conv1×1 剪裁掉。
圖3 ShuffleNet V2 網(wǎng)絡(luò)模型基本組件的1×1 卷積剪裁Fig.3 1×1 convolution clipping in the basic components of ShuffleNet V2 network model
2.2.2 卷積核擴(kuò)大
在卷積神經(jīng)網(wǎng)絡(luò)中,感受野的大小是衡量這個網(wǎng)絡(luò)性能的重要指標(biāo)參數(shù),更大的感受野可以提取到圖片中的更多細(xì)節(jié)特征。根據(jù)文獻(xiàn)[15]得到如下感受野反向計(jì)算公式:
其中:Ri是第i層卷 積層上的感 受野;Ri+1是 第i+1 層上的感受野;Si是第i層的卷積步長(Stride);Ki是第i層的卷積核大小。
根據(jù)式(1)可以得知,感受野的大小和卷積步長和卷積核大小有直接關(guān)系,擴(kuò)大卷積步長和卷積核大小可以有效增大卷積層上的感受野。然而根據(jù)式(2)可以看出,擴(kuò)大卷積步長和卷積核大小都會對卷積輸出產(chǎn)生影響,其中卷積步長的增大對卷積輸出的影響更為明顯。
其中:osize是卷積計(jì)算的輸出值;isize是輸入圖像的矩陣大?。籶是對輸入圖像矩陣高或?qū)捝系难a(bǔ)充(padding)值;Ksize是卷積運(yùn)算中的卷積核大小。由此可見,S的大小對osize的影響很大,S過大會嚴(yán)重影響卷積層對特征圖細(xì)節(jié)信息的提取,甚至完全遺漏掉兩次卷積操作的中間信息。
如圖4 所示,使用一個3×3 的卷積核對一個6×6的輸入特征圖進(jìn)行卷積運(yùn)算操作,其中黑色為參與1 次卷積計(jì)算部分,深灰色為參與2 次卷積計(jì)算部分,白色代表未參與卷積計(jì)算,淺灰色為第1、2 次卷積計(jì)算均有參與,虛線表示padding。在卷積運(yùn)算時:如果Stride 為2,則卷積核大小范圍的邊緣部分?jǐn)?shù)據(jù)參與2 次卷積計(jì)算,這樣既不會造成邊緣部分細(xì)節(jié)特征的丟失,又可以進(jìn)一步加強(qiáng)提取邊緣交叉處不易于提取的特征值;如果卷積操作時Stride 為3,則卷積核大小范圍的邊緣部分?jǐn)?shù)據(jù)僅參與過1 次卷積計(jì)算,即1 次特征值的提取,這樣很容易造成邊緣處特征信息的丟失;如果卷積操作時Stride 為4,則會完全丟失2 次卷積操作間的特征信息。
圖4 不同卷積步長的卷積操作Fig.4 Convolution operations with different convolution strides
由此可見,加大卷積步長和卷積核大小可以有效增加感受野,但是加大卷積步長會導(dǎo)致卷積操作中丟失部分特征信息,因此本文原本決定從擴(kuò)大卷積核的大小入手,對深度可分離卷積進(jìn)行一個卷積核的擴(kuò)張,即將ShuffleNet V2 模型中原來的3×3 卷積核替換為5×5 卷積核,然而大尺寸的卷積核隨之帶來的是更多的參數(shù)量,在CNN 網(wǎng)絡(luò)中參數(shù)量的計(jì)算和輸入特征圖的參數(shù)無關(guān),僅和卷積核的大小、BN 以及偏置有關(guān)。假設(shè)卷積核kernel=(K,S,C,O),其中K、S、C、O分別是卷積操作時卷積核大小、步長、特征圖輸入通道數(shù)、輸出通道數(shù)。卷積操作的參數(shù)量可以根據(jù)式(3)進(jìn)行求解:
將K=5 和K=3 分別代入式(3),在輸入輸出通道數(shù)均相同的情況下,經(jīng)計(jì)算得知K=5 時的參數(shù)量是K=3 時的2.6 倍。因此,本文借鑒文獻(xiàn)[16]方法,采用2 個3×3 卷積核級聯(lián)的方式代替5×5 卷積核,這種方式可以在有效降低計(jì)算量的同時,獲得和5×5 卷積核相同的感受野。簡化式(2),在Stride 為1 且不考慮padding 時得到式(4):
在卷積運(yùn)算輸出方面,假設(shè)isize的大小為9,Ksize的值為5,代入式(4)經(jīng)計(jì)算得出osize的值為5。在同樣情況下,將Ksize的值設(shè)為3,經(jīng)過2 次級聯(lián)的3×3 卷積核運(yùn)算后得出osize的值也是5。同理,在參數(shù)量方面,假定輸入輸出通道的值均為3,分別將K=5 和K=3 代入式(3),經(jīng)計(jì)算可知5×5 卷積操作的參數(shù)量為234,兩個級聯(lián)的3×3 卷積操作的參數(shù)量為180,遠(yuǎn)比一個5×5 卷積操作的參數(shù)量要低很多。
2.2.3 激活函數(shù)替換
Mish 函數(shù)是MISRA 于2019 年提出的一種新型激活函數(shù)[17],函數(shù)表達(dá)式如式(5)所示:
其中:x是由歸一化層傳入的參數(shù)值。
由如圖5 所示的Mish 激活函數(shù)示意圖可知:1)Mish 激活函數(shù)在負(fù)值時并非完全截?cái)?,更好地保證了信息流入;2)Mish 激活函數(shù)無邊界,在左右極限的情況下梯度趨近于1,可避免梯度飽和;3)Mish 激活函數(shù)的梯度下降效果更好,可以盡可能地保證每一個點(diǎn)的平滑?;诖耍疚膶huffleNet V2 網(wǎng)絡(luò)模型中原本的ReLU 函數(shù)替換為Mish 激活函數(shù)。
圖5 Mish 激活函數(shù)示意圖Fig.5 Schematic diagram of Mish activation function
2.2.4 改進(jìn)的ShuffleNet V2 最小基本組件
綜合以上關(guān)于ShuffleNet V2 網(wǎng)絡(luò)模型的改進(jìn)方法,得到新的ShuffleNet V2 網(wǎng)絡(luò)模型最小基本組件,如圖6 所示。
圖6 改進(jìn)的ShuffleNet V2 網(wǎng)絡(luò)模型最小基本組件Fig.6 Minimum basic components of improved ShuffleNet V2 network model
2.3.1 頸部網(wǎng)絡(luò)結(jié)構(gòu)剪裁
通過分析YOLOv4 網(wǎng)絡(luò)結(jié)構(gòu)可知,在其頸部網(wǎng)絡(luò)和YOLO-Head 之間有CBL+Conv 結(jié)構(gòu),然而特征圖在輸入到這一結(jié)構(gòu)之前,就已經(jīng)在頸部網(wǎng)絡(luò)中經(jīng)過了5 次CBL 操作,而且如圖7 所示的CBL 操作中也包含Conv 操作,這樣共有6 次CBL 操作再加1 次Conv,然后輸入到Y(jié)OLO-Head 中進(jìn)行預(yù)測。因此,在頸部網(wǎng)絡(luò)和YOLO-Head 間進(jìn)行1 次CBL+Conv 操作則顯得多余,刪除該操作不僅對后續(xù)的網(wǎng)絡(luò)預(yù)測沒有任何影響,而且還會加快網(wǎng)絡(luò)推理速度。
圖7 CBL 結(jié)構(gòu)組成Fig.7 CBL structure composition
2.3.2 深度可分離卷積替換
通過進(jìn)一步分析YOLOv4 網(wǎng)絡(luò)結(jié)構(gòu)可知,其在頸部網(wǎng)絡(luò)中使用了大量的CBL 結(jié)構(gòu),而由于CBL 基本組成結(jié)構(gòu)為CBL=Conv+BN+Leaky ReLU,因此頸部網(wǎng)絡(luò)中包含了大量的普通卷積運(yùn)算,借鑒文獻(xiàn)[18]研究思想,采用深度可分離卷積代替普通卷積可以大大降低卷積運(yùn)算的參數(shù)量,而在神經(jīng)網(wǎng)絡(luò)中參數(shù)量的多少直接影響了網(wǎng)絡(luò)模型容量的大小和網(wǎng)絡(luò)模型在計(jì)算過程中的浮點(diǎn)數(shù)計(jì)算量(Floating Point Operations Per second,F(xiàn)LOPs)。普通卷積和深度可分離卷積示意圖如圖8、圖9 所示。由圖8、圖9可以看出,普通卷積是使用4 個3×3×3 的Filter(過濾器)對輸入特征圖進(jìn)行卷積操作,先將特征圖的每個Channel(通道)和對應(yīng)的Kernel(卷積核)做卷積運(yùn)算,然后將3 個Channel 的運(yùn)算結(jié)果融合成一個Map(圖層)輸出,而深度可分離卷積是將以上操作步驟分解為兩部分完成,首先使用3 個3×3×1 的Filter 對輸入特征圖的每個Channel 分別進(jìn)行卷積得到由3 個Map 組成的特征圖,這一過程稱為逐通道卷積,然后再用4 個1×1×1 的Filter 對上一步的輸出特征圖進(jìn)行卷積運(yùn)算,最后輸出由4 個Map 組成的特征圖,這一過程稱為逐點(diǎn)卷積。逐通道卷積和逐點(diǎn)卷積經(jīng)過以上運(yùn)算流程共同組成深度可分離卷積[19]。
圖8 普通卷積示意圖Fig.8 Schematic diagram of ordinary convolution
圖9 深度可分離卷積示意圖Fig.9 Schematic diagram of depthwise separable convolution
由圖9 可以分析得出深度可分離卷積的參數(shù)量計(jì)算公式:
根據(jù)式(3)化簡后的深度可分離卷積參數(shù)量計(jì)算如下:
因?yàn)樵谥鹜ǖ谰矸e計(jì)算時,每個Filter 僅包含1 個Kernel,而普通 卷積的每個Filter 包 含3 個Kernel,相當(dāng)于逐通道卷積時的Cdw=1,普通卷積和逐點(diǎn)卷積時Cpw=Cconv=Cinput,則深度可分離卷積和普通卷積的參數(shù)量比值[20]計(jì)算如下:
將圖8、圖9 的Filter 中卷積核大小和輸入輸出通道數(shù)代入式(6)、式(7)中可知:在普通卷積的情況下計(jì)算參數(shù)量Pconv為108,在深度可分離卷積的情況下計(jì)算參數(shù)量Pdw-conv為39。
假定輸出特征層的寬和高分別為wout和hout,那么普通卷積和深度可分離卷積的計(jì)算量公式如式(9)、式(10)所示:
經(jīng)化簡后兩者的比值如下:
由此可知,將YOLOv4 頸部網(wǎng)絡(luò)中的普通卷積全部替換為深度可分離卷積能夠直觀有效地降低模型參數(shù)量和計(jì)算量。
2.3.3 改進(jìn)的網(wǎng)絡(luò)結(jié)構(gòu)
在使用卷積剪裁、擴(kuò)大卷積核、替換深度可分離卷積等方式對ShuffleNet V2、YOLOv4 網(wǎng)絡(luò)結(jié)構(gòu)進(jìn)行輕量化改進(jìn)后得到改進(jìn)的YOLOv4 網(wǎng)絡(luò)結(jié)構(gòu),如圖10 所示。
圖10 改進(jìn)的YOLOv4 網(wǎng)絡(luò)結(jié)構(gòu)Fig.10 Improved YOLOv4 network structure
選用PC 和ZYNQ 7020 開發(fā)板卡為硬件實(shí)現(xiàn)平臺,PC 的硬件配置CPU 為AMD R5 4600H,GPU 為GTX 1660,ZYNQ 平臺為ALINX 公司的AX7020 型開發(fā)板,詳細(xì)的邏輯資源此處不再贅述。實(shí)驗(yàn)數(shù)據(jù)集來自天津大學(xué)機(jī)器學(xué)習(xí)和數(shù)據(jù)挖掘?qū)嶒?yàn)室開源的VisDrone 2020 數(shù)據(jù)集[21],該數(shù)據(jù)集由航拍無人機(jī)捕獲收集,橫跨中國多個城市的市內(nèi)及郊區(qū)環(huán)境,包含豐富的視頻及圖片數(shù)據(jù)。
3.1.1 ShuffleNet V2 改進(jìn)實(shí)驗(yàn)對比
針對改進(jìn)的ShuffleNet V2 網(wǎng)絡(luò)結(jié)構(gòu)進(jìn)行目標(biāo)分類實(shí)驗(yàn),得出如表1 所示的ShuffleNet V2 消融實(shí)驗(yàn)對比數(shù)據(jù),其中剪裁普通Conv1×1 結(jié)構(gòu)后的網(wǎng)絡(luò)命名為ShuffleNet_lit,擴(kuò)大卷積核后的網(wǎng)絡(luò)命名為ShuffleNet_2DW,替換激活函數(shù)后的網(wǎng)絡(luò)命名為ShuffleNet_M。
由表1 數(shù)據(jù)可知,除ShuffleNet_lit 外,ShuffleNet_M和ShuffleNet_2DW 相較于ShuffleNet V2 都提高了Top-1 準(zhǔn)確率,其中ShuffleNet_2DW 提升效果更顯著,但是這兩個網(wǎng)絡(luò)在提高檢測精度的同時也帶來了FLOPs、參數(shù)量及模型容量的增加。改進(jìn)的ShuffleNet V2 網(wǎng)絡(luò)的檢測精度較原網(wǎng)絡(luò)有了顯著提高,并有效降低了原網(wǎng)絡(luò)的計(jì)算量、參數(shù)量和模型容量。
表1 ShuffleNet V2 消融實(shí)驗(yàn)數(shù)據(jù)對比Table 1 Comparison of ShuffleNet V2 ablation experimental data
3.1.2 YOLOv4 改進(jìn)實(shí)驗(yàn)對比
針對改進(jìn)的YOLOv4 網(wǎng)絡(luò)結(jié)構(gòu)進(jìn)行目標(biāo)分類實(shí)驗(yàn),得出如表2 所示的YOLOv4 消融實(shí)驗(yàn)對比數(shù)據(jù),其中對頸部網(wǎng)絡(luò)剪裁后的網(wǎng)絡(luò)命名為YOLOv4_lit,替換深度可分離卷積的網(wǎng)絡(luò)命名為YOLOv4_DW。
表2 YOLOv4 消融實(shí)驗(yàn)數(shù)據(jù)對比Table 2 Comparison of YOLOv4 ablation experimental data
由表2 數(shù)據(jù)可知,兩種改進(jìn)方式分別對YOLOv4網(wǎng)絡(luò)的FLOPs、參數(shù)量和模型容量做了不同程度上的壓縮,其中采用深度可分離卷積代替普通卷積方式改進(jìn)的YOLOv4_DW 網(wǎng)絡(luò)效果更明顯。
將YOLOv4 算法、改進(jìn) 的YOLOv4 算法、文獻(xiàn)[22]算法和YOLOv5 算法[23]在相同軟硬件平臺和VisDrone 2020 數(shù)據(jù)集上進(jìn)行目標(biāo)檢測實(shí)驗(yàn),輸入圖片固定為800×800 像素,得到的平均精度均值(mean Average Precision,mAP)、檢測速度和模型容量結(jié)果如表3 所示。4 種算法在相同GPU 平臺和VisDrone 2020 數(shù)據(jù)集上的圖像目標(biāo)檢測實(shí)驗(yàn)可視化結(jié)果如圖11~圖14 所示。
圖11 YOLOv4 算法在VisDrone 2020 數(shù)據(jù)集上的圖像目標(biāo)檢測結(jié)果Fig.11 Image target detection results of YOLOv4 algorithm on VisDrone 2020 dataset
圖12 改進(jìn)的YOLOv4 算法在VisDrone 2020 數(shù)據(jù)集上的圖像目標(biāo)檢測結(jié)果Fig.12 Image target detection results of improved YOLOv4 algorithm on VisDrone 2020 dataset
圖13 文獻(xiàn)[22]算法在VisDrone 2020 數(shù)據(jù)集上的圖像目標(biāo)檢測結(jié)果Fig.13 Image target detection results of the algorithm in reference[22]on VisDrone 2020 dataset
圖14 YOLOv5 算法在VisDrone 2020 數(shù)據(jù)集上的圖像目標(biāo)檢測結(jié)果Fig.14 Image target detection results of YOLOv5 algorithm on VisDrone 2020 dataset
表3 目標(biāo)檢測算法性能對比Table 3 Performance comparison of target detection algorithms
由表3 和圖11、圖12 和圖13 檢測結(jié)果可知,YOLOv4 算法、改進(jìn)的YOLOv4 算法和文獻(xiàn)[22]算法在VisDrone2020 數(shù)據(jù)集上具有大致相同的檢測結(jié)果,但是改進(jìn)的YOLOv4 算法相較于YOLOv4 算法,在mAP 上降低了1.8 個百分點(diǎn),檢測速度卻提高了27%,模型容量降低了23.7%,相較于文獻(xiàn)[22]算法,在mAP 上降低了0.5 個百分點(diǎn),模型容量增加了13%,但運(yùn)行速度卻提高了18.75%。
由表3 和圖14 檢測結(jié)果可知,YOLO5 算法在檢測速度和模型容量上均比改進(jìn)的YOLOv4 算法有著極大的提高,但是在mAP 上卻比改進(jìn)的YOLOv4 算法降低了7.9 個百分點(diǎn),而且對比圖12 和圖14 可以看出,YOLO5 算法對小目標(biāo)的檢測效果并不理想,甚至有些小目標(biāo)未檢測到,不適用于目標(biāo)較多、目標(biāo)尺度不均的復(fù)雜檢測環(huán)境。
使用改進(jìn)的YOLOv4 目標(biāo)檢測算法分別在GPU平臺和ZYNQ 平臺上進(jìn)行目標(biāo)檢測實(shí)驗(yàn),結(jié)果如表4所示,這種縱向?qū)Ρ葘?shí)驗(yàn)主要是為了衡量在相同功耗下,該算法能否發(fā)揮ZYNQ 功耗低、數(shù)據(jù)并行處理能力強(qiáng)的優(yōu)勢。改進(jìn)的YOLOv4 算法在ZYNQ 平臺和VisDrone 2020 數(shù)據(jù)集上的圖像目標(biāo)檢測可視化結(jié)果,如圖15 所示。
表4 改進(jìn)的YOLOv4 算法在不同硬件平臺上的性能對比Table 4 Performance comparison of the improved YOLOv4 algorithm on different hardware platforms
對比表4 和圖12、圖15 中的數(shù)據(jù)及檢測結(jié)果可知,改進(jìn)的YOLOv4 算法在GPU 平臺上的檢測速度更快,但是由于該縱向?qū)Ρ葘?shí)驗(yàn)并不是為了證明GPU 和ZYNQ 檢測速度,而是通過對比兩者的功耗比,即處理一張圖片所消耗的功率,從而驗(yàn)證改進(jìn)的YOLOv4 算法能否發(fā)揮出ZYNQ 在處理任務(wù)時既速度快又功耗低的優(yōu)勢。通過對比和分析表4 中數(shù)據(jù)可知,雖然GPU 的處理速度比ZYNQ 快了1.6 倍,但是在功耗方面,GPU 卻是ZYNQ 的10 倍多。顯然,本文改進(jìn)的YOLOv4 目標(biāo)檢測算法充分發(fā)揮了ZYNQ 平臺的優(yōu)勢,非常適合部署在以ZYNQ 為硬件實(shí)現(xiàn)平臺的移動端目標(biāo)檢測環(huán)境中。
本文在改進(jìn)ShuffleNet V2 和YOLOv4 網(wǎng)絡(luò)結(jié)構(gòu)的基礎(chǔ)上,提出一種輕量化的目標(biāo)檢測算法,并將其部署在GPU 和ZYNQ 平臺上。實(shí)驗(yàn)結(jié)果表明,該輕量化算法在GPU 平臺上運(yùn)行時檢測精度僅減少1.8 個百分點(diǎn)的情況下,降低了模型容量并提高了檢測速度,充分發(fā)揮了ZYNQ 平臺并行高速數(shù)據(jù)處理及低功耗的優(yōu)勢。下一步將繼續(xù)研究目標(biāo)檢測算法的輕量化改進(jìn)方法,在盡可能降低計(jì)算量、參數(shù)量和模型容量的前提下,進(jìn)一步提升檢測精度和檢測速度。