攝像頭是無人車系統中最重要的傳感器之一,具有明顯的優點和缺點:廉價、高幀率、信息豐富、觀測距離遠,但是易受環境影響、缺乏深度信息。因此,如何建立高準確率、高召回率的物體識別系統,是無人車感知模塊的核心問題。
上周,來自百度美研Apollo感知團隊的資深軟件架構師——陳光,在Apollo開發者社群內為我們帶來關于《基于單目攝像頭的物體檢測》的內容分享。幫助開發者更加了解Apollo 2.5和3.0里廣泛使用的單目攝像頭物體檢測模塊。
錯過社群直播的開發者可以從以下資料回顧干貨內容:
基于單目攝像頭的物體檢測
本次分享將會從以下四個方面展開:
一、物體檢測模型中的算法選擇
二、單目攝像頭下的物體檢測神經網絡
三、訓練預測參數的設計
四、模型訓練與距離測算
物體檢測模型中的算法選擇
物體檢測(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等項目中使用。
-
攝像頭
+關注
關注
60文章
4857瀏覽量
96030 -
Apollo
+關注
關注
5文章
342瀏覽量
18485
原文標題:社群分享內容 | 基于單目攝像頭的物體檢測
文章出處:【微信號:Apollo_Developers,微信公眾號:Apollo開發者社區】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論