#daiizメモ

Scrapboxに夢中

Chainerで画風変換してみた

naoyashigaさんの記事 を読んで,僕もやってみたい!となったのでやってみた.

naoyashigaさんの記事の冒頭でも書かれているが,元になっているページはこちら:
画風を変換するアルゴリズム | Preferred Research

Deep Neural Networkを使って写真の画風を変換することができる.論文のアルゴリズムを実装したプログラムと,学習済みのモデルファイルを公開してくださっているのでこれらをダウンロードして使った.

プログラムとモデル(お手軽な,Network in Network Imagenet Model)をダウンロードした後,以下の手順で,簡単に実行できた.

まずはpyenv virtualenvで,Chainerを動かすだけの環境を作る.virtualenvを使うことで,他のライブラリと衝突したりせずに実験ができる.TensorFlowのチュートリアルページでもvirtualenvが推奨されていた.

$ pyenv virtualenv 2.7.10 chainer_2.7
$ pyenv local chainer_2.7

必要となればこの環境を保存できるし,不要になったら即消去できて便利.

続いてChainerのインストール.pip一発.

(chainer_2.7) $ pip install chainer

もう一発.

(chainer_2.7) $ pip install pillow

あとは画像生成のプログラムを実行するだけ!
実行時オプション-iにはメインの写真(image)ファイルパス,-sには変換したい画風な画像(style)ファイルパスを与える.CPUで実行するので-gは-1にする.-oで与えたディレクトリに画像が生成される.

(chainer_2.7) $ python chainer-gogh.py -m nin -i images/img_1.jpg -s images/style_1.png -o out -g -1


f:id:daiiz:20160309005235p:plain:h55

プログラムの実行完了に時間がかかりそうなので,結果画像は明日紹介しようと思う.

追記

実行時オプションは他にもいろいろありました:

optional arguments:
  -h, --help            show this help message and exit
  --model MODEL, -m MODEL
                        model file (nin, vgg, i2v, googlenet)
  --orig_img ORIG_IMG, -i ORIG_IMG
                        Original image
  --style_img STYLE_IMG, -s STYLE_IMG
                        Style image
  --out_dir OUT_DIR, -o OUT_DIR
                        Output directory
  --gpu GPU, -g GPU     GPU ID (negative value indicates CPU)
  --iter ITER           number of iteration
  --lr LR               learning rate
  --lam LAM             original image weight / style weight ratio
  --width WIDTH, -w WIDTH
                        image width, height

特に,--iterでは,試行回数を指定することができる.ソースコードを見るとデフォルトでは5000になっている.昨晩デフォルトのまま実行したところ微妙な結果になったので,今夜は10000で試してみる.