電影照片背后的技術(shù)
查看過去的照片可以幫助人們重溫他們最珍貴的時刻。去年 12 月,我們推出了電影照片,這是 Google 相冊中的一項新功能,旨在重現(xiàn)拍攝照片時的沉浸感,通過推斷圖像中的 3D 表示來模擬相機(jī)運動和視差。在這篇博文中,我們將了解這一過程背后的技術(shù),并展示電影照片如何將過去的單張 2D 照片轉(zhuǎn)變?yōu)楦叱两械?3D 動畫。
深度估計
與許多最近的計算攝影功能(例如人像模式和增強(qiáng)現(xiàn)實(AR))一樣,電影照片需要深度圖來提供有關(guān)場景 3D 結(jié)構(gòu)的信息。在智能手機(jī)上計算深度的典型技術(shù)依賴于多視圖立體,這是一種幾何方法,通過在不同視點同時拍攝多張照片來求解場景中物體的深度,其中相機(jī)之間的距離是已知的。在 Pixel 手機(jī)中,視圖來自兩個攝像頭或雙像素傳感器。
為了在非多視圖立體拍攝的現(xiàn)有圖片上啟用電影照片,我們訓(xùn)練了一個具有編碼器-解碼器架構(gòu)的卷積神經(jīng)網(wǎng)絡(luò),以僅從單個 RGB 圖像預(yù)測深度圖。僅使用一個視圖,該模型學(xué)會了使用單眼線索估計深度,例如對象的相對大小、線性透視、散焦模糊等。
因為單目深度估計數(shù)據(jù)集通常是為 AR、機(jī)器人和自動駕駛等領(lǐng)域設(shè)計的,所以它們傾向于強(qiáng)調(diào)街景或室內(nèi)場景,而不是在休閑攝影中更常見的特征,如人、寵物和物體,這些特征具有不同的構(gòu)圖和構(gòu)圖。因此,我們創(chuàng)建了自己的數(shù)據(jù)集,用于使用在自定義 5 相機(jī)裝備上捕獲的照片以及在 Pixel 4 上捕獲的人像照片的另一個數(shù)據(jù)集來訓(xùn)練單目深度模型。這兩個數(shù)據(jù)集都包括來自多視圖立體的地面實況深度,即訓(xùn)練模型的關(guān)鍵。
以這種方式混合多個數(shù)據(jù)集可以將模型暴露給更多種類的場景和相機(jī)硬件,從而改進(jìn)其對野外照片的預(yù)測。然而,它也帶來了新的挑戰(zhàn),因為來自不同數(shù)據(jù)集的真實深度可能因未知的縮放因子和偏移而彼此不同。幸運的是,電影照片效果只需要場景中物體的相對深度,而不是絕對深度。因此,我們可以通過在訓(xùn)練期間使用縮放和平移不變損失來組合數(shù)據(jù)集,然后在推理時對模型的輸出進(jìn)行歸一化。
電影照片效果對深度圖在人物邊界處的準(zhǔn)確性特別敏感。深度圖中的錯誤可能會導(dǎo)致最終渲染效果中出現(xiàn)不和諧的偽影。為了緩解這種情況,我們應(yīng)用中值濾波來改善邊緣,并使用在Open Images 數(shù)據(jù)集上訓(xùn)練的DeepLab分割模型來推斷照片中任何人的分割掩碼。遮罩用于將被錯誤預(yù)測為在背景中的深度圖的像素前移。

相機(jī)軌跡
在 3D 場景中為相機(jī)設(shè)置動畫時可以有很多自由度,我們的虛擬相機(jī)設(shè)置的靈感來自于專業(yè)攝像機(jī)裝備來創(chuàng)建電影運動。其中一部分是確定虛擬相機(jī)旋轉(zhuǎn)的最佳樞軸點,以便通過將眼睛吸引到拍攝對象來產(chǎn)生最佳結(jié)果。
3D 場景重建的第一步是通過將 RGB 圖像擠壓到深度圖上來創(chuàng)建網(wǎng)格。通過這樣做,網(wǎng)格中的相鄰點可能會有很大的深度差異。雖然這在“正面”視圖中并不明顯,但虛擬攝像機(jī)移動得越多,就越有可能看到跨越深度變化較大的多邊形。在渲染的輸出視頻中,這看起來像是輸入紋理被拉伸。為虛擬相機(jī)設(shè)置動畫時最大的挑戰(zhàn)是找到引入視差的軌跡,同時最大限度地減少這些“有彈性的”偽影。

由于用戶照片及其相應(yīng)的 3D 重建范圍很廣,因此不可能在所有動畫中共享一個軌跡。相反,我們定義了一個損失函數(shù),用于捕獲在最終動畫中可以看到多少伸縮性,這使我們能夠為每張獨特的照片優(yōu)化相機(jī)參數(shù)。與計算識別為偽影的像素總數(shù)不同,損失函數(shù)在具有更多連接偽影像素的區(qū)域中更頻繁地觸發(fā),這反映了觀看者更容易注意到這些連接區(qū)域中的偽影的傾向。
我們利用來自人體姿勢網(wǎng)絡(luò)的填充分割掩碼將圖像劃分為三個不同的區(qū)域:頭部、身體和背景。在將最終損失計算為歸一化損失的加權(quán)和之前,損失函數(shù)在每個區(qū)域內(nèi)被歸一化。理想情況下,生成的輸出視頻沒有偽影,但在實踐中,這種情況很少見。對區(qū)域進(jìn)行不同的加權(quán)會使優(yōu)化過程偏向于選擇更喜歡背景區(qū)域中的偽影而不是圖像主體附近的那些偽影的軌跡。
構(gòu)圖場景
通常,重新投影的 3D 場景不能整齊地放入縱向的矩形中,因此還需要以正確的長寬比對輸出進(jìn)行構(gòu)圖,同時仍保留輸入圖像的關(guān)鍵部分。為了實現(xiàn)這一點,我們使用了一個深度神經(jīng)網(wǎng)絡(luò)來預(yù)測完整圖像的每像素顯著性。在以 3D 方式構(gòu)建虛擬攝像機(jī)時,模型會識別并捕獲盡可能多的顯著區(qū)域,同時確保渲染的網(wǎng)格完全占據(jù)每個輸出視頻幀。這有時需要模型縮小相機(jī)的視野。
結(jié)論
通過電影照片,我們實施了一個算法系統(tǒng)——對每個 ML 模型進(jìn)行公平性評估——它們協(xié)同工作,讓用戶以新的方式重溫他們的記憶,我們對未來的研究和功能改進(jìn)感到興奮。既然您知道它們是如何創(chuàng)建的,那么請留意自動創(chuàng)建的電影照片,這些照片可能會出現(xiàn)在 Google 相冊應(yīng)用程序中您最近的記憶中!