在前面的課程裏,我們提到了感知模塊內的計算機視覺和深度學習,這節課我們來講一講感知任務中的分類、跟蹤、語義分割和 Apollo 感知相關的內容。
在駕駛過程中無人車會遇到許多障礙物,靜態障礙物包括牆壁、樹木、杆子、建築物;動態障礙物包括行人、自行車和各種汽車 ,計算機首先要知道這些障礙物的位置,進而障礙物進行分類。
一、檢測與分類
在行駛過程中無人車會探測到許多不同的物體,汽車根據所感知的物體類型來確定路徑和速度。
如果感知到前方有一輛自行車,汽車可能會決定減速或變道,以便安全駛過自行車;但是,如果感知到前方是一輛汽車,並預測到前方車輛也將以接近限速的速度行駛,無人車可能會保持其速度與車道。當無人車前方出現交通信號燈時候,首先計算機視覺會對圖像中的交通信號燈進行定位,進而根據交通信號燈顯示的顏色對其進行分類。
那麼,無人車是用什麼算法來對障礙物進行檢測和分類的?
首先,我們可以使用檢測 CNN 來查找圖像中對象的位置,在對圖像中的對象進行定位後,我們將圖像發送給另一個 CNN 進行分類;我們也可以使用單一 CNN 體系結構對對象進行檢測和分類,此時通常的做法是在單個網絡體系結構的末端附加幾個不同的“頭”,一個頭可能執行檢測,另一個則可能執行分類。
一個經典的體系結構為 R-CNN 及其變體 Fast R-CNN 和 Faster R-CNN,YOLO 和 SSD 是具有類似形式的不同體系結構。
二、跟蹤
在檢測完對象後,我們要對檢測到的對象進行追蹤,進而我們需要知道:
追蹤的意義是什麼?如果我們對每個幀中的每個對象進行檢測,並用邊界框對每個對象進行標識,那麼跨幀追蹤對象會有什麼好處?首先,追蹤可以解決遮擋問題。如果在運行檢測算法時,對象被其他對象遮擋了一部分,則檢測算法可能會失敗,所以追蹤在檢測失敗時至關重要。
目標對象被遮擋後,檢測算法可能會失敗
追蹤可以解決目標對象被遮擋的問題
同時,追蹤可以保留身份。障礙物檢測的輸出為包含對象的邊界框,但是,對象沒有與任何身份關聯,單獨使用對象檢測時,計算機不知道一個幀中的哪些對象與下一個幀中的哪些對象相對應。該任務對人類來説很簡單,但對汽車來説很困難。
沒有身份關聯時,計算機無法分辨每一幀
通過追蹤保留身份
追蹤的第一步為確認身份。通過查找特徵相似度最高的對象,我們將在之前的幀中檢測到的所有對象,與當前的幀中檢測到的對象進行匹配,對象具有各種特徵,有些特徵可能基於顏色,而另一些特徵可能基於形狀,計算機視覺算法可以計算出複雜的圖像特徵,如局部二值模式和方向梯度直方圖。
我們也需要考慮連續視頻幀中兩個障礙物之間的位置和速度,由於兩個幀之間的對象位置和速度沒有太大變化,該信息也可以幫助我們快速找到匹配的對象,在確定身份後,我們可以使用對象的位置並結合預測算法,以估計其在下一個時間步的速度和位置,該預測可幫助我們識別下一幀中的相應對象。
根據兩個幀對象的位置和速度確認身份
三、語義分割
語義分割涉及對圖像每個像素進行分類,它用於儘可能詳細地瞭解環境,並確定車輛可駕駛區域。語義分割依賴於一種特殊類型的 CNN,它被稱為全卷積網絡或 FCN,FCN 用卷積層來代替傳統 CNN 體系結構末端的平坦層。現在,網絡中的每一層都是卷積層,因此其名稱為“全卷積網絡”。
FCN 提供了可在原始輸入圖像之上疊加的逐像素輸出, 但我們必須考慮的一個複雜因素是大小。在典型的 CNN 中,經過多次卷積之後所產生的輸出比原始輸入圖像小得多,然而,為了分割像素,輸入尺寸必須與原始圖像的尺寸相匹配。
為了達到該目的,我們可以對中間輸出進行上採樣處理,直到最終輸出的大小與原始輸出圖像的大小相匹配。網絡的前半部分通常被稱為“編碼器”,因為這部分網絡對輸入圖像的特徵進行了提取和編碼。網絡的後半部分通常被稱為“解碼器”,因為它對這些特徵進行了解碼,並將其應用於輸出。
四、Apollo 的感知算法
Apollo 開放式軟件棧可感知障礙物、交通信號燈和車道,對於三維對象檢測,Apollo 在高精度地圖上使用感興趣區域(ROI)來重點關注相關對象,Apollo 將 ROI 過濾器應用於點雲和圖像數據,以縮小搜索範圍並加快感知。
然後,通過檢測網絡饋送已過濾的點雲,輸出用於構建圍繞對象的三維邊界框
最後,我們使用被稱為檢測跟蹤關聯的算法來跨時間步識別單個對象。該算法先保留在每個時間步要跟蹤的對象列表,然後在下一個時間步中找到每個對象的最佳匹配。
當無人車前方出現交通信號燈時,Apollo 先使用高精度地圖來確定前方是否存在交通信號燈。如果前方有交通信號燈,則高精度地圖會返回燈的位置,這側重於攝像頭搜索範圍。
在攝像頭捕獲到交通信號燈圖像後,Apollo 使用檢測網絡對圖像中的燈進行定位,然後 Apollo 從較大的圖像中提取交通信號燈,Apollo 將裁剪的交通燈圖像提供給分類網絡,以確定燈顏色,如果有許多燈,則系統需要選擇哪些燈與其車道相關。
Apollo 使用 YOLO 網絡來檢測車道線和動態物體,其中包括汽車、騎自行車的人和行人。在經過 YOLO 網絡檢測後,在線檢測模塊會併入來自其他傳感器的數據,對車道線預測進行調整,車道線最終被併入名為“虛擬車道”的單一數據結構中。同樣也通過其他傳感器的數據對 YOLO 網絡所檢測到的動態對象進行調整,以獲得每個對象的類型、位置、速度和前進方向、虛擬通道和動態對象,均被傳遞到規劃和控制模塊。
五、 Apollo 的感知融合策略
感知通常依賴於攝像頭、激光雷達和雷達,該圖顯示了三種傳感器的優缺點
由上圖可知:
攝像頭非常適用於分類,在 Apollo 中攝像頭主要用於交通信號燈分類以及車道檢測;激光雷達的優勢在於障礙物檢測,即使在夜間沒有自然光的情況下, 激光雷達仍能準確地檢測障礙物;雷達在探測範圍和應對惡劣天氣方面佔優勢。通過融合這三種傳感器的數據,實現最佳聚合性能被稱為傳感器融合。Apollo 使用激光雷達和雷達來檢測障礙物,用於融合輸出的主要算法為卡爾曼濾波。卡爾曼濾波有兩個步驟,第一步為預測狀態,第二部是更新測量結果。
設想我們正在跟蹤一名行人,這裏的狀態表示行人的位置和速度,從已經掌握的行人狀態開始,我們使用這些信息來執行卡爾曼濾波的第一步,即預測行人在未來的狀態,下一步為誤差結果更新,我們使用新的傳感器來更新我們所認為的行人狀態。
卡爾曼濾波的算法是預測和更新步驟的無限循環,實際上有兩種測量結果更新步驟,同步和異步。同步融合同時更新來自不同傳感器的測量結果,而異步融合則逐個更新所收到的傳感器測量結果,傳感器融合可提高感知性能,因為各傳感器相輔相成,融合也可以減少跟蹤誤差,所以我們可以更加確信對道路上其他物體位置的預測。
同步更新示意
異步更新示意
在最近的三節課中,我們介紹了無人車的感知運作方式,涉及了不同的方法和傳感器, 我們瞭解了主要的感知任務,包括檢測、分類、跟蹤和分割,這些應用中的大部分都依賴於卷積神經網絡,最後我們探討了傳感器融合,以及如何使用預測更新週期來過濾傳感器數據。正是有了這些工具,無人駕駛才可以使用自身的傳感器來感知世界。
如果您對無人車的“感知”模塊還有疑問,請在文末留言,我們會為您依次解答。接下來我們將開啓新的章節——自動駕駛的“預測”模塊。