田祥瑞,賈茚鈞,羅 欣,尹 婕,徐 鵬
(1.南京航空航天大學 自動化學院,南京 210016;2.中國電子科技南湖研究院,浙江 嘉興 314001)
無人機具有成本低、靈活性高等優點,通過無人機航拍,可以彌補衛星和載人航空遙感技術對近地低空小目標進行偵測監控的不足[1]。因此無人機在民用領域和軍事領域得到了廣泛應用。在軍事領域,無人機智能識別可以用于對地面軍事目標進行偵察跟蹤,也可以負載武器對目標進行自主打擊。無人機通過識別算法發現目標后,保持安全距離對目標進行隱蔽跟蹤偵察,和傳統的使用車輛或人員進行跟蹤的方式相比,無人機可以實現低成本、零傷亡的智能識別。在民用領域,融合目標識別算法后,無人機可以用于監測農作物生長情況,搶險救災,對被困人員進行搜救,加快救援速度,在罪犯逃逸時也可以使用無人機進行追蹤搜捕等,具有非常好的應用前景。深度學習作為機器學習、人工智能的拓展方向,通過模仿人類思想,自適應處理數據,探尋數據信息的內在規律、表述形式等,為系統運行提供數據支撐。在此背景下,目標識別技術的實現可依靠深度學習技術,對目標進行精細化辨別,提高目標識別與處理的精確性,為系統操作提供可靠性依據。基于深度學習的目標識別技術已經成為當下研究熱點,但基于深度學習的方法對硬件計算能力要求高,由于無人機帶負載能力有限,無人機機載計算機通常采用功耗低、可靠性高的嵌入式設備[2]。常見的無人機機載計算機如樹莓派、NVIDIA Jetson Nano、NVIDIA Jetson TX2等設備。其中,性能最強的NVIDIA Jetson TX2包含兩個CPU,配有256個NVIDIA CUDA核心的GPU,主頻最高1.12 GHz,而搭載NVIDIA GeForce GTX 1080 GPU的臺式服務器,就擁有256個CUDA核心,主頻最高2.8 GHz。因此,嵌入式平臺性能遠遠低于實驗室中的服務器,對深度學習算法推理速度有直接的影響[3]。現有算法大都在實驗室中以達到最高準確率為目的,而在嵌入式平臺上直接使用現有深度學習網絡進行快速識別實時性較差,需要對網絡進行輕量化改進以提高推理速度。
雖然傳統的目標檢測算法運算速度快,如SIFT、SURF和HOG等,但需要人工設計特征,將設計的特征在圖像上以滑動窗口的方式,進行特征提取,然后對每類物體單獨訓練淺層分類器,完成目標的識別,這樣的方式導致傳統算法檢測精度和適應性較差[4]。2012年Hinton教授所帶領的團隊利用卷積神經網絡(convolutional neural networks,CNN)設計了AlexNet網絡[5],在2012年的ImageNet競賽中取得冠軍,CNN遂成為熱點研究方向。目前,CNN在圖像分類、目標識別、目標跟蹤等計算機視覺領域取得了重大應用[6],其基本原理是利用圖像卷積進行深層次特征的提取,進而實現目標分類與定位。基于深度學習的目標檢測算法主要分為兩大類,一類是先通過Selective Search、Edge Boxes[7]等算法進行候選區域的搜索,再進行特征提取與目標檢測,代表算法有R-CNN、Fast R-CNN及Faster R-CNN[8-10]等,該類算法精度較高,但速度慢,難以應用于無人機嵌入式計算平臺進行實時目標檢測。另一類是直接進行特征提取來實現目標的分類與邊界框回歸,代表算法有YOLO(you only look once, YOLO)[11]系列算法及SSD[12]算法等,該類算法速度相比兩階段算法得到了提升,與對實時性要求較高的無人機目標檢測較為契合。目前的目標識別在人臉識別、行人檢測這些面向自然場景圖像的任務中,應用已經非常成熟。但由于近地低空的無人機成像視角不同,無人機機載計算機算力低,無人機圖像中的目標尺度變化大,且小目標的比例遠高于自然場景圖像,直接將現有算法應用于無人機航拍目標識別效果較差。同時現有算法應用無人機進行俯視小目標進行偵測時,存在精度不高、在嵌入式平臺上運行速度慢等缺點。因此,研究適用于無人機的小目標識別算法有著重要意義。
本文首先介紹了YOLO系列算法基本原理[13],然后針對在嵌入式平臺上的實時運行,對YOLOv4進行了網絡優化分析與改進,在機載嵌入式平臺上進行了改進算法的驗證。
兩階段算法由于需要先生成候選區域,使得算法實時性差,為改善該問題,基于回歸理念,對圖像目標位置和類別直接進行回歸預測。YOLOv1直接將輸入圖片分為S*S的小塊,每個小塊預測B個邊界框(bounding box,BBox),采用BBox的置信度confidence反映模型對該BBox的預測的準確率,計算公式如式(1),其中,Pr(Object)代表是否存在目標,若存在,則confidence為真實值(truth)和預測值(pred)的交并比(IOU),若不存在,則置信度為0。
(1)
在推理階段,每個BBox都要預測目標位置、置信度和C個類別信息,輸出S*S(5*B+C)的張量。類別信息與置信度相乘,按式(2)計算得分csc,將得分低于設置閾值的結果直接濾除,對剩余的預測結果進行非極大值抑制(NMS)處理,得到識別結果。
(2)

