為了改進單攝 Pixel 3 的人像模式,Google 造了一臺「五攝怪物」
由於鏡頭尺寸的限制,較高質量人像拍攝任務我們往往得交給雙攝甚至多攝像頭來完成。但就像你看到本文標題的主語後心裡所想的那樣:「不,對 Google 這樣的公司而言,還有另一條路可以走」。
這條路叫做演算法。
如果說去年釋出的 Pixel 2 是迎難而上,巧妙地通過雙畫素對焦和基於機器學習的影象分割扛住了「雙攝」潮流的衝擊,那今年的 Pixel 3 顯然就是在逆境求生——一款釋出於 2018 年下半年的單攝手機,在看到「雙攝人像」千元機遍地走、四攝五攝機型前赴後繼的情景時,一般反應應該和 Pixel 3 XL 的劉海神似( o皿o )。但 Google 卻 明確表示 ,Pixel 3 的人像模式效果比 Pixel 2 更好。
這是怎麼做到的?
弗蘭肯斯「機」
一切謎底都與這臺名為「弗蘭肯斯『機』(Frankenphone)」的手機有關,如果它還能被叫做「手機」的話——和西方文學史上首部科幻小說《弗蘭肯斯坦》中維克多·弗蘭肯斯坦用屍塊拼湊而成的那隻「怪物」一樣,這臺特別的手機由五臺 Pixel 3 組合而成。藉助一套特別開發的、基於 Wi-Fi 通訊的拍攝方案,這五臺 Pixel 3 能夠以小於 2ms 的誤差同時進行拍攝。

因此當我們把五張用這臺「弗蘭肯斯『機』」拍攝的照片疊在一起觀察時,所拍攝場景能夠以一種十分立體的效果進行呈現。

因此從某種程度上來說,Google 做了一臺搭載五攝方案的 Pixel 3,但 Google 並沒有將這臺「怪物」應用到最終產品——在演算法工程師們看來,用這個方案拍出來的照片中所包含的資料簡直就是用來進行演算法訓練絕佳素材。
為何要改進演算法?
Google 軟體工程師打算用「五攝」Pixel 3 獲取的影象資料來進行演算法訓練,訓練的物件就是此前曾用在 Pixel 2 上進行景深對映的 深度估計(depth estimation) 演算法。
為什麼要改進這個演算法?
在 Pixel 2 的人像模式下,相機先借助卷積神經網路(CNN)對 HDR+ 生成的影象進行主體與背景分割,然後經由雙畫素自動對焦技術(dual pixel auto focus)獲取到的景深資料進行景深對映,最後根據生成的景深對映圖進行不同程度的背景虛化處理。

這種基於立體景深(stereo depth)的人像模式處理流程能為採用單攝方案的 Pixel 2 帶來不俗的人像拍攝效果,但這個方法並非百試百靈。
在一篇介紹 Pixel 3 人像模式的 官方博文 中 Google 舉了這麼一個例子:

上圖左側為使用 HDR+ 拍攝的原始照片,右側則是基於 立體景深 (stereo depth)和 學習景深 (learned depth)兩種方式生成的人像對比。仔細觀察不難看出,採用立體景深進行人像模式合成的照片對背景中橫向條紋的虛化處理效果遠不及採用學習景深進行人像模式合成。
事實上,這也是 Pixel 2 基於立體景深進行人像模式合成的天然劣勢——藉助雙畫素感測器從兩個角度捕捉同一畫面的過程一方面獲取了景深資料,另一方面也可以被看作是同一個感測器在水平或豎直方向通過位移 拍攝了兩次 。在這個過程中,由於孔徑問題(aperture problem)的存在,畫面中橫向和縱向內容將很難進行判斷和計算,最終也就難以將其作為背景進行虛化處理。
這裡提到的孔徑問題,最佳例項可以參考下圖。從圖中可以看出,三個圓圈中的斜線在視覺效果上有著相同的運動軌跡(左上方向),但實際卻可以由三種運動方式來完成。

這其實也是「區域(local)」視覺和「全域(global)」視覺處理方式的差別,而一般情況下的手機成像都會受到區域視覺的影響,因此 Google 此前的人像模式演算法自然也存在其侷限性。
但這正是「弗蘭肯斯『機』」訓練資料大展身手的地方。
更有根據地「猜」
在瞭解「弗蘭肯斯『機』」如何改進人像照片合成演算法之前,我們還必須知道的一點是,基於不管是雙畫素感測器還是立體景深合成,這些方法的核心理念都在於對 深度資訊 (depth cues)的捕捉和利用。
而除了深度資訊,同一幅畫面中可以用來判斷景深的資料其實還有很多——即便是一張沒有經過景深計算和背景虛化處理的普通照片,我們依然能夠憑藉肉眼觀察來區分畫面中不同物體的位置關係,甚至能夠根據畫面中人臉所佔的像素面積來對畫面中人物與鏡頭的距離進行估算(即以物體常見尺寸為參考進行肉眼測距)。

這種測距方式用到的不是深度資訊,而是場景語義資訊(semantic cues),換句話說,靠的是我們對場景基於 常識 的判斷和理解。
但演算法是不具備這種常識的,這就是為什麼我們要用上面提到的「弗蘭肯斯『機』」的訓練資料改進演算法的根源。
具體而言,「弗蘭肯斯『機』」獲取到的資料有這麼幾個優勢:
- 五臺 Pixel 3 以不同位置進行拍攝,營造出多角度時差效果的同時,也能消除演算法執行過程中孔徑效應的限制
- 鏡頭以不同位置進行排列並拍攝,可以保證同一個畫素點在至少兩張照片中都能找到與之對應的畫素點。這可以消除單張照片通過雙畫素感測器資料進行合成的過程中,部分畫素難以對應的情況。
- 相機之間的實際位置差距也要比雙畫素對焦中上下兩個畫素感測器的位置差距更大,進行深度測算時自然就更加準確(可以理解為變相增加了雙畫素感測器數量和尺寸)。
當然,Google 軟體工程師還表示,「弗蘭肯斯『機』」本身就是一個不錯的設計,他們很方便地將這五臺 Pixel 3 捧在手裡或帶出門去,模擬使用者進行室外拍攝或動態拍攝(多攝方案其實還是「真香」嘛)……

最後,當我們再把原始資料送給這個人像模式演算法進行處理時,這個演算法就能更加準確地判斷畫面中不同物體之間的相互位置關係了,這也正是學習景深相比立體景深演算法的優勢所在( 這裡 還有更多這兩種演算法的合成結果對比)。
不過代價也有點昂貴——基於深度學習並利用海量資料進行改進後的深度估計演算法加上基於神經網路的影象分割演算法,需要的運算量似乎已經超過了 Pixel Visual Core 的承載能力。因此 Google 也在 博文 中承認,Pixel 3 人像模式的合成過程其實也呼叫了驍龍 845 的 GPU 算力。
參考文獻: