單目視覺是Mobileye的看家法寶,其實當年它也考慮過雙目,最終選擇放棄。
單目的測距和3-D估計靠什麼?是檢測目標的BoundingBox,如果無法檢測的障礙物,該系統就無法估計其距離和3-D姿態/朝向。沒有深度學習的時候,ME主要是基於BB,攝像頭標定得到的姿態和高度以及路面平直的假設估算距離。
有了深度學習,可以根據3-D的groundtruth來訓練NN模型,得到3D大小和姿態估計,距離是基於平行線原理得到的。不久前百度Apollo公佈的單目L3解決方案講的比較清楚了,參考論文是“3DBoundingBoxEstimationbyDeepLearningandGeometry".
雙目當然可以算視差和深度了,即使沒有檢測出障礙物,也會報警。問題是,雙目視覺系統估計視差沒那麼容易,立體匹配是計算機視覺典型的難題,基線寬得到遠目標測距準,而基線短得到近目標測距結果好,這裏是存在折衷的。
目前市場上ADAS存在的雙目視覺系統就是SubaruEyeSight,據説性能還行。
百度推出的阿波龍L4擺渡車量產100台,就安裝了雙目系統。還有歐盟自主泊車項目V-Charge也採用了前向雙目視覺系統,另外自動駕駛研發系統BertaBenz也是,而且和雷達系統後融合,其中雙目匹配的障礙物檢測算法Stixel很出名。以前Bosch和Conti這些Tier-1公司也研製過雙目視覺解決方案,但沒有在市場上產生影響力,據説被砍掉了。
談到雙目系統的難點,除了立體匹配,還有標定。標定後的系統會出現“漂移”的,所以在線標定是必須具有的。單目也是一樣,因為輪胎變形和車體顛簸都會影響攝像頭外參數變化,必須在線做標定修正一些參數,比如仰角和偏角。
雙目在線標定就更復雜些,因為雙目匹配儘量簡化成1-D搜索,所以需要通過stereorectification將兩個鏡頭光軸方向平行並和基線垂直。所以針對獲得的gain相比,增加的複雜度和成本,如果不划算商家就會放棄。
最近重提雙目視覺,是因為硅谷芯片公司安霸在2014年收購意大利帕爾馬大學的VisLab,研製了雙目的ADAS和自動駕駛芯片,去年CES之後就開始進軍車企和Tier-1。而且,安霸目前正在繼續研究提升該系統的性能。
下圖就是它在車頂安裝6對立體視覺系統的示意圖,其中它們的基線寬度可以不一樣的,相應地有效檢測距離也就不同。筆者曾坐過它的自動駕駛車,遠處可以看到200米,近處20-30米。它確實可以做在線標定,隨時調整一些雙目視覺的參數。
立體匹配
先説立體匹配,即視差/深度估計。如圖假設左右攝像頭焦距f,基線寬B,3-D點X的深度z,而其視差即
可見視差能夠反算深度值。但是這裏最難的就是左右鏡頭看到的圖像如何確定是同一個目標,即匹配問題。
匹配方法分兩種,全局法和局部法,雙目匹配的四個步驟:
匹配成本計算;
成本聚集;
視差計算/優化;
視差修正。
最著名的局部法就是SGM,很多產品在用的方法都是基於此的改進,不少視覺芯片都採用這種算法。
SGM就是把一個全局優化近似成多個局部優化的問題組合,如下公式是2-D匹配的優化目標函數,SGM實現成為多個1-D優化路徑之和
下圖是沿着水平方向的路徑優化函數
CensusTransform是將8/24比特的像素變成一個2進制序列,另外一個2值特徵叫LBP和它相似。立體匹配算法就是基於這個變換將匹配變成一個Hamming距離的最小化搜索。Intel的RealSense當年就是收購了一個成立於1994年基於該技術的雙目視覺創業公司,還收購另外幾個小公司把他們合在一起做出來的。
PatchMatch是一個加速圖像模版匹配的算法,被用在光流計算和視差估計上。之前微軟研究院曾經做過一個基於單目手機相機3-D重建的項目,仿造以前成功的基於RGB-D算法KinectFusion,名字也類似MonoFusion,其中深度圖估計就是採用一個修正的PatchMatch方法。
其基本思想就是對視差和平面參數隨機初始化,然後通過鄰域像素之間信息傳播更新估計。PM算法分五個步驟:
1)空間傳播:每個像素檢查左邊和上邊鄰居視差和平面參數,如果匹配成本變小就取代當前估計;
2)視角傳播:其他視角的像素做變換,檢查其對應圖像的估計,如果變小就取代;
3)時域傳播:前後幀考慮對應像素的估計;
4)平面細化:隨機產生樣本,如果估計使匹配成本下降,更新。
5)後處理:左右一致性和加權中值濾波器去除出格點。
在線標定
再説在線標定。
這是一個利用路上標誌線的標定方法:已知斑馬線的平行線模式,檢測斑馬線並提取角點,計算斑馬線模式和路面實現匹配的單映性變換參數,得到標定參數。
和單目方法類似,採用車道線平行和路平面這個假設可以快速完成在線標定,即消失點理論:假設一個平坦的道路模型,清晰的縱向車道線,沒有其他目標的邊緣和它們平行;要求駕駛車輛速度慢,車道線連續,左右相機的雙目配置要左攝像頭相對路面的仰角/斜角比較小;這樣跟初始化的消失點比較可以算出雙目外參數的漂移量,其算法就是從消失點估計攝像頭仰角/斜角。
典型的雙目自動駕駛系統
下面介紹幾個典型的雙目自動駕駛系統。
這是他們加上深度學習做視差融合之後再做Stixel的框圖和新結果:
介紹一個VisLab早期雙目障礙物的算法,GenericObstacleandLaneDetectionsystem。基於IPM,檢測車道線,根據左右圖像的差計算路上障礙物:
a)Left.RightRemappedleft.Remappedright.Thresholdedandfiltereddifferencebetweenremappedviews.Inlightgray,theroadareavisiblefrombothcameras.
a)Original.Remapped.Filtered.Enhanced.Binarized.
GOLDsystemarchitecture
這是VisLab參加自動駕駛比賽VIAC的車輛,除了雙目攝像頭以外,車上還有激光雷達作為道路分類的輔助。
後處理中加了兩個DSI空間的濾波器,見圖5-274,一個是平滑處理,另一個是基於慣導的運動軌跡處理。
障礙物檢測算法採用了JPL的方法,基於空間佈置特性以及車輛的物理特性聚類得到障礙物。物理特性包括最大的高度,最小高度和最大道路可通過範圍,這些約束定義了一個空間截斷錐,如圖所示,那麼在聚類過程中凡是落在截斷錐內的點劃為障礙物。
為加速視差估計算法,採用了劃分DSI的方法:
另外一種經典的方法是根據路面方程得到路面視差,基於此計算出路面的障礙物:
總結
總的看,雙目檢測障礙物的方法基本基於視差圖,基於路面視差的方法較多。也許隨着深度學習發展的突飛猛進,加上計算平台的增強,雙目自動駕駛系統也會普及起來。