陳海燕,賈明明,趙文力,王嬋飛
(蘭州理工大學(xué) 計(jì)算機(jī)與通信學(xué)院,蘭州 730050)
高原鼠兔作為青藏高原生態(tài)系統(tǒng)的關(guān)鍵物種,對維持高原草地的生態(tài)平衡起著重要作用[1-3]。用人工智能的方法監(jiān)測、統(tǒng)計(jì)其種群密度可以節(jié)省大量財(cái)力、人力以及物力[4]。但這類方法中的智能檢測設(shè)備規(guī)模比較大,一旦部署完成將不易調(diào)整,因此迫切得需要一種移動(dòng)性強(qiáng)的便攜式目標(biāo)檢測設(shè)備實(shí)現(xiàn)對高原鼠兔的隨機(jī)監(jiān)測。
近年來,隨著嵌入式領(lǐng)域的技術(shù)進(jìn)步,NVIDIA Jetson TX2因具有便攜性與低功耗的特點(diǎn)被廣泛應(yīng)用于無人機(jī)檢測、室內(nèi)監(jiān)測等場景[5-6]。Rabah 等[5]將一階段的目標(biāo)檢測方法SSD(Single Shot Multi Box Detector)作為基礎(chǔ)模型,并將其部署到嵌入式設(shè)備Jetson TX2 中,實(shí)現(xiàn)了對地面目標(biāo)的檢測與跟蹤。Cai 等[6]將一階段的目標(biāo)檢測模型作為基礎(chǔ)模型,通過重新設(shè)計(jì)主干網(wǎng)絡(luò),增強(qiáng)了模型的特征表達(dá)能力,該改進(jìn)模型部署到Jetson TX2中,能實(shí)現(xiàn)對魚池中魚類的目標(biāo)檢測。上述方法表明:采用嵌入式Jetson TX2 作為便攜式的目標(biāo)檢測設(shè)備能夠?qū)崿F(xiàn)不同場景的目標(biāo)檢測;但上述方法在目標(biāo)檢測模型部署時(shí)未對模型做輕量化處理,導(dǎo)致檢測設(shè)備能耗高、檢測速度慢。針對高原鼠兔目標(biāo)檢測問題,陳海燕等[7]通過語義分割模型獲得感興趣區(qū)域的位置,實(shí)現(xiàn)了準(zhǔn)確檢測,召回率達(dá)到了95%;但該模型相較于一階段的檢測模型有更深的網(wǎng)絡(luò),引入了更多參數(shù),并不適用在嵌入式設(shè)備上部署。
本文以一階段的YOLOv3(You Only Look Once version 3)模型為基礎(chǔ)目標(biāo)檢測模型,為降低模型的網(wǎng)絡(luò)深度,使用輕量級的MobileNet[8]替 換YOLOv3 的主干網(wǎng)絡(luò)DarkNet53,再利用裁剪、微調(diào)和Tensor RT 加速的方法進(jìn)一步輕量化目標(biāo)檢測模型,并部署到Jetson TX2。
本文目標(biāo)檢測模型結(jié)構(gòu)如圖1 所示:由輸入模塊、主干網(wǎng)絡(luò)(MobileNet)、多尺度特征融合模塊以及分類與回歸模塊構(gòu)成。輸入模塊實(shí)現(xiàn)對高原鼠兔圖像的預(yù)處理;主干網(wǎng)絡(luò)提取輸入圖像中目標(biāo)的特征信息;多尺度特征融合模塊實(shí)現(xiàn)主干網(wǎng)絡(luò)中不同尺度特征圖的融合,增強(qiáng)用于檢測的特征;分類與回歸模塊實(shí)現(xiàn)對目標(biāo)定位和分類。
圖1 MobileNet網(wǎng)絡(luò)框架Fig.1 MobileNet network framework
本文以YOLOv3[9]目標(biāo)檢測模型為基礎(chǔ)模型,YOLOv3 的主干網(wǎng)絡(luò)DarkNet53 由53 層標(biāo)準(zhǔn)卷積構(gòu)成,具有較強(qiáng)的特征提取能力,但也帶來大量浮點(diǎn)運(yùn)算[10]。Howard 等[8]提出的MobileNet 由28 層深度可分離卷積(包括深度卷積與逐點(diǎn)卷積兩部分)構(gòu)成,基本卷積單元如圖2(a)。深度卷積的作用是利用特征圖與卷積核通道的對應(yīng)關(guān)系降低卷積的計(jì)算量,逐點(diǎn)卷積的作用是對深度卷積輸出的特征圖作特征融合,從卷積層數(shù)與卷積計(jì)算方式兩方面降低浮點(diǎn)運(yùn)算[8]。為降低模型運(yùn)算量,本文利用MobileNet 替換DarkNet53 作為本文目標(biāo)檢測模型的主干網(wǎng)絡(luò),參數(shù)量在理論上減少了8/9~9/10。
替換YOLOv3 的主干網(wǎng)絡(luò)在降低主干網(wǎng)絡(luò)參數(shù)量的同時(shí),也導(dǎo)致主干網(wǎng)絡(luò)的特征表達(dá)能力降低。文獻(xiàn)[11]中的ResNet 證明,使用1×1、3×3、1×1 堆疊卷積作為基本卷積單元能夠增強(qiáng)特征圖的特征表達(dá)能力,文獻(xiàn)[12]證明在堆疊卷積結(jié)構(gòu)中,先提升特征圖的通道維度、再降低特征圖的通道維度,能夠減少特征圖信息的丟失。為提高本文目標(biāo)檢測模型主干網(wǎng)絡(luò)特征圖的表達(dá)能力,借鑒文獻(xiàn)[11-12]的思想,在深度卷積之前添加一層1×1 的標(biāo)準(zhǔn)卷積,并提升特征圖的通道維度,具體如圖2(b)所示。其中:BN(Batch Normalization)為批歸一化;激活函數(shù)為修正線性單元(Rectified Linear Unit,ReLU);DWconv 表示深度卷積,Gconv 表示逐點(diǎn)群卷積,conv表示標(biāo)準(zhǔn)卷積;CSO 表示通道混洗操作(Channel Shuffle Operation)[13]。
圖2 基本卷積單元Fig.2 Basic convolution unit
特征圖的通道數(shù)較多時(shí),1×1 的標(biāo)準(zhǔn)卷積會(huì)帶來較多的運(yùn)算量,文獻(xiàn)[14]中證明分組卷積可以降低卷積計(jì)算量,因此用1×1 的逐點(diǎn)群卷積(1×1Gconv)代替1×1 的標(biāo)準(zhǔn)卷積對特征圖的通道進(jìn)行分組,達(dá)到降低1×1 的標(biāo)準(zhǔn)卷積計(jì)算量的同時(shí)增強(qiáng)主干網(wǎng)絡(luò)特征圖的特征表達(dá)能力的目的。逐點(diǎn)群卷積也會(huì)帶來輸出特征圖信息較為單一的問題,因此在逐點(diǎn)群卷積后做通道混洗操作,通過重新組合逐點(diǎn)群卷積的輸出特征圖的通道,增強(qiáng)特征圖的信息交互能力,提高主干網(wǎng)絡(luò)的特征表達(dá)能力。CSO 操作過程如圖3 所示。
圖3 通道混洗操作Fig.3 Channel shuffle operation
對構(gòu)建的目標(biāo)檢測模型按照2.3 節(jié)中的方法訓(xùn)練,得到高原鼠兔目標(biāo)檢測模型,并對模型做卷積通道剪枝。首先對需要做剪枝的目標(biāo)檢測模型作參數(shù)分析,獲得該模型需要剪枝的卷積層名稱;其次采用文獻(xiàn)[15]提出的方法評定卷積核的重要程度,按重要程度對卷積核進(jìn)行排序,并按比例(0.1、0.2、0.3、0.4、0.5、0.6、0.7、0.8、0.9)丟棄每層卷積所對應(yīng)的卷積核,進(jìn)而裁剪對應(yīng)的通道,記錄裁剪后的目標(biāo)檢測模型在測試集中的精度損失,記為敏感度信息;最后用需要做剪枝的目標(biāo)檢測模型作為微調(diào)訓(xùn)練的預(yù)訓(xùn)練權(quán)重,并使用記錄的敏感度信息輔助模型的裁剪、微調(diào)訓(xùn)練,通過反復(fù)測試,確定一組裁剪率(確定每層卷積所對應(yīng)的卷積核裁剪比例),對需要裁剪的卷積層按確定的裁剪比例進(jìn)行剪枝并按2.3節(jié)中的方法作微調(diào)訓(xùn)練,得到用于Jetson TX2 上部署的目標(biāo)檢測模型。
模型剪枝過程如圖4,其中參數(shù)A 表示輸入特征圖,C 表示卷積核。先計(jì)算C 中每個(gè)卷積核的所有權(quán)值的絕對值之和,并按大小排序,若C 中虛線部分的所有權(quán)值的絕對值之和最小,則丟棄該卷積核,而經(jīng)過A 與C 的卷積運(yùn)算,B 中的虛線通道也將被丟棄。
圖4 剪枝原理示意圖Fig.4 Schematic diagram of pruning principle
用于訓(xùn)練高原鼠兔目標(biāo)檢測模型的實(shí)驗(yàn)數(shù)據(jù)采用課題組在青藏高原東北部甘南草原拍攝的高原鼠兔圖像,圖像像素為:5 742×3 648。因高原鼠兔的警惕性高,近距離采集目標(biāo)難度較大,所以拍攝距離遠(yuǎn),導(dǎo)致采集的圖像中高原鼠兔目標(biāo)較小。對部分高原鼠兔圖像進(jìn)行交疊切分,獲得原圖像的6 部分子圖像,切分后子圖像像素大小為:608×608,手動(dòng)將含有高原鼠兔目標(biāo)的子圖像挑選出來,不做壓縮處理,使其組成新的、背景不同的高原鼠兔圖像,作為原始數(shù)據(jù)集的一部分。對組成的新數(shù)據(jù)集作清洗操作,采用文獻(xiàn)[16]中定義的模糊度和文獻(xiàn)[17]中定義的相似度的概念,去除模糊度、相似度高于0.8 的高原鼠兔圖像,避免訓(xùn)練過程中出現(xiàn)過擬合現(xiàn)象。數(shù)據(jù)集格式為VOC(Visual Object Classes),經(jīng)數(shù)據(jù)預(yù)處理之后共3 520 幅高原鼠兔圖像,將其以9∶1 的比例隨機(jī)劃分成訓(xùn)練集與測試集。
實(shí)驗(yàn)環(huán)境:掛載V100 處理器的Linux18.4 操作系統(tǒng),深度學(xué)習(xí)框架是Paddle。網(wǎng)絡(luò)參數(shù)配置:優(yōu)化器為隨機(jī)梯度下降(Stochastic Gradient Descent,SGD),動(dòng)量設(shè)置為0.9,總共訓(xùn)練270 epoch。在1~10 epoch 學(xué)習(xí)率從0 線性增長到0.000 375,在210、250 epoch 處學(xué)習(xí)率分別開始衰減為原來的1/10 和1/100,Batch_size 為24。
測試實(shí)驗(yàn)環(huán)境:NVIDIA Jetson TX2、Quad ARM A57/2 MB L2 處理器、8 GB RAM、Jetpack4.4 包、Python 3、Numpy、Matplotlib、OpenCV4.1.1、CUDA10.2、CUDNN8.0、Paddle、Paddle Inference 預(yù)測庫。
利用K 均值聚類算法對高原鼠兔圖像數(shù)據(jù)集進(jìn)行105次聚類分析,計(jì)算適合高原鼠兔目標(biāo)大小的錨框,取錨框的個(gè)數(shù)為9,分別為:(28,29),(29,43),(42,45),(67,48),(49,69),(91,63),(72,97),(121,83),(137,145)。
本文模型訓(xùn)練分兩個(gè)階段,模型訓(xùn)練前采用隨機(jī)擴(kuò)張、圖像裁剪、隨機(jī)圖像調(diào)整、隨機(jī)水平翻轉(zhuǎn)、圖像像素變換和圖像疊加等方法對用于訓(xùn)練的高原鼠兔圖像數(shù)據(jù)進(jìn)行數(shù)據(jù)增強(qiáng)。第一階段在數(shù)據(jù)增強(qiáng)后的高原鼠兔數(shù)據(jù)集上訓(xùn)練目標(biāo)檢測模型;第二階段微調(diào)裁剪后的目標(biāo)檢測模型。在第二階段訓(xùn)練中,裁剪率設(shè)置為0.844,其余參數(shù)設(shè)置與第一階段保持一致。敏感度計(jì)算結(jié)果如圖5 所示。
圖5 敏感度分析結(jié)果Fig.5 Sensitivity analysis results
將微調(diào)訓(xùn)練后的高原鼠兔目標(biāo)檢測模型部署到嵌入式設(shè)備Jetson TX2 的方案如圖6 所示,包含兩個(gè)步驟:第一步,微調(diào)之后的高原鼠兔目標(biāo)檢測模型轉(zhuǎn)為部署模型文件(包括模型結(jié)構(gòu)文件、參數(shù)權(quán)重文件和網(wǎng)絡(luò)配置文件);第二步,對嵌入式Jetson TX2 做基礎(chǔ)環(huán)境配置并引入深度學(xué)習(xí)框架和C++預(yù)測庫。在預(yù)測庫中設(shè)置配置文件,確定使用CPU 或GPU 作前向計(jì)算并為其分配確定顯存、開啟內(nèi)存優(yōu)化和Tensor RT 加速,根據(jù)配置文件完成模型預(yù)測器(Predictor)加載,通過設(shè)置輸入將預(yù)測數(shù)據(jù)讀入并作數(shù)據(jù)預(yù)處理進(jìn)而執(zhí)行Predictor,將結(jié)果輸出。
圖6 模型部署Fig.6 Model deployment
為了評價(jià)本文模型的性能,采用平均精度(Average Precision,AP)、幀率、模型大小作為評價(jià)指標(biāo),AP 是P-R(Precision-Recall)曲線與坐標(biāo)軸圍成的面積,計(jì)算如式(1)所示,其中交并比值取0.5。
其中:Pinterp()R為從P-R 曲線中取n個(gè)不同等距召回率R區(qū)間時(shí),當(dāng)召回率滿足≥R時(shí)的精度最大值,為獲得精度最大值時(shí)的召回率;TP(True Positive)、FP(False Positive)和FN(False Negative)分別是真正例、假正例和假負(fù)例。P-R 曲線如圖7 所示。
圖7 模型裁剪前后的P-R曲線Fig.7 P-R curves before and after model pruning
接著驗(yàn)證分組數(shù)對本文方法的影響。由文獻(xiàn)[13]證明可知,模型的運(yùn)算量會(huì)隨著分組數(shù)的增多而減少,但分組數(shù)的增多也會(huì)使計(jì)算機(jī)存儲(chǔ)訪問效率降低,增加運(yùn)算時(shí)間。因此本組實(shí)驗(yàn)將分組數(shù)設(shè)置為1、2、3 和4,在不大幅增加運(yùn)算時(shí)間的基礎(chǔ)上,驗(yàn)證分組數(shù)對本文模型AP 的影響,結(jié)果如表1 所示。從表1 可知,不同分組情況下,本文方法對高原鼠兔目標(biāo)檢測的平均精度相差不大,網(wǎng)絡(luò)的分組數(shù)取3 時(shí)AP 值最大,因此,在后續(xù)研究中設(shè)置網(wǎng)絡(luò)的分組數(shù)為3。
表1 分組數(shù)對本文方法AP的影響 單位:%Tab.1 Influence of number of groups on AP of proposed method unit:%
為驗(yàn)證逐點(diǎn)群卷積、通道混洗分別對本文方法的影響,表2 給出了在YOLOv3 主干網(wǎng)絡(luò)替換之后增加不同模塊時(shí)的AP 值。由表2 可知,當(dāng)添加逐點(diǎn)群卷積操作之后,模型的平均精度有所降低,原因是分組阻礙了特征圖通道之間的信息流通;而對特征圖通道之間的信息進(jìn)行混洗操作可以提升模型的性能。
表2 群卷積、通道混洗對本文方法AP的影響 單位:%Tab.2 Influence of group convolution and channel shuffle on AP of proposed method unit:%
表3 為不同裁剪比例下的模型性能指標(biāo)值。其中浮點(diǎn)運(yùn)算數(shù)(FLOating Point operations,F(xiàn)LOPs)指標(biāo)用于衡量模型的復(fù)雜程度。在本文方法中,模型裁剪前的浮點(diǎn)運(yùn)算數(shù)為:24 106 944,從表3 可知,在不同的裁剪比例下,模型的浮點(diǎn)運(yùn)算數(shù)都從千萬級別降到了百萬級別,有明顯的改變。隨著裁剪率的增大,浮點(diǎn)運(yùn)算數(shù)呈遞減規(guī)律,模型占用的存儲(chǔ)空間變小,但模型的平均精度變化不大。當(dāng)裁剪比例取0.844 時(shí),微調(diào)之后模型的AP 值最大。
表3 不同裁剪率下的模型性能指標(biāo)值Tab.3 Model performance indicator values under different pruning rates
表4 對比了一階段主流模型與本文模型在Jetson TX2 上部署后的檢測結(jié)果?;A(chǔ)模型YOLOv3 在在剪枝后獲得了98.34%的AP 值,占用了156 MB 的內(nèi)存,每秒檢測幀數(shù)(Frames per Second,F(xiàn)PS)為13。與剪枝前的基礎(chǔ)模型YOLOv3 相比,在AP 值降低0.07 個(gè)百分點(diǎn)的基礎(chǔ)上,模型大小由235 MB 降低為156 MB,釋放了79 MB 的內(nèi)存,且檢測速度由5 FPS 變?yōu)?3 FPS,有160%的提升。采用剪枝的方法,雖然可以裁剪掉一些對模型不重要的特征圖通道,減少模型參數(shù)與運(yùn)算量,提升模型的檢測速度;但因YOLOv3 具有較多的殘差網(wǎng)絡(luò),帶來較大的運(yùn)算量,致使YOLOv3 對Jetson TX2 不夠友好,檢測速度較低。
表4 不同高原鼠兔目標(biāo)檢測模型結(jié)果對比Tab.4 Result comparison of different Ochotona curzoniae target detection models
YOLOv3_MobileNet 模型的AP 值、模型大小、檢測速度分別為97.30%、92.8 MB、14 FPS,與剪枝前YOLOv3相比,在AP值降低1.11 個(gè)百分點(diǎn)的基礎(chǔ)上,模型大小壓縮了60.5%,檢測速度提升了180%,模型性能有一定的提升。因?yàn)橥ㄟ^替換基礎(chǔ)模型YOLOv3 的主干網(wǎng)絡(luò),降低了網(wǎng)絡(luò)深度,減少了模型參數(shù)量與運(yùn)算量,因而提升了檢測速度。在替換主干網(wǎng)絡(luò)之后,YOLOv3_MobileNet 模型的AP 值并沒有隨著網(wǎng)絡(luò)層的精簡而大幅降低,這是因?yàn)楸疚姆椒▽OLOv3 的主干網(wǎng)絡(luò)的基本卷積單元做了以下操作:首先對輸入特征圖通道維度進(jìn)行升維;其次對通道數(shù)進(jìn)行分組卷積,通道混洗;最后對深度卷積輸出特征圖通道維度進(jìn)行降維。這樣的處理方式減少了特征圖信息的丟失,提升了主干網(wǎng)絡(luò)特征表達(dá)能力。
本文模型是通過對YOLOv3_MobileNet 模型進(jìn)行剪枝得到的,在占用Jetson TX2 14 MB 內(nèi)存的基礎(chǔ)上,最終AP 值達(dá)到了97.36%,檢測速度為36 FPS。與剪枝前的原YOLOv3 相比,在平均檢測精度僅降低1.05 個(gè)百分點(diǎn)的基礎(chǔ)上,節(jié)省了220.12 MB 的內(nèi)存空間,模型大小壓縮了93.67%,檢測速度提升了620%;相較于輕量級模型YOLOv3_tiny 和SSD_MobileNet_v1,本文模型在模型大小、檢測精度、檢測速度這3 個(gè)指標(biāo)中,均有明顯優(yōu)勢;相較文獻(xiàn)[19]中的MSFAN(輸入圖像:416×416,檢測速度:38 FPS,模型大?。?2.43 MB)方法,雖然檢測速度降低了2 FPS,但節(jié)省了47.55 MB的存儲(chǔ)空間;檢測速度降低的原因?yàn)楸疚乃斎氲膱D像尺寸更大,在處理過程中需要更多的時(shí)間。
圖8(a)為對采集到的不同季節(jié)的高原鼠兔圖像的目標(biāo)檢測的結(jié)果;圖8(b)為便攜式檢測設(shè)備對高原鼠兔視頻的目標(biāo)檢測的結(jié)果。對高原鼠兔圖像和視頻的目標(biāo)檢測結(jié)果表明該便攜式檢測設(shè)備能夠滿足對自然場景下高原鼠兔目標(biāo)的準(zhǔn)確檢測。
圖8 對獲取的高原鼠兔圖像與視頻的目標(biāo)檢測結(jié)果Fig.8 Target detection results in Ochotona curzoniae images and videos
本文提出一種對高原鼠兔目標(biāo)進(jìn)行檢測的便攜式目標(biāo)檢測方法??紤]到該方法中的便攜式檢測設(shè)備具有弱存儲(chǔ)、功耗低的特點(diǎn),本文采用一階段目標(biāo)檢測模型作為基礎(chǔ),首先替換模型主干網(wǎng)絡(luò),減少主干網(wǎng)絡(luò)層數(shù),降低模型參數(shù)量;其次采用堆疊卷積、逆殘差卷積的方法構(gòu)建主干網(wǎng)絡(luò)基本卷積單元,減少主干網(wǎng)絡(luò)特征圖的信息丟失,增強(qiáng)主干網(wǎng)絡(luò)的特征表達(dá)能力,提高目標(biāo)檢測模型的檢測能力;最后采用剪枝的方法對訓(xùn)練得到的目標(biāo)檢測模型進(jìn)行剪枝,丟棄模型中不重要的通道,進(jìn)一步輕量化模型,減少模型的運(yùn)算量,提高模型的正向推理速度;最后將模型部署在Jetson TX2 中,在NVIDIA 提供的Tensor Rt 助推下,實(shí)現(xiàn)對目標(biāo)的實(shí)時(shí)檢測。實(shí)驗(yàn)表明,該方法具有較好的魯棒性,檢測速度為36 FPS,檢測平均準(zhǔn)確率為97.36%,模型大小變?yōu)樵瓉淼?/16,優(yōu)于傳統(tǒng)的算法。輕量化后的目標(biāo)檢測模型可以克服便攜式檢測設(shè)備弱存儲(chǔ)、低功耗的缺陷,實(shí)現(xiàn)對自然場景下高原鼠兔目標(biāo)的實(shí)時(shí)檢測。
本文方法的不足之處是雖然通過構(gòu)建輕量化的目標(biāo)檢測模型來降低模型的參數(shù)量、提升模型的檢測速度,但最終的檢測速度是在單精度浮點(diǎn)模式(FP32)下測試的,相較于半精度浮點(diǎn)模式(FP16)和整型模式(int8),檢測速度較慢。在后續(xù)的研究中,將考慮便攜式檢測設(shè)備搭載在無人機(jī)平臺中,驗(yàn)證在無人機(jī)運(yùn)動(dòng)的狀態(tài)下,本文模型能否滿足對高原鼠兔目標(biāo)的實(shí)時(shí)檢測問題。因此,將考慮對模型作量化操作,進(jìn)一步提升檢測速度。