自動駕駛技術 視覺篇 偽光達Pseudo-LiDAR 如何使用照片計算出深度資訊? 【上】

阿財科技分享 的頭像
阿財科技分享 | 綜合討論 | 3,514

自動駕駛光達篇阿財分了上中下和番外篇,分別從光達的是如何利用ToF計算深度,並且比較了不同的光達技術,最後介紹了高精地圖的繪製,沒看過的朋友可以去阿財的主頁看看包準乾貨滿滿!

接下來進到大家萬眾矚目的系列-自動駕駛電腦視覺篇

我相信不少朋友知道視覺技術是因為特斯拉或是Google Waymo的關係,但其實電腦視覺(Computer vision (CV))技術已經行之有年,更準確地說電腦視覺已經發展好幾十年了,那電腦視覺有三個頂尖的研討會,分別是:

  • CVPR : Conference on Computer Vision and Pattern Recognition
  • ICCV : International Conference on Computer Vision
  • ECCV : European Conference on Computer Vision

而這些研討會每年都會邀請許多大咖來分享技術,像是去年CVPR大會就邀請了特斯拉AI總監Andrej KarpathyNvidia自駕的軟體部門的VP等來分享自動駕駛技術,阿財也都會定期follow相關的頂尖論文,以後也都會和大家分享,所以要定期關注阿財的YouTube頻道和DDCAR的文章喔~

言歸正傳,之前我們有提到要實現自動駕駛就必須獲得深度資訊,而上個系列介紹使用光達來獲取車子與待測物之間的距離,那視覺技術呢?

電腦視覺從字面上我們就可以大概聯想,我們人是用眼睛來觀察世界,如今我們希望電腦或機器能夠看到或是感知世界,所以科學家們將傳感器(sensor)與電腦連結,透過傳感器接收到的光子搭配算法讓電腦能夠到世界

那電腦又是如何利用相機或是攝影機拍攝到的圖片而感知深度呢?

答案藏在我們人的眼睛裡。

相信不少朋友有耳聞,我們之所以能夠感知到深度,多虧了我們兩隻眼睛,人兩隻眼睛因為有瞳距(Pupil distance),所以左眼和右眼看同一個物體其實略有不同,大家可以做個小實驗,輪流用手遮住左眼和右眼並且看同一個物體,會發現到觀察物好像有移動的感覺。

所以透過眼睛看待世界的原理,可以簡單歸類成兩種感知深度的技術:

  • 單目視覺(Monocular vision)
  • 雙目視覺(Stereo vision)

看到這邊大家不要緊張,讓阿財娓娓道來~

單目視覺(單台相機或攝影機)感知深度的方法:

  • 運動結構恢復法(Structure from Motion(SfM))

 運動結構恢復是藉由移動單台相機拍攝同一個物體的不同面,再利用算法對每個面進行匹配進而建構出3D立體的場景

  • 陰影和紋理推測(Shading and Texture)

陰影和紋理顧名思義就是根據陰影和紋理來推算深度,舉個例子,如下圖的照片中有凸起的山丘和凹下去的湖泊,以我們人的感知來說,凸起來的山丘深度(高度)是要高於凹下去的湖泊。

自動駕駛技術-視覺篇-偽光達Pseudo-LiDAR-如何使用照片計算出深度資訊?-【上】-1

圖片來源:pixabay

  • 物體遮擋

大家看到下圖兩隻熊大是不是很自然的會覺得刺蝟熊大在海豹熊大前面?因為我們認為刺蝟熊大好像遮擋住海豹熊大了!

自動駕駛技術-視覺篇-偽光達Pseudo-LiDAR-如何使用照片計算出深度資訊?-【上】-2

圖片來源:阿財自己拍的熊大

  • 幾何透視

如下圖,大家有沒有感覺黃色圓圈的椅子很明顯是在橘色圓圈圈起來的椅子和人前面因為橘色圓圈圈起來的人和椅子是在整條道路的中間,這就歸功於幾何的透視,我們會感覺道路是朝一個方向越來越小,最終消失在一個點上 。

自動駕駛技術-視覺篇-偽光達Pseudo-LiDAR-如何使用照片計算出深度資訊?-【上】-3

圖片來源:pixabay

  • 移動拍攝和AI

這兩個方法文字敘述起來比較複雜,建議大家直接看下方的影片介紹,另外上面幾種方法阿財也有搭配文獻進行更詳細的介紹喔(影片從2分開始到10分)

雙目視覺(兩台或多台相機)感知深度的方法:

雙目視覺其實就和我們人眼一樣,下圖兩台相機就像是我們人的兩隻眼睛,b則是瞳距,紅色圈圈起來星星的則是我們要計算的待測物,如果我們計算出相機與待測物之間的距離,我們可以利用以下這些參數:

  • b1是左相機光軸與待測物的距離
  • b2是右相機光軸與待測物的距離
  • f是相機的焦距,
  • D是相機與待測物的距離
  • X1是左相機拍攝到物體在底片上的距離
  • X2是左相機拍攝到物體在底片上的距離

自動駕駛技術-視覺篇-偽光達Pseudo-LiDAR-如何使用照片計算出深度資訊?-【上】-4

圖片來源:Object distance measurement by stereo vision

接下來搭配國中學的相似三角形,阿財畫的綠色三角形和藍色三角形,比較麻煩的地方是,我們不能確定b1和b2的數值分別是多少,但我們可以知道兩台相機之間的距離(b1+b2),於是整理一下算式最終計算出相機與待測物的距離D,只需要知道相機焦距、兩台相機之間的距離和相機底片的距離(X1和X2)!

PS上面的影片10分到11分15秒裡也有詳細介紹雙目視覺的計算方法喔~

當然到這邊一定有朋友會問說,阿財萬一兩台相機的光軸不是水平的情況怎麼辦?

方法有很多,但萬變不離其宗,就是利用相機校正(camera calibration),大家有興趣的可以去搜尋一下,阿財就不在這邊展開了

所以不管是單目還雙目的方法,其實都有非常多數學和算法隱藏其中,那阿財下篇文章就要介紹AI是如何結合單目視覺和雙目視覺的方法,來完成大名鼎鼎的Pseudo-LiDAR偽光達,大家敬請期待喔!

廣告

我是科技財知道的阿財,主要分享各種自動駕駛技術和電動車相關的資訊,歡迎大家一起分享學習。

>> 看更多我的文章