車載雙目相機,老兵的二次出征
2021年12月15日 09:36 瀏覽:2361
來源 | 十一號組織
自動駕駛的感知武器庫里,有一款模擬人的雙眼感知原理而設計的產品。帶著神童的光環誕生,卻一度湮沒在簡單即復雜的自動駕駛生存法則里。而今,退掉青澀,帶著風雨中洗禮后的成熟,重新出現在自動駕駛感知的主戰場。車載雙目相機,一位老兵的二次出征,自動駕駛圈黑話第八期的主角。
早在90年代未,意大利帕爾馬大學視覺實驗室VisLab就利用雙目相機在高速公路完成了2000公里的長距離自動駕駛試驗,無人駕駛占比94%,而車速達到了112km/h。
這一成就,即使放在今天,也足以讓競爭對手汗顏。
但是后來的故事沒有按照俗套的劇本演繹,故事的主人公也一度變成了雙目相機的弟弟單目相機。
單目相機在今天的自動駕駛領域混的風生水起、婦孺皆知。前有傳統豪門Mobileye的一見鐘情,中有車中貴族特斯拉的情有獨鐘,后有遍地開花自動駕駛企業的萬千恩寵。單目相機,儼然一幅修煉辟邪劍譜后,睥睨武林的不可一世。
然而單目相機的測距,高度依賴深度學習。而目前深度學習視覺感知框架下,需要先進行目標識別,才能進行下一步的距離探測。如果單目相機無法識別出目標,則會認為前方沒有障礙物,規劃不會選擇變道,控制不會選擇減速,結果可能就是新聞中特斯拉的“視而不見,目中無物”。提高深度學習視覺感知目標識別率的方法就是加大訓練數據集,窮盡自動駕駛車輛路上可能遇見的一切目標。但對于“人不能兩次踏進同一條河流”的變化世界來說,窮盡本身就是偽前提。
而雙目相機通過左右兩個相機從不同角度同時對被測物體成像,并基于視差原理計算圖像對應點的位置偏差,從而獲得被測物體的距離信息,結合相機的內外參數,可以最終得到帶有空間三維坐標的點云數據。這意味著,雙目相機無須識別出目標,也能進行目標距離的探測。且測距準確度遠高于單目相機通過深度學習估算的距離。
這么好的仿生產品,一位出道即成名的童星,后來為何未能在自動駕駛領域得到大規模的應用?原因很多,有算法實現的復雜、處理芯片的高門檻、效益的無法平衡等。下文就從雙目測距原理、結構原理上剖析,看看是否能找到部分答案。
雙目相機測距過程包括相機標定、圖像校正,立體匹配等步驟。
整個過程涉及矩陣變換、三角相似等矩陣運算、代數相關的數學知識。
但在焦慮、煩躁、不安彌漫的打工人之中,公式意味著閱讀的終結。
為了避免這種尷尬,作者先通過一張測距原理示意圖,概括性介紹整個測距原理,而后再詳述每個過程。
對于上圖左邊行人和汽車,從左右相機成像的結果上看,同一物體在左圖像和右圖像中的位置是不同的,而同一物體的同一像素點在兩個相機中的位置差稱為視差。從上圖右半部分可以看出,近處行人視差大,遠處汽車視差小,車載雙目相機正是基于這樣的視差原理(近視差大、遠視差小),來實現物體深度的測量。
相機成像的過程實際是將真實世界的三維物體映射到成像平面二維圖像的過程,為確定真實世界三維物體表面某點與其在成像平面二維圖像中對應點之間的相互關系,必須建立相機成像的幾何模型,這些幾何模型參數就是相機參數(內參、外參、畸變參數)。而相機參數通常需要通過實驗與計算才能得到,求解相機參數的過程稱之為相機標定。
而雙目相機標定其實就是分別獲取每個相機的參數,從而獲得兩個相機的相對位置關系,為圖像校正等提供位置依據。因此首先介紹單目相機的幾何模型及標定原理。根據透鏡成像原理建立的單目相機理想幾何模型如下圖所示,涉及四大坐標系,世界坐標系、相機坐標系、圖像坐標系和像素坐標系。
世界坐標系(Xw,Yw,Zw):
以外界某個參考點Ow建立的三維坐標系,用于描述物體(包含相機、被測物等)在真實世界中的位置,單位是m。
相機坐標系(Xc,Yc,Zc):
以光心Oc為原點,光軸Zc指向相機正前方的三維坐標系,用于從相機的角度描述真實世界中物體的位置,單位是m。
圖像坐標系(x,y):
以光軸Zc與成像平面的焦點oi為原點建立的二維坐標系,用于描述成像過程中物體從相機坐標系到圖像坐標系的投影關系,單位是m。
像素坐標系(u,v):
以圖像平面左上角o為坐標原點的二維坐標系,用于描述每個像素在圖像平面上的相對位置,也是用戶最終看到的,單位為像素。
但是為了相機模型數學描述上的方便,我們一般將成像平面(圖像坐標系xy平面重合的面)以相機坐標系xy平面為對稱面對稱到另一邊,如下圖所示,這也是市面上介紹相機標定文章中最終看到相機模型的模樣。
單目相機標定主要包含兩個過程(1)世界坐標系到相機坐標系的幾何關系參數,由于參數只與世界坐標系的外部位置有關,也稱為外參標定。(2)相機坐標系到像素坐標系之間的投影幾何關系參數,這部分參數與相機的焦距、像素尺寸等相機內部參數有關,簡稱為內參標定。
從世界坐標系到相機坐標系的變換是一個剛體變換,通過旋轉和平移即可將世界坐標系下物體的W(Xw,Yw,Zw)點轉換為相機坐標系下的C(Xc,Yc,Zc)點,用旋轉矩陣R和平移矩陣T可表示為如下關系。
從相機坐標系到圖像坐標系是一個三維到二維的投影變化過程,相機坐標系下的一點C(Xc,Yc,Zc)與其在圖像坐標中投影點i(x,y),利用相似三角形原理可得到如下關系。
從圖像坐標系到像素坐標系是同一平面不同坐標系原點,不同坐標系單位的轉換。圖像坐標系的原點在圖像傳感器的中心,像素坐標系的原點在圖像傳感器的左上角,圖像坐標系的單位是m,像素坐標系的單位是像素。當圖像坐標系的原點oi在像素坐標系下的坐標為(uo,vo),一個像素點在x軸,y軸方向的尺寸為dx,dy時,則圖像坐標系下I點在像素坐標系下P點坐標如下。
因此,相機坐標系下的一點C(Xc,Yc,Zc)與其投影在像素坐標系下P(u,v)的完整數學關系如下。
單目相機模型理解透了,雙目相機模型無非是兩個相機的疊加。為了便于理論分析,我們首先建立光軸平行,焦距相等,左、右相機坐標系x軸正方向重合的雙目相機理想成像模型,其示意圖如下。
左右相機光心之間的距離b稱為基線距離,為了便于求出被測點C的深度值Zc,將C點投影在相機坐標系的xz平面,投影示意圖如下。
由三角形相似原理可最終求得點C的三維坐標值如下,由公式看出,要想得到C點的深度值及三維坐標值,需要知道(1)相機焦距f和基線長度b,這個在上一步標定過程已經獲得(2)xr和xl的差值,也就是視差值。
所謂視差,是指被測點在不同位置相機中成像位置的差異。為了計算視差,我們必須為左邊圖像中的每個像素,匹配到其與右邊圖像中的對應像素,這就雙目相機立體匹配的問題,也是雙目相機的核心問題之一。
按照常規思維,為了在右圖像中匹配左圖像的一個像素點,我從0到N開始逐個匹配,對于像素10萬的相機來說,匹配的工作量勉強可以接受。如果像素為100萬、200萬、甚至800萬呢?為了提高匹配的效率,一部分高質量人類提出了極線約束的解決方案。
被測點C1和左相機光心Oc1和右相機光心Oc2三點構成的平面稱為極平面,極平面與成像平面相交的兩條直線稱為極線。而對于理想雙目相機模型來說,空間點C1在左相機成像平面的投影點,對應于右相機成像平面上的投影點,一定在右相機的極線上,這也就是著名的極線約束原理。將二維搜索變為一位搜索,高質量人類的高質量貢獻。
這是基于最理想的雙目相機模型設計出來的方法,但是現實情況可能由于裝配誤差、安裝誤差等原因,導致左右相機光軸不平行,成像平面不重合,結果就是左右極線不平行,不共面,如下圖所示。極線約束方法是不是沒法使用,別慌,針對這種情況,只需提前進行圖像校正就可以。
由于理解邏輯需要,圖像校正放在第三小節介紹,但其實圖像校正是標定工作的一部分。圖像矯正的目的就是將現實世界中光軸不平行的兩個成像平面重新投影到一個光軸平行的成像平面,這樣兩個相機的極線便平行了,左相機成像平面中的像素點只需要沿著水平的極線方向在右相機成像平面中進行匹配搜索就可以了。
但是實際操作過程中由于標定、計算過程中的誤差,左成像平面上的一個像素點,并不總是恰好在右成像平面極線上,而是在極線附近。同時,在進行單個像素點搜索匹配的時候,由于光照等原因,匹配的魯棒性會比較差。針對這兩種問題,出現了基于滑動窗口匹配以及基于能量優化的匹配方法,具體實現就不展開介紹,總之知道至此就能實現雙目準確的測距功能。
作為一款以深度值
測量為殺手锏的武器,其深度值的測量能力以及測量精度無疑是雙目相機至關重要的能力。
由前文推導的公式可知,雙目相機的深度值由基線距離b、焦距f、視差值決定。
從公式中可以比較直觀的得到如下關于精度的結論(1)用于計算視差的算法偏差越小,精度越高,這是算法層面;(2)基線越長、焦距越大,精度越高,這是硬件層面;(3)測量目標越近,精度越高,這是被測物距離層面。
而測距能力和基線關系很大。基線越大,測距范圍越大;基線越小,測距范圍越小。所以基線在一定程度上決定了雙目相機的測距能力。
從上文測距實現過程來看,從模型建立到立體匹配都有了成熟的理論支撐,那橫亙在童星成名路上的阻礙必是工程實現了,下文總結一二。
(1)雙目相機的立體匹配是個復雜的世界難題,而解決這個世界難題又需要用到復雜的并行處理算法。同時為了保證在誤差存在情況下立體匹配的魯棒性,算法復雜度又急劇提升。基于開源代碼加上自己的注釋便宣稱掌握全棧解決方案的套路不管用了,這是需要大量真金白銀對的投入、曠日持久的研發,才能獲得的技能。
(2)雙目相機的立體匹配算法包含大量乘法、除法、開方等復雜并行計算,且算法還在不斷優化。通用型的GPU不是特別適合作為主處理芯片,算法定型之后,ASIC是最優解,但在算法沒有定型的今天,可硬件編程的FPGA芯片無疑是最佳的選擇。而基于硬件編程語言對FPGA編程的難度,又是中小型創業公司難以逾越的鴻溝。Veoneer第四代雙目相機產品就是使用了Xilinx(Zynq UltraScale+ MPSoC)的FPGA做處理器;
(3)光照敏感是依賴自然光傳感器的通病。想象一下,你迎著光和逆光拍攝同一物體,然后讓機器去匹配兩張圖片上對應像素點,人腦都有點困難,如何敢要求“機腦”呢。而現實世界中,因為光照角度原因,確實會導致左右相機成像明暗相差較大,這在一定程度上增加了立體匹配的難度,增大了立體匹配的誤差;
(4)被測物體單調的紋理又是雙目相機另外一個軟肋,針對顏色一致的貨車車廂、顏色一致的墻面,左相機的一個像素點可能有極線上大部分像素點都匹配,雙目相機算法工程師不得不再次跪在立體匹配的難度與誤差上。
所以只有克服上述困難后,你才會擁有一個結構簡單、成本美麗、測距能力優秀、測距精度適中的深度測量法器。而上述困難沒有現成的開源方案任君選擇,也不是簡單招幾個算法工程師研究三個月、半年就可以搞定的事情,需要的是龐大研發隊伍曠日持久的投入。所以我們看到修煉這件法器的基本都是鄉紳土豪。國外有Veoneer、博世、大陸、電裝、日立等,國內中科慧眼、華為、大疆等,而能駕馭這件法器也都非富即貴,國外有斯巴魯、奔馳、豐田、本田等,國內有吉利、紅旗等。
結尾一貫的跑題,元戎啟行在2021年12月8日發布了成本控制在1萬美元的自動駕駛解決方案,媒體開始鼓吹中國版的"特斯拉FSD"。
細看其配置,速騰和一徑的當家花旦
悉
數到場,應該是降本的最大功臣。
而宣傳中另一降本功臣,則是計算單元,采用NVDIA“
入門級
顯卡”,看到這五個字時,我多年選擇性的信號不好差點就被治好了。
消費級顯卡用在工業場景,NVDIA是保留追責權利的,NVDIA是可以養肥了再宰的。
不知道元戎啟行的媒體稿是怎么通過內部評審的,這里也不去妄議,也有可能是我的理解有誤。只想感慨一句:自動駕駛領域,宣傳的文章,路演的視頻,CXO口中的萬億市場可能與工程師正在修復的低級BUG是平行世界兩條不想交的直線。保持謙卑,追求落地,或許是自動駕駛由年少輕狂走向成熟的標志。
技術鄰APP
工程師必備