Categories
程式開發

無人駕駛中的3D目標檢測技術


隨著全球科技的飛速發展,無論是汽車行業還是其他的各行各業,緊跟時代腳步的重要性都是不容置疑的。近年來,自動駕駛汽車得到了很高的關注,但是理想和現實的差距卻猶如天塹。在這樣的背景下,我們決定將項目目標放在Lyft自動駕駛汽車的3D目標檢測上。

為什麼至今還沒有無人駕駛汽車?

自動駕駛汽車是現代社會討論最多的的技術之一。儘管許多公司都聲稱他們的駕駛輔助技術為“自動駕駛(autopilot)”,然而真正無需司機存在的自動駕駛汽車,還未在公共道路上出現。

無人駕駛中的3D目標檢測技術 1

來源:http://post.toutptit-toutbio.com/page-3/self-driving-car-timeline-28811.html

目前,全自動駕駛是處於汽車無人駕駛分級中的第四級。無人駕駛總共有五個等級:

1.最低等級是零級,汽車沒有任何駕駛輔助技術。這一類包含了目前在美國公路上的大部分車輛。
2.等級一是汽車擁有一定駕駛輔助系統,例如盲點信息系統(BLIS),自適應巡航控制系統(ACC),自動緊急制動系統(AEB)。近些年發售的新車中大多都包含這類系統,這些駕駛輔助系統只會在檢測到其他車輛時才會介入。
3.等級二的車輛可以控制方向盤、剎車和油門,包含諸如通用的Super Cruise和特斯拉的Autopilot系統。
4.等級三的系統是類似奧迪的交通擁堵輔助系統(Traffic Jam Assist),在時速37 mph(60 km/h)以下時是可以完全自動駕駛的。
5.等級四的車輛是目前包括Lyft、Uber以及Waymo在全球範圍內測試的自動駕駛車輛。等級四的車輛雖然是全自動駕駛,但必須有人類司機隨時準備在難以駕駛的情況下接管。
6.等級五是全自動駕駛,無需人工接管。這其中最著名的應該是谷歌在幾年前才推出的無人車。然而就算是這種無人車,它也是只能在規定的路線上行駛,因此也不能真正地稱其為全自動。

有這麼多劃分自動駕駛車輛水平的智能等級,讓人不禁懷疑為何現在無論是在當地車行或者是特斯拉線上都沒有在銷售真正的自動駕駛汽車。這一問題的主要原因可以用兩大技術難點解釋:

1.感知:對車輛周圍環境的感知識別。
2.預測:對目標行為的預測。

由於感知系統是導致自動化駕駛發展緩慢的根本原因,我們決定將研究的重點放在提升車輛對周圍環境的感知能力上。

感知問題

在研究目標上,我們選擇感知系統而不是預測系統的另一個原因是,真正的自動駕駛汽車應該可以成為人類駕駛員更安全的選擇。然而,自動駕駛仍然導致了一起死亡事件發生。事發原因是一輛Uber無人駕駛汽車因感知系統出現問題而致使一名行人被撞身亡。由此可見,感知問題對自動駕駛汽車而言不止是興趣問題,更是生死攸關之事。

鑑於車輛感知問題的重要性,我們通過調查發現目前共有四種不同技術幫助車輛感知周圍物體,分別是超聲波、激光雷達、雷達和相機。這其中,激光雷達和相機是最重要的,超聲波傳感器主要用於停車感應,而雷達則是只用於ACC的長距離追踪。在現代系統中,相機通常都只是用來監控道路標線,在儀錶盤上顯示諸如限速等標識。而在自動駕駛車輛上,相機可以被用作是感知系統算法的輸入,儘管這會很複雜。

在另一方面,激光雷達傳感器是車輛探測周圍物體的主要途徑。激光雷達作為新時代的聲納系統,其工作原理是通過發射激光束,然後測量激光在物體表面反射回來的信號。通過計算測量得到的信號可以得到近乎即時的車輛周圍的三維立體點雲圖,關於這一點,後文會有詳細解釋。這些三維圖像普遍分辨率很低,也不會捕捉過於具體的信息,但卻提供了車輛周圍物體的大致形狀。在了解到無人車感知系統的工作原理之後,下一步我們將調查業內有哪家公司有這方面的相關業務。