(3)

(4)
YOLOv2設計了一個新的骨干網絡結構Darknet-19,通過前后特征融合,增強了網絡對小目標的識別能力[14]。借鑒Faster R-CNN的anchor機制,使用Kmeans聚類算法得到大小合適的anchor。YOLOv2將輸入圖像提取為13*13大小的特征圖,對特征圖的每個網格進行預測BBox,如圖1所示,每個BBox預測邊界框的位置信息(tx,ty,tw,th)和置信度to,tx,ty經Sigmoid函數映射到0到1之間,將預測中心固定在cell內,使得模型更加穩定,cx,cy表示該cell距離特征圖左上角坐標的距離,pw,ph代表anchor的寬高,bx,by,bw,bh代表最后基于anchor得到的預測結果。計算公式如(4)所示,式中σ代表Sigmoid函數。

圖1 基于anchor的位置預測示意圖
YOLOv3借鑒深度殘差網絡和特征圖金字塔的思想,使用了FPN[15],用不同尺度的特征圖來檢測目標,設計了主干網絡Darknet-53,Darknet-53比ResNet-101[16]準確率提高了0.1%,速度提高了1.47倍[17],在理論上,YOLOv3沒有太多的改進。
YOLOv4由Alexey Bochkovskiy在2020年改進完成,是一個端到端的一階段網絡,其網絡結構如圖2所示。YOLOv4設計了新的骨干網絡CSPDarknet53,該骨干網絡與Darknet53相比,在每個Resblock中,增加了新的跨層連接,提高了網絡準確率。與YOLOv3一樣,融合了前后特征圖的信息,并用多個尺度特征圖來識別目標,如圖2中PANet部分所示,最后,增加了空間金字塔(spatial pyramid pooling,SPP)模塊,擴展了模型的感受野[18],進一步提高識別準確率。在數據增強方面采用了CutMix,提出了Mosaic等數據增強方法,CutMix通過將兩張圖按隨機比例進行混合,可有效改善密集目標識別中的目標重疊導致識別率低的問題[19];Mosaic則通對4張圖片按照隨機縮放、隨機裁剪和隨機排布的方式進行拼接,增強小目標識別效。此外,融合了目標檢測領域最新的定位損失函數CloU loss,有效指導網絡訓練[20],采用了Mish激活函數,增強了網絡的非線性表達能力[21]。融合多種方法的YOLOv4在精度上得到了極大的提高,但由于網絡模型更大,對硬件的要求也進一步提高,在嵌入式平臺上存在推理速度慢,計算資源占用率高的問題。

