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ディレクトリに保存されます。
ポメラニアン × ゴッホの『ひまわり』
上の記事と同じコンテンツ画像(content.jpg)とスタイル画像(style.png)をinputディレクトリにコピーします。
以下のコマンドを実行し、画風を変換します。
$ 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)が生成されました。
以下のchainer-goghで生成された画像(サイズ:256×256、処理時間:20分弱)と比較すると、サイズが大きくなった分、粒子感がなくなって、柔らかい感じの画像になりました。
なお、outputディレクトリに保存された50エポック毎の変換画像(tmp_*.jpg)を1枚の画像に合成すると、以下のようになります。