機器之心報導
機器之心編輯部
拿起以往的老照片,無一不是灰濛濛的。那麼有沒有一種方法將這些老照片重煥生機呢?近日,維吉尼亞理工等機構開發出了一種語境感知分層深度修復技術,它利用基於學習的修復模型來迭代地合成新的顏色和深度信息,並藉助標準圖形引擎將這些老照片渲染成3D照片。
如何讓一張老照片看起來有 3D 效果?
來自維吉尼亞理工大學、臺灣清華大學和 Facebook 的研究者提出了一種將單個 RGB-D 輸入圖像轉換為 3D 照片的方法,利用多層表示合成新視圖,且新視圖包含原始視圖中遮擋區域的 hallucinated 顏色和深度結構。
具體而言,研究人員使用具有顯式像素連通性的分層深度圖像(Layered Depth Image,LDI)作為基礎表示,並提出了一種基於學習(learning-based)的修復模型,該模型以空間語境感知的方式,為遮擋區域迭代地合成局部新的顏色和深度信息。在使用標準圖形引擎的情況下,該方法可以高效地渲染生成 3D 照片。
研究者在多種具有挑戰性的日常場景中驗證了此方法的有效性,與當前 SOTA 方法相比,該方法生成結果的偽影更少。
與 SOTA 方法對比的效果圖
老照片也能有 3D 效果!
除了論文以外,該研究還提供了大量示例、代碼,還有可以試用的 Colab 環境,感興趣的讀者可以試試效果。
論文地址:https://arxiv.org/pdf/2004.04727.pdf
項目地址:https://github.com/vt-vl-lab/3d-photo-inpainting
網站地址:https://shihmengli.github.io/3D-Photo-Inpainting/
Colab 地址:https://colab.research.google.com/drive/1706ToQrkIZshRSJSHvZ1RuCiM__YX3Bz
這麼優秀的 3D 效果是怎麼實現的?
該研究提出的方法以 RGB-D 圖像作為輸入,並生成分層深度圖像(LDI),並修復輸入圖像中被遮擋區域的顏色和深度。
該按照以下步驟執行:
圖像預處理:首先初始化 LDI,LDI 使用單個層,且完全 4-connected。在預處理過程中,檢測主要的深度不連續區域,並將它們分為簡單的連接深度邊緣(connected depth edge)。這構成了主算法的基礎,該算法的核心部分式迭代地選擇深度邊緣進行修復;
語境和合成區域:斷開邊緣上的 LDI 像素,只修復邊緣的背景像素。具體做法是從邊緣的「已知」側提取局部語境區域,在「未知」側生成合成區域;
語境感知的顏色和深度修復:合成區域是新像素的連續 2D 區域,研究者使用基於學習的方法從給定語境中為其生成顏色和深度值;
形成 3D 紋理網格:修復完成後,將合成像素合併到 LDI 像素。
該方法按照以上流程迭代進行,直到所有深度邊緣都得到處理。
接下來,我們來看每一個步驟的具體做法。
圖像預處理
下圖 2 展示了圖像預處理的過程。首先對顏色和深度輸入進行預處理 (a-b),然後使用雙邊中值濾波器銳化輸入深度圖 (c-d),接下來使用視差閾值檢測不連續區域 (e),清除錯誤的閾值響應並將不連續區域組合成為連接深度圖 (f)。這些連接深度圖正是修復過程的基礎。
圖像預處理
語境和合成區域
該研究提出的修復算法每次都在之前計算好的一個深度邊緣上執行。給定一個深度邊緣(下圖 3a),修復算法的目的是在相鄰的遮擋區域中合成新的顏色和深度信息。
首先將不連續區域中的 LDI 像素斷開(圖 3b)。斷開的像素(即失去鄰居的像素)被稱為輪廓像素(silhouette pixel)。圖 3b 中顯示了前景輪廓(綠色)和背景輪廓(紅色),我們只需要修復背景輪廓。
接下來生成合成區域(即新像素的連續區域,圖 3c 中的紅色像素),提取語境區域(圖 3c 中的藍色像素)。最後,將合成像素併入 LDI 像素中。
圖 3:LDI 修復算法的概念圖示。(a) 初始 LDI 是全連接的,圖中灰色區域是深度邊緣(不連續區域)。(b) 首先將深度邊緣上的 LDI 像素連接斷開,形成前景輪廓(綠色)和背景輪廓(紅色)。(c) 對於背景輪廓,提取語境區域(藍色),生成合成區域(紅色)。(d) 將合成像素併入 LDI 中。
具體示例參見下圖 4:
圖 4:語境/合成區域。圖 2(f) 中三個連接深度邊緣示例(黑色)的語境區域(藍色)和合成區域(紅色)。
此外,由於檢測到的深度邊緣可能無法與遮擋區域的邊界很好地對齊,因此研究者將合成區域擴大了 5 個像素,這有助於減少修補區域中的偽影。
圖 5:處理不完美的深度邊緣。
語境感知的顏色和深度修復
如何合成顏色和深度值?一種最直接的方法是分別修復彩色圖像和深度圖。但隨之產生的問題是,已修復的深度圖可能無法與已修復的顏色非常合適地匹配。為了解決此問題,研究者設計了類似於 [43, 67] 的顏色和深度修復網絡,同時將修復任務分解為三個子網絡:邊緣修復網絡、顏色修復網絡和深度修復網絡(下圖 6)。
圖 6:語境感知的顏色和深度修復。
給定顏色、深度、提取以及連接的深度邊緣作為輸入,隨機選擇其中一個邊作為子問題。首先使用邊緣修復網絡修複合成區域中(紅色區域)的深度邊緣,然後將修復後的深度邊緣與語境顏色連接在一起,並應用顏色修復網絡生成用以修復的顏色。類似地,將修復後的深度邊緣與語境深度連接起來,並應用深度修復網絡生成修復深度。
多層修復
在深度複雜(deep-complex)的場景中,僅應用一次該研究提出的修復模型肯定不夠,因為修復深度邊緣所導致的不連續區域使得我們依然可以看見空白(hole)。所以研究者多次使用修復模型,直到不再生成修復深度邊緣為止。
下圖 8 展示了多次應用修復模型的效果。其中,應用一次修復模型填補了缺失的層。但是從圖 8b 的觀察視角中,我們依然可以看到一些空白區域。而應用兩次修復模型可以徹底消除這些偽影。
圖 8:多層修復
轉換為 3D 紋理網格
研究者將所有的修復深度和顏色值集成返回原始 LDI 中,從而創建了 3D 紋理網格。在渲染過程中使用網格表示能夠快速渲染新的視圖,而且無需對每個視圖執行推理步驟。因此,在邊緣設備上使用標準圖形引擎即可輕鬆地對該研究方法生成的 3D 表示進行渲染。
實驗結果
該研究進行了大量實驗,對新方法的效果做了視覺對比、量化對比,同時還做了控制變量實驗。
視覺對比
首先,我們來看新方法與當前最優的視角合成在視覺效果上的對比結果:
圖 9:新方法與基於 MPI 的方法的視覺對比結果
從圖中可以看到,該研究提出的新方法能夠修復原始圖像中被遮擋的區域,且結構和顏色都很合理。
量化對比
研究者對比了不同方法在 RealEstate10K 數據集上的量化對比結果,如下表 1 所示:
該研究提出的新方法在 SSIM 和 PSNR 兩項指標上的性能均具備很強的競爭力。此外,新方法的合成視角表現出了更優秀的感知質量,這一點從 LPIPS 分數上可以看出。
控制變量測試
研究者從測試數據序列中採樣了 130 個蹤片,並在全圖和未遮擋區域上評估修復顏色,測試結果見下表 2。可以看出,該研究提出的邊緣引導的修復技術給各項評估指標數值帶來了微小的提升。
此外,為測試顏色修復模型的效果,研究者進行了類似的實驗。下表 3 展示了不同方法在全圖和遮擋區域上的性能結果:
從上表中可以看出新方法的感知質量更好,下圖中的示例也說明了這一點。
圖 11:顏色修復帶來了更好的視覺質量。
在不同深度圖上的效果如何?
研究者在不同方法生成的深度圖上進行實驗,結果表明新方法可以很好地處理不同來源的深度圖。
圖 12:該研究提出的方法可以處理不同來源的深度圖。新視角圖像左上角為深度估計。
Github 介紹
環境安裝
Linux (已在 Ubuntu 18.04.4 LTS 上測試)
Anaconda
Python 3.7 (已在 3.7.4 上測試)
PyTorch 1.4.0 (已在 1.4.0 測試執行)
運行以下命令
conda create -n 3DP python=3.7 anacondaconda activate 3DPpip install -r requirements.txtconda install pytorch==1.4.0 torchvision==0.5.0 cudatoolkit==10.1.243 -c pytorch
下載模型權重
chmod +x download.sh./download.sh
執行
將 .jpg 文件 (e.g., test.jpg) 放入 image 文件夾中.
如 image/moon.jpg
運行:
python main.py --config argument.yml
通常情況下處理時間為 2-3 分鐘,具體取決於可用的計算資源。
將結果存儲再以下目錄中:
MiDas 估算的對應深度 tu
如 depth/moon.npy
3D 網格
如 mesh/moon.ply
具有放大效果的渲染視頻
如 video/moon_zoom-in.mp4
具有擺動效果的渲染 shi'p
如 video/moon_swing.mp4
渲染視頻並進行 circle motion
如 video/moon_circle.mp4
如果你對此項目感興趣,可瀏覽項目地址便於參考更多詳細信息。