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
プログラムの実行完了に時間がかかりそうなので,結果画像は明日紹介しようと思う.
追記
実行時オプションは他にもいろいろありました:
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で試してみる.