王文慶,豐 林,劉 洋,馬曉華,楊東方
(1.西安郵電大學 自動化學院, 陜西 西安 710121;2.火箭軍裝備部駐南京地區 第二軍事代表室, 江蘇 南京 210023;3.火箭軍工程大學 導彈工程學院,陜西 西安 710025)
深度學習作為機器學習的重要分支,已被廣泛應用于文字識別、語音識別、目標檢測、自然語言處理、自動駕駛、生物信息處理、電腦游戲、推薦系統、醫學自動診斷和金融分析等各大場景[1]。卷積神經網絡(Convolution Neural Network,CNN)作為深度學習的典型模型,在圖像分類、圖像分割與目標檢測領域獲得了一系列的研究進展[2]。自AlexNet[3]之后,相繼出現了各種新型卷積神經網絡結構,如計算機視覺組(Visual Geometry Group,VGG)Net[4]、GoogLeNet[5]、ResNet[6]和DenseNet[7],它們作為目標檢測的主干網絡逐步提升了檢測的準確率,但其總體趨勢仍局限于使用更深層更復雜的網絡實現更高的分類精度。
得益于空中監測范圍廣的優勢與嵌入式平臺的普及,無人機被廣泛應用到實際的檢測任務中,如自然災害分析、道路交通檢測和抗災救險等。在無人機邊緣計算平臺實際部署中,主要面臨3個方面的挑戰[8]:在空對地場景下,經常出現密集的小型目標,該情況下虛檢率與漏檢率較大,保持良好的檢測性能是一個基本條件;基于深層卷積神經網絡的目標檢測算法參數量過大,不利于直接部署在內存與算力有限的嵌入式設備上;如何盡可能的滿足性能與實時檢測的要求。
自R-CNN(Region-CNN)模型引入之后,更多檢測框架相繼被提出,如Faster R-CNN[9]、單步多框檢測(Single Shot MultiBox Detector,SSD)[10]和YOLO(You Only Look Once)[11]等。其中,YOLO系列模型的精度和速度一直在提升,實際應用更加廣泛。這些模型都被直接部署在平臺上,需要占據大量運行空間和進行高密度計算才能保證原有檢測性能,功耗與時延等問題尤為突出。因此,如何合理均衡模型處理速度和檢測精度,已成為工業系統中亟待解決的問題[12]。
網絡參數統計結果顯示,經典VGG網絡前10個卷積層占據整個模型90%的計算量,而全連接層則占據著大約5%~10%的計算量和95%的參數量,即卷積神經網絡存在很大的參數冗余,這為模型壓縮提供了統計依據。使用某種訓練方式,可將網絡中不重要的或多余的參數篩選出來,進而刪除對模型性能影響較小的不重要權重。網絡剪枝[13]就是實現模型壓縮最為有效的方法之一。對于深層卷積神經網絡來說,特征層很容易存在通道的冗余,對特征通道進行剪枝可更有效地減少計算量。
為獲得精簡的深層目標檢測器,擬提出一種面向空基邊緣平臺的輕量化目標智能檢測方法。先將L1正則強加于通道縮放因子,增強網絡卷積層的通道稀疏性,對YOLOv4[14]初始模型進行稀疏化訓練。然后設置一定的通道剪枝比例,刪除冗余的通道,微調恢復網絡性能,得到剪枝后的YOLOv4模型,以期更適合于無人機的實時目標檢測。
檢測目標分為兩類。第一類是對特定實例的檢測,如檢測面孔、行人等單個類別或少數特定類別。第二類是通用目標檢測,如檢測飛機、汽車等不同預定義目標類別。目標檢測的研究分為兩個階段。第一階段是利用方向梯度直方圖(Histogram of Oriented Gradient, HOG)、加速穩健特征(Speeded Up Robust Features,SURF)和尺度不變特征變換(Scale-Invariant Feature Transform,SIFT)等算法提取特征并進行檢測。該類算法均在候選區域內提取特征,利用支持向量機、隨機森林和自適應增強等機器學習方法進行檢測與識別。第二階段是利用深度學習進行目標檢測,可細分為單級目標檢測算法和兩級目標檢測算法。兩級目標檢測代表算法有R-CNN、Fast R-CNN、Faster R-CNN等[15],這些算法摒棄了使用滑動窗口進行區域選擇,采用有建議性的Selective Search區域生成算法,減少了冗余候選區域的生成。特征提取也從傳統的手工設計變為利用深度卷積網絡學習和提取圖像中目標的深層特征,將特征向量進行分類和精確定位。兩級目標檢測算法在檢測精度上取得了很好的效果,但還是無法實現端對端的實時檢測。單級目標檢測算法則是直接對輸入的圖像應用算法實現類別預測與定位,較于兩級目標檢測算法精確度略低,但檢測速度提升顯著,能夠實現端對端的檢測,其中,具有代表性的方法有SSD、CenterNet[16]和YOLO系列模型。
YOLO系列模型是實際應用中最受歡迎的深層目標檢測器之一,其檢測速度快,且檢測精度與檢測速度達到了很好地平衡。其中,YOLOv4模型的檢測性能高且更具實時性,但其硬件平臺不足以應對巨大的計算開銷與容量。
目前,深度學習的模型壓縮方法大致可以分為設計更加精致的骨干網絡、模型剪枝、知識蒸餾、低秩分解和網絡量化等5類。
模型剪枝分為非結構化剪枝與結構化剪枝兩類。早期基于非結構化的方法裁剪粒度為單個神經元,如果對卷積核進行非結構化剪枝,則得到的卷積核是稀疏的,即中間有很多元素為0的矩陣。除非下層的硬件和計算庫對其有較好的支持,剪枝后模型很難獲得實質的性能提升,稀疏矩陣無法利用現有成熟的基礎線性代數子程序庫(Basic Linear Algebra Subprograms,BLAS)獲得額外性能收益。相反,結構化剪枝是對整個卷積核或者通道進行剪枝,不會破壞原有的網絡結構,因此,更適合部署在硬件上運行。網絡瘦身[17]是一種簡單且有效的通道修剪方法,在批量標準化卷積核中直接采層作為通道級縮放因子,并在這些縮放因子上使用L1正則化訓練網絡,從而獲得通道稀疏性的因素。通道修剪是一種粗粒度但有效的方法,并且無需專用工具即可方便地實施修剪的模型硬件或軟件。將網絡瘦身應用于修剪基于CNN的圖像分類器,可減少模型大小和計算。
YOLOv4模型與YOLOv3模型在整體結構上沒有差別,解碼過程也幾乎相同,主要是在YOLOv3模型的基礎,進行了以下4個方面的改進。
1)根據CSPNet[18]網絡特點,將Darknet53替換為CSPDarknet53,使用更平滑的Mish激活函數改進主干網絡。
2)在特征增強部分添加SPP(Spatial Pyramid Pooting)結構,增加感受野。借鑒PANet,在FPN(Fenture Pyramid Networks)后面加入PAN結構,進一步提高特征提取能力,Head層與YOLOv3保持一致。
3)使用Mosaic數據增強方法,降低對于硬件的要求,使其能夠在8-16 GB的常規CPU上進行訓練。
4)將CIoU作為其回歸Loss,使回歸損失在與目標框有重疊甚至有包含關系時更準確,收斂更快。
但是,在相同數據輸入下,YOLOv3與YOLOv4參數量與計算量相差不大,不建議直接部署到空基邊緣檢測平臺。
YOLOv4模型的主干網絡深度與寬度較大,在下采樣過程中,通道數成倍增加,在訓練過程中易出現通道冗余現象,因此,使用模型剪枝作為模型壓縮的方法。YOLOv4模型迭代剪枝過程主要分為是初始模型稀疏訓練、通道剪枝、微調剪枝后的緊湊模型和迭代訓練等4個階段。
1)初始模型稀疏訓練。在YOLOv4模型中,主干網絡每層輸出的通道數量較多,但并不是所有通道都同等重要,可去掉對模型性能沒有影響的通道。稀疏訓練可自動選擇特征,實現通道級別的稀疏,有助于通道修剪,網絡的稀疏度越高,剪枝率越大。為了減少稀疏時間和方便通道修剪,可利用卷積層縮放因子|γ|的大小表示某通道的重要性,將其與通道一一對應,卷積層的使用可加速網絡收斂和提高網絡的泛化性能。特征層批量標準化的計算表達式為

