常飛翔 劉元盛 李中道 路銘 張軍
(北京聯合大學,北京市信息服務工程重點實驗室,北京 100101)
主題詞:紅綠燈識別 YOLOv3 TX2平臺 錨框 模型壓縮
利用圖像處理技術對紅綠燈進行實時檢測是無人駕駛技術的研究熱點。目前,該檢測方法分為2 類,即基于模型的方法和基于學習的方法。對于前者,已經開展了大量的研究工作并提出了許多方法:Chen等[1]利用色彩空間HSI(Horizontal Situation Indicator)和方向梯度直方圖(Histogram of Oriented Gradients,HOG)特征對紅綠燈進行檢測;Shi等[2]采用背景抑制算法和顏色直方圖信息對紅綠燈進行檢測;Tran 等[3]采用基于顏色密度的識別算法完成紅綠燈目標檢測;Haltako等[4]采用語義分割以及顏色特征分類器完成紅綠燈目標分類;宋永超等[5]提出了一種基于色度方向角的離線紅綠燈檢測算法。
隨著人工智能技術的不斷進步,基于學習的方法也被應用到了紅綠燈檢測中:Wang等[6]采用雙通道機制和深度神經網絡完成了紅綠燈檢測;V.John等[7]提出了一種結合顯著圖的深度學習紅綠燈檢測方法。
使用基于模型的檢測方法在復雜背景下存在抗干擾性差、精度低等缺點,而基于學習的方法中使用例如快速區域卷積神經網絡[8]兩階段網絡結構的學習方法實現的目標檢測算法存在實時性差等問題。為解決以上問題,以單階段網絡結構為特點的YOLOv3[9]目標檢測算法在精度和速度方面做了很好的平衡。但在園區無人駕駛場景應用中,由于車載電腦小型化,以及園區紅綠燈位置不確定性及其樣式非標準性,常規YOLOv3算法將面臨模型加載時間長、檢測速度慢以及準確率低的問題。為此,本文基于TX2嵌入式平臺對YOLOv3算法在進行最優錨框尺度獲取、裁減大尺度特征檢測分支、模型剪枝壓縮3 個方面的改進,同時設置離線檢測與在線檢測驗證其正確性與可行性。
無人車在園區環境用嵌入式設備TX2 對移動式紅綠燈進行檢測時,采用傳統YOLOv3算法存在以下問題:
a.YOLOv3 中錨框尺度是在COCO(Common Objects in Context)數據集下,利用K 均值聚類(KMeans)算法[10]進行維度聚類后得到的。由于COCO 數據集中某些類別,例如火車、大象等目標的長寬比與本文數據集相差很大,在錨框尺度預測過程中,使用YOLOv3原本的錨框尺度會降低目標檢測的正確率。
b.園區非結構化道路中的紅綠燈屬于中小目標,利用YOLOv3大尺度特征圖檢測會影響檢測速度。
c.嵌入式設備TX2利用YOLOv3檢測模型進行目標檢測時,模型加載時間長、檢測速度低、內存消耗嚴重。
針對上述問題,本文從3個方面對YOLOv3進行改進。
在錨框尺度預測過程中,傳統YOLOv3 算法使用K-Means算法獲得錨框尺度的參數,對預測框的位置進行初始化,錨框尺度用像素值表示。K-Means算法在聚類效果上十分依賴聚類簇數量K的選擇,隨機選擇的方式不一定會得到全局結果最優,影響聚類結果。
為了改善原有K-Means 算法的聚類效果,使用KMeans++[11]算法進行改進,聚類原則為盡量使每個聚類中心的歐式距離最大,而非隨機產生。具體步驟為:
a.確定K,從輸入的數據點集合中隨機選擇一個數據點作為第1個聚類中心C1;
b.計算剩余樣本與當前最近一個聚類中心的距離D(x),D(x)越大,表示被選取作為聚類中心的概率越大,概率p(x)的計算方式為:

式中,x為數據集中的樣本點;X為整體樣本點的集合。
c.使用輪盤法選出下一個聚類中心;
d.重復b、c,直至選出K個聚類中心[C1,C2,…,Ck];
e.計算數據集中的點的向量與挑選出的質心向量之間的歐氏距離,并將每個點劃分至與其距離最近的質心簇中,計算方式為:

