MXNetのNeural Artで画風を変換してみた

mxnet
Ubuntu 14.04にインストールしたMXNetで、画風を変換するNeural Artを試してみました。結構いい感じです。

スポンサーリンク

MXNet

MXNetは、DMLC(Distributed (Deep) Machine Learning Community)が開発しているDeep Learningフレームワークです。GitHub(https://github.com/dmlc/mxnet)で公開されています。

Ubuntu/Debian、OSXに加え、Windows(私は、まだ試していませんが…)に対応しています。更に、Windows用バイナリ(プレビルド・パッケージ)もここ(https://github.com/dmlc/mxnet/releases)からダウンロードできます。
また、対応する言語が、C++、Python、R、Julia等と多いことも特徴のようです。

Ubuntu 14.04では、プレビルド・パッケージの提供は無いので、ビルドが必要となります。ここ(http://mxnet-tqchen.readthedocs.io/en/latest/how_to/build.html)には、ビルド方法として以下が示されていますが、

$ sudo apt-get update
$ sudo apt-get install -y build-essential git libatlas-base-dev libopencv-dev
$ git clone --recursive https://github.com/dmlc/mxnet
$ cd mxnet; make -j4

GPU版としてビルドするには、他にも設定が必要だった気がします。MXNetのOpenCVサポートの関係で、いろいろ試行錯誤したので、はっきりしていません。

Neural Artによる画風変換

ディレクトリを移動します。

$ cd ~/mxnet/example/neural-style

Neural Artによる画風変換の準備のため、download.shを実行します。

$ ./download.sh

model、input、outputディレクトリが作成され、modelディレクトリにVGGモデル(vgg19.params)、inputディレクトリにコンテンツ画像(IMG_4343.jpg)とスタイル画像(starry_night.jpg)がダウンロードされます。

以下のコマンドを実行すると、download.shでダウンロードされたコンテンツ画像(IMG_4343.jpg)にスタイル画像(starry_night.jpg)を適用した画像の生成が始まります。

$ python run.py

50エポック毎の変換画像(tmp_*.jpg)がoutputディレクトリに保存されます。
また、相対的な変化量がデフォルトの0.005以下、又は、エポックがデフォルトの1000になると処理が終了して、処理終了時の変換画像(out.jpg)がoutputディレクトリに保存されます。

ポメラニアン × ゴッホの『ひまわり』

Chainerのchainer-goghで画風を変換してみた
Ubuntu 14.04にインストール(/アップグレード)したChainer 1.7.1で、chainer-goghを試してみました。

上の記事と同じコンテンツ画像(content.jpg)とスタイル画像(style.png)をinputディレクトリにコピーします。
input1
以下のコマンドを実行し、画風を変換します。

$ python run.py --content-image input/content.jpg --style-image input/style.png

オプションの使い方は、--content-imageオプションでコンテンツ画像、--style-imageオプションでスタイル画像を指定できます。また、--max-long-edgeオプションで変換画像の長辺のサイズ(デフォルトは、600)を指定できます。chainer-goghのモデルにVGGを使用する場合、VRAM 4GBであれば、変換画像のサイズを-wオプションで256に変更する必要がありましたが、MXNetのNeural Artでは、デフォルトの600で処理が出来ています(コンテンツ画像(content.jpg)とスタイル画像(style.png)が共に512×512なので、600×600に拡大されて処理されています)。

私のPC環境(GTX 960)では、約5分で処理が終了し、以下の画像(サイズ:600×600)が生成されました。
mxnet-neural-art-output
以下のchainer-goghで生成された画像(サイズ:256×256、処理時間:20分弱)と比較すると、サイズが大きくなった分、粒子感がなくなって、柔らかい感じの画像になりました。
output1
なお、outputディレクトリに保存された50エポック毎の変換画像(tmp_*.jpg)を1枚の画像に合成すると、以下のようになります。
mxnet-neural-art-montage