圖2 YOLOv4網絡結構圖
YOLOv4主要應用于平視視角下常規尺寸的目標識別,無人機俯視目標較小,使用YOLOv4直接檢測,存在浪費計算資源用于檢測大目標、容易丟失小目標細節信息的問題。分別從網絡深度和網絡寬度兩個方面,改進設計適用于小目標識別的YOLOv4骨干網絡,以提高網絡準確率和速度。
卷積神經網絡通過使用卷積核對圖像特征進行提取,在深度學習中,卷積核的參數通過訓練得到,將得到合適參數的卷積核對輸入圖像進行處理。如圖3所示,對相同輸入,不同參數的卷積核會產生不同的特征圖(feature map),有的卷積核類似高通濾波器,通過銳化后可以增強細節信息的圖像;有的卷積核類似低通濾波器,通過模糊圖像,減少圖像細節突出重要信息,有的對水平或豎直的紋理信息敏感,而有的對顏色信息敏感。

圖3 不同卷積核提取的特征圖
單層卷積核的數量稱為卷積層的通道數,也叫網絡寬度,網絡的寬度越寬可以提取到更多的特征,幫助算法更好的進行決策。任何勒貝格可積函數不能被寬度小于n的ReLU(rectifiedLinear units,ReLU)網絡逼近[22],如式(5)所示:
(5)
因此,網絡需要保證一定的寬度,才能實現對復雜問題的求解,但隨著網絡寬度增加計算量呈指數增加,使得算法實時性變差。所以,需要對特定問題,設計與其復雜度相匹配的網絡,以實現速度與精度的平衡。
單層網絡雖然可以提取到豐富的特征,但無法完成信息的整合,并且由于單層神經網絡不具備處理非線性問題的能力,因此需要采用深度神經網絡。理論上,一個兩層的網絡可以擬合任意有界連續函數,但該變換過于復雜,使得網絡難以收斂,且需要非常寬的網絡,所以,需要通過加深網絡深度,將復雜問題逐層分解,降低每一層的變換難度,使網絡更加容易訓練。研究發現深度網絡中的淺層卷積神經網絡先對圖像簡單的邊緣等信息進行學習,中間層則學習到了簡單形狀,高層學習目標的具體形狀,深度越深,可以提取到更高級的語義信息。但由于通過卷積層不斷的對信息的提煉,會造成位置等細節信息的丟失,尤其在針對小目標時,網絡過深會導致目標定位信息丟失,從而難以進行目標識別。所以,網絡并不是越深越好,同樣需要針對特定問題設計網絡的深度。
深度和寬度會影響最終的模型大小和推理速度,可根據公式(6)進行測算:

(6)
其中:Co、Ci分別為輸出輸入特征圖通道數,k為卷積核大小,W、H為特征圖寬與高,各卷積層的參數量(params)決定了模型的大小,推理速度則主要由各卷積層的計算量(FLOPs)決定。因此,針對特定應用場景,通過對網絡深度與寬度進行優化設計,可在確保精度的前提下提升網絡的運算速度。
無人機通過俯視拍攝目標,由于距離較遠,使得目標在圖像中所占像元較少,若采用較深的卷積神經網絡雖然可提取到更高級的語義信息,但會造成小目標空間信息的丟失。YOLOv4在提取圖像的過程中,先將640*640的原始圖像提取為20*20的特征圖,即縮小了32倍,網絡難以識別32*32像素及以下尺寸的目標,對近似尺寸的小目標即使能進行類別預測,也不能對目標位置進行準確回歸。
針對目標細節信息丟失導致算法準確率低的問題,首先,對圖2中原始骨干網絡進行分析,圖2中原始骨干網絡最后兩個Resblock主要用于中型尺寸目標的特征提取,這是造成小目標信息丟失的主要原因,所以將殘差塊Resblock4舍去。其次,由于原網絡中路徑聚合網絡(PANnet)中特征圖經三次降采樣再上采樣,該過程雖最終將特征圖恢復為原大小,但在恢復過程中采用線性插值完成,使得特征圖變模糊,影響網絡檢測小目標,因此將檢測器適當提前。然后,為提高識別精度,在網絡中加入SPP模塊,并在之后使用10個卷積層進行特征的提取。最后,通過三個尺度的檢測器完成檢測,改進后的網絡如圖4所示。