為什麼選擇Lyft?

在自動駕駛行業競爭的數家公司中,Lyft的開源平台讓我們選擇了它。因為相信自動駕駛技術的開發不是一個人或者一家公司能夠獨自完成的,Lyft與Aptiv和Waymo合作開發了無人車的感知系統模型。 Lyft同樣贊助了Kaggle上的競賽,我們參加了其中一項比賽,使用Lyft提供的數據開發出最好的感知模型的團隊可以獲得2.5萬美金獎勵。那麼就讓我們來研究下Lyft的數據集吧。

開發數據

Lyft提供給Kaggle競賽的開發數據總共有85 GB,其中包含訓練數據、測試數據和一個結果示例。這些數據都是通過Lyft測試車採集到的三維點雲以及攝像頭數據。
我們的數據則是採集了十輛測試車行駛在加州帕洛阿爾托道路上,每輛車都在車頂配有七個攝像頭以及一個LiDAR傳感器,另外還有兩個小型傳感器在頭燈下方。

無人駕駛中的3D目標檢測技術 2

來源:https://mobiag.com/blog/lyft-unveils-a-new-self-driving-car/

這七個攝像頭都會以不同的固定角度捕獲周圍的圖像。所得圖像有超過5.5萬個人工標記的3D註釋,標記內容包含車輛、行人、自行車,詳情可見下圖中的橙色框。

無人駕駛中的3D目標檢測技術 3

場景的渲染圖像

每個LiDAR傳感器都將以360度的角度發射激光以檢測物體並獲得其三維空間幾何信息。這些LiDAR傳感器可以按10Hz生成一個包含21.6萬點的點雲圖。模型的數據輸入來自13個文件,具體包含以下組成:

  • 樣本數據(Sample_data),是由某個特定傳感器收集到的數據。
  • 樣本註釋(Sample_annotation),是對某物體的註釋。
  • 實例(instance),是對觀察到的所有對象實例的枚舉,例如上圖中被標記的卡車。
  • 類別(Categories),是觀察到的物體的不同類種類。例如車輛、行人等等。
  • 姿態(Ego_pose),是車輛在特定時間點的記錄,可以用於對每個樣本的映射。
  • 地圖數據(Map data),是車輛周圍道路的二進制語義圖。
  • 校準傳感器(Calibrated_sensor),用於校準特定車輛上的特定傳感器。提供關於環境的信息,例如某物體的距離和方位,或者是直接測量傳感器的位置和方向。 calibrated_sensor所攜帶的固有屬性都是不依賴於外界或者傳感器擺放位置的。它們的屬性和距離矩陣將被用於和在類似時間戳下生成的三點雲結合,並映射到三維的邊界框中。
  • 屬性(attribute),是實例的屬性,在類型一致的情況下可以改變。

所有的這些特徵參數以及激光雷達還有圖像數據都被分成訓練數據和測試數據兩部分,這些結合起來組成了這次競賽提供的數據集。

解決方案

在初步了解到 Lyft提供的85 GB 大小數據中都是些什麼之後,我們大致分析了激光雷達數據,並將其應用到我們的模型之中。因無法完整地將數據庫下載到本地,我們選擇使用谷歌云端平台(GCP)來將數據導入到實例之中,並在GCP上嘗試進行數據分析和模型構建。以上就是我們設置 GCP 的步驟。

探索性分析

在用Kaggle API導入數據到GCP之後,我們開始處理激光雷達數據。

無人駕駛中的3D目標檢測技術 4

來源:https://www.mathworks.com/help/driving/ug/coordinate-systems.html

如上圖所示,LiDAR 捕捉的主要測量指標有物體的 xyz 坐標以及其長寬高和轉角。下面是LiDAR測試出的數據,為便於理解附上了簡單解釋:

1.centre_x,centre_y 以及 centre_z 分別對應某物體在三維平面的坐標。
2.yaw 表示 z 軸轉角大小,轉角正對車輛或邊界框的前方在地面上指向的方向。
3.Length、width 以及 height 代表了被測試物體的邊界大小。

我們根據LiDAR傳感器傳出的數據繪製了不同測量指標的分佈圖,以查看是否可以從中得出結論。我們選擇從x、y 和 z 值開始,然後再繼續分析其他變量。