(1)

L=LY+λ‖γ‖1
(2)
式中:LY為YOLOv4模型的損失函數;λ為正則系數,其值越大,稀疏化通道越快,但不宜過大,容易造成性能損失。在正則化期間,卷積層縮放系數的分布經自動調整、稀疏化之后,有助于優化網絡結構。由于網絡結構限制,不對SPP與上采樣前一個卷積層稀疏訓練,進而對其不進行剪枝。
2)通道剪枝。稀疏訓練完成之后,對所有可剪層的|γ|進行排序,根據排序的結果和給定的剪枝率求得|γ|系數的全局閾值,將所有|γ|小于該閾值的置0,而|γ|大于該閾值的保持不變。為了保證網絡結構的完整性,對每個剪枝層設置安全閾值,保證每層有保留的通道。
設立通道掩碼(filter_mask)表示YOLOv4模型中每個剪枝層的剪枝掩碼,對γ置0的卷積核設置剪枝掩碼為0,表示剪枝;對不為0的γ系數設置剪枝掩碼為1,表示不剪枝。針對跳躍連接(shortcut),只有對應通道才能相加,因此將shortcut相關聯的所有卷積層的通道掩碼對0求交集,即關聯的卷積層相對應的通道掩碼都為0時才能被剪枝,只要有一個為1都不剪枝。最后,根據filter_mask生成剪枝后的緊湊YOLOv4模型,并從剪枝前的YOLOv4模型中加載參數。
3)微調剪枝后的緊湊模型。通道剪枝完成之后,網絡的性能有所下降,需要經過微調,使損失的性能恢復,若經微調之后還無法恢復初始性能,說明剪枝率過高。
4)迭代訓練。若微調剪枝后的緊湊YOLOv4模型能夠恢復初始性能,可將其作為初始模型進行迭代訓練,進一步壓縮網絡,最終獲得精簡YOLOv4模型。
在操作系統為Ubuntu 16.04,1個RTX 2080 Ti顯卡的服務器上訓練與評估檢測模型,使用Darknet與Pytorch實現。為了評估剪枝的YOLOv4模型的性能,基于YOLOv4模型對于剪枝前與不同剪枝率的各項性能指標進行詳細對比。實時性在邊緣計算平臺Jetson AGX Xavier測試,整個平臺的尺寸不超過105 mm×105 mm,內存為16 GB,支持10 W、15 W或30 W功率運行,其8 bit運算性能為22 Tops,16 bit運算性能為11 Tops。
將空機無人平臺在不同場合、不同時間進行拍攝,獲得了5 000張樣圖片。空對地成像結果與成像傳感器焦距、分辨率等內參和高度有關,同一類目標成像的尺寸對目標檢測的設計和實際檢測效果會產生影響。因此,采用目標最終占用的像素不得少于10個像素的方式衡量數據集。5 000張樣圖片共標定汽車、卡車、公交車、廂式貨車和人等5類檢測目標,部分場景示例圖片如圖1所示。

