【Baidu Apollo】感知-基於單目攝像頭的物體檢測

本文來自於Apollo開發者社羣,作者是百度美研Apollo感知團隊的資深軟件架構師——陳光

1. 物體檢測模型中的算法選擇

物體檢測(Object Detection)是無人車感知的核心問題,要求我們對不同的傳感器(如圖中覆蓋不同觀測範圍FOV的無人車傳感器)設計不同的算法,去準確檢測出障礙物。例如在Apollo中,爲3D點雲而設計的的CNN-SEG深度學習算法,爲2D圖像而設計的YOLO-3D深度學習算法等。

物體檢測要求實時準確的完成單幀的障礙物檢測,並藉助傳感器內外參標定轉換矩陣,將檢測結果映射到統一的車身座標系或世界座標系中。準確率、召回率、算法時耗是物體檢測的重要指標。本次分享只覆蓋Apollo中基於單目攝像頭的物體檢測模塊。

相關文獻如下:

1. Object Detection with Discriminatively Trained Part Based Models. IEEE Trans. PAMI, 32(9):1627–1645, 2010.

2. Faster RCNN, ICCV 2015

3. SSD: Single Shot MultiBox Detector, ECCV 2016

4. yolo9000: Better, Faster, Stronger, CVPR 2017 

5. Focal Loss for Dense Object Detection, ICCV 2017

在衆多物體檢測模型中,我們如何選擇最合適的算法?尤其是以2-stage爲代表的Faster-RCNN, RFCN 和以 single stage爲代表的SSD、YOLO之中應該如何選擇?CVPR 2017一篇來自谷歌的論文《Speed/Accuracy Trade-offs for Modern Convolutional Object Detectors》做了比較細緻的比較和評測。它將物體檢測神經網絡拆解爲主框架Meta-architecture和特徵描述模塊Feature Extractor。並選擇了不同的組合方式,去驗證模型的實效性和準確率。

如圖所示,在 MS COCO數據集上,YOLO V2取得了實時速度下良好的檢測準確率。Faster RCNN+重載的 Inception ResNet V2雖然取得了最好準確率,但是時耗過長。完全不能滿足無人車對實時性的要求。基於這種理論分析和在百度自有數據集上的評測,我們最終選擇了YOLO作爲主框架,以改進的DarkNet作爲特徵描述模塊(Feature Extractor)。

2. 單目攝像頭下的物體檢測神經網絡

Apollo 2.5和3.0中,我們基於YOLO V2設計了單目攝像頭下的物體檢測神經網絡, 我們簡稱它 Multi task YOLO-3D,  因爲它最終輸出單目攝像頭3D障礙物檢測和2D圖像分割所需的全部信息。

它和原始的YOLO V2有以下幾種不同:

1. 實現多任務輸出:

(1) 物體檢測,包括2D框(以像素爲單位),3D真實物體尺寸(以米爲單位),障礙物類別和障礙物相對偏轉角(Alpha Angle,和KITTI數據集定義一致)。下文會詳細講解各個輸出的意義。

(2) 物體分割:車道線信息,並提供給定位模塊,這裏不做敘述。

2. 特徵描述模塊引入了類似FPN的Encoder和Decoder設計:在原始Darknet基礎上中,加入了更深的卷積層(Feature Map Size更小)同時添加反捲積層,捕捉更豐富圖像上下文信息(Context Information)。高分辨率多通道特徵圖,捕捉圖像細節(例如Edge,Corner),深層低分辨率多通道特徵圖,編碼更多圖像上下文信息。和FPN類似的飛線連接,更好的融合了圖像的細節和整體信息。

3. 降低每層卷積核數目,加快運算速度。例如我們發現卷積核數目減半,實驗中準確率基本不變。

如前文所述,物體檢測最終輸出包括2D框(以像素爲單位),3D真實物體尺寸(以米爲單位),障礙物類別和障礙物相對偏轉角(Alpha Angle,和KITTI數據集定義一致)等信息。

和YOLO V2算法一樣, 我們在標註樣本集中通過聚類,產生一定數目的“錨”模板,去描述不同類別、不同朝向、不同大小的障礙物。例如對小轎車和大貨車,我們會定義不同的錨模板,去描述它們的實際物理尺寸。

爲什麼我們要去訓練、預測這些參數呢?我們以相機成像的原理來解釋:針孔相機(Pinhole Camera)通過投影變換,可以將三維Camera座標轉換爲二維的圖像座標。這個變換矩陣解釋相機的內在屬性,稱爲相機內參(Camera Intrinsic) K。(本圖及下文中部分圖像引自三方論文等)

對任意一個相機座標系下的障礙物的3D框,我們可以用它的中心點 T = {X, Y, Z},長寬高 D = {L, W, H},以及各個座標軸方向上的旋轉角 R = {ϕ, φ , θ}來描述。這種9維的參數描述和3D框8點的描述是等價的,而且不需要冗餘的8*3個座標參數來表示。

因此,對一個相機座標系下3D障礙物,我們通過相機內參,可以投射到2D圖像上,得到2D框[c_x,  c_y,  h,  w]。從圖中可以看到,一個障礙物在相機下總共有9維3D描述和4維2D描述,他們之間通過相機內參矩陣聯繫起來。