在分析過程中,centre_x 以及 centre_y 的分佈顯示出 LiDAR 相機的局限之處。相比車輛前後物體而言,車載攝像頭更容易捕捉車輛兩側物體,這是因為車輛兩側物體在 LiDAR 中更加清晰也更容易被相機捕捉。相對應的,在車前和車後方的物體通常會和車輛在同一條直線上,因此也就更難被清晰地檢測到。車輛兩側近距離的物體相較於 x 軸上的物體更容易被檢測到,但同樣在兩側但是在遠距離的物體會比 x 軸上物體更難被檢測到。還有一個限制是,物體如果只是在 x 軸或者 y 軸遠方,都會比 x 軸和 y 軸上遠方的物體更容易被檢測到。

無人駕駛中的3D目標檢測技術 5

不同類型車輛的頻率數

從上圖中可以看出,大多數觀察到的物體都是車輛。這和真實情況相差無幾,相較於其他類型車輛,私家車數量應該是最多的,但這也同樣體現出了LiDAR傳感器的局限所在。

數據處理與轉換

因為選擇使用激光雷達數據作為神經網絡的起始點,我們並沒有進一步處理圖像和其他的數據。在這一階段處理完畢所有的激光雷達後,我們才發現因為車上有三個不同位置的激光雷達傳感器, 輸出數據會有重複捕捉到周圍環境而導致不能直接輸入到神經網絡中。因此,我們對數據進行了轉換,並重疊了傳感器採集的重複部分。而因為人眼無法直接觀察分析激光雷達點雲圖的重疊部分,所以我們決定利用圖片數據,想辦法將圖片中的信息和激光雷達的點雲進行重疊。

場景的數據來自車載七個攝像頭,三個激光雷達,所捕捉到的圖像是相似時間的不同角度。點雲圖的信息以 XYZ 軸的方式記錄了周圍物體的與傳感器的距離。然而,這三個傳感器都有各自不同的坐標系統,為了讓最終數據位置統一,我們需要將三個坐標系統進行轉換。

無人駕駛中的3D目標檢測技術 6

為此,我們對比了LiDAR的2D像素坐標以及3D點雲坐標,其關係可以用變換矩陣的形式表示,該矩陣由平移矢量和旋轉矩陣組成。

無人駕駛中的3D目標檢測技術 7

數據轉換矩陣

其中,xyz組成了轉換矩陣,而P代表了旋轉矩陣。旋轉矩陣可以由輸入文件中的 calibrated_sensor 提供的攝像頭和傳感器的固定屬性算出。

做好數學功課後,我們首先要做的就是提取不同傳感器在各個場景中的激光雷達數據。 lyft_dataset_sdk 包在提取和組合數據上非常好用。利用上文提到的概念,我們可以使用四元數據包將數據在python中進行轉換:首先將激光雷達數據從傳感器的參照系轉換到車的參照系,接著再把車的參照系轉換到世界參照系,最終得出俯視圖(BEV)。

下一步,對輸出進行體素化,得到三維平面的坐標列表(XYZ)。之後通過歸一化體素強度創建俯視(BEV)點雲,以獲得包含三個描述激光雷達點高度差異的通道的336 x 336大小的輸入。

無人駕駛中的3D目標檢測技術 8

激光雷達點轉換成BEV

方法選擇

在通過預處理數據得到每個激光雷達點的俯視圖輸入之後,我們分析了各種不同的神經網絡,試圖找到最適合我們三維物體檢測問題的模型。

三維目標檢測需要分割和定位,分割又分語義分割和實例分割。我們使用語義分割是因為沒有必要在同個分類裡定位不同的實例,但這僅限有特定類別的物體。定位則可以讓我們精準找到某物體在激光雷達點雲中的具體位置。

在決定使用語義分割之後,我們繼續確定神經網絡的物體檢測方法。 3D數據建模的方法有很多,但是並不是所有的方法都能適用於各種不同3D數據的,因為根據結果的不同他們會有不同形式的表示方式。我們測試了四種不同方法但它們各有缺陷,下面我們將快速過一遍這四種方式以及它們各自的缺點。

  • 多角度CNN是將3D點雲渲染成2D的圖像後,再使用二維卷積神經網絡對其進行分類。但是將其應用到點分類,場景理解以及形狀分類方面卻並不容易。
  • 只能在網格上使用的光譜CNN在面對非等距形狀諸如家具,車輛,人類等目標時則束手無策。
  • 基於特徵的DNN在將3D數據轉換成矢量後,提取形狀特徵,並使用全連接的網絡進行形狀分類。但是特徵並不能準確表達實際的信息。

