Deep3D | 如何自動轉制 3D 電影

簡評:如果照片能自動進行 2D 到 3D 的轉換,也就是說用一個普通手機就可以照一張 3D 立體自拍,這難道不是一件很酷的事情嗎?

如何運行?

運行之前,首先要安裝 MXNet。MXNet 的配置環境為 Cuda7.0 和 Cudnn 4 版本及以上。

打開 mxnet/config.mk,並將 USE_CUDA 和 USE_CUDNN 的值設置為 1。再將EXTRA_OPERATORS=path/to/deep3d/operators 添加到 path/to/mxnet/ config .mk 後面,並重新編譯 MXNet。

研究動機

2008 年「阿凡達」上映,3D 電影技術便迅速發展成為主流科技。每年 3D 電影的發行量大約為 10 到 20 部,並且伴隨 OculusRift 和其他 VR 頭盔的推出,3D 電影技術的需求只會有增無減。

然而,3D 電影的製作難度依然很大。目前製作 3D 電影主要有兩種方法,並且這兩種方法在實際製作中的應用程度基本相同:

  • 其一是用特殊的 3D 立體攝像機直接拍攝成 3D 電影
  • 其二是先拍攝成 2D 電影,然後人工轉制 3D

但是這兩種方法都不完美,對於第一種方法來說,3D 攝像機昂貴而不方便。而第二種人工轉制則需要畫家為每一幀畫面繪製深度圖。

效果預覽

說了這麼多,不如直接看看通過 Deep3D 將 2D 圖片轉製成 3D 影片的效果圖吧 ~

一般來說應該使用 3D 眼鏡或 VR 設備來觀看這些 3D 圖像,但是大部分人通常不會隨身攜帶這些,所以我們用 GIF 的形式來展示這些 3D 圖像的立體效果:

實現方法

3D 圖像有兩個視角,分別對應人類的左右眼。要把一張 2D 圖像轉換成 3D 立體圖,首先需要估測每個像素點相對於相機的距離(即深度圖),然後基於深度圖來創建兩個視角。

該演算法中最困難的步驟是估測深度圖。為了實現自動轉換,我們可以讓它通過學習得到一個演算法模型。目前已經有一些工作是基於 DNN 實現的單張 2D 圖像的深度估測。然而還需要用圖像和深度圖數據對來進行訓練。由於這種數據對收集起來很困難,所以使用的資料庫都比較小,比如 NYU 深度資料庫和 KITTI,這類資料庫中只包含幾百張樣例。此外,這些數據集只有靜態場景,很難想像如何將這項技術應用到人物照片里。

相比之下,Deep3D 可以直接在具有數千萬幀的 3D 電影的基礎上進行訓練。我們在進行訓練時,把深度圖作為一個網路內部的表示,而不是作為末端的預測輸出。所以我們的方法並不是先預測一張深度圖,然後用這張深度圖通過一個單獨的演算法去重建缺失的視角,而是在同一神經網路中重新創建端到端的方法來訓練它。

這裡展示了一些可視化的網路內部深度結構,可以幫助大家理解:

每張圖像後面都是 4*3 的不同深度層的圖示,按從近到遠的順序排列。離觀眾近的物體會出現在靠前的幾張深度圖中,而離觀眾遠的物體則出現在最後幾張。這表明內部深度表示法正在學習從 2D 圖像推斷深度,而不需要直接在圖像上進行訓練。

這個項目是通過 MXNet 實現的,MXNet 是一個靈活高效的深度學習庫。訓練模型和預測腳本都包含在 deep3d.ipynb 中,訓練代碼隨後也會公開。

Github:piiswrong/deep3d

推薦閱讀:如何把水變成 3D 移動影像

推薦閱讀:

因為PS的這個功能,我差點卸載了C4D
VR風停,裸眼3D風起,康得新引領開啟商業應用浪潮?
選購一款4k,3d的智能電視,哪個品牌的性價比比較高?
全息投影的觀影效果還有多久可以實現?
如何導出你的Minecraft地圖至C4D?

TAG:GitHub | 深度学习DeepLearning | 3D |