薛余坤,談文蓉,邢雪楓,陳秋實
(西南民族大學計算機科學與技術學院計算機系統國家民委重點實驗室,四川成都 610041)
2020 年2 月24 日,國家發改委、中央網信辦、工業和信息化部等11 個部委提出:到2025 年,中國標準智能汽車的技術創新、產業生態、基礎設施、法規標準、產品監管和網絡安全體系基本形成[1],標志著智能汽車成為國家未來發展戰略的一部分,這也是世界汽車行業的發展趨勢。
對周圍車輛進行快速準確的識別是智能汽車在高級駕駛輔助(Advanced Driving Assistance System,ADAS)功能方面的重要內容。隨著計算機視覺相關技術的快速發展,基于行車記錄儀的前方車輛檢測算法在定位準確度和識別速度方面有了很大提升。基于視覺的車輛檢測算法一般使用閾值法、邊緣檢測法等對候選區域特征進行檢測。例如,Viola 等[2]設計了基于AdaBoost的車輛檢測方法;Harzallah 等[3]提出基于SVM的目標分類算法。近年來,基于深度學習的目標檢測算法,如Faster R-CNN(Faster Region-Convolutional Neural Networks)[4]在識別準確率方面表現優異,但由于其采用“兩步走”的方式,識別一張圖片需要送入神經網絡兩次,分別進行目標預測框回歸和目標種類確定,大大影響了圖片檢測速度,在高速行車過程中將產生巨大安全隱患[5]。為此,黎洲等[6]、Seo[7]提出了基于YOLOv2(You Only Look Once v2)框架的車輛檢測算法,可同時進行車輛及其視角識別。
抖動對視頻質量的影響較大。目前視頻防抖技術一般包含特征點檢測、運動估計、運動平滑和運動補償4 個過程,傳統的防抖方法包括基于特征匹配的視頻防抖、基于濾波的視頻防抖。例如,熊煒等[8]提出結合金字塔光流法和卡爾曼濾波的視頻穩像算法;張培健等[9]使用級聯卷積神經網絡對輕量級視頻進行插幀,但在提高檢測精度的同時降低了計算速度。
本文采用最新的YOLOv4(You Only Look Once v4)[10]作為車輛檢測算法,極大地提高了檢測速度,但在對車載視頻進行檢測的過程中發現,道路顛簸、車輛自身抖動造成的視頻幀模糊問題對識別準確率產生了較大影響。為解決上述問題,本文創新性地提出對進行車輛檢測視頻進行防抖預處理的方法,由于車輛行駛過程中對防抖算法的計算速度有很高要求,故使用光流跟蹤算法[8]對行車記錄儀采集到的模糊視頻幀進行運動補償,以提高基于車載視頻進行車輛檢測的識別準確率。
YOLO 系列算法[11]誕生于2016 年,在眾多針對目標檢測的深度學習算法中脫穎而出,其創新性地采用“一步走”策略[7],將目標檢測任務劃分為單一的回歸任務,只需要將被識別圖片輸入網絡中一次便能輸出目標種類和目標框的準確位置[12]。
YOLOv4 作為YOLO 系列的第4 個版本,將最新科研成果融于一體,使用Mosaic 數據增強方式作為輸入端數據處理方法,使用全新的CSPDarknet53 作為主干網絡,廣泛使用深度殘差網絡結構,將Mish 作為全新的激活函數,使其在檢測速度和目標框的識別精度方面進一步提升。在COCO 數據集上,YOLOv4的平均精確度(Average Precision,AP)和每秒檢測幀數(Frames Per Second,FPS)較上一代分別提高了10%和12%[10]。
YOLOv4 算法框架由輸入層、基于深度殘差網絡的卷積層、池化層、FPN(Feature Pyramid Network)層、PAN(Path Aggregation Network)層和預測層組成,具體流程如圖1 所示。
Fig.1 Flow of YOLOv4 algorithm圖1 YOLOv4 算法流程
首先,輸入的圖片進行Mosaic 數據增強處理,對4 張圖片進行隨機縮放、旋轉、裁剪等操作,最后再拼接合成為一張圖片輸入到CSPDarkNet53 主干網絡中進行訓練。CSPDarkNet53 網絡采用3×3 大小的卷積核,采樣步長為2,因此可以起到下采樣的效果。然后,將輸入圖片大小統一調整為608×608,經過5 次下采樣操作,分別得到304×304、152×152、76×76、38×38 和19×19 大小的特征圖,并在池化層中引入Dropblock 算法,隨機刪除一部分神經元數量,使網絡結構變得更加簡單,運算速度得到明顯提升。YOLOv4 使用FPN 算法,對經過數次下采樣運算得到的19×19 大小的特征圖再進行上采樣操作,與38×38 大小的特征圖進行融合,再對得到的特征值繼續上采樣,并與76×76 大小的特征圖再次融合。最后,對FPN 層得到的3 種不同大小的特征圖再進行下采樣,分別與上一層相同大小的特征圖進行融合,得到分類成功的3 種不同尺度的特征圖,其中最大的特征圖為76×76,對應最小預測框(Anchor Box);中等特征圖為38×38,對應中等預測框;最小特征圖為19×19,對應最大預測框。
模型訓練采用KITTI 數據集,其是目前世界上最大的針對自動駕駛的數據集[13]。為防止過擬合,采用Mosaic 數據增強的方式對數據進行預處理,具體如圖2 所示。
Fig.2 Schematic diagram of Mosaic data enhancement algorithm圖2 Mosaic 數據增強算法示意圖
將KITTI 數據集的80%作為訓練集,20%作為測試集。由于本文只針對車輛進行檢測,故將目標識別的種類設為1,種類名稱設為car,并設置模型訓練的批大小(Batchsize)為924 個,迭代次數(Iteration)為32 000 次,訓練周期(Epoch)為200 次。為保證模型對不同尺寸大小的圖片具有良好的泛化性,在訓練過程中使用大小尺度圖片混合訓練的方式,每隔幾個訓練周期就隨機改變輸入圖片的尺寸大小,使模型對不同分辨率的圖片都能取得較好的檢測精度。
在車輛行駛過程中,行車記錄儀拍攝的視頻往往會由于道路顛簸、車身振動等原因產生視頻幀模糊的問題,不利于檢測算法準確識別出車輛目標。針對該問題,首先使用SURF(Speeded Up Robust Features)進行特征點檢測;然后使用基于特征匹配的光流法跟蹤特征點位置,計算其運動矢量,估計相機運動路徑;最后使用卡爾曼濾波算法[14]對相機運動路徑進行平滑操作,從而輸出相對穩定的視頻幀序列。防抖算法的流程如圖3 所示。
Fig.3 Flow of anti-shaking algorithm圖3 防抖算法流程
SURF 算法使用矩陣的形式偵測特征點,以Hessian 矩陣行列式值代表周圍像素點的變化量,然后進行非極大值抑制。為實現尺度不變性,SURF 算法還使用尺度為σ的行列式值進行特征點檢測。給定圖像灰度函數為I(x,y),則Hessian 矩陣H(x,σ)在x處尺度為σ的定義可表示為:
式中,Lxx(x,σ)為高斯函數(如式2 所示)的二階偏導數,g(σ)為圖像I(x,y)在x處的卷積結果,Lxy(x,σ) 與Lyy(x,σ)的含義類似。
通過求解Hessian 矩陣行列式得到局部極值點,每個局部極值點與同一層其他8 個相鄰點,以及上下兩層的各9個點,形成一個3×3×3的立體區域,當局部極值點為這個立體區域的最大(或最小)點時,則為候選特征點。
運用光流算法追蹤SURF 算法采集到的特征點運動軌跡,不斷對目標的主要特征進行定位和跟蹤[15]。光流法假定同一目標在不同幀之間運動時亮度值不會發生改變[16],假設某一像素在第一幀的光強度為f(x,y,t),其中t為時間維度,其經歷dt時間移動了(dx,dy)的距離,故可得:
使用泰勒展開式展開式(3)右端項,可得到:
式中,ε表示二階無窮小項,可忽略不計。將式(4)代入式(3)后同除以dt,可得:
使用移動PC 平臺進行實驗測試,具體配置為Windows10 操作系統、Inter CoreI5-7500 3.0GHz CPU、16GB 內存、NVIDIA GeForce GTX 1655 4G GPU。測試使用到的照片、視頻均為真實行車記錄儀在高速公路上采集的數據。
選取一段長度為1 269 幀的真實道路拍攝視頻,經過SURF 算法和光流法處理后,計算得到原視頻序列相機的水平方向位移、垂直方向位移和旋轉角度位移,具體如圖4所示。
經過卡爾曼濾波算法處理后的位移結果如圖5 所示。可以看出,經過防抖算法處理后的視頻序列在水平方向、垂直方向和旋轉角度的位移頻率明顯低于未經處理的原視頻序列,穩定性得到了很大提高,證明本文算法能有效實現防抖。
Fig.4 Movement trajectory of unstabilized camera圖4 未增穩的相機運動軌跡
Fig.5 Camera movement trajectory after stabilization圖5 穩定后相機運動軌跡
使用KITTI 數據集對本文模型進行訓練與測試,最終識別準確率達到96.51%。使用該訓練權重對真實行車拍攝的視頻進行防抖優化前后車輛檢測的對比試驗。對未經處理的原行車視頻進行逐幀提取,抽取其中由于抖動造成圖像模糊的視頻幀,送入YOLOv4 框架進行檢測,結果如圖6 所示。再將經過防抖處理的視頻幀送入YOLOv4 網絡,檢測結果如圖7 所示。此外,該模型在其他模糊視頻幀上也取得了類似效果,說明其可以提高整段視頻的穩定性。測試結果表明,經過本文防抖方法處理的視頻序列中的車輛識別準確率明顯提高。
Fig.6 Original video detection result圖6 原視頻檢測結果
Fig.7 Video detection result after anti-shaking process圖7 防抖處理后視頻檢測結果
本文設計了基于視頻防抖的YOLOv4 車輛檢測算法,解決了由于道路顛簸、車輛自身振動造成視頻幀模糊而影響檢測效果的問題。實驗結果表明,該方法可有效提高基于視頻序列的車輛檢測準確度,并具有較好的實時性,在行車記錄儀中具有一定潛在應用價值。但針對抖動情況較為嚴重的路況,該防抖算法仍存在不足,未來將對圖像增穩算法進行優化和改進。