2D變3D,視角隨意換,神還原高清立體感
本文經AI新媒體量子位(公眾號ID:QbitAI)授權轉載,轉載請聯系出處。
看到這張恐龍化石的動態圖片,你肯定會認為是用視頻截出來的吧?

然而真相卻是——完全由靜態圖片生成!
沒錯,而且還是不用3D建模的那種。
這就是來自伯克利大學和谷歌的最新研究:NeRF,只需要輸入少量靜態圖片,就能做到多視角的逼真3D效果。

還需要專門說明的是,這項研究的代碼和數據,也都已經開源。
你有想法,盡情一試~
靜態圖片,合成逼真3D效果
我們先來看下NeRF,在合成數據集(synthetic dataset)上的效果。

可以看到,這些生成的對象,無論旋轉到哪個角度,光照、陰影甚至物體表面上的細節,都十分逼真。
就仿佛是拿了一臺錄影設備,繞著物體一周錄了視頻一樣。
正所謂沒有對比就沒有傷害,下面便是NeRF分別與SRN、LLFF和Neural Volumes三個方法的效果比較。

不難看出,作為對比的三種方法,或多或少的在不同角度出現了模糊的情況。
而NeRF可謂是做到了360度無死角高清效果。
接下來是NeRF的視點相關 (View-Dependent)結果。
通過固定攝像機的視點,改變被查詢的觀看方向,將視點相關的外觀編碼在NeRF表示中可視化。


NeRF還能夠在復雜的遮擋下,展現場景中詳細的幾何體。


還可以在現實場景中,插入虛擬對象,并且無論是“近大遠小”,還是遮擋效果,都比較逼真。

當然,360度捕捉真實場景也不在話下。

神經輻射場(neural radiance field)方法
這樣出色的效果,是如何實現的呢?
首先,是將場景的體積表示優化為向量函數,該函數由位置和視圖方向組成的連續5D坐標定義。具體而言,是沿相機射線采樣5D坐標,來合成圖像。

而后,將這樣的場景表示參數化為一個完全連接深度網絡(MLP),該網絡將通過5D坐標信息,輸出對應的顏色和體積密度值。
通過體積渲染技術將這些值合成為RGB圖像。
渲染函數是可微分的,所以可以通過最小化合成圖像和真實圖像之間的殘差,優化場景表示。

需要進一步說明的是,MLP使用8個完全連接層(ReLU激活,每層256個通道)處理輸入,輸出σ和256維特征向量。然后,將此特征向量與攝像機視角連接起來,傳遞到4個附加的全連接層(ReLU激活,每層128個通道),以輸出視點相關的RGB顏色。
NeRF輸出的RGB顏色也是空間位置x和視圖方向d的5D函數。

這樣做的好處可以通過對比來體現。可以看到,如果去掉視點相關,模型將無法重現鏡面反射;如果去掉位置編碼,就會極大降低模型對高頻幾何形狀紋理的表現能力,導致渲染出的外觀過于平滑。
另外,針對高分辨率的復雜場景,研究人員還進行了兩方面的改進。
其一,是輸入坐標的位置編碼,可以幫助MLP表示高頻函數。

其二,是分層采樣。用以更高效地采樣高頻表示。

GitHub代碼開源
目前,NeRF項目的代碼已經在GitHub上開源。

代碼主要基于Python 3,還需要準備的一些庫和框架包括:TensorFlow 1.15、matplotlib、numpy、imageio、configargparse。
優化一個NeRF
研究人員表示,優化NeRF只需要一個GPU就可以完成,時間方面,需要花費幾個小時到一兩天(取決于分辨率)。
而從優化的NeRF渲染圖像,大約只需要1~30秒時間。
運行如下代碼可以獲取生成Lego數據集和LLFF Fern數據集:
- bash download_example_data.sh
若想優化一個低解析度的Fern NeRF:
- python run_nerf.py --config config_fern.txt
在經過200次迭代之后,就可以得到如下效果:

若想優化一個低解析度的Lego NeRF:
- python run_nerf.py --config config_lego.txt
在經過200次迭代之后,就可以得到如下效果:

開始渲染
運行如下代碼,為Fern數據集獲取經過預訓練的高分辨率NeRF。
- bash download_example_weights.sh
渲染代碼,在 render_demo.ipynb 中。
另外,你還可以將NeRF轉換為網格,像這樣:

具體示例,可以在 extract_mesh.ipynb 中找到。還需要準備PyMCubes、trimesh和pyrender包。
關于作者:三位青年才俊
這篇論文的研究團隊,來自加州大學伯克利分校、谷歌研究院和加州大學圣地亞哥分校。
共同一作有三位。
Ben Mildenhall,本科畢業于斯坦福大學,目前在伯克利電氣工程與計算機科學系(EECS)助理教授吳義仁(Ren Ng)門下讀博。致力于計算機視覺和圖形學研究。
Pratul P. Srinivasan,同樣為伯克利EECS在讀博士,師從吳義仁和Ravi Ramamoorthi。
Matthew Tancik,前面兩位作者的同門,本碩畢業于MIT。除了專注于計算機成像和計算機視覺研究外,他還是一位攝影愛好者。

1個GPU就能完成優化,優化后渲染又只需要1-30秒,如此方便又效率的項目,還不快來試試?
One More Thing
最后,還想介紹個這方面有意思的研究。
NeRF確實強,但在輸入上還需要多張照片……
那么有沒有方法,一張圖片就能玩3D效果呢?
問就有。
之前,Adobe的實習生就提出了一個智能景深算法,單張2D圖片秒變3D。
讓我們感受下效果。

也是很有大片既視感了。
而最近,同樣是單張2D圖片變3D,臺灣清華大學的研究人員,在老照片上玩出了新花樣,論文入選CVPR 2020。
你看看女神奧黛麗·赫本,看看畢加索,看看馬克吐溫:

感覺以后看照片——搖一搖更有感覺啊。
再來看看“登月”、“宇航員和民眾握手”照片裸眼3D效果:

頗有點身臨其境之感。
與此前介紹過的Adobe的算法(后臺加鏈接)類似,這一3D圖像分層深度修復技術的核心算法,同樣有關上下文感知修復:
初始化并切割分層深度圖像(LDI),使其形成前景輪廓和背景輪廓,然后,僅針對邊緣的背景像素進行修補。從邊緣“已知”側提取局部上下文區域,并在“未知”側生成合成區域(如下圖c所示)。

說起來,對于個人視頻制作者、游戲開發人員,以及缺乏3D建模經驗的動畫公司來說,這類技術的成熟,可謂“福音”。
通過AI技術,讓3D效果的實現進一步簡化,這也是Facebook、Adobe及微軟等公司紛紛投入這方面研究的原因所在。
最后,這個項目的代碼也開源了……
稿子還沒寫完,我就準備好一系列“雪藏”已久的照片要試試了。
這也是最近看到最酷的3D圖片方面的突破了。
如果有更酷的,也歡迎留言分享~~
傳送門
項目主頁:http://www.matthewtancik.com/nerfhttps://shihmengli.github.io/3D-Photo-Inpainting/
GitHub地址:https://github.com/bmild/nerfhttps://github.com/vt-vl-lab/3d-photo-inpainting