然而,只通過2D框[c_x,  c_y,  h,  w],是沒有辦法還原成完整的3D障礙物信息。

3. 訓練預測參數的設計

而通過神經網絡直接預測3D障礙物的9維參數,也會比較困難,尤其是預測障礙物3D中心點座標。所以我們要根據幾何學來設計我們到底要訓練預測哪些參數。

首先利用地面平行假設,我們可以降低所需要預測的3D參數。

例如:(1)我們假設3D障礙物只沿着垂直地面的座標軸有旋轉,而另外兩個方向並未出現旋轉,也就是隻有yaw偏移角,剩下的Pitch Roll均爲0。(2)障礙物中心高度和相機高度相當,所以可以簡化認爲障礙物的Z=0。

從右圖可以看到,我們現在只有6維3D信息需要預測,但還是沒有辦法避免預測中心點座標X和Y分量。

第二,我們可以利用成熟的2D障礙物檢測算法,準確預測出圖像上2D障礙物框(以像素爲單位)。

第三,對3D障礙物裏的6維描述,我們可以選擇訓練神經網絡來預測方差較小的參數,例如障礙物的真實物理大小,因爲一般同一類別的障礙物的物理大小不會出現量級上的偏差(車輛的高度一般在2-5米之間,很少會出現大幅變化)。而yaw 轉角也比較容易預測,跟障礙物在圖像中的位置關係不大,適合通用物體檢測框架來訓練和預測。實驗中也多次證明此項。

所以現在我們唯一沒有訓練和預測的參數就是障礙物中心點相對相機座標系的偏移量X分量和Y分量。需要注意的是障礙物離相機的物理距離Distance=sqrt(X^2+Y^2)。所以得到X和Y,我們自然就可以得到障礙物離相機的真實距離,這是單目測距的最終要求之一。

綜上,我們可以合理的推斷出, 實現單目攝像頭的3D障礙物檢測需要兩部分:

1. 訓練網絡,並預測出大部分參數: 

(1)圖像上2D障礙物框預測,因爲有對應的大量成熟算法文獻; 

(2)障礙物物理尺寸,因爲同類別內方差較小;

(3)不被障礙物在圖像上位置所影響,並且通過圖像特徵(Appearance Feature)可以很好解釋的障礙物yaw偏轉角。

2. 通過圖像幾何學,來計算出障礙物中心點相對相機座標系的偏移量X分量和Y分量。

4. 模型訓練與距離測算

模型訓練上,我們需要注意一些潛在的細節:

1) 確保標註質量,尤其是3D障礙物框。可以藉助激光雷達等來輔助標註障礙物尺寸,偏轉角等等;

2) 定義合適的損失函數,可以參考Zoox的paper 《3D Bounding Box Estimation Using Deep Learning and Geometry》

3) 做好數據增強,避免過擬合, 圖中簡單描繪了一些Data Augmentation的方式。對於無人車,我們可以嘗試更多的方法。

當我們訓練好相應的神經網絡,輸出我們需要的各個參數之後,我們需要考慮的是如何計算出障礙物離攝像頭的距離。根據之前介紹,通過內參和幾何學關係,我們可以鏈接起圖像中3D障礙物大小(單位爲像素)和真實3D座標系下障礙物大小(單位爲米)。

我們採用單視圖度量衡( Oxford教授 A. Zisserman的論文《Single View Metrology》)來解釋這個幾何關係:任一物體,已知它的長寬高、朝向和距離,則它在圖像上的具體形狀大小等可唯一確定;反之亦然。

如圖中房屋的支撐柱,大小高度完全相同,但是處於圖像的不同位置,所佔用的像素、長寬都有差別。

基於單視圖度量衡,我們可以建立一個哈希查詢表,去根據物體圖像尺寸,物理尺寸,朝向角來查詢物體的距離。

對於每種障礙物,我們根據它的平均(或單位)尺寸,去建立查詢表,覆蓋360度yaw 角的變化,來映射不同的距離。(例如2D框的25像素高,yaw角爲30度,則它的距離爲100米等等)。圖中示例了一個小轎車在不同距離下、不同偏轉角yaw angle情況下,在圖像上的顯示。

對於這樣一個簡單的算法,速度上可以達到0.07毫秒/每幀圖像。而在準確率上,我們分別在KITTI數據集和Apollo內部數據集上做了評測。在KITTI上取得了很好的效果,0-30米內障礙物誤差大概在1米左右。隨着距離增大,誤差會增大,但是最終誤差不超過8%。

在Apollo數據集上,這個簡單算法也取得了不錯的效果。最大誤差不超過6%。

綜上,我們可以整理出Apollo裏單目攝像頭下的障礙物檢測流程圖:輸入單幅圖像,預測大部分參數;基於單視圖度量衡,我們可以預測出剩餘的參數距離和中心點座標。

Apollo裏單目攝像頭下的障礙物檢測穩定快速,對繁忙路段和高速場景都可以適配。檢測速度在30HZ以上。

Apollo裏單目攝像頭下的障礙物算法已經成功入庫到Apollo 2.5 和 Apollo 3.0,並在CIDI等項目中使用。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章