leiphone 凌海濱
聲明:本文的目的主要在於概念介紹和技術推廣,遠非嚴謹的學術論文。
1、從現實到擴增(增強)現實
增強現實(Augmented Reality,簡稱AR)和虛擬現實(Virtual Reality,簡稱VR)概念的出現已經有幾十年的歷史了,然而VR/AR大量出現在科技媒體上吸引各方注意,也就是最近的事情。在本節中我們簡單介紹一下這兩個概念以及它們的歷史,同時澄清一下它們的區別。
首先,讓我們來想一想:什麼是現實?很哲學很深邃的問題,古希臘思想家柏拉圖說過,哦,扯遠了,回到大家賴以養家糊口的電腦世界,沿用俗語我們定義現實為:「眼見為實」。再具體地說,我們關心的現實就是以影像的方式,呈現給人類視覺系統的對於真實世界的感知訊息。簡單的說,就是真實世界的影像。
上述定義顯然給了有進取心的電腦牛人們一個後門:如果以某種方式生成影像,只要足夠逼真,是不是就能愚弄人類的眼睛甚至整個大腦呢?有道理,這不就是駭客帝國的原型嘛。這種虛擬出來的現實,毫無懸念就是虛擬現實(VR)的定義。
當然,目前的技術能力還遠遠無法實現,駭客帝國中的那種迷人的沈浸感。事實上,從最早的VR原型,1962年由Morton
Helig發明的虛擬現實3D個人影院Sensorama(圖1),到最近拉風的Oculus,虛擬現實技術帶來的沈浸感,始終處在一種需要用戶主動相信的狀態。當然,這種狀態,對於很多應用來說不是什麼問題,所以才有了如今大熱的各種VR產品和資本熱捧的各個VR大鰐和新秀。
那麼,增強現實(AR)又是個啥?
經常收到熱心朋友的「你們公司的VR做得真棒」的讚,虛榮心滿足的同時,作為一個嚴謹的技術工作者,其實我是很有些尷尬的。很多時候我真的很想說:親愛滴,我們做的是AR,是AAAAA R啊!言歸正傳,讓我們引用一下維基百科的定義:
“Augmented reality (AR) is a live direct or indirect view of a physical, real-world environment whose elements are augmented (or supplemented) by computer-generated sensory input such as sound, video, graphics or GPS data. As a result, the technology functions by enhancing one's current perception of reality.”
請注意定義中的「physical, real-world
environment」。就是說AR中的R是真實的R,相比之下,VR中的R就是個山寨版的。那麼A這個增強的概念就比較廣大虛了:籠統的說,凡是能對R有附加額外的訊息的都算。
除了像HoloLens中那樣在即時影像上,疊加的各種花哨東西以外,實用系統如ADAS裡面實時疊加的車道線,輔助生產系統中頭顯裡顯示的指示箭頭等等,都可以算。再次強調的是,AR裡面的訊息是疊加到真實的場景裡面的,而不是虛擬的場景(即VR)裡面的。一個有意思的小眾研究方向,是將一部分真實場景中的內容疊加到虛擬場景中,學名Augmented Virtualization,簡稱AV。
圖2中的例子也許能更好地反映AR和VR的區別。上方顯示的是典型的VR設備和人眼接收到的VR影像,下方則是AR設備和AR影像。這一組例子中我們可以看到VR是將人和真實世界完全隔離的,而AR則相反。AR和VR的優缺點在這裡就不囉嗦了。
當然,睿智如你,一定不喜歡被虛擬的假象蒙蔽雙眼的感覺,對吧?另外值得一提的Digi-Capital對於它們市場前景的預測:到2020年,AR/VR的市場體量總共是1500億美元,其中AR佔1200億,VR300億。
從另一角度來看,它們也有一個比較明顯的相似之處,都是通過影像的方式,實現人和電腦之間的交互,所以它們都需要有生成,或者加工影像的能力,和將影像呈現給人眼的途徑。前者是AR和VR之間很不同的地方,VR基於虛擬生成,AR則基於對現實的加工。而在影像呈現的方面AR和VR基本上是一致的,這也是行外人士難以區分二者的原因。簡而言之VR和AR的區別是:
VR是趨近現實;AR是超越現實。
接下來我們主要討論AR,重點討論AR和VR不同的那一部分。那麼AR是如何發展起來的呢?一般認為,AR的鼻祖是哈佛大學Ivan Sutherland教授,1966年發明的光學透射式頭盔顯示器(STHMD),該設備使得虛實結合成為可能。
增強現實這個術語最早是由波音公司的研究員Thomas P. Caudell在90年代初提出的。1992年,兩個早期的原型系統,Virtual Fixtures虛擬幫助系統和KARMA機械師修理幫助系統,由美國空軍的Louis Rosenberg和哥倫比亞大學的S. Feiner等人分別提出。
早期的AR系統多是應用在工業製造維修,或類似場景中的,笨重而且畫質粗糙(相對於現在的系統而言)。這一方面是由於當時的計算能力和資源所約束,另一方面也是算法技術的發展還沒有到位,同時行動數位影像設備還遠未普及到一般個人用戶。
之後,隨著這幾個方面的快迅發展,AR的應用和研究也有了長足的進步。尤其值得一提的是2000年Bruce Thomas等研發的AR Quake系統,和2008年推出的Wikitude,前者將AR推向了行動可穿戴的領域,而後者將AR直接落戶到了手機端。
至於最近開始拉風無比的HoloLens,和神秘兮兮的Magic Leap,更是將對AR的關注,引向了從所未有的高度。
從下面開始,我們將從軟體技術和智慧理解的角度介紹AR。
2、AR中的視覺技術
增強現實技術流程
按照Ronald Azuma在1997年的總結,增強現實系統一般具有三個主要特徵:虛實結合,實時交互,和三維配準(又稱註冊、匹配或對準)。近二十年過去了,AR已經有了長足的發展,系統實現的重心和難點也隨之變化,但是這三個要素基本上還是AR系統中不可或缺的。
圖4描繪了一個典型的AR系統的概念流程。從真實世界出發,經過數位成像,然後系統通過影像數據和傳感器數據,一起對三維世界進行感知理解,同時得到對三維交互的理解。3D交互理解的目的,是告知系統要「增強」的內容。
例如,在AR輔助維修系統中,如果系統辨識出修理師翻頁的手勢,就意味著下面要疊加到真實圖像中的,應該是虛擬手冊的下一頁。相比之下,3D環境理解的目的,就是告知系統要在哪裡「增強」。
比如在上面的例子中,我們需要新的顯示頁,和以前的看起來在空間位置上是完全一致的,從而達到強烈的真實感。這就要求系統實時對周圍的真實3D世界有精準的理解。一旦系統知道了要增強的內容和位置以後,就可以進行虛實結合,這個一般是通過渲染模組來完成。最後,合成的影像被傳遞到用戶的視覺系統中,就達到了增強現實的效果。
在AR的技術流程中,數據的採集(包括影像和傳感器)已經比較成熟,顯示端和渲染端的技術也有了長足的進步。相對而言,中間的對於環境和交互的精準理解,就是目前的瓶頸了。
聰明的同學一定會想到,如果中間這部分使用基本虛擬生成的內容,不就可以了嗎?恭喜你來到熱鬧的VR界:據說從2015年以來,對岸中國已經湧現了好幾百個VR公司,光做VR眼鏡就上百,不會幾個VR名詞的話都不好意思和人打招呼,呵呵。
當然,本文討論的是AR,上圖中間的基於多模態(簡單說就是影像+傳感器)的環境和交互理解,是兩個充滿了各種或明或暗的坑的領域,足以讓很多假的猛士知難而退。
環境和交互理解的難點和機會
那麼,真的猛士將會直面什麼樣慘澹和淋漓的坑群呢?下面我們來共同賞析幾個常見坑型:
環境坑:據說人的腦細胞裡面,大多數都是用來處理和理解,雙眼所獲取的視覺訊息的,很多我們驚鴻一瞥,就能理解和感知的東西,得益於我們強大的腦處理能力。各種環境變化對視覺訊息的影響,我們不但能輕鬆應對,有時還能加以利用。比如我們的認知能力對光照明暗的變化相當的魯棒;比如我們可以通過陰影來反推三維關係。而這些對於電腦(確切些說是電腦視覺算法)來說都是不折不扣的坑或者大坑。理解了這種坑,就不難理解為什麼很多看起來美輪美奐的demo,實用起來那麼悲催,可能的原因包括光照變了、形狀變了、紋理變了、姿態變了、相機變了、背景變了、前景變了;有陰影了、有遮擋了、有噪聲了、有干擾了、有畸變了等等。更加悲催的是,這些影響系統效果的因素,在我們人類的視覺系統中,經常是難以察覺的,以至於小白用戶們經常對我們的工作能力表示狐疑,並產生親自上手的衝動。總的來說,成像環境的變化,常常給電腦視覺算法,以及AR帶來很大的挑戰,所以我把相關的坑統稱環境坑。學術坑:對於環境和交互的理解重建,基本上屬於電腦視覺的範疇,電腦視覺是一個有著半個世紀累積的領域,和AR相關的學術成果可以成噸來計。比如,如果對跟蹤感興趣的話,光文章題目中含有「tracking」的頂級會議論文(比如CVPR),每一年都能有幾十篇。誇張一點的說,每篇都有坑,區別只在大小深淺明暗。為什麼會這樣?哦,這個嘛,要發一篇CVPR,我們要想法新、理論強、公式繁、結果好、速度還不能太慢(艾瑪我容易嘛我),程序不過擬合數據真的很難,文章不藏著limitations(注意是複數)也很難。不是說這些學術成果沒有用,相反,正是這些前撲後繼的學術進展,才慢慢催生了領域的進步。重點是,從實用的解決方案的角度來看學術論文,尤其是新的論文,一定要小心其中的設定和有些話外的訊息,多想一下諸如該算法是否對光照敏感,是否可能在手機端達到實時等等。簡單的建議是:對於一篇電腦視覺的論文,未有相關經驗的觀眾,請在有相關訓練的成熟觀眾陪伴下,謹慎觀看。上帝坑:上帝是誰?當然就是用戶了。上帝的坑當然得長得有創意,常常激起開發者靈光一動恍然大哭的慾望。比如上帝說,要能判別影像中人的性別,80%的準確度,100萬。哇,你是不是感動的熱淚盈眶(仁慈的上帝啊),用各種時髦的方法輕鬆超額10%搞定。可是,交貨的時候上帝說你這個系統咋認不出我們家小baby的性別啊?Oh my God,你是不是又激動得想哭了。和環境坑比較像,CV的算法很多時候是需要有假設的,強烈的假設。那怎麼辦呢?上帝總是正確的,所以唯一的辦法就是盡早教育上帝讓他更加正確:需要苦口婆心地盡早和用戶科普以及盡量明確定義需求,防範坑於未成。還不行的話咋辦?上帝啊,請再加點工錢吧。
其實還有其他類型的坑,比如開源代碼坑,這裡就不詳述了。那麼,這麼一個充滿憂患的領域,為什麼又會有那麼多追隨呢?最重要的原因就是巨大的應用前景和錢景了。
往小了說,很多具體的應用領域(比如遊戲)都已經成功地引入了AR的元素;往大了說,AR的終極形態,可能從根本上改變當前的非自然人機交互模式(請腦補微軟Win95的成功和現在的HoloLens)。上面說的那些坑,在很多應用上,是可能避免的,或者可能填得不那麼深的。舉個例子:某AR遊戲裡面需要在跟蹤的Marker上進行遊戲內容疊加,而該遊戲的特殊性,使跟蹤的精確性難以保證(好吧,其實是算法做得不夠給力)從而導致影響用戶體驗的抖動。
這種情況下,一個簡單有效的辦法是把要疊加的內容做得動感十足,這樣一來用戶就感覺不到令人不爽的抖動了。類似的實戰例子非常多,有的是從渲染端解決的,還有更多的是針對具體用例做算法層面的優化定制的。總的來說,一個好的AR應用往往是需要算法工程實現、產品設計、內容製作等方面的深度結合。好了,水貨講得太多了,下面我們開始講技術了。主要是跟蹤配準方面,一來是這些技術在AR中的核心重要性,二來嘛,其他方面我其實也不太懂(看我多謙虛,呵呵)。AR跟蹤配準技術發展
三維配准是鏈接虛實的最核心技術,沒有之一。大致說來,在AR中配準的目的,是對影像數據進行幾何上的精確理解。這樣一來,就決定了要疊加的數據的定位問題。比如說,在AR輔助導航中如果想把導航箭頭「貼在」路面上(如圖5),就一定要知道路面在哪裡。在這個例子中,每當手機攝影機獲取到新一幀圖像,AR系統首先需要將圖像中的路面定位,具體的說,就是在某個事先設定的統一的世界坐標系下,確定地面的位置,然後將要貼的箭頭虛擬地放在這個地面上,再通過與相機相關的幾何變換,將箭頭畫在圖像中相應的位置(通過渲染模組完成)。
如前所述,三維跟蹤配準在技術上,存在很多挑戰,尤其在考慮到行動設備有限的訊息輸入和計算能力的情況下。鑒於此,在基於視覺AR的發展歷程中,經歷了從簡單定位到複雜定位的幾個階段,下面簡單介紹一下這個發展過程,更多的技術細節在下一節討論。
二維碼:和大家如今廣為使用的微信二維碼原理一樣,二維碼主要的功能在於提供穩定的快速的辨識標識。在AR中,除了辨識以外,二維碼還兼職提供易於跟蹤和對於平面進行定位的功能。因為這個原因,AR中的二維碼比一般的二維碼來說,模式顯得簡單,以便於精確定位。圖6給出了AR二維碼的例子。
二維圖片:二維碼的非自然人工痕跡,很大地局限了它的應用。一個很自然的拓廣是使用二維圖片,比如紙幣、書本海報、像片卡牌等等。聰明的小白朋友一定已經發現:二維碼本身也是二維圖片,那為啥不把二維碼的方法直接用到二維圖片上呢?哦,是醬紫:二維碼之所以簡單,就是因為它上面的圖案,是設計出來的讓視覺算法可以迅速辨識定位的,一般的二維圖片則不具備這種良好的性質,也需要更強大的算法。並且,不是所有的二維圖片,都可以用來進行AR定位的。極端情況下,一個純色的沒有任何花紋的圖片,是無法用視覺的方法定位的。圖7的例子中,兩張卡牌用來定位兩個對戰重點的虛擬戰士
三維物體:二維圖片的自然擴展當屬三維物體。一些簡單的規則三維物體,比如圓柱狀可樂罐,同樣可以作為虛實結合的載體。稍微複雜一些的三維物體,通常也可以用類似的方法處理,或分解成簡單物體處理,如在工業修理中的情況。但是,對於一些特定的非規則物體,比如人臉,由於有多年的累積研究和海量的數據支持,已經有很多算法可以進行實時精準對齊。然而,如何處理通用的物體,仍然是一個巨大的挑戰。
三維環境:在很多應用中,我們需要對整個周圍3D環境的幾何理解,很長時間以來和可預期的一段時間以內,這一直是個充滿挑戰的問題。近年來,三維環境感知在無人車和機器人等領域的應用,取得了成功的效果,這讓人們對在其在AR中的應用充滿憧憬。然而,相比無人車等應用場景,AR中可以使用的計算資源和場景先驗常常捉襟見肘。受此影響,AR中的三維場景理解研發,主要有了兩個顯而易見的思路,一是多傳感器的結合,而是對於應用的訂製。兩個思路的結合也是實用中常見的手段。
在以上提到的技術中,二維碼和二維圖片的辨識跟蹤技術,已基本上成熟,也已經有了廣泛的應用。技術方面的發展目標,主要是進一步提高穩定性以及拓寬適用範圍。相比而言,三維物體和三維場景的辨識理解,還有很大的探索空間,即使是目前火爆的HoloLens所展現的令人驚艷的跟蹤穩定性,從追求完美的角度,還有很多可以提升的空間。
3、單目AR辨識跟蹤簡介
由於辨識跟蹤的重要性,下面簡單介紹一下AR中的二維圖片跟蹤,和三維環境理解。二維碼的技術已經很成熟而應用較受限制,三維物體辨識的技術,大致上介於二維圖片和三維場景之間,所以就偷懶不提了。
二維平面物體的AR跟蹤
一般情況下, AR中二維平面物體的跟蹤可以歸結為如下問題:給定一個模板圖片R,在影像流中時刻檢測該圖片的(相對相機的)三維精確位置。比如在圖8的例子中,R是實現知道的人民幣圖片,影像是從手機端實時獲取的,通常記為It (表示在時間t獲得的視訊圖像),而需要得到的是R在It中的幾何姿態(通常包括三維旋轉和平移),記為Pt。
換句話說,模板圖片R通過由Pt表示的三維變換就可以被貼到它在圖像It中的位置。跟蹤結果的用途也很顯然,既然知道了這個姿態Pt,我們可以用一個美元的圖片以同樣的姿態疊加到視頻中來替換人民幣,從而達到6倍以上的炫富效果。好吧,例子中沒有那麼俗氣,而是疊加了一個莊嚴的影像。
那麼,上面例子中的跟蹤定位是如何做到的呢?主流的方法大致有兩類,一類是直接法(direct method,有時也稱為全局法),另一類叫間接法,哦不對,叫控制點法(keypoint-based)。
直接法:直接法裡的「直接」,是說直接用優化方法去找最好的目標,即姿態Pt。這裡牽涉到三個主要元素:
(1)怎麼定義好和不好,(2)在哪裡找Pt,(3)怎麼找。
對於(1),一個直觀的辦法是:假設模板圖按照姿態Pt變換後,對應圖像It上的一個小區域,那麼這個區域可以摳出一個圖像T,T(經過歸一化以後)應該和模板R長得越像越好。對於(2),我們可以在所有可能的姿態中去找Pt。不過這個策略顯然是很費時的,考慮到在影像中相鄰圖像幀的變化有限,所以我們通常是在上一時刻的姿態(通常記為Pt-1)附近去尋找。至於怎麼找,這就轉化成一個優化問題了,簡單的說,就是要在Pt-1的一個鄰域裡面找一個Pt,使得通過Pt摳出來得圖像塊T和R最相似。當然,實際操作時候上面三個部分都各有講究。比如(1)中對於T和R是否相似可能要考慮光照的變化,(2)中如何定義姿態空間的鄰域以及合理的鄰域大小。
(3)中具體用什麼樣的優化算法,來盡量對抗局部極值的干擾,而又不能太耗時。不同的處理方式產生出了不同的跟蹤算法,其中典型的代表工作之一,是ESM算法和它的一些變種。
ESM是Efficient Second-order Minimization的縮寫,源自Benhimane和Malis在2004年在IROS上發表的工作。該算法採用重構誤差平方作為衡量R和T相似性的指標,然後對於姿態空間進行了在李群(Lie Group)上的重新構建使得搜索的步長更為理性,在尋優上面使用的二階近似的快速算法。這個算法的結構清晰,各模組都可以比較容易的獨立擴展,所以在其基礎上衍生出了不少改進算法,通常是針對實用場景中不同的調整(比如處理強光照或者運動模糊)。
控制點法:基於控制點的方法由於其即時高效,成為目前業內主流方法。控制點類的方法並不直接對姿態Pt進行尋優,而是通過控制點匹配的方法來計算Pt。控制點法的一個典型流程參見圖9。其基本出發點在於使用圖像中特別的點(通常是角點)來建立模板R和影像圖像It之間的映射,通過該映射建立方程組,然後求解出姿態Pt。比如說模板是一張人物的像片,那麼我們在影像中定位的時候,並不需要對於臉上的所有點進行匹配,而可以通過一些控制點(眼角,鼻尖,嘴角等)迅速定位。
稍微數學一點的解釋是這樣的:由於姿態Pt是由若干參數(一般是8個)控制的,那麼求解Pt的一個辦法是弄一個方程組出來,比如說8個線性的方程,那麼我們就可以求出Pt了。那麼這些方程怎麼來呢?
我們知道,Pt的作用是把範本R變到圖像It中,也就是說R中的每個點經過一個由Pt決定的變換就可以得到它在圖像中的位置。那麼,反過來,如果我們知道圖像中的一個點(比如眼角)和範本中就是同一個點(就是說他們匹配上了),我們就可以用這一對匹配點,給出兩個方程(X、Y坐標各一個),這樣的點就是所謂的控制點。當我們有了足夠多的控制點對以後,就可以求解姿態Pt了。
總結起來,控制點法包括三個主要元素:(1)控制點提取和選擇,(2)控制點匹配,(3)姿態求解。
控制點的基本要求:一是要能從周圍環境中脫穎而出(減少位置上的歧義),二是要經常而且穩定地出現(易於找到)。各種圖像中的角點因此閃亮登場,各種PK。比較知名的有SIFT、SURF、FAST等。注意,上述排名分先後的:按照能力來說越往前越好,按照速度來說越往後越好。實際應用中可以根據用戶機型做決定。那麼,這些點提取後就可以用了嗎?No,一般來說還需要進行取捨:一是要去掉沒用的點(即outlier),二是使選取後的點盡量均勻以降低不必要的誤差,同時也要防止點太多帶來的大量後續計算。
控制點匹配的目的是在兩個圖像的控制點集間找到匹配的點對(鼻尖對鼻尖,眼角對眼角)。通常這個由控制點之間的相似性和空間約束協同完成。簡單的方法有緊鄰匹配,複雜的基本上是二分匹配的各種變種(bipartite matching or two-dimensional assignment)。完成了匹配之後,就可以求解得到姿態Pt了:由於通常使用的點數遠多於最小需求(為了穩定性),這裡的方程數目遠大於未知變數的數目,所以最小二乘法之類的解法在這裡會派上用場。
以上三個步驟初看起來涇渭分明,實際使用時卻經常是交織在一起的。主要原因是很難保證得到精確無誤的控制點。有用的可靠控制點,常常夾雜著各種真假難辨的山寨們一起到來,所以經常需要往返反覆運算在三個步驟之間,比如用RANSAC之類的方法,選擇控制點來得到服從大多數的姿態。相比直接法,控制點法的基本演算法框架比較成熟,工程實現上的細節很大程度上決定了演算法的最終效果。
這兩類方法的優缺點根據具體實現略有不同,大致上可以總結如下:
這兩類方法的優缺點有很明顯的互補性,所以一個自然的想法就是二者的結合,具體的方式也有不同變種,這裡就不羅嗦了。
三維環境的AR跟蹤
對於三維環境的動態的即時的理解,是當前AR在技術研究方面最活躍的問題。其核心就是最近火熱的「即時定位與地圖構建」(SLAM,Simultaneously Localization And Mapping),在無人車、無人機和機器人等領域也起著核心作用。
AR中的SLAM比其他領域中一般難度要大很多,主要是因為AR賴以依存的行動端的計算能力和資源比起其他領域來說要弱很多。目前在AR中還是以視覺SLAM為主,其他傳感器為輔的局面,儘管這個情況正在改變。下面的討論主要局限於視覺SLAM。
標準的視覺SLAM問題可以描述為:把你空投到一個陌生的環境中,你要解決「我在哪」的問題。這裡的「我」基本上等同於相機或者眼睛(因為單目,即單相機,請把自己想象成獨眼龍),「在」就是要定位(就是localization),「哪」需要一張本來不存在的需要你來構建的地圖(就是mapping)。你帶著一隻眼睛一邊走,一邊對周邊環境進行理解(建圖),一邊確定在所建地圖中的位置(定位),這就是SLAM了。
換句話說,在走的過程中,一方面把所見到(相機拍到)的地方連起來成地圖,另一方面把走的軌跡在地圖上找到。下面我們看看這個過程大致需要哪些技術。
從圖像序列反算出三維環境的過程,即mapping,在計算機視覺裡面屬於三維重建的範疇。
在SLAM中,我們要從連續獲取的圖像序列來進行重建,而這些圖像序列是在相機的運動過程中採集的,所以相關的技術就叫基於運動的重建(SfM,Structure from Motion)。題外話,SfX是視覺中泛指從X中進行三維重建的技術,X除了運動以外還可以有別的(比如Structure from Shading)。
如果相機不動怎麼辦?很難辦,獨眼龍站著不動,怎麼能知道周圍三維的情況呢?原理上來說,一旦獲取的兩張圖像之間有運動,就相當於有兩隻眼睛同時看到了場景(注意坑,這裡假設場景不動),不就可以立體了嗎?這樣一來,多視幾何的東西就派上用場了。再進一步,運動過程中我們得到的實際是一系列圖像而不只是兩張,自然可以用他們一起來優化提高精度,這就是令小白們不明覺厲的集束約束(Bundle Adjustment)啦。
那麼localization又是怎麼回事呢?如果有了地圖,即有了一個坐標系,定位問題和前述2D跟蹤在目的上基本一致(當然更複雜一些)。讓我們考慮基於控制點的方法,那麼現在就需要在三維空間找到並跟蹤控制點來進行計算了。很巧的是(真的很巧嗎?),上面的多視幾何中,也需要控制點來進行三維重建,這些控制點就經常被共用了。那麼可不可以用直接法呢?Yes we can!但是,如後面會講到的,由於目前AR中計算資源實在有限,還是控制點法經濟實惠些。
從三維重建的方法和結果,SLAM大致可以分為稀疏、半稠密和稠密三類。圖10中給出的典型的示例。
稠密SLAM:簡單的說,稠密SLAM的目的,是對所相機所採集到的所有訊息,進行三維重建。通俗的說,就是對看見的每一個空間上的點算出它到相機的方位和距離,或者知道它在物理空間的位置。在AR相關的工作裡面最近的影響力較大的有DTAM和KinectFusion,前者是純視覺的,後者則使用了深度相機。由於需要對幾乎所有採集到的像素進行方位計算,稠密SLAM的計算量那是槓槓的,所以不是平民AR(比如一般的手機,手握6S/S7/Mate8的朋友不要側漏傲氣,這些統統都算「一般」)。稀疏SLAM:稀疏SLAM的三維輸出是一系列三維點雲。比如三維立方體的角點。相對於實心的三維世界(比如立方體的面和中腹),點雲所提供的對於三維環境的重建是稀疏的,是以得名。實際應用中,在這些點雲的基礎上提取,或推理出所需要的空間結構(比如桌面),然後就可以根據這些結構,進行AR內容的渲染疊加了。和稠密SLAM版本相比,稀疏SLAM關心的點數低了整整兩個維度(從面墮落到點),理所當然地成為平民AR的首選。目前流行的稀疏SLAM,大多是基於PTAM框架的一些變種,比如最近被熱捧的ORB-SLAM。
半稠密SLAM:顧名思義,半稠密SLAM的輸出密度在上述二者之間,但其實也沒有嚴格的界定。半稠密SLAM最近的代表是LSD-SLAM,不過對於在AR中的應用,目前還沒有稀疏SLAM熱門。
由於稀疏SLAM在AR中的流行度,下面我們簡單介紹一下PTAM和ORB-SLAM。在PTAM之前,由A. Davison在2003年提出的單目SLAM,開創了即時單目SLAM的先河。這個工作的基本思想,還是基於當時機器人等領域的主流SLAM框架的。
簡單地說,對於每一幀新到來的圖像,進行「跟蹤-匹配-製圖-更新」的流程。然而這個框架在行動端(手機)上的效果和效率,都不盡如人意。針對行動端AR的SLAM需求,Klein和Murray在2007年的ISMAR(AR領域的旗艦學術會議)展示了效果驚艷的PTAM系統,從而成為單目視覺AR SLAM的最常用框架,暫時還是之一。
PTAM的全稱是Parallel Tracking And Mapping,上面已經暗示過了,PTAM和之前的SLAM在框架是不同的。
我們知道,SLAM對每一幀同時(Simultaneously)進行兩個方面的運算:定位(Localization)和建圖(Mapping)。
由於資源消耗巨大,這兩種運算很難實時的對每一幀都充分地實現。那我們一定要每一幀都同時定位和建圖嗎?先看定位,這個是必須每幀都做,不然我們就不知道自己的位置了。那麼製圖呢?很幸運,這個其實並不需要每幀都做,因為隔上幾幀,我們仍然可以通過SfM來感知場景。
試想一下,把你扔到一個陌生的場景,讓你邊走邊探索周邊環境,但是每秒鐘只讓你看10眼,只要你不是在飛奔,相信這個任務還是可以完成的。PTAM的核心思想就在這裡,不是simultaneously定位和製圖,而是把他們分開,parallel地各自奔跑。這裡的定位以逐幀跟蹤為主,所以就有了tracking。
而製圖則不再逐幀進行,而是看計算能力而定,啥時候處理完當前的活,再去拿一幀新的來看看。在這個框架下,再配合控制點選取匹配等各項優化組合,PTAM一出場就以其在華麗的demo亮瞎觀眾(這可是近10年前啊)。
故事顯然沒有這樣結束。我們都知道,demo和實用是有差距滴,何況還是學術界的demo。但是在PTAM思想的指引下,研究人員不斷進行改進和更新。這其中的佼佼者就有上面提到的ORB-SLAM。
ORB-SLAM由Mur-Artal,Montiel和Tardos在2015年發表在IEEE
Transaction on Robotics上,由於其優異的性能,和貼心的源碼,迅速獲得工業界和學術界兩方面的青睞。不過,如果打算通讀其論文的話,請先做好被鬱悶的心理準備。不是因為有太多晦澀的數學公式,恰恰相反,是因為基本上沒有啥公式,而是充滿了讓人不明覺厲的名詞。
為什麼會這樣?其實和ORB-SLAM的成功有很大關係。ORB-SLAM雖然仍然基於PTAM的基本框架,不過,做了很多很多改進,加了很多很多東西。從某個角度看,可以把它看作一個集大成的且精心優化過的系統。
所以,區區17頁的IEEE雙欄論文是不可能給出細節的,細節都在參考文獻裡面,有些甚至只在源碼裡。在眾多的改進中,比較大的包括控制點上,使用更為有效的ORB控制點、引入第三個線程做回環檢測矯正(另外兩個分別是跟蹤和製圖)、使用可視樹來實現高效的多幀優化(還記得集束約束嗎)、更為合理的關鍵幀管理、等等。
有朋友這裡會有一個疑問:既然ORB-SLAM是基於PTAM的框架,那為啥不叫ORB-PTAM呢?是醬紫的:儘管從框架上看PTAM已經和傳統SLAM有所不同,但是出於各種原因,SLAM現在已經演變成為這一類技術的統稱。也就是說,PTAM一般被認為是SLAM中的一個具體算法,確切些說是單目視覺SLAM的一個算法。所以呢,ORB-PTAM就叫ORB-SLAM了。
儘管近年來的進展使得單目SLAM,已經能在一些場景上給出不錯的結果,單目SLAM在一般的行動端,還遠遠達不到隨心所欲的效果。電腦視覺中的各種坑,還是不同程度的存在。在AR中比較刺眼的問題包括:
初始化問題:單目視覺對於三維理解有著與生俱來的歧義。儘管可以通過運動來獲得有視差的幾幀,但這幾幀的質量並沒有保證。極端情況下,如果用戶拿著手機沒動,或者只有轉動,算法基本上就掛掉了。快速運動:相機快速運動通常會帶來兩方面的挑戰。一是造成圖像的模糊,從而控制點難以準確獲取,很多時候就是人眼也很難判斷。二是相鄰幀匹配區域減小,甚至在極端情況下,沒有共同區域,對於建立在立體匹配之上的算法,造成很大的困擾。純旋轉運動:當相機做純旋轉或近似純旋轉運動時,立體視覺無法通過三角化來確定控制點的空間位置,從而無法有效地進行三維重建。
動態場景:SLAM通常假設場景基本上是靜止的。但是當場景內有運動物體的時候,算法的穩定性很可能會受到不同程度的干擾。
對AR行業動態有瞭解的朋友可能會有些疑惑,上面說得這麼難,可是HoloLens一類的東西好像效果還不錯哦?沒錯,不過我們上面說的是單目無傳感器的情況。一個HoloLens可以買五個iPhone 6S+,那麼多傳感器不是免費的。
不過話說回來,利用高品質傳感器,來提高精度必然是AR
SLAM的重要趨勢,不過由於成本的問題,這樣的AR可能還需要一定時間才能從高端展會走到普通用戶中。
4、SMART: 語義驅動的多模態增強現實和智慧交互
單目AR(即基於單攝影機的AR)雖然有著很大的市場(想想數億的手機用戶吧),但是如上文所憂,仍然需要解決很多的技術難題,有一些甚至是超越單目AR的能力的。任何一個有理想、有追求、有情懷的AR公司,是不會也不能局限於傳統的單目框架上的。
那麼除了單目AR已經建立的技術基礎外,AR的前沿上有哪些重要的陣地呢?縱觀AR和相關軟硬體方向的發展歷史和事態,橫看今天各路AR諸侯的技術風標,不難總結出三個主要的方向:語義驅動,多模態融合,以及智慧交互。遵循業界性感造詞的慣例,我們將他們總結成:
SMART:Semantic Multi-model
AR interaction
即「語義驅動的多模態增強現實和智慧交互」。由於這三個方面都還在飛速發展,技術日新月異,我下面就勉強地做一個粗淺的介紹,表意為主,請勿鑽牛角尖。
語義驅動:語義驅動在傳統的幾何為主導的AR中,引入語義的概念,其技術核心來源於對場景的語義理解。為什麼要語義訊息?答案很簡單,因為我們人類所理解的世界是充滿語義的。
如圖11所列,我們所處的實體世界,不僅是由各種三維結構組成的,更是由諸如透明的窗、磚面的牆、放著新聞的電視等等組成的。對於AR來說,只有幾何訊息的話,我們可以「把虛擬菜單疊加到平面上」;有了語義理解後,我們就可以「把虛擬菜單疊加到窗戶上」,或者邪惡地「根據正在播放的電視節目顯示相關廣告」。
相比幾何理解,對於視覺訊息的語義理解,涵蓋廣得多的內容,因而也有著廣得多的應用。廣義的看,幾何理解也可以看作是語義理解的一個子集,即幾何屬性或幾何語義。那麼,既然語義理解這麼好這麼強大,為啥我們今天才強調它?難道先賢們都沒有我們聰明?當然不是,只是因為語義理解太難了,也就最近的進展,才使它有廣泛實用的可能性。
當然,通用的對任意場景的完全語義理解,目前還是個難題,但是對於一些特定物體的語義理解,已經在AR中有了可行的應用,比如AR輔助駕駛和AR人臉特效(圖12)。
多模態融合:隨著大大小小的AR廠家,陸續推出形形色色的AR硬體,多模態已經是AR專用硬件的標配,雙目、深度、慣導、語音等等名詞紛紛出現在各個硬件的技術指標清單中。這些硬體的啓用,顯然有著其背後的算法用心,即利用多模態的訊息,來提高AR中的對環境和交互的感知理解。
比如,之前反覆提到,作為AR核心的環境,跟蹤理解面臨著五花八門的技術挑戰,有些甚至突破了視覺算法的界限,這種情況下,非視覺的訊息,就可以起到重要的補充支持作用。比如說,在相機快速運動的情況下,圖像由於劇烈模糊而喪失精準性,但此時的姿態傳感器給出的訊息還是比較可靠的,可以用來幫助視覺跟蹤算法度過難關。
智能交互:從某個角度來看,人機交互的發展史,可以看作是追求自然交互的歷史。從最早的紙帶打孔,到如今窗口和觸控螢幕交互,電腦系統對使用者的專業要求越來越低。
近來,機器智慧的發展,使得電腦對人類的自然意識的理解越來越可靠,從而使智慧交互有了從實驗室走向實用的契機。從視覺及相關訊息來即時理解人類的交互意圖,成為AR系統中的重要一環。
在各種自然交互中,基於手勢的技術是目前AR的熱點。一方面由於手勢的技術比較成熟,另一方面也由於手勢有很強的可訂製性。關於手勢需要澄清的一個地方是:手勢估計和手勢辨識是兩個緊密相關,但不同的概念。
手勢估計是指從圖像(或者深度)數據中得到手的精確姿勢數據,比如所有手指關節的3D坐標(圖13);而手勢辨識是指判斷出手的動作(或姿態)說代表的語義訊息,比如「打開電視」這樣的命令。前者一般可以作為後者的輸入,但是如果手勢指令集不大的情況下,也可以直接做手勢辨識。前者的更準確叫法應該是手的姿勢估計。
5、結語
增強現實的再度興起,是由近年來軟硬體的進展決定的,是科學和技術人員幾十年努力的推動成果。一方面,很幸運我們能夠趕上這個時代提供的機會;另一方面,我們也應該警惕過度的樂觀,需要腳踏實地得趟過每一個坑。
0 comments:
張貼留言