圖4 深度改進后的網絡結構
將改進后的網絡在公開數據集VisDrone[23]上進行訓練,VisDrone由天津大學的AISKYYE團隊進行搜集制作,是一個包含了目標識別、目標跟蹤、人群計數等多個方向的數據集。該數據集標注了超過260萬個邊界框,其中目標識別方向共有10209張圖像,包含了10個類別,分別為:行人、人、汽車、面包車、公共汽車、卡車、摩托車、自行車、遮陽篷三輪車和三輪車。采用的訓練平臺為Inter Core i7-8700CPU,NVIDIA GeForce GT 1080,Ubuntu18.04 TS。網絡框架基于Darknet。采用CUDA、cuDNN對計算進行加速,安裝OpenCV環境實現數據增強。搭建好軟件環境后,對神經網絡超參數進行設置。首先,有關權重更新方式,批量梯度下降每次更新都需要把所有樣本輸入,得到誤差后對網絡權重進行一次更新,兼顧了所有樣本的情況,可以得到全局最優解,但當訓練樣本很多的時候,由于每一次迭代都需要對所有樣本進行計算,訓練會很慢。小批量梯度下降對多個樣本,只更新一次權重,這樣的更新方式可以使網絡大致朝著全局最優的方向迭代,也可以解決批量梯度下降訓練慢的問題。本文選擇了小批量算法作為權重更新方式,批量(batch)設置為64,分解系數(subdivision)設置為64。采用動量法,將動量法中的momentum設置為0.9。其次,對訓練樣本進行數據增強,數據增強可以增加訓練樣本,得到更好的訓練效果,同時還能防止模型過擬合問題。主要包含把圖片隨機旋轉-90度到+90來增加訓練樣本的數量,將saturation設置為1.5,exposure設置為1.5,hue設置為0.1,分別對原始圖像做飽和度、曝光度和色調進行隨機調整,采用了mosaic數據增強,該方法通過將多張圖片進行裁剪再拼接到一張圖上作為訓練數據,有利于豐富目標背景和小目標檢測。最后,使用預訓練權重對網絡進行訓練,學習率設置為0.001 3,并將最大訓練輪數設置為20 000,學習率分別在第12 000、18 000輪時降低為原來的十分之一。訓練完成后,在大疆機載計算機Manifold-2G上對算法進行測試,Manifold-2G的處理器是英偉達研發的Jetson TX2,擁有256個CUDA計算核心的GPU,CPU復雜部分由兩個ARM v8 64位CPU集群組成。軟件系統為Ubuntu 16.04,安裝了CUDA9、OpenCV3.0。本文測試都是在Manifold-2G上進行,后續不再加以說明。對算法基于默認參數進行測試,深度改進測試結果如表1所示。

