Apollo 的3D障碍物感知解析
Apollo解決的障礙物感知問題:
- 高精地圖ROI過濾器(HDMap ROI Filter)
- 基于卷積神經網絡分割(CNN Segmentation)
- MinBox 障礙物邊框構建(MinBox Builder)
- HM對象跟蹤(HM Object Tracker)
高精地圖ROI過濾器
ROI(The Region of Interest)指定從高精地圖檢索到包含路面、路口的可駕駛區域。高精地圖 ROI 過濾器(往下簡稱“過濾器”)處理在ROI之外的激光雷達點,去除背景對象,如路邊建筑物和樹木等,剩余的點云留待后續處理。
給定一個高精地圖,每個激光雷達點的關系意味著它在ROI內部還是外部。
每個激光雷達點可以查詢一個車輛周圍區域的2D量化的查找表(LUT)。過濾器模塊的輸入和輸出匯總于下表。
| 點云: 激光雷達捕捉的3D點數據集 | 由高精地圖定義的ROI內的輸入點索引。 |
| 高精地圖: 多邊形集合,每個多邊形均含有一個有序的點集。 |
一般來說,Apollo 高精地圖 ROI過濾器有以下三步:
坐標轉換
對于(高精地圖ROI)過濾器來說,高精地圖數據接口被定義為一系列多邊形集合,每個集合由世界坐標系點組成有序點集。高精地圖ROI點查詢需要點云和多邊形處在相同的坐標系,為此,Apollo將輸入點云和HDMap多邊形變換為來自激光雷達傳感器位置的地方坐標系。
ROI LUT構造
Apollo采用網格顯示查找表(LUT),將ROI量化為俯視圖2D網格,以此決定輸入點是在ROI之內還是之外。
如圖1所示,該LUT覆蓋了一個矩形區域,該區域位于高精地圖邊界上方,以普通視圖周圍的預定義空間范圍為邊界。它代表了與ROI關聯網格的每個單元格(如用1/0表示在ROI的內部/外部)。 為了計算效率,Apollo使用 掃描線算法和 位圖編碼來構建ROI LUT。
圖 1 ROI顯示查找表(LUT)藍色線條標出了高精地圖ROI的邊界,包含路標與路口。紅色加粗點表示對應于激光雷達傳感器位置的地方坐標系原始位置。2D網格由8*8個綠色正方形組成,在ROI中的單元格,為藍色填充的正方形,而之外的是黃色填充的正方形。
ROI LUT點查詢
基于ROI LUT,查詢每個輸入點的關系使用兩步認證。對于點查詢過程,Apollo數據編譯輸出如下,:
用戶定義的參數可在配置文件modules/perception/model/hdmap_roi_filter.config中設置,HDMap ROI Filter 參數使用參考如下表格:
| range | 基于LiDAR傳感器點的2D網格ROI LUT的圖層范圍),如(-70, 70)*(-70, 70) | 70.0 米 |
| cell_size | 用于量化2D網格的單元格的大小。 | 0.25 米 |
| extend_dist | 從多邊形邊界擴展ROI的距離。 | 0.0 米 |
基于CNN的障礙物分割
高精地圖 ROI過濾之后,Apollo得到已過濾、只包含屬于ROI內的點云,大部分背景障礙物,如路側的建筑物、樹木等均被移除,ROI內的點云被傳遞到分割模塊。分割模塊檢測和劃分前景障礙物,例如汽車,卡車,自行車和行人。
| 點云(3D數據集) | 對應于ROI中的障礙物對象數據集 |
| 表示在HDMap中定義的ROI內的點的點索引 |
Apollo 使用深度卷積神經網絡提高障礙物識別與分割的精度,障礙物分割包含以下四步:
- 通道特征提取
- 基于卷積神經網絡的障礙物預測
- 障礙物集群
- 后期處理
卷積神經網絡詳細介紹如下:
通道特征提取
給定一個點云框架,Apollo在地方坐標系中構建俯視圖(即投影到X-Y平面)2D網格。 基于點的X、Y坐標,相對于LiDAR傳感器原點的預定范圍內,每個點被量化為2D網格的一個單元。 量化后,Apollo計算網格內每個單元格中點的8個統計測量,這將是下一步中傳遞給CNN的輸入通道特征。
計算的8個統計測量:
基于卷積神經網絡的障礙物預測
基于上述通道特征,Apollo使用深度完全卷積神經網絡(FCNN)來預測單元格障礙物屬性,包括潛在物體中心的偏移位移(稱為中心偏移)、對象性
積極性和物體高度。如圖2所示,網絡的輸入為 W x H x C 通道圖像,其中:
- W 代表網格中的列數
- H 代表網格中的行數
- C 代表通道特征數
完全卷積神經網絡由三層構成:
- 下游編碼層(特征編碼器)
- 上游解碼層(特征解碼器)
- 障礙物屬性預測層(預測器)
特征編碼器將通道特征圖像作為輸入,并且隨著特征抽取的增加而連續下采樣其空間分辨率。 然后特征解碼器逐漸對特征圖像 上采樣到輸入2D網格的空間分辨率,可以恢復特征圖像的空間細節,以促進單元格方向的障礙物位置、速度屬性預測。 根據具有非線性激活(即ReLu)層的堆疊卷積/分散層來實現 下采樣和 上采樣操作。
圖 2 FCNN在單元格方向上的障礙物預測障礙物聚類
在基于CNN的預測之后,Apollo獲取單個單元格的預測信息。利用四個單元對象屬性圖像,其中包含:
- 中心偏移
- 對象性
- 積極性
- 對象高度
為生成障礙物,Apollo基于單元格中心偏移,預測構建有向圖,并搜索連接的組件作為候選對象集群。
如圖3所示,每個單元格是圖的一個節點,并且基于單元格的中心偏移預測構建有向邊,其指向對應于另一單元的父節點。
如圖3,Apollo采用壓縮的聯合查找算法(Union Find algorithm )有效查找連接組件,每個組件都是候選障礙物對象集群。對象是單個單元格成為有效對象的概率。因此,Apollo將非對象單元定義為目標小于0.5的單元格。因此,Apollo過濾出每個候選對象集群的空單元格和非對象集。
圖 3 障礙聚類(a) 紅色箭頭表示每個單元格對象中心偏移預測;藍色填充對應于物體概率不小于0.5的對象單元。
(b) 固體紅色多邊形內的單元格組成候選對象集群。
由五角星填充的紅色范圍表示對應于連接組件子圖的根節點(單元格)。
一個候選對象集群可以由其根節點彼此相鄰的多個相鄰連接組件組成。
后期處理
聚類后,Apollo獲得一組候選對象集,每個候選對象集包括若干單元格。
在后期處理中,Apollo首先對所涉及的單元格的積極性和物體高度值,平均計算每個候選群體的檢測置信度分數和物體高度。 然后,Apollo去除相對于預測物體高度太高的點,并收集每個候選集中的有效單元格的點。 最后,Apollo刪除具有非常低的可信度分數或小點數的候選聚類,以輸出最終的障礙物集/分段。
用戶定義的參數可以在modules/perception/model/cnn_segmentation/cnnseg.conf的配置文件中設置。 下表說明了CNN細分的參數用法和默認值:
| objectness_thresh | 用于在障礙物聚類步驟中過濾掉非對象單元的對象的閾值。 | 0.5 |
| use_all_grids_for_clustering | 指定是否使用所有單元格在障礙物聚類步驟中構建圖形的選項。如果不是,則僅考慮占用的單元格。 | true |
| confidence_thresh | 用于在后期處理過程中濾出候選聚類的檢測置信度得分閾值。 | 0.1 |
| height_thresh | 如果是非負數,則在后處理步驟中將過濾掉高于預測物體高度的點。 | 0.5 meters |
| min_pts_num | 在后期處理中,刪除具有小于min_pts_num點的候選集群。 | 3 |
| use_full_cloud | 如果設置為true,則原始點云的所有點將用于提取通道特征。 否則僅使用輸入點云的點(即,HDMap ROI過濾器之后的點)。 | true |
| gpu_id | 在基于CNN的障礙物預測步驟中使用的GPU設備的ID。 | 0 |
| feature_param {width} | 2D網格的X軸上的單元格數。 | 512 |
| feature_param {height} | 2D網格的Y軸上的單元格數。 | 512 |
| feature_param {range} | 2D格柵相對于原點(LiDAR傳感器)的范圍。 | 60 meters |
注意:提供的模型是一個樣例,僅限于實驗所用。
MinBox 障礙物邊框構建
對象構建器組件為檢測到的障礙物建立一個邊界框。因為LiDAR傳感器的遮擋或距離,形成障礙物的點云可以是稀疏的,并且僅覆蓋一部分表面。因此,盒構建器將恢復給定多邊形點的完整邊界框。即使點云稀疏,邊界框的主要目的還是預估障礙物(例如,車輛)的方向。同樣地,邊框也用于可視化障礙物。
算法背后的想法是找到給定多邊形點邊緣的所有區域。在以下示例中,如果AB是邊緣,則Apollo將其他多邊形點投影到AB上,并建立具有最大距離的交點對,這是屬于邊框的邊緣之一。然后直接獲得邊界框的另一邊。通過迭代多邊形中的所有邊,在以下圖4所示,Apollo確定了一個6邊界邊框,將選擇具有最小面積的方案作為最終的邊界框。
圖 4 MinBox 對象構建HM對象跟蹤
HM對象跟蹤器跟蹤分段檢測到的障礙物。通常,它通過將當前檢測與現有跟蹤列表相關聯,來形成和更新跟蹤列表,如不再存在,則刪除舊的跟蹤列表,并在識別出新的檢測時生成新的跟蹤列表。 更新后的跟蹤列表的運動狀態將在關聯后進行估計。 在HM對象跟蹤器中,匈牙利算法(Hungarian algorithm)用于檢測到跟蹤關聯,并采用 魯棒卡爾曼濾波器(Robust Kalman Filter) 進行運動估計。
檢測跟蹤關聯(Detection-to-Track Association)
當將檢測與現有跟蹤列表相關聯時,Apollo構建了一個二分圖,然后使用 匈牙利算法以最小成本(距離)找到最佳檢測跟蹤匹配。
計算關聯距離矩陣
首先,建立一個關聯距離矩陣。根據一系列關聯特征(包括運動一致性,外觀一致性等)計算給定檢測和一條軌跡之間的距離。HM跟蹤器距離計算中使用的一些特征如下所示:
| location_distance | 評估運動一致性 |
| direction_distance | 評估運動一致性 |
| bbox_size_distance | 評估外觀一致性 |
| point_num_distance | 評估外觀一致性 |
| histogram_distance | 評估外觀一致性 |
此外,還有一些重要的距離權重參數,用于將上述關聯特征組合成最終距離測量。
匈牙利算法的二分圖匹配
給定關聯距離矩陣,如圖5所示,Apollo構造了一個二分圖,并使用 匈牙利算法通過最小化距離成本找到最佳的檢測跟蹤匹配。它解決了O(n^3)時間復雜度中的賦值問題。 為了提高其計算性能,通過刪除距離大于合理的最大距離閾值的頂點,將原始的二分圖切割成子圖后實現了匈牙利算法。
圖 5 二分圖匹配(Bipartite Graph Matching)跟蹤動態預估 (Track Motion Estimation)
在檢測到跟蹤關聯之后,HM對象跟蹤器使用 魯棒卡爾曼濾波器來利用恒定速度運動模型估計當前跟蹤列表的運動狀態。 運動狀態包括錨點和速度,分別對應于3D位置及其3D速度。 為了克服由不完美的檢測引起的可能的分心,在跟蹤器的濾波算法中實現了魯棒統計技術。
觀察冗余
在一系列重復觀測中選擇速度測量,即濾波算法的輸入,包括錨點移位、邊界框中心偏移、邊界框角點移位等。冗余觀測將為濾波測量帶來額外的魯棒性, 因為所有觀察失敗的概率遠遠小于單次觀察失敗的概率。
分解
高斯濾波算法 (Gaussian Filter algorithms)總是假設它們的高斯分布產生噪聲。 然而,這種假設可能在運動預估問題中失敗,因為其測量的噪聲可能來自直方分布。 為了克服更新增益的過度估計,在過濾過程中使用故障閾值。
更新關聯質量
原始卡爾曼濾波器更新其狀態不區分其測量的質量。 然而,質量是濾波噪聲的有益提示,可以估計。 例如,在關聯步驟中計算的距離可以是一個合理的測量質量估計。 根據關聯質量更新過濾算法的狀態,增強了運動估計問題的魯棒性和平滑度。
HM對象跟蹤器的高級工作流程如圖6所示。
圖 6 HM對象跟蹤器工作流1)構造跟蹤對象并將其轉換為世界坐標。
2)預測現有跟蹤列表的狀態,并對其匹配檢測。
3)在更新后的跟蹤列表中更新運動狀態,并收集跟蹤結果。
參考
- 匈牙利算法
- 地方坐標系
- Fully Convolutional Networks for Semantic Segmentation
總結
以上是生活随笔為你收集整理的Apollo 的3D障碍物感知解析的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: .NET框架-Try-Parse和Tes
- 下一篇: 中东政策_中东游戏的简要历史