張凱祥, 朱 明
(中國科學技術大學 信息科學技術學院, 合肥 230027)
隨著卷積神經網絡的快速發(fā)展, 自動駕駛越來越多地出現(xiàn)在我們的視野中, 成為研究人員重點研究的領域. 在自動駕駛中, 環(huán)境感知是至關重要的, 可以為控制系統(tǒng)提供不可或缺的環(huán)境信息, 保證車輛的正常行駛. 自動駕駛的環(huán)境感知一般包括目標檢測、車道線檢測以及可行駛區(qū)域分割. 目標檢測主要用于檢測行駛道路上的道路交通標志、周邊車輛、行人等, 使得車輛可以遵守道路交通規(guī)則, 避讓行人. 車道線檢測是用于提取道路的邊緣線, 用于自動駕駛車輛的定位和糾偏, 是平穩(wěn)安全行駛的重要保障之一. 可行駛區(qū)域分割是將自動駕駛車輛行駛的道路進行全景分割, 并檢測其中可行駛的區(qū)域, 前方道路阻塞, 障礙物擋道等情況下, 可保證車輛行駛安全.
近年來, 人工智能技術的革新進一步推動了自動駕駛領域的發(fā)展. 對于單任務的環(huán)境感知方法, 目標檢測算法通常分為兩階段目標檢測和單階段目標檢測[1],兩階段目標檢測算法首先對輸入圖像提取候選框, 再根據第一階段選定的候選框擬合最后的檢測結果, 可以更好地處理類別不均衡的問題, 檢測精度更高, 但由于需要進行兩階段計算, 速度較慢, 無法滿足實時檢測場景; 單階段目標檢測則同時進行分類和檢測, 直接生成物體類別概率和位置坐標, 提高了檢測速度, 但精度有所下降. 基于卷積神經網絡的車道線檢測通常作為語義分割任務對輸入圖片進行分類, 通過后處理擬合出最后的車道線, 但由于車道線像素較少, 造成了類別不平衡的問題, 降低了檢測的準確率. 可行駛區(qū)域分割一般也是作為語義分割任務, 對輸入像素進行二分類,從而分割出背景和可行駛區(qū)域.
然而自動駕駛場景需要同時獲取道路上的多種信息, 單個任務的環(huán)境感知方法無法滿足需求, 因此多任務自動駕駛環(huán)境感知算法成了開發(fā)人員的迫切需要.多任務的環(huán)境感知算法通常結合多個任務的特點, 設計符合要求的骨干網絡, 多個分支之間共享參數, 從而減少計算量.
基于YOLOv5網絡[2], 本文提出了一個用于多任務自動駕駛環(huán)境感知算法, 如圖1所示, 可根據單張輸入圖片端到端地輸出目標檢測, 車道線檢測和可行駛區(qū)域分割的結果. 編碼部分以改進的YOLOv5作為骨干網絡, 解碼時目標檢測頭仍使用YOLOv5檢測頭, 車道線檢測和可行駛區(qū)域分割作為兩個語義分割任務共享骨干網絡, 在解碼部分采用實時語義分割網絡ENet頭[3]進行解碼, 由于分割任務和目標檢測任務存在一定的差異, 因此本文為分割任務單獨增加一個FPN結構[4], 以獲得更好的分割效果.
圖1 多任務環(huán)境感知算法處理結果
基于卷積神經網絡(CNN)的目標檢測根據有無候選框的生成分為兩階段目標檢測和單階段目標檢測,對兩階段目標檢測算法, Girshick等人首次提出用含有CNN特征區(qū)域進行目標檢測的算法R-CNN[5], 效果顯著優(yōu)于基礎傳統(tǒng)圖像特征的方法, 但由于存在大量冗余的特征計算, 速度比較低. Lin等人提出了空間金字塔池化網絡[4], 使得CNN只需要計算一次特征圖,避免了反復計算卷積特征. Ren等人提出Faster-RCNN檢測算法[6], 引入了區(qū)域生成網絡, 是第一個端到端的實時目標檢測網絡, 但其網絡的檢測部分仍存在冗余計算. 對于單階段目標檢測算法Redmon等人首次提出單階段目標檢測算法YOLOv1[7], 完全拋棄了提取候選框再驗證的檢測范式, 而是將圖像分割成多個區(qū)域, 同時預測每個區(qū)域的邊界框和檢測分類, 但其對于小物體的定位效果較差. Redmon等人先后發(fā)布了YOLOv2[8], YOLOv3[9], 通過引入類似于ResNet的殘差結構以及FPN等操作, 提高了檢測精度. Bochkovskiy等人提出YOLOv4[10], 以CSPDarknet53作為骨干網絡, 引入空間金字塔池化(SPP)模塊等, 大幅度提高了檢測的速度和精度. 同年, Ultralytics提出YOLOv5[2],通過基于訓練數據集自動適應錨點框等不僅減少了模型大小, 還大大提高了訓練收斂的速度, 根據網絡不同的深度和寬度實現(xiàn)了s, l, m, x四個版本, 本文在YOLOv5s v6.0的基礎上進行相關算法的實現(xiàn)和改進.
可行駛區(qū)域分割是以語義分割任務進行處理的,語義分割是計算機視覺的另一個關鍵任務, Long等人首次提出全卷積網絡FCN[11]用于語義分割. 隨后Chen等人[12]提出Deeplab系列的分割網絡, 提出了空洞卷積擴大了感受野, 在空間維度上實現(xiàn)金字塔型的空間池化. Zhao等人提出PSPNet[13], 新增金字塔池化模塊用于聚合背景并采用了附加損失. 由于以上語義分割的速度都達不到實時, Paszke等人提出實時語義分割網絡ENet[3], 使用bottleneck模塊以更少的參數量獲得更高的精度.
車道線檢測方面, 基于深度學習的方法常分為基于語義分割的方法和基于行分類的方法. Pan等人提出基于分割的車道線檢測網絡SCNN[14], 設計了一個特殊的3D操作, 能夠更好地獲取全局特征. Hou等人提出基于知識蒸餾的車道線檢測算法SAD, 增強了多種輕量級車道線檢測模型如ENet-SAD[15], 并在多個數據集取得SOTA效果. 為了提高實時性, 降低計算量, Qin等人提出基于分類的車道線檢測算法[16], 轉換為逐行分類任務, 提高了檢測速度.
多任務環(huán)境感知是單個深度學習模型能夠同時完成兩個或兩個以上的檢測任務, 不同任務之間通過共享參數等減少計算量, 并且有關聯(lián)的檢測任務相互促進可以達到更好的擬合效果. Teichmann等人提出基于編解碼結構的多任務網絡MultiNet[17], 可同時處理目標檢測, 路面分割和場景分類3個任務, 3個任務共享編碼結構, 使用3個不同的解碼器得到3個任務的結果, 但其在目標檢測解碼階段缺乏尺度信息, 對于不同大小的物體檢測效果一般, 分割部分采用FCN結構存在較多冗余計算, 速度較慢. Qian等人提出DLT-Net[18],在子任務解碼器之間構建了上下文張量共享參數, 能夠同時處理目標檢測, 車道線檢測和可行駛區(qū)域分割3個任務, 但由于這種共享方式也導致該網絡在車道線稀疏的場景表現(xiàn)效果不佳. Wu等人提出實時多任務網絡YOLOP[19], 也是同時處理DLT-Net中的3類任務,只是在參數共享部分, 3個任務僅共享了編碼階段, 在解碼時單獨處理, 該網絡在BDD100K數據集[20]上取得了SOTA效果, 但由于未考慮到分割任務和目標檢測任務的差異性, 導致在車道線檢測方面的準確率較低.
為了在自動駕駛中同時進行目標檢測, 車道線檢測和可行駛區(qū)域分割, 本文貢獻如下: 1) YOLOv5s作為骨干網絡, ENet作為分割分支設計了多任務自動駕駛環(huán)境感知網絡; 2) 在車道線檢測任務和可行駛區(qū)域分割任務前設計獨立的FPN結構, 以提高車道線檢測和可行駛區(qū)域分割的準確率; 3) 損失計算時使用更優(yōu)越的 α -IoU[21]計算方法. 實驗表明, 本文所提算法優(yōu)于當前流行的多任務深度學習網絡YOLOP等.
本節(jié)從網絡結構, 損失函數兩部分進行詳細介紹本算法結構.
整個網絡的結構如圖2所示, 網絡由特征提取模塊, 空間特征池化模塊, 檢測模塊組成.
圖2 基于YOLOv5的多任務自動駕駛環(huán)境感知算法網絡結構
(1) 特征提取模塊
本文使用YOLOv5s[2]的CSPDarknet作為特征提取模塊, 以3通道的圖片作為輸入, 經過多層卷積后得到的特征圖為原圖的1/32, v6.0版本YOLOv5的特征提取模塊有以下特點. 第一是使用一個等效的卷積層替換了Focus層, 不僅提高了運算速度, 更方便導出模型; 第二是使用模塊C3取代之前的BottleneckCSP, 降低了卷積層的深度, 也取消了Concat層之后的卷積層,以達到更快的速度. 第三是標準卷積中封裝了3個模塊, 包括卷積(Conv2d)、批量標準化(BatchNorm2d)、激活函數, 標準卷積的激活函數使用SiLU函數, 該函數的數學表達式如下所示:
Sigmoid函數在趨向無窮的地方, 容易造成梯度消失, 不利于深度神經網絡的反向傳播, 而SiLU函數的一階導數則更加平緩, 更適合提取更深層網絡的特征.
(2) 空間特征池化模塊
在編碼器和解碼器之間有一層空間特征池化層,該層包括快速空間卷積池化層(SPPF)和特征金字塔層(FPN), 如圖2所示, SPPF層由兩個標準卷積層和3個MaxPoll層以及相加層組成, 相對于原YOLOv5的SPP層, 將MaxPool層的kernel_size統(tǒng)一設置為5,通過級聯(lián)的方式連接3個MaxPool層, 不僅精度未下降, 還大大提高了推理速度. SPPF層主要用于提取不同尺寸的特征圖, 將不同感受野的特征融合, 有利于檢測不同尺度的物體. FPN實現(xiàn)的具體步驟如表1所示, 表中以輸入大小為640×640的3通道圖片為例,FPN層的輸入是SPPF層的輸出, 為原尺寸的1/32,經過多層卷積以及尺度參數為2的上采樣層, 經過Concact層與編碼器不同尺度的特征融合, 最終得到特征金字塔, 用于下游的檢測和分割任務. 本文在實驗中發(fā)現(xiàn)目標檢測任務和其他兩類分割任務存在明顯差異, 目標檢測任務關注的更多是全局特征, 而分割任務則更關注像素級特征, 應設計獨立的FPN結構, 以輔助分割分支更好地獲取輸入圖像特征, 擬合最終的結果.
表1 FPN網絡結構具體實現(xiàn)
(3) 檢測模塊
本文將3個任務分別用3個檢測頭來完成, 目標檢測任務的檢測頭和YOLOv5保持一致, 將車道線檢測視為分割任務, 與可行駛區(qū)域分割任務一樣, 都采用ENet檢測頭. 如圖2所示, 目標檢測檢測頭的輸入是自頂向下的FPN結構的不同尺度的特征, 再經過一個自底向上的路徑聚合網絡(PAN), 最終經過檢測頭輸出不同尺度的計算結果. 為了達到實時檢測的效果, 本文的分割任務采用和ENet類似的檢測頭, Bottleneck upsample層是將卷積和上采樣層聚合的模塊, Bottleneck regular層由3層卷積和激活函數以及Dropout層構成,Dropout層用于提高模型泛化能力, 防止過擬合, ENet的檢測頭部的輸入是FPN的最后一層的輸出特征, 經過多層Bottleneck層后通過全卷積層輸出分割結果,由于本文都是二分類, 因此最后的特征圖大小是(2, W,H), 分別代表背景類像素和目標像素的概率.
本文的損失函數計算包含3個分支的部分, 目標檢測分支的損失記為 Ldet, 該部分的損失包含分類損失Lclass, 回歸損失Lbox和 置信度損失Lobject, 3類損失加權后構成了目標檢測部分的損失, 如下所示:
分類損失使用二分類交叉熵損失, 計算公式如下:
式(3)和式(4)考慮到一個物體可能屬于多個類別的問題, N 表示類別總數, xi表示當前類別的預測值,yi代表經過激活函數后的當前類別的概率,表示當前類別的真實值(0或1).
邊界框回歸損失本文在YOLOv5的基礎上進行改進, 原YOLOv5的回歸損失采用的是CIoU, 計算公式如下所示:
其中, ρ(B,Bgt)為目標框和真實框中心點之間的距離,c為包住目標框和真實框的最小外接框的對角線長度,v 用來度量目標框寬高比的一致性, β為權重函數. 本文在YOLOv5s v6.0的基礎上, 使用α-IoU取代CIoU計算邊界框回歸損失, 計算公式如下:
通過調節(jié)α, 可以使檢測器在不同水平的邊界框回歸方面具有更大的靈活性, α大于1時有助于提高IoU較大的目標回歸精度.
車道線檢測損失 Lll和可行駛區(qū)域分割損失 Lda都包含交叉熵損失, 借鑒YOLOP的損失計算方法, 本文在車道線檢測任務中也加入了IoU損失, 以提高車道線的檢測精度, 最后總體的損失由3個任務加權后的損失組成, 計算如下所示:
本文測試數據集是BDD100K, 該數據集是目前最大規(guī)模, 內容最具有多樣性的公開自動駕駛數據集, 共有100k張圖片, 其中訓練集70k張, 驗證集10k張, 測試集20k張, 包含晴天、陰天、雪天、雨天、多云、有霧6種不同天氣, 以及城市道路、隧道、高速公路、住宅、停車場、加油站6種不同場景.
本文實驗中訓練時的warmup設置為3個epoch,初始的學習率設置為0.001, 優(yōu)化器使用ADAM,β=(0.9,0.999), IoU閾值為0.2, anchor閾值設置為4.0,損失函數計算時, α設置為3, α1-α3, γ1-γ3設置為1. 因為BDD100K的測試集并未完全公開3類任務的標簽,因此本文在70k張訓練集圖片上訓練, 并在驗證集上驗證模型效果. 數據增強方面, 本文主要考慮到光照畸變和幾何畸變, 光照畸變本文通過隨機改變圖片的色調、飽和度和亮度進行增強, 幾何畸變本文通過隨機旋轉、縮放、平移和左右翻轉等幾何操作進行增強數據集, 以提高模型在不同環(huán)境中的魯棒性. 本實驗過程中測試FPS時使用的硬件配置如表2所示.
表2 實驗所用硬件配置
為了驗證本算法的有效性, 本文分別從3個任務的檢測結果與其他多種多任務環(huán)境感知算法對比, 本文和當前最好的多任務自動駕駛環(huán)境感知算法YOLOP的結果對比圖如圖3所示.
圖3 實驗結果對比圖
從圖3中我們可以看到, 在白天, 夜晚以及雨天的情景下, 我們的算法處理結果均優(yōu)于當前最好的多任務網絡YOLOP. 在第1張圖片中, 本文的目標檢測邊界框回歸更精準, 而YOLOP還出現(xiàn)了誤檢的情況; 第2張圖片中, YOLOP的車道線檢測出現(xiàn)了缺失, 過長等情況, 本文結果車道線擬合更準確; 第3張圖片在雨天的情況下, 本文的結果仍比YOLOP的處理結果精度更高.
目標檢測方面如表3所示, 本文對比了當前流行的多任務深度學習網絡MultiNet[17], DLT-Net[18], 以及目前表現(xiàn)SOTA的YOLOP, 除此之外筆者還對比了單任務目標檢測網絡Faster R-CNN[6]和YOLOv5s[2], 關于速度的測試都是基于顯卡NVIDIA GeForce 1080Ti進行的, 表中對比3個目標檢測評價標準召回率、平均精度和幀率, 可以看出本文工作結果在多任務中取得了SOTA效果, 檢測準確率比當前最好的多任務網絡提高了0.9%, 速度也提高了0.9 , YOLOv5s的速度雖然比本文快, 但是該網絡沒有處理分割任務的能力.
表3 目標檢測結果對比
可行駛區(qū)域分割的結果如表4所示, 在對比時除了3個多任務網絡還對比了單任務分割網絡PSPNet[13],使用平均交并比(mIoU)來評價網絡, 從結果可以看出本文結果在BDD100K和其他網絡相比表現(xiàn)最佳.
表4 可行駛區(qū)域分割結果對比
車道線檢測的結果如表5所示, 實驗對比了多任務網絡YOLOP以及一些傳統(tǒng)的單任務車道線檢測網絡ENet[3], SCNN[14], ENet-SAD[15], 使用準確率和IoU評價網絡的效果, 準確率的定義如下:
表5 車道線結果對比 (%)
為驗證本文算法對于復雜場景的有效性, 本文對BDD100K數據集中的不同場景、不同時段的圖片分別計算3個任務的檢測性能, 結果如表6所示, 從表中可以看出本算法在各個場景下均優(yōu)于YOLOP.
表6 不同場景下結果對比 (%)
為了驗證本文所提網絡中用到的模塊的有效性,本文做了如下消融實驗, 采用普通的IoU計算方式和去除分割分支的獨立FPN結構進行實驗, 實驗結果如表7所示.
表7 消融實驗結果對比 (%)
表7中網絡baseline在損失函數計算時使用一般的CIoU計算方式, 分割分支和目標檢測分支共用一個特征金字塔結構, 目標檢測使用mAP評價, 可行駛區(qū)域分割使用mIoU評價, 車道線檢測使用準確率進行評價. 從表7中結果我們可以看到, α-IoU提升了目標檢測準確率, 而獨立FPN結構則有效提升了分割分支的檢測效果.
本文基于YOLOv5設計了一個多任務自動駕駛環(huán)境感知算法, 可以同時處理目標檢測, 可行駛區(qū)域分割,車道線檢測3個任務, 并且在1080Ti顯卡上達到了76.3 fps, 在BDD100K數據集上與其他多任務網絡相比取得了最佳的效果. 下一步的研究工作將在本文的基礎上結合車道線檢測的特點, 增加一些后處理操作,進一步提高車道線檢測的準確率, 構建一個工業(yè)級的多任務自動駕駛環(huán)境感知算法.