表1 深度改進實驗結果
測試結果表明在針對俯視視角小目標進行網絡改進后,準確率提高了3.2%,網絡參數量減少為原網絡的15%,表明了算法改進的有效性。但其計算量僅降低36 BFLOPs,改進算法運行速度提升依然較小,需要在網絡寬度方面繼續改進。
在2.2節對網絡深度的改進中,計算量僅降低36 BFLOPs,改進算法運行速度提升較小。通過分析,這是由于將檢測器關聯層提前,在降低模型大小的同時,使得通道數較多的卷積層用于處理較大的特征圖。根據公式(7)可知這將使模型的計算量大大增加,使得網絡加速并不明顯。由于俯視視角目標特征相對一致,在保證一定精度的同時,可通過適當減少網絡寬度,實現網絡的加速。
寬度改進后的網絡結構如圖5所示,首先將圖4中最后的Resblock通道數由512降低為256,可降低該Resblock的4倍計算量;其次,因為SPP模塊使通道數增大四倍,導致SPP模塊后的卷積層計算量和參數量增大。因此,在SPP模塊之前先通過一次下采樣(downsample),將特征圖大小由原來的80*80變為40*40,使得downsample到上采樣(upsample)之間的計算量降低4倍;最后,通過一次上采樣將特征圖恢復為原大小,由于下采樣操作僅將特征圖大小變為40*40,并不影響小目標識別,且有效減少了計算量和參數量。

圖5 寬度改進后網絡結構
將改進后的網絡再次在數據集VisDrone上進行了相關測試,測試結果如表2所示。從測試結果看出,改進后的骨干網絡在無人機視角小目標識別任務中,參數量減少為原網絡的10.4%,精度提高了2.7%,推理速度是原網絡的1.8倍。但由于網絡改進時僅通過對整個Resblock進行通道數設計,網絡存在冗余,仍需對單個卷積層通道數進行進一步精簡。

表2 寬度改進實驗結果
無人機帶負載能力有限,且由于無人機帶由多種傳感器,使得無人機周圍電磁環境復雜,另一方面,為保證系統的精簡,通常使用無人機的電池對機載計算機進行供電,所以,無人機機載計算機通常采用功耗低、可靠性高的嵌入式設備,該類設備算力較低。本文采用了DJI Manifold-2G作為機載計算平臺,該設備搭載了NVIDIA jetson TX2核心,與搭載NVIDIA GeForce GT 1080的臺式服務器相比,1080擁有2560個CUDA核心,CUDA核心數反映了硬件的算力,對深度學習算法推理速度有直接的影響,TX2僅僅擁有256個CUDA核心,因此,直接在TX2等嵌入式平臺上進行使用深度學習網絡是不切實際的,需要對網絡進行剪枝量化,以提高推理速度。采用對網絡的剪枝與量化以提高網絡實時性進行了相關工作。
為提高算法在嵌入式設備上運行的實時性,通過對模型進行剪枝可進一步提高推理速度。基于BN層γ系數對冗余通道進行剪枝[24],BN層將網絡的每一層的輸入做標準化處理,使數據分布向整體數據的均值方差方向轉移,從而使得網絡更容易初始化,并可以加速網絡訓練[25]。
(7)


表3 網絡剪枝實驗結果
通過剪除冗余通道,網絡參數量降低為原來的32.1%,計算量降低為原本的4.3%,網絡僅在損失0.9%的準確率的情況下,網絡推理速度提高到剪枝前的1.9倍。
為充分利用硬件平臺的計算資源,使用TensorRT對網絡進行硬件加速。首先,因為模型推理時主要由GPU啟動CUDA進行運算操作,CUDA核心的啟動對每一層輸入輸出張量的讀寫操作造成大量的時間和計算資源浪費,帶來了內存帶寬的瓶頸問題。因此,通過層間融合將橫向的卷積層、偏置層、激活函數層融合為一個CBN層,可加速推理過程。另一方面,由于推理過程不需要反向傳播,在推理過程中,相比使用32位浮點數的存儲的權重文件,使用16位浮點數存儲的權重文件對模型精度可以達到近似的精度,所以將權重文件中參數量化為16位浮點數,減小計算復雜度從而提高推理速度。
模型測試結果如表4所示,對使用TensorRT加速后,由于權重文件格式與原YOLOv4權重文件格式不同,不對計算量與參數量進行對比。采用TensorRT加速后,網絡精度僅降低0.3%,但推理速度提高了26%,極大地增強了算法在嵌入式平臺上的實時性能。

