開源|如何使用CNN將視頻從2D到3D進行自動轉換(附源代碼)


http://www.sohu.com/a/128924237_642762

全球人工智能

文章來源:GitHub 作者:Eric Junyuan Xie

它是如何運行的?

在運行代碼之前,請先根據官方文件安裝MXNet。Deep3D要求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攝像機十分昂貴並且使用很不方便,而第二種人工轉換的方法需要請很多“深度藝術家”坐在那里,為每一幀畫面繪制深度圖。

設想一下,如果照片能自動的進行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資源:https://github.com/piiswrong/deep3d


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM