攝像頭是無人車系統(tǒng)中最重要的傳感器之一,具有明顯的優(yōu)點(diǎn)和缺點(diǎn):廉價、高幀率、信息豐富、觀測距離遠(yuǎn),但是易受環(huán)境影響、缺乏深度信息。因此,如何建立高準(zhǔn)確率、高召回率的物體識別系統(tǒng),是無人車感知模塊的核心問題。
上周,來自百度美研Apollo感知團(tuán)隊(duì)的資深軟件架構(gòu)師——陳光,在Apollo開發(fā)者社群內(nèi)為我們帶來關(guān)于《基于單目攝像頭的物體檢測》的內(nèi)容分享。幫助開發(fā)者更加了解Apollo 2.5和3.0里廣泛使用的單目攝像頭物體檢測模塊。
錯過社群直播的開發(fā)者可以從以下資料回顧干貨內(nèi)容:
基于單目攝像頭的物體檢測
本次分享將會從以下四個方面展開:
一、物體檢測模型中的算法選擇
二、單目攝像頭下的物體檢測神經(jīng)網(wǎng)絡(luò)
三、訓(xùn)練預(yù)測參數(shù)的設(shè)計(jì)
四、模型訓(xùn)練與距離測算
物體檢測模型中的算法選擇
物體檢測(Object Detection)是無人車感知的核心問題,要求我們對不同的傳感器(如圖中覆蓋不同觀測范圍FOV的無人車傳感器)設(shè)計(jì)不同的算法,去準(zhǔn)確檢測出障礙物。例如在Apollo中,為3D點(diǎn)云而設(shè)計(jì)的的CNN-SEG深度學(xué)習(xí)算法,為2D圖像而設(shè)計(jì)的YOLO-3D深度學(xué)習(xí)算法等。
物體檢測要求實(shí)時準(zhǔn)確的完成單幀的障礙物檢測,并借助傳感器內(nèi)外參標(biāo)定轉(zhuǎn)換矩陣,將檢測結(jié)果映射到統(tǒng)一的車身坐標(biāo)系或世界坐標(biāo)系中。準(zhǔn)確率、召回率、算法時耗是物體檢測的重要指標(biāo)。本次分享只覆蓋Apollo中基于單目攝像頭的物體檢測模塊。
相關(guān)文獻(xiàn)如下:
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
在眾多物體檢測模型中,我們?nèi)绾芜x擇最合適的算法?尤其是以2-stage為代表的Faster-RCNN, RFCN 和以 single stage為代表的SSD、YOLO之中應(yīng)該如何選擇?CVPR 2017一篇來自谷歌的論文《Speed/Accuracy Trade-offs for Modern Convolutional Object Detectors》做了比較細(xì)致的比較和評測。它將物體檢測神經(jīng)網(wǎng)絡(luò)拆解為主框架Meta-architecture和特征描述模塊Feature Extractor。并選擇了不同的組合方式,去驗(yàn)證模型的實(shí)效性和準(zhǔn)確率。
如圖所示,在 MS COCO數(shù)據(jù)集上,YOLO V2取得了實(shí)時速度下良好的檢測準(zhǔn)確率。Faster RCNN+重載的 Inception ResNet V2雖然取得了最好準(zhǔn)確率,但是時耗過長。完全不能滿足無人車對實(shí)時性的要求?;谶@種理論分析和在百度自有數(shù)據(jù)集上的評測,我們最終選擇了YOLO作為主框架,以改進(jìn)的DarkNet作為特征描述模塊(Feature Extractor)。
2單目攝像頭下的物體檢測神經(jīng)網(wǎng)絡(luò)
Apollo 2.5和3.0中,我們基于YOLO V2設(shè)計(jì)了單目攝像頭下的物體檢測神經(jīng)網(wǎng)絡(luò), 我們簡稱它 Multi task YOLO-3D, 因?yàn)樗罱K輸出單目攝像頭3D障礙物檢測和2D圖像分割所需的全部信息。
它和原始的YOLO V2有以下幾種不同:
1. 實(shí)現(xiàn)多任務(wù)輸出:
(1)物體檢測,包括2D框(以像素為單位),3D真實(shí)物體尺寸(以米為單位),障礙物類別和障礙物相對偏轉(zhuǎn)角(Alpha Angle,和KITTI數(shù)據(jù)集定義一致)。下文會詳細(xì)講解各個輸出的意義。
(2)物體分割:車道線信息,并提供給定位模塊,這里不做敘述。
2. 特征描述模塊引入了類似FPN的Encoder和Decoder設(shè)計(jì):在原始Darknet基礎(chǔ)上中,加入了更深的卷積層(Feature Map Size更?。┩瑫r添加反卷積層,捕捉更豐富圖像上下文信息(Context Information)。高分辨率多通道特征圖,捕捉圖像細(xì)節(jié)(例如Edge,Corner),深層低分辨率多通道特征圖,編碼更多圖像上下文信息。和FPN類似的飛線連接,更好的融合了圖像的細(xì)節(jié)和整體信息。
3. 降低每層卷積核數(shù)目,加快運(yùn)算速度。例如我們發(fā)現(xiàn)卷積核數(shù)目減半,實(shí)驗(yàn)中準(zhǔn)確率基本不變。
如前文所述,物體檢測最終輸出包括2D框(以像素為單位),3D真實(shí)物體尺寸(以米為單位),障礙物類別和障礙物相對偏轉(zhuǎn)角(Alpha Angle,和KITTI數(shù)據(jù)集定義一致)等信息。
和YOLO V2算法一樣, 我們在標(biāo)注樣本集中通過聚類,產(chǎn)生一定數(shù)目的“錨”模板,去描述不同類別、不同朝向、不同大小的障礙物。例如對小轎車和大貨車,我們會定義不同的錨模板,去描述它們的實(shí)際物理尺寸。
為什么我們要去訓(xùn)練、預(yù)測這些參數(shù)呢?我們以相機(jī)成像的原理來解釋:針孔相機(jī)(Pinhole Camera)通過投影變換,可以將三維Camera坐標(biāo)轉(zhuǎn)換為二維的圖像坐標(biāo)。這個變換矩陣解釋相機(jī)的內(nèi)在屬性,稱為相機(jī)內(nèi)參(Camera Intrinsic) K。(本圖及下文中部分圖像引自三方論文等)
對任意一個相機(jī)坐標(biāo)系下的障礙物的3D框,我們可以用它的中心點(diǎn) T = {X, Y, Z},長寬高 D = {L, W, H},以及各個坐標(biāo)軸方向上的旋轉(zhuǎn)角 R = {?, φ , θ}來描述。這種9維的參數(shù)描述和3D框8點(diǎn)的描述是等價的,而且不需要冗余的8*3個坐標(biāo)參數(shù)來表示。
因此,對一個相機(jī)坐標(biāo)系下3D障礙物,我們通過相機(jī)內(nèi)參,可以投射到2D圖像上,得到2D框[c_x, c_y, h, w]。從圖中可以看到,一個障礙物在相機(jī)下總共有9維3D描述和4維2D描述,他們之間通過相機(jī)內(nèi)參矩陣聯(lián)系起來。
然而,只通過2D框[c_x, c_y, h, w],是沒有辦法還原成完整的3D障礙物信息。
3訓(xùn)練預(yù)測參數(shù)的設(shè)計(jì)
而通過神經(jīng)網(wǎng)絡(luò)直接預(yù)測3D障礙物的9維參數(shù),也會比較困難,尤其是預(yù)測障礙物3D中心點(diǎn)坐標(biāo)。所以我們要根據(jù)幾何學(xué)來設(shè)計(jì)我們到底要訓(xùn)練預(yù)測哪些參數(shù)。
首先利用地面平行假設(shè),我們可以降低所需要預(yù)測的3D參數(shù)。
例如:(1)我們假設(shè)3D障礙物只沿著垂直地面的坐標(biāo)軸有旋轉(zhuǎn),而另外兩個方向并未出現(xiàn)旋轉(zhuǎn),也就是只有yaw偏移角,剩下的Pitch Roll均為0。(2)障礙物中心高度和相機(jī)高度相當(dāng),所以可以簡化認(rèn)為障礙物的Z=0。
從右圖可以看到,我們現(xiàn)在只有6維3D信息需要預(yù)測,但還是沒有辦法避免預(yù)測中心點(diǎn)坐標(biāo)X和Y分量。
第二,我們可以利用成熟的2D障礙物檢測算法,準(zhǔn)確預(yù)測出圖像上2D障礙物框(以像素為單位)。
第三,對3D障礙物里的6維描述,我們可以選擇訓(xùn)練神經(jīng)網(wǎng)絡(luò)來預(yù)測方差較小的參數(shù),例如障礙物的真實(shí)物理大小,因?yàn)橐话阃活悇e的障礙物的物理大小不會出現(xiàn)量級上的偏差(車輛的高度一般在2-5米之間,很少會出現(xiàn)大幅變化)。而yaw 轉(zhuǎn)角也比較容易預(yù)測,跟障礙物在圖像中的位置關(guān)系不大,適合通用物體檢測框架來訓(xùn)練和預(yù)測。實(shí)驗(yàn)中也多次證明此項(xiàng)。
所以現(xiàn)在我們唯一沒有訓(xùn)練和預(yù)測的參數(shù)就是障礙物中心點(diǎn)相對相機(jī)坐標(biāo)系的偏移量X分量和Y分量。需要注意的是障礙物離相機(jī)的物理距離Distance=sqrt(X^2+Y^2)。所以得到X和Y,我們自然就可以得到障礙物離相機(jī)的真實(shí)距離,這是單目測距的最終要求之一。
綜上,我們可以合理的推斷出, 實(shí)現(xiàn)單目攝像頭的3D障礙物檢測需要兩部分:
1. 訓(xùn)練網(wǎng)絡(luò),并預(yù)測出大部分參數(shù):
(1)圖像上2D障礙物框預(yù)測,因?yàn)橛袑?yīng)的大量成熟算法文獻(xiàn);
(2)障礙物物理尺寸,因?yàn)橥悇e內(nèi)方差較??;
(3)不被障礙物在圖像上位置所影響,并且通過圖像特征(Appearance Feature)可以很好解釋的障礙物yaw偏轉(zhuǎn)角。
2. 通過圖像幾何學(xué),來計(jì)算出障礙物中心點(diǎn)相對相機(jī)坐標(biāo)系的偏移量X分量和Y分量。
4模型訓(xùn)練與距離測算
模型訓(xùn)練上,我們需要注意一些潛在的細(xì)節(jié):
1) 確保標(biāo)注質(zhì)量,尤其是3D障礙物框??梢越柚す饫走_(dá)等來輔助標(biāo)注障礙物尺寸,偏轉(zhuǎn)角等等;
2) 定義合適的損失函數(shù),可以參考Zoox的paper《3D Bounding Box Estimation Using Deep Learning and Geometry》;
3) 做好數(shù)據(jù)增強(qiáng),避免過擬合, 圖中簡單描繪了一些Data Augmentation的方式。對于無人車,我們可以嘗試更多的方法。
當(dāng)我們訓(xùn)練好相應(yīng)的神經(jīng)網(wǎng)絡(luò),輸出我們需要的各個參數(shù)之后,我們需要考慮的是如何計(jì)算出障礙物離攝像頭的距離。根據(jù)之前介紹,通過內(nèi)參和幾何學(xué)關(guān)系,我們可以鏈接起圖像中3D障礙物大?。▎挝粸橄袼兀┖驼鎸?shí)3D坐標(biāo)系下障礙物大小(單位為米)。
我們采用單視圖度量衡( Oxford教授 A. Zisserman的論文《Single View Metrology》)來解釋這個幾何關(guān)系:任一物體,已知它的長寬高、朝向和距離,則它在圖像上的具體形狀大小等可唯一確定;反之亦然。
如圖中房屋的支撐柱,大小高度完全相同,但是處于圖像的不同位置,所占用的像素、長寬都有差別。
基于單視圖度量衡,我們可以建立一個哈希查詢表,去根據(jù)物體圖像尺寸,物理尺寸,朝向角來查詢物體的距離。
對于每種障礙物,我們根據(jù)它的平均(或單位)尺寸,去建立查詢表,覆蓋360度yaw 角的變化,來映射不同的距離。(例如2D框的25像素高,yaw角為30度,則它的距離為100米等等)。圖中示例了一個小轎車在不同距離下、不同偏轉(zhuǎn)角yaw angle情況下,在圖像上的顯示。
對于這樣一個簡單的算法,速度上可以達(dá)到0.07毫秒/每幀圖像。而在準(zhǔn)確率上,我們分別在KITTI數(shù)據(jù)集和Apollo內(nèi)部數(shù)據(jù)集上做了評測。在KITTI上取得了很好的效果,0-30米內(nèi)障礙物誤差大概在1米左右。隨著距離增大,誤差會增大,但是最終誤差不超過8%。
在Apollo數(shù)據(jù)集上,這個簡單算法也取得了不錯的效果。最大誤差不超過6%。
綜上,我們可以整理出Apollo里單目攝像頭下的障礙物檢測流程圖:輸入單幅圖像,預(yù)測大部分參數(shù);基于單視圖度量衡,我們可以預(yù)測出剩余的參數(shù)距離和中心點(diǎn)坐標(biāo)。
Apollo里單目攝像頭下的障礙物檢測穩(wěn)定快速,對繁忙路段和高速場景都可以適配。檢測速度在30HZ以上。
Apollo里單目攝像頭下的障礙物算法已經(jīng)成功入庫到Apollo 2.5 和 Apollo 3.0,并在CIDI等項(xiàng)目中使用。
-
攝像頭
+關(guān)注
關(guān)注
60文章
4852瀏覽量
95965 -
Apollo
+關(guān)注
關(guān)注
5文章
342瀏覽量
18481
原文標(biāo)題:社群分享內(nèi)容 | 基于單目攝像頭的物體檢測
文章出處:【微信號:Apollo_Developers,微信公眾號:Apollo開發(fā)者社區(qū)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論