Torchのfast-neural-styleで高速に画風変換してみた

fast-neural-style
Real-Time Style TransferのTorchによる実装「fast-neural-style」で、画像の高速スタイル変換を試してみました。

Torchは、NVIDIAのMachine LearningリポジトリでUbuntu 14.04にインストールしtorch7-nvを使用します。

なお、Real-Time Style Transferの詳細は、以下の論文をご覧ください。

Justin Johnson, Alexandre Alahi, Li Fei-Fei, “Perceptual Losses for Real-Time Style Transfer and Super-Resolution

この論文のJustin Johnsonさんは、以下の記事で使用したneural-styleの作者でもあります。

Torchのneural-styleで画風を変換してみた
NVIDIAのMachine LearningリポジトリでUbuntu 14.04にインストールしたTorch(torch7-nv)で、画風を変換するneural-styleを試してみました。
スポンサーリンク

fast-neural-styleによる高速画風変換

準備

GitHubのfast-neural-style(https://github.com/jcjohnson/fast-neural-style)のREADME.mdを参照して、準備を行います。

あらかじめ作成しておいたgithubディレクトリに移動し、GitHubのfast-neural-styleをcloneします。

$ cd ~/github
$ git clone https://github.com/jcjohnson/fast-neural-style
$ cd fast-neural-style

torch、nn、image、lua-cjsonのインストールが必要ですが、以下のコマンドでインストールされているパッケージを確認したところ、(cutorch、cunn、cudnnも含め)全てインストールされていました。

$ luarocks list

インストールされていない場合、以下のコマンドでインストールを行います。

$ sudo luarocks install torch
$ sudo luarocks install nn
$ sudo luarocks install image
$ sudo luarocks install lua-cjson

CUDAを使用する場合、以下のコマンドでcutorchとcunnをインストールします。

$ sudo luarocks install cutorch
$ sudo luarocks install cunn

更に、cuDNNを使用する場合、以下のコマンドでcudnnをインストールします。

$ sudo luarocks install cudnn

以下のコマンドで、訓練済みの10種のモデル(約200MB)をダウンロードします。

$ bash models/download_style_transfer_models.sh

高速画風変換

Real-Time Style Transferの実装だけあって、CPUモードでも、数秒で画風変換が終了します。

$ time th fast_neural_style.lua \
  -model models/instance_norm/udnie.t7 \
  -input_image input.jpg \
  -output_image udnie.jpg \
  -image_size 512
Writing output image to udnie.jpg

real 0m2.983s
user 0m5.359s
sys 0m5.015s

ここまで高速だと、処理時間はあまり気になりませんが、CPUモードとGPUモードを比較すると、GPUモードのほうが1.5倍位速いようです。

$ time th fast_neural_style.lua \
  -model models/instance_norm/udnie.t7 \
  -input_image input.jpg \
  -output_image udnie.jpg \
  -image_size 512 -gpu 0 -use_cudnn 1
Writing output image to udnie.jpg

real 0m1.916s
user 0m1.389s
sys 0m0.641s

なお、image_sizeオプションで設定したサイズよりも2ピクセル小さい画像(512に設定すると、510)が出力されています。

各モデルの変換結果の一例は、以下の通りです。

candy

model candy.t7

feathers

model feathers.t7

mosaic

model mosaic.t7

まとめ

Real-Time Style TransferのTorchによる実装「fast-neural-style」で、画像の高速スタイル変換を試してみたところ、画像サイズ510×510のスタイル変換が、高速(CPUモードは約3秒、GPUモードは約2秒)に行えました。