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