圖1 數據集部分場景
按照8∶1∶1的比例將數據集劃分為訓練集、驗證集和測試集。在所有訓練中,批量大小(batch size)為64,最大迭代次數為10 000次,初始學習率為0.001,使用學習率衰減方式,分別在7 000次和9 000次迭代時學習率降低10倍。在稀疏訓練中,令正則稀疏λ=0.001進行稀疏訓練。
對YOLOv4模型按照一定比例進行了3次通道剪枝,75%、90%和93%等3個不同的剪枝率代表了對通道數的理論減少比例。為了驗證YOLOv3模型、初始YOLOv4模型及剪枝后YOLOv4模型的性能,分別對比精確度、召回率、F1-score、平均精度均值(mAP)、模型計算量(10億浮點運算次數)、幀率及模型體積等7個評估指標,結果如表1所示。
從表1可以看出,YOLOv4模型比YOLOv3模型精度提升了近30%,可見對YOLOv4模型的改進對小目標的檢測很有效。3種不同通道剪枝比例中,只有剪枝93%的YOLOv4模型在精確度、召回率和平均精度指標略微降低,其余兩種剪枝模型經過微調反而比原模型有所提高,顯然原網絡冗余性較大。3種剪枝模型在實際計算量中大約下降了60%、68%和73%,對應模型大小下降了92%、96%和97%。在實時性方面,輸入一段視頻統計檢測幀率,最終的剪枝模型幀率提升了1倍,因此,剪枝后的YOLOv4模型在性能不損失的情況下,能夠有效提升實時性。

表1 通道剪枝前后各類模型的指標對比
5類檢測目標的平均精準度(Average Precision,AP)對比如表2所示。

表2 5類檢測目標平均精準度對比
由表2可知,經過迭代訓練的最終YOLOv4模型精度整體略微下降,各目標的AP值也存在較大差距,這主要是樣本不平衡所導致,例如,訓練集中汽車數量遠大于其他類型。
在實際場景中,對比初始YOLOv4模型與剪枝93%的YOLOv4模型的檢測效果,如圖2所示。圖2可以看出,在相同環境下兩個檢測模型都能正確檢測大多數的目標,沒有顯著的差異,但是對遮擋嚴重或不清晰的目標還存在漏檢與誤檢的情況,而綜合表1和表2的結果得出,剪枝后的模型更有利于部署到空基邊緣平臺上。

圖2 剪枝前后模型實際檢測效果對比
面向空基邊緣平臺的輕量化目標智能檢測方法,針對無人機視角的小目標,利用YOLOv4主干網絡較強的特征提取能力,使得網絡學習更加全面的目標特征。針對在實際部署時模型計算量大的問題,設計了有效的通道剪枝策略,在嵌入式環境下同時提高了檢測精度與檢測速度。實驗結果表明,該方法在不損失mAP的前提下,參數量和計算量得到很大程度壓縮,具有更快的運算速度以及更低的計算功耗,有助于推動無人機智能目標檢測。