它是如何运行的? 在运行代码之前,请先根据官方文件安装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图像推断深度,而不需要直接在图像上进行训练。 关于代码 (责任编辑:本港台直播) |