立體視覺則屬於一種被動光學測距方案,其最直接的體現,在消費電子產品中應該就是手機後置的雙攝或者多攝了(可能是相對深度)。似乎鮮有媒體和機構分析當前主流的雙攝方案,是如何實現3D成像的。採用雙攝做3D成像,其實不是近些年才有的事,興起在2011年的HTC EVO 3D(HTC G17),那個年代就開始相繼有手機採用雙攝來實現3D視覺了。2bnEETC-電子工程專輯
說是3D成像,實際其近代的應用更體現在「攝影輔助」方面,或者說computational photography(計算攝影)。最典型的應用,是手機利用雙攝這種立體視覺方案,來模擬原本只有單反才能拍出來的背景虛化效果(或淺景深效果)。在移動成像領域,computational photography做的最為大張旗鼓的應該就是谷歌了。2bnEETC-電子工程專輯
2bnEETC-電子工程專輯
單反可達成的背景虛化效果2bnEETC-電子工程專輯
而且谷歌也願意分享在手機拍照方面的一些研究細節和成果,這些成果也反映在了其自家的Google Pixel系列手機上。華為和一眾Android廠商如今喜歡鼓吹的手機拍照,很大程度上也都受惠於谷歌的computational photography研究。2bnEETC-電子工程專輯
我們期望通過這篇文章,以谷歌的背景虛化模擬應用為例,來管中窺豹地談一談,立體視覺這種方案究竟是怎麼實現3D成像的,以及如今3D成像在手機攝影上面,已經發展成什麼樣了——尤其現在還很流行配合AI,又是怎麼回事。作為對3D感知的某種補充,也能更好地理解,立體視覺,相比結構光、ToF這些主動光學測距方案,又有著怎樣的優勢和劣勢。2bnEETC-電子工程專輯
有關背景虛化(或者淺景深)的基礎光學知識,這裡不再贅述。總之背景虛化是一種光學特性,一張照片如果要有足夠「模糊」的背景,拋開焦距、物距不談,則要求成像設備的光圈足夠大,或者圖像傳感器足夠大。這對手機這種小身材的設備來說是不現實的,從單純的光學層面來說,手機很難拍出單反那樣背景那麼虛的照片。2bnEETC-電子工程專輯
而背景「虛化」程度很多時候是一張照片有沒有質感、衝擊力的關鍵。數位技術發展這麼多年了,如今還有AI加持,靠物理不成,能不能靠算力來模擬單反的這種虛化效果呢?這其實就是如今手機攝影模擬背景虛化的基礎。2bnEETC-電子工程專輯
2bnEETC-電子工程專輯
如果手機有能力自己感知照片中不同對象的深度…來源:諾基亞2bnEETC-電子工程專輯
如果我們用手機拍一張照片,然後用Photoshop把照片中的主體部分給摳出來,並針對除主體外的背景做一個虛化效果,是不是就可以模擬出單反的這種光學特性了?簡單理解的確是這樣。但問題是,摳圖是個費時費力的事情,而且固然人類可以用Photoshop摳圖,但機器有這個能力嗎?怎樣讓機器去自動摳圖,這實質上就成為模擬背景虛化的最大難點。2bnEETC-電子工程專輯
這個時候有很多現成的方案可以考慮,典型的比如AI——現在的機器學習可以做到視覺對象的「語義分割」,即理解畫面中拍的是什麼:這是個人,那是座山,是不是就能摳圖了呢?這是個好主意,但如今AI所能做的「切割」還沒有那麼準確,它頂多就是個輔助方案。那麼結構光和ToF呢?它們都屬於距離檢測技術,甚至能夠對整個場景做3D建模,根據拍攝場景中,不同物體的深度(depth)不就能知道畫面裡哪個物體在前,哪個物體在後,並應用虛化效果了嗎?2bnEETC-電子工程專輯
2bnEETC-電子工程專輯
結構光構建的深度數據,來源:蘋果2bnEETC-電子工程專輯
這些的確也是可行的方案,而且現有的部分系統也的確是這麼做的。典型的比如iPhone上的TrueDepth系統(可以理解為 Face ID,一種結構光系統),我們用近兩代的iPhone前置攝像頭來拍照,在拍完以後可以應用各種後期光效,其實現依靠的就是結構光能夠檢測人臉不同位置的深度,構建起人臉的3D模型,並應用不同的光效和後期。2bnEETC-電子工程專輯
但不難發現,用iPhone的結構光來「摳圖」,自拍時頭部邊緣似乎破綻還挺大的,並不靠譜。這主要是因為結構光的深度檢測距離十分有限,將這種方案應用到後置攝像頭的人像模式,那幾乎就是不可用的狀態。2bnEETC-電子工程專輯
這時,ToF是不是更靠譜呢?當代ToF的確有輔助「摳圖」的價值,但其解析度精度堪憂;而且手機上的ToF模組雖然深度檢測範圍要遠大於同樣應用於手機的結構光,但就攝影來看也遠遠不夠。這個時候立體視覺就成為一個明顯更有優勢的方案可被應用到手機拍照的背景虛化效果上——而且其應用也比較早,至少遠比iPhone 7 Plus應用雙攝來做背景虛化模擬更早。2bnEETC-電子工程專輯
那麼雙攝是怎麼實現3D視覺,或者「摳圖」的呢?這裡不再詳細解釋其原理,但就直覺來看也十分直觀:即人眼就有左右之分,兩隻眼睛的位置有差異,左右眼觀察到的世界是有區別的,包括場景中物體的遮擋、前後關係等。兩眼一起發揮作用,我們才能觀察到立體的世界,並且判斷場景中物體的前後關係。2bnEETC-電子工程專輯
2bnEETC-電子工程專輯
來源:Improve a 3D distance measurement accuracy in stereo vision systems using optimization methods』 approach[2]2bnEETC-電子工程專輯
用一張圖來概括立體視覺如何實現光學測距,或者3D感知,其方法如上,這就是典型的Triangulation(三角測量法)。2bnEETC-電子工程專輯
如果以更符合直覺的方式來描述這種方法,像人眼那樣,則兩顆攝像頭看到場景中的對象前後關係有差異,亦可實現這種「摳圖」,並針對畫面中的不同位置、不同對象應用不同的模糊算法,達成以假亂真的、用手機就拍出單反背景虛化的效果。如下圖所示:2bnEETC-電子工程專輯
2bnEETC-電子工程專輯
iPhone 7 Plus人像模式模擬的背景虛化,與單反光學系統的背景虛化,來源:DxOMark[3]2bnEETC-電子工程專輯
模擬背景虛化,是這種立體視覺方案針對攝影效果強化的一個典型應用。某些手機不依賴雙攝也能實現這種人像模式的背景虛化,其中有一部分依靠的是AI,或者深度學習——這部分我們後面再談。還有一類,比如谷歌Pixel 2/3這樣並沒有雙攝的手機,人像模式的實現就相對比較奇葩。2bnEETC-電子工程專輯
2bnEETC-電子工程專輯
Dual Pixel CMOS 圖像傳感器,來源:佳能2bnEETC-電子工程專輯
實際上谷歌Pixel 2這樣的單攝手機,依靠的也是立體視覺,只不過並不是雙攝,而是一種叫「dual pixel(雙像素)」的技術。我們在早前的文章中曾經提到過[4][5], 現在的圖像傳感器,很多像素與其上微透鏡的關係並不是一一對應的,這原本是為了實現PDAF相位對焦所做的一種設定。即相鄰的兩個像素(或者可能是同一個像素的兩個子像素),利用它們「看到」的場景中同一個對象的視角小差異,這種很小的「相位差」其實也可以用來判斷場景中不同對象的前後位置關係(或距離)。2bnEETC-電子工程專輯
看起來其原理和「雙攝」非常類似,或者說它很像是把一個攝像頭一分為二,每一半像素觀察到的世界和另一半像素觀察到的有微小差異[6]。只不過像素尺寸何其之小,如今單像素尺寸下探到了0.7μm,相鄰像素能夠「觀察」到的「相位差」,相比雙攝的視差小得多;尤其在拍攝一些距離手機攝像頭比較遠的對象時,雙像素的視角差異會非常小(如下圖1圖右)。所以這種方法實現的「摳圖」準確性,在很多情況下都遠弱於雙攝。2bnEETC-電子工程專輯
2bnEETC-電子工程專輯
圖1,谷歌Pixel的雙像素帶來的視角差異,來源:Google AI Blog2bnEETC-電子工程專輯
2bnEETC-電子工程專輯
2bnEETC-電子工程專輯
圖2,雙像素與雙攝的視角差異對比,來源:Google AI Blog2bnEETC-電子工程專輯
在相同距離下,雙攝觀察到的視角差異就會顯著很多,如圖2。谷歌在去年推出的Pixel 4手機上已經開始應用雙攝。目前谷歌人像模式的背景虛化模擬,已經開始結合雙攝和雙像素兩種技術。2bnEETC-電子工程專輯
雙像素(dual pixel)和雙攝(dual camera)的結合實際上也有助於規避一些原有的問題,而且雙方可以取長補短。比如說在圖2展示的狀況中,如果單純採用雙攝方案,緊貼著人物右側的像素,實際上在兩個攝像頭之間,是很難找到對應關係的(因為兩者有不同的遮擋關係),在算法上會有難度(對象邊緣虛化失誤的原因之一)。2bnEETC-電子工程專輯
一般來說,這裡的baseline越遠,則在某個攝像頭中可見的更多像素,在另一個攝像頭中就無法找到對應的像素。如此一來,僅通過雙攝來計算這部分像素的深度,就會有相當大的難度。但因為同時有雙像素和雙攝方案在,對於這部分區域的像素深度,雙像素方案就能提供分析參考。2bnEETC-電子工程專輯
另外單獨應用以上的某一種技術,還面臨一個叫做aperture problem的問題(應該可以翻譯成遮罩問題,而非光圈問題)。如前所述,兩顆攝像頭(或兩個像素)觀察到的兩個世界,在畫面每一個點上需要有對應的像素關係,這樣才有計算深度的依據,但在某些情況下,這種對應關係會非常難找。2bnEETC-電子工程專輯
2bnEETC-電子工程專輯
來源:Google AI Blog2bnEETC-電子工程專輯
如果我們通過一個小光闌來觀察場景,一旦立體視覺系統的基線(即兩顆攝像頭或雙像素相連構成的直線),與畫面中某個拍攝對象的線條平行,則無法再找到這一區域的像素對應關係[7]。比如說上圖中人物背後的橫條紋,通過雙像素觀察到的「視差」在這一區域幾乎是不存在的——因為在此例中雙像素也是橫置的,與畫面中的橫向條紋平行。2bnEETC-電子工程專輯
Pixel 4實際上能夠天然地解決這個問題,因為它結合了雙攝和雙像素兩者。其中雙攝的基線是橫向的(兩顆攝像頭的擺位是左右關係,而非上下關係),而雙像素的基線則是豎向的。那麼針對場景中某一個方向的平行線條,就可規避這個所謂的aperture problem。2bnEETC-電子工程專輯
在Pixel 2時代,攝像頭模擬背景虛化的aperture problem問題是比較大的,因為Pixel 2隻是個單攝,在模擬背景虛化時只能採用雙像素方案,遭遇這個問題也不足為奇。但到了Pixel 3時代,谷歌卻已經很大程度能夠規避這個問題了,可Pixel 3也沒有雙攝。所以這個問題是怎麼解決的?2bnEETC-電子工程專輯
針對這個問題的輔助解決方案還有不少,比如說分析畫面,越遠離焦平面的點就越虛;另外根據畫面中對象所佔像素的多少,也能夠了對象離攝像頭多遠——這還是需要AI做語義理解的。2bnEETC-電子工程專輯
前文已經提到,AI是能夠幫助實現視覺影像的語義分割的。或者說它能夠識別出手機正在拍人,並且將人的輪廓大致地描摹出來。不過單純的對象識別並沒有PS摳圖那樣的準確性。所以谷歌對此專門訓練了一個卷積神經網絡,當然是用TensorFlow寫的。這個網絡就用於預測深度。Pixel 3的人像模式即開始利用這種AI技術。2bnEETC-電子工程專輯
具體到訓練這個網絡,所需的是大量的PDAF圖像(所謂的PDAF圖像,即是指圖1那樣的雙像素獲得的不同視角的兩張照片),及對應的「高質量」深度圖(depth map)。谷歌是親自上陣拍了一大堆PDAF照片,以及生成的深度圖,如下圖所示:2bnEETC-電子工程專輯
2bnEETC-電子工程專輯
來源:Google AI Blog2bnEETC-電子工程專輯
谷歌當時手動打造了一臺「五攝」裝備(上圖左),實際上就是把五臺Pixel 3按照攝像頭上下左右中(可規避aperture problem),以及相隔一定距離(baseline)的方式固定在一起。與此同時開發一個基於WiFi的同步系統,讓五臺手機能夠幾乎同時按下快門拍照。這樣一來就能生成比較準確的深度圖了(上圖最右)。2bnEETC-電子工程專輯
那麼在拍攝很多場景的情況下,就有足夠的訓練數據了。獲得的並非絕對深度,而是場景對象的相對深度,起碼在應對人像模式時是有價值的。這種方案部分解決了單攝的aperture problem。2bnEETC-電子工程專輯
不過從谷歌的AI Blog來看,Pixel 4在人像模式的機器學習技術上又與過去不大一樣。因為這次又多了雙攝這個資源。所以谷歌又利用Tensorflow訓練了一個卷積神經網絡。這次的網絡首先分別單獨處理雙像素(dual pixel)和雙攝(dual camera)的輸入數據。分別有兩個不同的編碼器——編碼器本身就是一種神經網絡,將輸入信息編碼為IR(intermediate representation);然後再經過一個解碼器,完成最終的深度計算。2bnEETC-電子工程專輯
2bnEETC-電子工程專輯
來源:Google AI Blog2bnEETC-電子工程專輯
如此,我們就大致說清楚了當代手機實現背景虛化的基本方案:當然不同OEM廠商在實施方案上還是會有差別,但谷歌應該是在手機的computational photography技術上走得相對激進的一個。至於具體的效果怎麼樣,那就是另外一個問題了。2bnEETC-電子工程專輯
除此之外,在更具體的背景虛化模擬上,仍有一些細節可以談。比如在最新的Pixel 4之上,谷歌開始進一步考慮背景中彌散圓的真實性問題:因為以前的背景模糊流程是放在tone mapping之後的(tone mapping就是照片不同亮度區間的像素,應用相應的曲線,包括讓暗部更亮、壓縮動態範圍之類的操作),這會導致場景中明亮對象信息損失,也就很難出現漂亮的高對比度彌散圓。谷歌的解決方案是,先對HDR+融合的原始圖像做模糊處理,然後再應用tone mapping,這樣背景虛化看起來會更自然,如下圖。2bnEETC-電子工程專輯
2bnEETC-電子工程專輯
將模糊放到tone mapping步驟之前,能夠營造看起來更真實的淺景深效果,來源:Google AI Blog2bnEETC-電子工程專輯
這篇文章我們只談到了手機拍照中背景虛化的一個點,實際上計算攝影方案還體現在手機拍照的方方面面,比如自動白平衡,谷歌也應用了機器學習技術;視頻拍攝的防抖補償方案也有類似的實現。谷歌與華為這類廠商的明確差別即在於,後者更傾向於利用光學、成像相關硬體來提升手機拍照能力,而前者則主要倚仗數據處理能力出眾——這也是符合谷歌自身定位的發展方向。2bnEETC-電子工程專輯
谷歌在Pixel 2中已經加入了一個名為Visual Core的專用晶片。這顆晶片是專門用於手機拍照的影像處理的。它本質上是一系列SiP圖像處理器,全可編程的圖像、視覺、AI多核專用架構(在Pixel 4之上已經升級為Pixel Neural Core)。2bnEETC-電子工程專輯
谷歌似乎有這種針對一個具體的應用,做專用硬體的傳統(典型如TPU)。谷歌宣稱Pixel Visual Core在保證完整可編程性的同時,能效又遠高於同期的高通驍龍835(7-16倍)。2bnEETC-電子工程專輯
2bnEETC-電子工程專輯
來源:Wikipedia2bnEETC-電子工程專輯
這種硬體的核心是IPU(image processing unit),另外還有個Arm核用於調度。每一個IPU核心都包含一個STP(stencil processor)、LBP(line buffer pool)和NoC(Network on a Chip)。STP處理器主要是2D SIMD處理單元PE陣列(具體應該是256個PE,16x16的2D陣列),執行定製的VLIW ISA;每個PE都有2個16位ALU,1個MAC乘法累加單元。看起來其實和脈動陣列(systolic array,TPU的實現)很像,只不過STP另外還有軟體控制數據流。[8]2bnEETC-電子工程專輯
這部分實際上是題外話了,Pixel 3a作為一款定位中端的機型就不帶Visual Core,但仍然支持谷歌在影像處理上的幾乎所有功能。這表明Visual Core單純就是硬體加速,不存在什麼獨有技術。不過看起來,谷歌在computational photography方面,還是有相當發展意圖的,或者對其AI技術來說,本身就是重要積累。而谷歌在這方面的著力,其實也並不難發現,Pixel手機的拍照發展方向,並不同於華為、蘋果這些手機拍照重在用戶體驗,而更著眼於技術實驗。2bnEETC-電子工程專輯
2bnEETC-電子工程專輯
Pixel 4的uDepth系統包含了兩顆紅外攝像頭,不同於一般的3D感知系統,來源:Google AI Blog2bnEETC-電子工程專輯
到此,我們基本也可以說,相比ToF、結構光這些3D感知技術,立體視覺的算力要求明顯更高,而且畢竟仍然是建立在常規成像技術之上的,它受限於拍攝場景,比如對於紋理不多的場景或者暗光場景,就會顯得無能為力。2bnEETC-電子工程專輯
最後值得一提的是,Pixel 4在3D感知方面,另外還應用了所謂的uDepth深度感知系統以及Soli雷達。uDepth這個系統與傳統的結構光並不一樣(但又似乎有結構光的一些特性,谷歌官方文檔中提到「採用主動立體設定,將紅外圖案投射到場景中,並被立體紅外攝像頭捕捉到」),它是個主動測距技術,所以包含了紅外點陣投射器,但又有兩顆紅外攝像頭(傳統的ToF和結構光都不是這樣)。2bnEETC-電子工程專輯
2bnEETC-電子工程專輯
Pixel 4前置光學組件實現的3D照片,是前置RGB攝像頭、uDepth系統與機器學習共同實現的效果,來源:Google AI Blog2bnEETC-電子工程專輯
谷歌在博客中提到,這是dense local stereo匹配技術家族中的一員,計算每個像素的視差[9]。這種技術估測其中一顆攝像頭拍到的每個像素周圍的區域,然後去找第二顆攝像頭拍下的對應相似區域。後續似乎有一套比較獨特的技術手法,來做紅外雙攝的匹配工作。這套方案在谷歌的應用中,有與前置攝像頭配合實現真正的3D照片、模擬虛化功能,其中當然也有應用機器學習相關技術——這應該算是深度數據與RGB數據做配合的一個真正實例。2bnEETC-電子工程專輯
而Pixel 4的Soli短距離雷達傳感器則利用微波做動作檢測,已經脫離了光學測距範疇[10]。上面這兩種技術已經超出本文探討的範疇,未來我們或許會有機會再行深挖——尤其是uDepth,可能是谷歌著力的一個重點。但很顯然,在一臺設備上搭載多種3D感知技術也並不是什麼新鮮事。2bnEETC-電子工程專輯
參考來源:2bnEETC-電子工程專輯
[1] 手機的3D感知能力——消費電子ToF技術與市場分析報告 - EE Times China2bnEETC-電子工程專輯
https://www.eet-china.com/news/2005012.html2bnEETC-電子工程專輯
[2] Improve a 3D distance measurement accuracy in stereo vision systems using optimization methods』 approach - Volume 25, Issue 1, May 2017, Pages 24-32, Opto-Electronics Review2bnEETC-電子工程專輯
https://doi.org/10.1016/j.opelre.2017.03.0012bnEETC-電子工程專輯
[3]Shoot-out: Apple iPhone 7 versus the Apple iPhone 7 Plus using our new test protocol - DxOMark2bnEETC-電子工程專輯
https://www.dxomark.com/shoot-apple-iphone-7-versus-apple-iphone-7-plus-using-new-test-protocols2bnEETC-電子工程專輯
[4] 小米1億像素拍照手機是噱頭嗎?高像素技術探秘 - EE Times China2bnEETC-電子工程專輯
https://www.eet-china.com/news/201908150930.html2bnEETC-電子工程專輯
[5] 索尼為什麼還不出1億像素CIS?華為該著急了! - EE Times China2bnEETC-電子工程專輯
https://www.eet-china.com/news/202003131007.html2bnEETC-電子工程專輯
[6] Improvements to Portrait Mode on the Google Pixel 4 and Pixel 4 XL - Google AI Blog2bnEETC-電子工程專輯
https://ai.googleblog.com/2019/12/improvements-to-portrait-mode-on-google.html2bnEETC-電子工程專輯
[7] Learning to Predict Depth on the Pixel 3 Phones2bnEETC-電子工程專輯
https://ai.googleblog.com/2018/11/learning-to-predict-depth-on-pixel-3.html2bnEETC-電子工程專輯
[8] Pixel Visual Core - Wikipedia2bnEETC-電子工程專輯
https://en.wikipedia.org/wiki/Pixel_Visual_Core2bnEETC-電子工程專輯
[9] uDepth: Real-time 3D Depth Sensing on the Pixel 42bnEETC-電子工程專輯
https://ai.googleblog.com/2020/04/udepth-real-time-3d-depth-sensing-on.html2bnEETC-電子工程專輯
[10] Soli Radar-Based Perception and Interaction in Pixel 4 - Google AI Blog2bnEETC-電子工程專輯
https://ai.googleblog.com/2020/03/soli-radar-based-perception-and.html2bnEETC-電子工程專輯