鄭章,陶青川,趙興博
(四川大學電子信息學院,成都610065)
行人檢測在智能監(jiān)控,視頻分析具有很重要的作用。早期視頻行人檢測靠人工進行查看分析,但是隨著監(jiān)控范圍及攝像頭數(shù)量的不斷增加,人力效率低下的缺點無法彌補,凸顯了智能視頻行人檢測的必要性。行人檢測發(fā)展歷程主要分為兩個階段,第一階段主要是傳統(tǒng)圖像處理算法,需要人為地設計算法對圖像進行處理,主要有Haar 小波特征[1]、HOG+SVM[2]等,這類算法普適性較低。第二階段是深度學習相關算法,深度學習利用機器的強大算力對大量樣本圖片進行迭代計算,使用多層網絡來對目標進行特征提取,再利用提取的特征信息,對圖像中的目標進行定位與分類[3]。之后隨著Fast R-CNN[4]、SSD[5]、YOLO[6]等系列優(yōu)秀算法的提出,深度學習算法的性能得到進一步提升,在圖像處理領域的準確率以及速率表現(xiàn)優(yōu)異,大幅度超過傳統(tǒng)的圖像處理算法。
但是以上深度學習算法的良好表現(xiàn)與其在較好設備上運行有關,因為上述算法的復雜度普遍較高,要想達到實時地計算需要平臺強大的計算能力,由于嵌入式設備的算力相對較差,內存相對較小,在嵌入式設備上運行速度很慢,無法達到實時性[7]。其中YOLO 系列算法中的YOLOv3 在已有網絡的基礎上,使用DarkNet或者ResNet 來作為特征提取的主干網絡[8],并且使用多級檢測網絡,具有效果較強檢測準確率較高的特點。不過在嵌入式這種性能較差的開發(fā)板上運行的話,YOLOv3 的速度還是偏慢,達不到實時性的要求。針對上述問題,對YOLOv3 算法加以改進以提高行人檢測的速度,使得可以在嵌入式平臺上實時運行。
YOLOv3 網絡結構整體上分為特征提取部分Dark?Net-53 和檢測部分兩單元[9],特征提取網絡包含殘差網絡,因為殘差網絡可以消除網絡加深帶來的梯度消失等問題,所以提取網絡可以設計的較深,網絡中若干卷積層和跳躍層構成一個殘差單元,多個殘差單元組成一個殘差塊,網絡由5 個殘差塊組成,卷積結構包括卷積層、批標準化層和激活函數(shù)[10]。圖1 為DarkNet-53的示意圖
圖1 DarkNet-53示意
另外DarkNet-53 網絡相比于傳統(tǒng)的神經網絡,采用的是全卷積結構[11],理論上因此可以支持任意大小的圖像輸入,不過由于內部采用了5 個步長為2 的下采樣來降低網絡計算中的信息損失,因此只支持任意25=32 的倍數(shù)的輸入圖像尺[12]。特征提取網絡會將尺寸為52×52、26×26 和13×13 這3 層特征圖提取出來輸出到檢測網絡進行接下來的處理。
檢測網絡采用多尺度檢測機制。首先對輸出的13×13 的圖上進行第1 次檢測,一個像素點對應輸入圖片416/13=32 個像素點,因此對大目標的檢測效果較好;之后將其上采樣與26×26 特征圖融合,此時一個像素點對應輸入圖片16 個像素點,適用于檢測中等尺寸的目標;同理對26×26 的特征圖上采樣并與52×52 的輸出特征圖融合完成第三次檢測,此時一個像素點對應輸入圖片8 個像素,適用于檢測小尺寸的目標。可以發(fā)現(xiàn)檢測網絡采用多級金字塔的思想,增強了對不同尺寸的目標特別是小目標的檢測能力。
YOLOv2 后的YOLO 網絡都使用錨點框(anchor boxes)來檢測目標[13]。每個邊界框會被預測4 個坐標(tx,ty,tw,th),分別代表其相對坐標以及寬度和高度。定義網格的坐標(cx,cy),錨點框寬和高分別為(pw,ph),便可計算出邊界框的位置為:
其中(bx,by)為預測邊框的中心坐標,(bw,bh)為其寬度和高度。YOLOv3 的損失函數(shù)如下,采用邏輯回歸損失函數(shù)來預測每個邊界框的得分。
損失函數(shù)由三部分組成,分別為置信度損失Econfi,坐標損失Ecoodi,以及類別損失Eclassi。如果當前預測的邊界框比之前預測和真實對象重合度更高,那它的得分就是滿分1。
YOLOv3 是一個通用的多類別檢測網絡[14]。與單分類檢測網絡不同,對不同類型不同特征的物體需要考慮到差異性,例如巨大的飛機和很小的貓,因此對特殊類型的檢測能力并不是特別突出。同時因為YO?LOv3 網絡的復雜度較高,例如其特征提取網絡Dark?Net-53 一共有53 層之多,最大寬度達到了2048,參數(shù)量很大,網絡的推理計算量比較耗時,無法達到在嵌入式平臺上實時運行的要求。因此本文針對行人檢測做出以下改進:
(1)對輸入尺寸進行改進,由于目前監(jiān)控相機圖像尺寸多為1920×1080,因此裁剪到YOLOv3 的輸入尺寸416×416 會損失很多特征信息,因此調整到960×512作為輸入圖像的大小。
(2)對網絡尺度和深度進行精簡,YOLOv3 特征提取網絡為了檢測80 分類問題,設計的網絡尺度和寬度較深,但是單分類的行人檢測無需這么強大通用的特征提取能力,因此對特征提取網絡進行改進。
(3)改進損失函數(shù),YOLOv3 是多分類的網絡,但是行人檢測只有一類,因此可以去掉分類置信損失,減少計算量。
YOLOv3 輸入圖片尺寸一般為416×416,但是目前監(jiān)控相機的常見像素大多是1920×1080,如果將其裁剪到416×416 會過分壓縮圖片質量損失很多信息并且長寬比會與原圖像不協(xié)調,對檢測的精度影響較大,因此本文采用960×512 的輸入圖像尺寸,之所以用960×512 尺寸的原因有以下兩點:
(1)特征提取網絡部分進行了5 次步長為2 的下采樣,因此輸入尺寸需要為25=32 的倍數(shù),960/32=17,512/32=9,寬高符合輸入要求。
(2)1920/960 ≈1080/512,較好地保持了原圖的比例大小,對于原有圖像的特征損失的較小。
DarkNet-53 的特征提取能力十分強大,因此可以支持YOLOv3 的多分類檢測[12],并且其多級尺度檢測是為了檢測不同大小目標特別是特征不明顯的小目標,但是對于視頻行人檢測來說,目標特征一般比較明顯,不需要提取很小的特征,因此其需要的特征提取能力不需要這么強大,同時由于嵌入式設備性能相對較差,YOLOv3 的網絡結構相比于算力比較復雜,實際運行過程速度較慢,無法達到實時性的要求,對網絡分析可以發(fā)現(xiàn),絕大部分時間都花在特征提取部分,因此我們對其進行改進,在不損失精度的條件下提升網絡計算的速度。同時由于輸入尺寸相對較大,因此我們增加一層7×7 的卷積,步長為2,能夠在提取特征并且對圖像進行壓縮,同時減少網絡的參數(shù)量,便于接下來的計算。
具體精簡哪些層的網絡需要進行分析,首先通過消融實驗,即模擬刪除該層的網絡對輸出精度的影響,對每層進行試驗后,就可以確定每層的消除對于輸出損失的影響,之后選取對輸出影響最小的20 層將其刪除,剩余的網絡作為新的特征提取網絡,并且同時對網絡的寬度也進行壓縮。
由于本文算法的目的是只檢測行人,而YOLOv3是一個多分類的網絡,在輸出層需要對檢測的目標進行類別概率的預測,因此可以對其改進,只需要預測行人邊界框和置信度,不需要對類別概率進行計算,從而減少了計算類別的工作量,因此與之對應的損失函數(shù)可以由兩部分組成,其計算公式為:
式中,Ecoodi為位置損失,Econfi為置信度損失,對比原始YOLOv3 的損失函數(shù),改進算法少了類別損失,YOLOv3 的單個輸出框的參數(shù)量為N×N×3×(4+1+C) ,改進算法單個預測框的參數(shù)量僅有N×N×3×(4+1)。參數(shù)變少了因此降低了計算量。
綜上,對YOLOv3 的網絡結構進行分析,并針對行人檢測的特點對其進行了調整和優(yōu)化,使之能更好地適用行人檢測,改進的網絡結構如圖2 所示。
圖2 改進網絡結構示意
本文的實驗環(huán)境包括訓練所用的訓練平臺和測試所用的嵌入式平臺。
訓練平臺配置如下:處理器型號Intel Core i5-9700,8 Gb 內存,Ubuntu16.04 操作系統(tǒng),顯卡為NVIDIA GeForce GTX1080Ti,顯存11 Gb,訓練框架使用開源深度學習框架DarkNet。
嵌入式平臺配置如下:開發(fā)板芯片采用海思Hi3559A,處理器為雙核ARM Cortex A53,2 Gb 內存,操作系統(tǒng)為海思HiLinux,使用3559A 自帶神經網絡推理機NNIE(Neural Network Inference Engine)推理。
本文選擇COCO 數(shù)據(jù)集作為訓練集,不過COCO是個種類齊全的多分類的數(shù)據(jù)集,因此將行人分類的圖片單獨提取出來,選取其中的10000 張圖片為作為訓練樣本。訓練步驟及參數(shù)設置如下:迭代批量32,動量0.9,衰減系數(shù)0.0005,迭代次數(shù)100000 次。
下圖為改進網絡訓練過程的loss 以及mAP 統(tǒng)計圖,可以看到迭代到40000 步的時候loss 趨于穩(wěn)定,到60000 步的時候mAP 趨于穩(wěn)定。
圖3 訓練損失及精度
為了驗證改進算法的精度和實時性,我們選取YOLOv3 以及同樣以快速為特點的YOLOv3-tiny 來作為對比,表1 為在嵌入式平臺下的對統(tǒng)一數(shù)據(jù)集下的測試結果,均使用量化后的權重。由表可以看出,本文算法的原始權重大小僅為YOLOv3 的1/64,YOLOv3-tiny 的1/9,量化權重為YOLOv3 的1/45,YOLOv3-tiny的1/6,模型權重占用的內存極小,更適合在嵌入式平臺使用;速度上相比于YOLOv3 快了454.1%,達到了101.4fps,和YOLOv3-tiny 差不多,達到了實時性的要求;并且在精度上本文算法mAP 達到了84.4%,YO?LOv3-tiny 僅有57.7%,精度上相對YOLOv3-tiny 提升了許多,相比于YOLOv3 也沒有明顯的下降,因此本文的算法模型在精度和速度總體上具有更好的表現(xiàn)。
表1 算法性能對比
為了更直觀地顯示改進算法的效果,我們給出三種算法在實際情況下測試的實例圖片,如圖4-圖6。
圖4 YOLOv3-tiny
圖6 YOLOv3
可以直觀看出,YOLOv3-tiny 存在漏檢和誤檢的情況,但是本文改進算法和YOLOv3 沒有漏檢和誤檢。
針對嵌入式設備性能較差計算力弱,無法同時達到高速度高精度的行人檢測需求,本文提出一種基于YOLOv3 的改進算法,通過對YOLOv3 特征提取網絡進行精簡,保留其提取大目標的能力,減少了網絡計算的時間,增加其提取特征的能力,并且對損失函數(shù)進行改進,將類別損失函數(shù)舍棄,降低了計算量,最后實驗結果表明,改進算法的參數(shù)量僅為YOLOv3 的1/47,在嵌入式平臺上速度上相比于原始YOLOv3 提升了454%,達到了101fps,并且在精度上接近YOLOv3,因此改進算法符合實際生產環(huán)境的需求。不過該算法在極其惡劣的條件下的檢測還是存在漏檢和誤檢的情況,因此還需要擴充數(shù)據(jù)集,并且對網絡進一步優(yōu)化。
圖5 改進算法