MXNetのDeep3Dで画像の2D・3D変換を試してみた

mxnet-deep3d

MXNetのDeep3Dで二次元画像を三次元画像に変換してみました。

以下の記事でインストールした、Deep3Dに対応させたMXNetを使用します。

Deep3Dに対応させたMXNet 0.7.0をインストールしてみた
MXNet 0.5.0をアンインストールして、Deep3Dに対応させたMXNet 0.7.0をUbuntu 14.04にインストールしてみました。なお、MXNetは、DMLCが開発しているDeep Learningフレームワークです。

なお、Deep3Dの詳細は、以下の論文をご覧ください。

Junyuan Xie, Ross Girshick, Ali Farhadi, “Deep3D: Fully Automatic 2D-to-3D Video Conversion with Deep Convolutional Neural Networks

また、日本語の解説は、こちら(http://qiita.com/supersaiakujin/items/417a79889b7433148820

スポンサーリンク

Deep3D

必要条件

CUDA 7.0以上、cuDNN 4以上を使用するMXNetが必要です。

また、Deep3D(https://github.com/piiswrong/deep3d)をcloneし、MXNetのconfig.mkのEXTRA_OPERATORSにDeep3Dのoperatorsを追加して、MXNetを(再)ビルドする必要があります。

なお、Deep3Dに対応させたMXNetのインストール方法は、前回の記事をご覧ください。

準備

deep3d.ipynb上で2D・3D変換を行いますので、jupyterをインストールしていない場合は、インストールしておきます。

また、MXNet 0.7.0を使用する場合、deep3dディレクトリのdeep3d-symbol.jsonをエディタで開いて、962行目の”type”を”mode”に変更しておきます。

更に、自分で二次元画像を用意する場合、2D・3D変換処理の前に横384・縦160(アスペクト比2.4)にリサイズされるので、予めアスペクト比2.4に近い画像を準備しておきます。

mxnet-deep3d-2Boymaus – Cat with goldfish / CC-BY-SA-3.0

ここでは、上の写真を横384・縦160に加工した下の画像(cat2d.jpg)を使用します。

mxnet-deep3d-3

cat2d.jpg

2D・3D変換

deep3dディレクトリに移動し、以下のコマンドを実行します。

$ ipython notebook deep3d.ipynb

すると、ブラウザが立ち上がって、以下の図のようなnotebookが表示されます。

mxnet-deep3d-4
ここでは、入力画像をdemo.jpgからcat2d.jpgに変更するため、In [3]:の

img = cv2.imread('demo.jpg')

img = cv2.imread('cat2d.jpg')

に変更しています。

また、出力画像のファイル名をdemo.gifからcat3d.gifに変更するためと、Deep3DのアニメーションGIFのサンプルを見て、フレーム間隔が短いと感じたため、In [4]:の

writeGif('demo.gif', [left, right], duration=0.08)

writeGif('cat3d.gif', [left, right], duration=0.2)

に変更しています。

出力されたアニメーションGIFが、下の画像です。

mxnet-deep3d-5

cat3d.gif

なお、自分で画像を加工したい場合、以下のコードを追加すると、生成された右目用画像と入力画像をリサイズしただけの左目用画像を保存できます。

right.save("cat3d_right.jpg")
left.save("cat3d_left.jpg")

まとめ

MXNetのDeep3Dで二次元画像を三次元画像に変換してみました。

なお、最初のアナグリフ風の画像は、以下のAdobe Photoshop Elementsで加工したもので、Deep3Dで生成した画像を変換した画像ではありません。

また、この記事の『Cat with goldfish』を素材とする画像のライセンスは、CC-BY-SA-3.0となります。

シェアする

フォローする