我們的模型使用的是體素CNN,在體素化後的3D形狀上的三維卷積神經網絡。其主要缺點是因數據的稀疏性和大量計算導致分辨率不足。但我們處理的物體都很大,我們相信如果我們可以把邊框圈在物體周圍,那麼我們的模型應該可以沒問題。下一步就是將U-net引入模型。

建模

U-Net是由Olaf Ronneberger、Philipp Fischer、Thomas Brox開發,主要用於生物圖像分割的捲積神經網絡,名稱U-net的來源是其對稱的U型結構。 U-net主要由以下三部分組成:

1.下採樣或收縮路徑
2.瓶頸
3.上採樣或擴張路徑

無人駕駛中的3D目標檢測技術 9

來源:https://arxiv.org/abs/1505.04597

收縮路徑有四個子模塊,每個子模塊包含兩個卷積層和一個max-pooling層。每次下採樣後都會把特徵通道加倍,這樣可以捕捉到圖像中的相關信息。瓶頸有兩層使用dropout的捲積層。和收縮路徑類似,擴張路徑同樣有四個帶捲積層的子模塊,並和左側收縮路徑的裁剪特徵通道拼合起來。在擴張路徑中,圖片深度隨著圖片大小增加遞減。這樣我們就可以採集到圖片的位置信息了。

這種結構的讓我們可以更快速精準地進行分割。我們將車輛附近環境的俯視投影輸入到U-Net架構之中來創建語義圖。架構的輸出結果是BEV中的語義圖。下面是一些樣本數據點及其對應的處理目標。

無人駕駛中的3D目標檢測技術 10

輸入圖像(左)以及處理後的目標(右)

我們將左側的圖像輸入到架構中,用以創建右側目標。那麼既然知道了模型的輸入,那麼處理後的目標是如何生成的呢?

神經網絡的輸出是BEV中的目標區域,可以從圖A中看出,並不是所有的預測都是ground truth。

無人駕駛中的3D目標檢測技術 11

圖A 可視化預測,圖B 閾值預測,圖C 處理後目標

在示例中,我們使用了像素值為127.5來創建二進制目標變量的預測閾值。

評估標準

目標檢測模型是通過計算在不同交叉比(IoU)閾值下的平均精度來評估的。 2D邊界框的IoU是重疊區域的面積除以合併後的總區域面積。 IoU的計算閾值是在0.55到0.95之間,步長為0.05。

無人駕駛中的3D目標檢測技術 12

來源:Kaggle

舉例來說,如果IoU大於0.55,那麼該物體是在閾值0.55時的預測。在不同的閾值下,精度都是通過計算真正例(True Positive,TP),假正例(False Positives,FP)以及假負例(False Negatives,FN),比預測物體和所有 ground-truth 物體。精度是通過真正例比假正例加真正例得出的。每次算法成功預測到物體,真正例(TP)增加。如果預測物體沒有相對應的ground truth,那麼就算這次預測為假正例(FP)。模型的評估是通過計算在不同閾值時上述精度值的均值得出的,具體公式如下:

無人駕駛中的3D目標檢測技術 13

均值絕對精度(mAP)

在3D環境中,我們在計算平均精度的同時還評估了Z軸上的重疊:Z軸(目標的高度)一維交匯。

訓練階段1

Kaggle比賽過程分為兩個階段,分別是“AHA”時刻之前與之後。之前提到我們神經網絡的輸入是車輛周圍的BEV視角,基礎模型經過了10週期訓練後在排行榜上得分大約0.034,因為是Kaggle的競賽,所以我們對模型訓練了24 x 7次後將結果上傳到Kaggle上。我們面臨的其中一大挑戰就是訓練時間,30個週期需要大約17小時,導致我們每天只能修改一到兩次,其中比較重要並且大幅提高了我們得分的改變有:

