2017-10-19 10:11:35 創(chuàng)事記 微博 作者: 量子位

歡迎關注“創(chuàng)事記”的微信訂閱號:sinachuangshiji
文/量子位
Google親兒子Pixel 2系列一經發(fā)布,拍照效果的好評就已鋪天蓋地。這款手機在DxOMark手機拍照評分榜上碾壓iPhone 8和Galaxy Note 8,拿下這個榜單的史上最高分:98分。
拍照真的有這么好?說Pixel 2系列拍照很“好”,主要體現在以下兩點:
一是雖然沒有時下流行的雙攝像頭,卻可以實現背景虛化的人像模式;
二是憑借HDR+,在弱光或者光線強弱差異明顯的情況下也能還原出豐富的細節(jié)。
關于人像模式背后的機器學習,Google今天在官方博客上發(fā)文詳解,另外還宣布了一點與HDR+相關的小驚喜。
單攝如何搞定背景虛化
和iPhone等對手一樣,背景虛化應用在“人像模式”的拍照中。吶,下面這張圖就很直觀了。
沒有經過人像模式處理(左)、經過處理后(右)的同一張HDR+照片
Pixel 2上的人像模式到底是如何加工圖片的?這還得分四步走。
第一步:生成HDR+圖片
人像模式的效果,其實是通過處理一張清晰的圖片而來。
谷歌使用了計算攝影技術HDR+提升圖片拍攝的質量,幾乎所有的Nexus/Pixel手機都自帶這個功能。
HDR+技術通過拍攝一系列曝光不足的圖片,調整和平衡細節(jié),減少陰影中的噪點。在保持局部對比度、合理減少整體對比度的同時,還增加了這些區(qū)域里的陰影。
即使在昏暗的燈光下,此階段最終生成的圖片仍是一幅動態(tài)范圍高、噪點低、細節(jié)清晰的圖片。
通過調整和平衡細節(jié)來減少噪音,其實在天文攝影技術中已經應用了很多年了,但Pixel 2系列的實現方式不太一樣。因為照片是在手機上拍攝的,因此需更加小心避免移動時產生的重影。下面就是一個用HDR+捕捉到的高動態(tài)范圍場景。
應用了HDR+技術(右)和沒有應用(左)圖像對比,兩圖均為Pixel 2拍攝。HDR+避免了天空處的過度曝光,并且增加了拱廊中的暗部細節(jié)
第二步:基于機器學習的前后景分割
得到一張清晰的HDR+圖像后,下一步需要確定照片中哪些像素屬于前景(通常為人物)、哪些屬于背景。
看似簡單的一個步驟實際非常棘手,因為它與電影中的色鍵技術(chroma keying)不同,我們無法推測照片中的背景是什么顏色。在這種情況下,機器學習技術就派上了用場。
研究人員用TensorFlow訓練了一個神經網絡,負責分辨照片中的哪些像素屬于人物。這個卷積神經網絡(CNN)帶有跳躍式傳遞機制(skip connection),讓信息在卷積神經網絡處理的早期和后期階段之間輕松傳輸。在早期階段,卷積神經網絡推理顏色、邊緣等簡單特征,而在后期階段,卷積神經網絡推理面貌和身體部位等復雜特征。
這種結合至關重要,卷積神經網絡不僅需要推斷照片中是否有人,還需要準確識別哪些像素屬于這個人。
在此之前,這個卷積神經網絡已經接受過近百萬人照片數據的訓練,研究人員甚至讓它識別圖像中的帽子和太陽鏡等物件。
左圖為HDR+處理的照片,右圖為神經網絡輸出的圖像,其中分出了圖像的前景和背景
欣慰的是,卷積神經網絡清楚地區(qū)分了女主人公的頭發(fā)和茶杯的邊緣,將之與背景區(qū)分開。如果在此基礎上將背景進行模糊處理,就可以得到以下效果:
合成的淺景深圖像
圖像中特別需要注意的有幾點。
首先,雖然背景包含了不同景深的物體,但模糊的程度是一致的。其次,如果用單反來拍,圖中的盤子和餅干比較靠近鏡頭,也會出現模糊的效果。而Google的卷積神經網絡雖然知道餅干不是人像的一部分,但是因為它在人像下方,也不能認作是背景的一部分。Google團隊對這種情況進行了特別處理,讓這部分像素保持相對清晰。可惜這種處理有時候就不太對,比如說這張照片中,盤子和餅干相關的像素就應該更模糊一點。
第三步:從雙像素到深度映射
Pixel 2非雙攝手機,但也能拍出帶景深的圖片,因為它里面添加了一種叫Phase-Detect Auto-Focus (PDAF)的像素技術,也可以稱為雙像素自動對焦(dual-pixel autofocus)。它的原理很容易理解。
想象一下,如果強行將手機的后置攝像頭的鏡頭分成兩半,那么鏡頭左側的視角和右側略有不同。雖然這兩種視角相差不足1毫米(大概鏡頭直徑),但這細微的不同足以計算出立體程度,并生成深度映射。
這相當于將圖像傳感器芯片上的每個像素分割成兩個較小的并排像素,并分別從芯片上讀取它們,原理如圖所示:
在Pixel 2的后置攝像頭上,每個像素的右側都會通過鏡頭左側來觀察,每個像素的左側都會通過鏡頭右側觀察
如上圖所示,在一張照片中,PDAF像素通過鏡頭左右兩側給你不同的視角,如果你是豎著拿手機拍照,它就是鏡頭的上下兩半部分。
舉個例子吧,下圖中分別為上部分(左)和下部分(右)捕捉的圖片效果。
考驗眼力的時刻到了
單肉眼確實很難將這兩張圖片分開,從最右邊的放大圖能看到細小的差別。
目前,PDAF技術已經應用在很多手機攝像頭和單反相機中,在錄制視頻時幫助使用者更快聚焦。在Pixel 2中,該技術被用于計算深度映射。
具體地說,研究人員用左側和右側圖像作為立體算法的輸入,類似于Google處理360°全景視頻所用的Jump Assembler。這種算法首先執(zhí)行基于子像素的精確定位,生成低分辨率深度圖,然后使用雙邊求解器將其插入到高分辨率中。
由于Pixel 2相機拍攝的左右視圖非常相近,所以得到的深度信息不準確,尤其是在光線較暗的情況下,圖像的噪點很多。為了減少噪點,提高深度精度,研究人員將左右兩部分圖像進行了調整和平衡,之后再應用于立體算法中。
左:用上下兩部分圖像計算深度映射。右:黑色表示無需模糊,紅色越亮就表示越需模糊,底部藍色表示焦點平面前的特征
第四步:拼合處理,形成完整圖像
經過了前面幾步后,就可以將模糊分隔與深度映射結合起來了,它們共同決定了HDR+圖片中需要對哪些像素進行模糊處理。
我們希望圖像中的人像(上圖淺色區(qū)域)清晰,背景(深色區(qū)域)按照比例模糊。上圖中紅色區(qū)域顯示了每個像素的模糊程度。
模糊的概念理解起來很容易,每個像素都被替換為一個顏色相同但大小不同的半透明disk。如果這些disk像之前描述的那樣按深度排序,得到近似于真實的光學模糊效果,也就是所謂的景深。
結合HDR圖像、模糊分隔和深度映射生成的最終淺景深圖像
彩蛋:第一款自研移動芯片
除了上述種種,Google還在親兒子體內藏了個彩蛋:Pixel Visual Core。
沒有HDR+的情況下,你在晴朗明亮的天空下拍張照片,會有兩種結果:要么天空曝光成一片白,要么你的臉黑黑一片、看不清五官。HDR+的出現,讓相機能在同一張照片中,盡可能豐富地呈現圖片中不同亮度部分的細節(jié)。
而Google的HDR+除了應對這種情況之外,還能解決陰暗環(huán)境中拍攝照片模糊或者滿是噪點的問題。
早在2014年,Google就在Nexus 5和Nexus 6的相機App中運用了這項功能。它的實現方式說起來有點簡單粗暴:你按下拍照按鈕,相機瞬間拍下一組照片,然后快速將它們合并成一張,存儲起來。
和其他相機上的HDR功能一樣,Google搞出來的這個HDR+有一個缺陷,那就是處理速度太慢。而這一代親兒子內置的Pixel Visual Core就為了HDR+計算提供加速。
Google在官方博客上介紹說,開發(fā)Pixel Visual Core是為了“擴展HDR+的使用范圍,處理最具挑戰(zhàn)的圖像,降低HDR+處理的延遲,甚至提高能效!
Pixel Visual Core結構圖解
如上圖所示,Pixel Visual Core的中心部分是Google設計的圖像處理單元(Image Processing Unit, IPU)。IPU是從零開始設計的特定領域可編程處理器,共有8個核心,每個核心有512算術邏輯單元(ALU)。
在移動設備上,ALU每秒能進行超過3萬億次運算。Pixel Visual Core將HDR+計算的速度提升了5倍,與在應用處理器上運行相比,功耗只有1/10。
Google介紹稱IPU有這樣的能效,關鍵在于硬件和軟件的緊密耦合。與傳統的處理器相比,IPU用軟件控制了硬件的更多細節(jié),這帶來了更簡潔的設計和更高的能效。
但是,這種緊密耦合也讓IPU難以用傳統的編程語言進行編程。為此,IPU利用特定領域的編程語言來減輕開發(fā)人員和編譯器的負擔:用Halide來進行圖像處理,用TensorFlow處理機器學習。 Google還做了一個編譯器,用來處理硬件代碼。
不過,當用戶拿到Pixel 2系列的時候,Pixel Visual Core依然在休眠,必須要等到Android 8.1推送之后,這款處理器才會被激活。之后,Google會第三方開發(fā)者開放Pixel Visual Core,開發(fā)者也可以通過Android Camera API讓自己的App用上Pixel 2的HDR+技術。
Google還強調,加速HDR+計算用于拍照只是Pixel Visual Core的第一項應用,接下來的其他應用場景也都提上了日程,正在開發(fā)中。