表4 硬件加速實驗結果
與傳統算法人為設計特征不同,深度學習算法可以自主學習特征,自主學習一般需要大量的監督數據。對同一個深度學習算法,用于指導學習的數據越多、數據質量越好,訓練出來的網絡性能越好,所以數據集在目標檢測中具有非常重要的作用。另一方面,軍事目標由于安全性和保密性,鮮有開源數據集,因此為了驗證改進算法對軍用目標的有效性,解決軍用目標數據集缺失的問題,制作了一個小型的軍用目標數據集。
通過網上搜索符合俯視軍事目標的圖片,主要來源為各大搜索引擎,由于無人機視角下的軍用目標圖片在角度、目標大小以及目標種類方面都有著限制,軍用目標的特殊性和保密性要求,使得在國內外搜索引擎上直接檢索得到的符合要求的圖片較少,遠遠滿足不了數據集的要求。為此,從公開實戰演習的視頻中,截取符合要求的圖片。選取士兵、坦克、裝甲車、軍艦、導彈發射車五類目標作為數據集制作對象,最終收集到符合要求的圖片3582張。對搜集到的圖片進行重命名、格式修改等初始化處理,然后,為方便YOLOv4的訓練,采用PASCAL VOC標準制作數據集,PASCAL VOC在目標識別檢測領域是一套標準化數據集格式,為數據集的制作提供了標準的文件格式。按照VOC標準使用Labelimg完成數據集的標注,標注結果如圖6所示。

圖6 軍事數據集標注
最后,對標注好的數據集進行訓練集、驗證集和測試集之間的比例分配。由于數據集規模不是太大,測試集不宜分配太多數據,將大部分數據分配到訓練和驗證集中,最終分配結果為訓練集:驗證集:測試集=7.2:1.8:1。
采用標注的數據集分別對原YOLOv4和改進算法進行訓練,訓練采用的電腦配置為Inter Core i7-8700CPU,NVIDIA GeForce GT 1080,系統版本Ubuntu18.04,深度學習框架采用Darknet,并將其移植到嵌入式系統Manifold-2G上進行測試,實驗效果如圖7所示。

圖7 改進算法對軍用目標的識別效果
實驗結果如表5所示,通過對YOLOv4進行了適用于小目標的改進,并采用了剪枝量化等方法,改進算法在精度上提高2.3%的同時,推理速度提高了3.3倍。展現了改進算法對軍事航拍小目標識別的有效性,提升了航拍目標識別的精度與速度。單類目標識別精度如表6所示,在單類目標識別測試結果中,改進算法與原算法相比,對坦克、裝甲車、軍艦、導彈發射車、士兵5類目標的識別精度分別提高了4%、2%、1%、2%、6%,對士兵識別精度提升最大,而士兵相對其他類別尺寸較小,表明針對小目標識別的算法改進是有效的。

表5 算法對比結果

表6 單類目標識別精度
嵌入式平臺算力資源有限,難以運行大型的深度網絡,且現有目標識別網絡并不是針對航拍小目標的實時識別設計的。本文基于現有YOLOv4算法,對其在網絡深度、寬度方面進行了骨干網絡的優化設計,并采用剪枝和硬件加速技術進一步提升網絡的推理速度。在制作的軍用目標數據集上,改進算法比原算法準確率提高了2.3%,推理速度提高了4.3倍,驗證了采用的網絡優化改進的有效性。雖然在嵌入式平臺上提高了算法的推理速度,但依然達不到實時性,仍需在硬件和算法方面進行改進。由于YOLOv4采用錨框對目標進行粗略的預測,大多數錨框都是負樣本,造成訓練中正負樣本不均衡,未來可以基于無錨框的方式對小目標進行識別,提高算法效率。此外,通過引入自注意力機制,對可能存在目標的位置進行重點處理,從而進一步提升算法的準確率和實時性。