1.在為解決分類不平衡的訓練中,將車損失的權重降低到其他類別的1/5。
2.因為是用鳥瞰圖做輸入,物體的高度無法得到體現,於是使用其所屬類別的假定平均高度代替。
3.在測試過程中,我們修改了很多的參數,包括批次大小,學習率,優化器(Adam和RAdam,不是Adam大家族)等等。

在這一階段後,模型已經在Kaggle公共排行榜上得分0.039了,這時的模型是三週期不同(分別是8, 9和10)模型的集成學習。

訓練階段2

我們從數據集中提取了對應的自我區域mask圖,並將其與激光雷達生成的鳥瞰圖一起用作是三個附加的通道。

無人駕駛中的3D目標檢測技術 14

圖A. 鳥瞰圖,圖B. Mask圖,圖C. 處理後目標

可以看出,圖B中的mask圖是道路及其周圍道路的鳥瞰圖,這一點讓我們在排行榜上的分數直接到達了0.040。我們還嘗試改變學習率、週期、批次大小、優化器等等來進行優化。其中一大難點在於,即使是在GCP中,我們也因為內存限製而不能進行交叉驗證,這點真的很麻煩。

結果

在多次的嘗試後,模型在集成了8、9、10、29以及30這五種不同周期時表現最佳。在下圖的損耗 vs 週期的折線圖中可以看出,在一定的周期之後,損耗就會穩定下來。

無人駕駛中的3D目標檢測技術 15

一些模型的周期 vs 損耗圖

下面是我們最終神經網絡做出的一些預測,都顯示在mask圖和鳥瞰圖上。

無人駕駛中的3D目標檢測技術 16

鳥瞰圖(左)以及mask圖(右)上的預測

上圖的俯視視角里有很多的紅點,這些都是模型預測出即將會出現的物體。綠色區域是此時此刻物體存在,但是模型無法對其進行預測。在面對小型物體(例如行人)時就會發生這種情況。最後,黃色點標註的是我們模型的預測與路面實況相符,真正例的情況。最終模型在公共排行榜上得分0.046(使用30%測試數據),在私人排行上得分0.045(使用70%測試數據)。在Kaggle的競賽在2019年11月12日結束後,我們成功拿到了前20%的好成績。

無人駕駛中的3D目標檢測技術 17

最終得分榜

附上一個我們用最終模型做的預測結果:https://youtu.be/5LN6mFjK6go

挑戰

在這次的項目中我們學到了很多,也遇到了很多的挑戰,其中一些是:

  • 由於內存的限制,即使是在使用谷歌云端平台的情況下,我們依舊不能進行交叉驗證。
  • 同樣由於內存的原因,在訓練過程中我們的批次數不能超過32。
  • 我們模型的訓練時間非常的長,16批次訓練30週期需要大概16到18小時,集成學習3到4個模型需要30-40分。加起來就需要20小時才能完成一次上傳。

學習成果

儘管此次學習旅程非常平穩,但我們的模型仍然存在缺陷。在俯視圖中,它會漏掉一些小型物體,例如行人、自行車等。這是因為BEV中一個像素點大小相當於現實世界中40 cm x 40cm,這一點我們認為或許可以利用其他現有數據(如圖片等)來檢測類似物體,在這次的訓練中,我們只使用了激光雷達掃描,但是其實還有很多別的數據可以使用。另一個缺陷是我們的模型假定了所有的外界物體都和被測試車輛處於同一高度上,這當然會帶來很多的數據錯誤。

結論

綜上,我們認為我們最大的局限在於計算能力。之後從我們教授Dr. Joydeep Ghosh那裡得知,他的實驗室裡有個多GPU的計算單元,但依舊很難對這類的模型進行調整(他在研究論文中做過類似的實驗),至少給了我們一些安慰。

接下來,我們可以嘗試其他的模型架構,但願這些其他的架構加上我們的計算能力的提升能夠讓我們得到更好的準確率,也能更好地捕捉到行人之類的小型物體。

本文作者:

Alisha Fernandes,Haritha Maheshkumar,Kezhen Yang,Sijo VM, Thirumurugan Vinayagam

原文鏈接:

https://towardsdatascience.com/3d-object-detection-for-autonomous-vehicles-b5f480e40856