式中,li為質心所屬類別;xi為數據集中剩余的數據點對應的向量;μj為已經挑選出的質心對應的向量。
f.所有數據經過第1 輪迭代獲得相應的類別后,重新計算每個聚類集合的質心,并將所有點的類別標記為距離最近的質心的類別。
不斷重復該過程,算法結束條件為新計算出的質心與原質心的距離小于設置閾值。針對本文數據集,設K-Means++算法中聚類簇數量為K=9個時,錨框尺度聚類精度可達88.68%,9個錨框尺度分別為(12,64)、(8,45)、(9,49)、(5,28)、(15,78)、(6,33)、(7,39)、(19,102)、(10,54)。
在YOLOv3 算法的3 次不同尺度的檢測中,不同的特征圖對應不同的感受野:13×13 的特征圖感受野最大,適用于大目標物體檢測,當網絡的輸入圖片分辨率參數為416×416 時,每個網格的3 個錨框尺度分別為(116,90)、(156,198)、(373,326);26×26 的特征圖感受野適用于中等物體的檢測,錨框尺度為(30,61)、(62,45)、(59,119);52×52 的特征圖感受野最小,適用于小目標檢測,錨框尺度為(10,13)、(16,30)、(33,23)。針對本文的應用場景,紅綠燈目標屬于中小目標,采用大尺度特征檢測一般不起作用,反而會增加計算量,所以對YOLOv3 算法的網絡結構的大尺度特征檢測進行裁減,裁減后的網絡結構如圖1所示,網絡結構主要包括3個部分,即圖片輸入、基礎網絡以及網絡的2個多尺度檢測分支YOLO-2、YOLO-3。只保留了26×26×24、52×52×24 2 個輸出維度,分別對應YOLO-2和YOLO-3,去掉YOLO-1的大尺度特征檢測分支(見圖1),即可在準確識別中小目標的同時,加快檢測速率,滿足無人車實時性檢測的要求。

圖1 修改后的網絡結構
YOLOv3 采用的骨架網絡為Darknet-53,53 層的網絡結構使得模型精度大幅度提升,但是模型的參數量也隨之增多,訓練得到的模型參數量約為260 MB。目前無人車使用的車載計算單元正逐步向體積小、耗能低以及成本更低的嵌入式設備發展,嵌入式設備TX2與計算機GPU平臺在性能上有較大差異。
使用嵌入式設備TX2 執行目標檢測時,存在模型加載時間長、對計算機內存消耗嚴重的問題。為解決以上問題,借鑒網絡模型壓縮的思想[12],對訓練得到的檢測模型進行壓縮。
模型剪枝的基本流程主要包括模型稀疏訓練、模型剪枝、模型微調3 個步驟。在稀疏化訓練過程中,在YOLOv3的網絡結構中,每個卷積層后都增加了批量歸一化(Batch Normalization,BN)層,對通道進行歸一化操作:

式中,γ、β為用于縮放和平移的參數;E為每一批訓練數據的均值;Var為每一批訓練數據的方差。
將BN 層的參數γ作為通道剪枝因子,經過卷積層計算得到的特征圖大小為w×h×c,其中w、h分別為特征圖的寬和高,c為特征圖的通道數量。
模型在稀疏化的過程中需要訓練BN 層的參數γ,并且引入L1 正則化[13],不斷壓縮γ的值。通過壓縮,某些通道的γ趨于0,對于γ=0 的通道以及濾波器直接進行裁減,對于剩余的通道制定裁剪比例,去掉對應的通道以及濾波器,完成模型的裁剪。
完成模型剪枝操作后,網絡卷積層的通道數量會變得混亂,導致模型檢測精度有所下降,需對裁剪后的網絡結構進行進一步調整,根據Darknet-53 網絡結構特點,將殘差結構作為基本單元結構進行修整,調整過程為:

式中,a為裁剪后每層濾波器的數量;x為修整后濾波器的數量。
對裁減后的模型進行網絡結構的重新修正,然后通過模型微調的方式恢復部分重要的權值,減少剪枝操作對模型精度的損傷,就可以在保證模型性能的條件下,最大程度地壓縮模型參數數量和運算量。
為了驗證改進算法有效性和可行性,設計了離線數據測試和實際環境實時測試。在園區紅綠燈檢測領域中,目前沒有開源的大型數據集,本文采用自制數據集。在北京聯合大學校區內,在室外校園環境和地下車庫室內共采集12 個地點,共采集圖片3 000 張,其中,2 200 張圖片作為訓練數據集,另外800 張圖片作為測試數據集,并在訓練數據集中抽取220張圖片作為驗證數據集,部分數據集圖像如圖2所示。

圖2 部分數據集圖像
在離線數據測試中,設置了4組對比試驗:驗證KMeans++算法相對于K-Means 算法在本文數據集上聚類精度的優化;驗證利用K-Means++算法得到的錨框尺度在本文數據集上目標檢測精度的優化;裁減大尺度特征檢測分支的YOLOv3 算法在目標檢測速度上的優化;經模型剪枝的檢測模型在精度和速度上的優化。
第1組試驗中,利用K-Means++與K-Means算法在本文數據集上分別設置了1~9個聚類簇,不同聚類簇下二者聚類精度如圖3所示,在本文數據集上,K-Means++算法聚類精度相對于K-Means算法提升了約2.1%。

圖3 聚類精度對比
第2組試驗中,將K-Means++算法在本文數據集上進行維度聚類后得到的錨框尺度應用在目標檢測中,采用準確率、召回率評估檢測模型的準確性。準確率為:

式中,P為準確率;Tp為模型正確檢測到的目標數量;Fp為系統錯誤檢測到的目標數量。
召回率R為:

式中,FN為系統錯誤檢測以及漏檢的數量。
為了更加客觀地對模型性能進行評價,使用類別精度(Average Precision,AP)來表示模型對某一類別的檢測精度,每一個類別都可以得到準確率與召回率的關系,即精確率-召回率(Precision Recall,PR)曲線,PR 曲線下的面積即對某一類別計算得到的類別精度。針對多個類別,使用平均精度(mean Average Precision,mAP)來表示模型的整體檢測性能:

式中,N為類別數量;Apc為每一個類別的類別精度。
利用改進前的YOLOv3 算法和改進錨框尺度后的YOLOv3 算法對本文數據集進行測試,結果如表1 所示,2 種算法的PR 曲線如圖4 所示。在超參數設置相同的情況下,改進錨框尺度后的YOLOv3 算法相比于YOLOv3算法平均精度提高了34百分點。

表1 改進前、后YOLOv3測試結果
第3 組試驗中,裁減后的YOLOv3 算法的平均幀速率提高了13幀∕s,平均精度下降了0.8百分點,各類別的檢測精度變化如表2 所示。精度下降是由于測試數據集中有近距離的紅綠燈測試集,去掉大尺寸檢測框雖然防止了大尺寸誤判,也導致這些目標的漏判,但是在精度可比的情況下,檢測速度大幅提升。


表2 裁剪大尺度特征檢測前后對比
第4組試驗中,通過對稀疏化訓練后的檢測模型進行通道剪枝,模型參數量縮減至11.9%,檢測模型剪枝前、后和微調后的模型參數量以及模型加載時間變化情況如表3 所示。使用剪枝后的檢測模型再次對本文數據集進行測試,平均精度下降了13百分點,模型加載時間縮短了4.5 s。模型檢測精度下降是模型稀疏化訓練導致的,通過對剪枝后的模型網絡結構進行修整并通過模型微調降低剪枝對模型精度的影響,模型在微調過程中平均精度變化曲線如圖5 所示,迭代150 次后,模型的平均精度為93%,雖然下降了5百分點,但在模型精確度可比的情況下,參數量大幅縮減,極大縮短了模型加載時間,減小了計算單元硬件資源壓力。

表3 檢測模型剪枝前后性能對比

圖5 模型微調平均精度變化
本文在校園實際環境測試中,采用第四代小旋風智能車以及移動式紅綠燈,如圖6所示。車載電腦為嵌入式設備Jetson TX2,硬件配置為6 核CPU 架構,256 核Pascal架構的GPU核心,內存8 GB。

圖6 試驗平臺
使用視頻逐幀統計的方法對模型檢測性能進行評價。為了驗證模型的魯棒性,分別在北京聯合大學園區環境以及干擾條件下的地庫環境隨機選取了3 組不同的測試場景,檢測正確率計算公式為:

式中,D為正確率;TD為模型正確檢測出的視頻幀總數量;TF為模型錯誤檢測出以及漏檢的視頻幀總數量之和。
使用檢測模型對園區紅綠燈進行檢測,選取園區3個隨機測試場景和3個干擾測試場景,分別如圖7、圖8所示。其中園區場景和干擾場景的各類視頻幀總數量以及檢測結果如表4 所示,各類別的詳細檢測結果如圖9 所示,從模型測試結果來看,園區環境中場景2 的檢測率有所下降,這是由于攝像頭受到了強光的影響。試驗數據表明,園區測試場景下的平均測試精度為94.5%,在干擾環境下的平均測試精度為94.75%。

圖7 園區測試結果

圖8 干擾環境測試結果

表4 園區環境測試統計

圖9 園區紅綠燈類別檢測結果
為了證明本文算法的泛化性,開展了實際道路中的交通紅綠燈的測試工作,在10 km的道路測試中,共有2類交通燈,分別為十字路口的交通紅綠燈和單行道行人路口交通紅綠燈,部分測試結果如圖10所示。

圖10 實際道路紅綠燈檢測結果
在10 km的車程中,對道路出現的紅綠燈共采集測試150幀圖像數據,檢測結果統計如表5所示,從模型對3種不同類型的紅綠燈的檢測結果來看,黃燈的檢測正確率低于其他2 類的原因是黃燈數據集偏少,綜合來看,模型對實際道路紅綠燈的平均檢測率為92.7%。

表5 實際道路紅綠燈檢測統計
本文基于嵌入式設備TX2,采用改進YOLOv3 算法完成無人車的園區紅綠燈檢測任務。首先針對YOLOv3原有的錨框尺度進行改進,使用K-Means++算法得到最優錨框尺度,使得模型的檢測精度從64%提升至98%,通過裁減網絡大尺度檢測分支,幀速率從4幀∕s提高至19幀∕s。在無人車的實際測試中,對非結構化移動式紅綠燈的識別正確率為94.75%,對實際道路的結構化紅綠燈檢測率為92.7%。通過對檢測模型進行剪枝壓縮,在精確度可比的情況下,模型的參數量縮小至原來的11.9%,模型加載時間縮短了4.5 s,極大地降低了硬件資源的消耗,可以滿足無人車在嵌入式設備TX2下,完成園區紅綠燈目標識別的任務。后續將繼續優化模型剪枝策略,提高剪枝后模型的檢測精度與速度。