実際にやってみた結果はこんな感じ。何気ないネコの写真を、山口素絢、クロードモネ、Bochaton EMMANUELLE、それぞれの画風を学ばせて描かせたもの。個人的にはサイケデリックな最後の絵がかなり好き。

Neural Style
Wiredの記事「どんな写真も「巨匠の名画」風に変換するアルゴリズム」にもあるように、ゴッホやムンクのスタイルを自分の写真にあてはめることができるアルゴリズム。
論文は「A Neural Algorithm of Artistic Style - A Deep Neural Network that creates artistic images of high perceptual quality」で、実装もgithubで公開されている。
The system uses neural representations to separate and recombine content and style of arbitrary images, providing a neural algorithm for the creation of artistic images.
畳み込みニューラルネットワークによって、絵画のコンテンツとスタイルを分離することができる、というところがこのアルゴリズムのポイント。早速、EC2で動かしてみた。(gistにも手順まとめておいた)
AWS EC2でNeural Styleの環境構築
EC2でGPUインスタンスを立てる。例によって、g2.2xlargeでCUDAを使う。環境構築ができているAMIを配布してくれている方がいるので、ami-ffba7b94からインスタンスを作成する。(インスタンス作成ウィザード)
いつも通りubuntuにログイン
$ ssh -i yourpemkey.pem ubuntu@ec2-public-dns-name
アップデートしておく。
$ sudo apt-get update $ sudo apt-get upgrade
そのままではcudnnがR1になっているようなので、R2にアップデートしておく。
$ cd cudnn-6.5-linux-x64-R2-rc1 $ sudo cp lib* /usr/local/cuda/lib64/ $ sudo cp cudnn.h /usr/local/cuda/include/
モジュールをインストール
$ luarocks install image $ luarocks install loadcaffe $ luarocks install torch
Neural-styleとモデルを準備する
$ git clone https://github.com/jcjohnson/neural-style $ cd neural-style $ sh models/download_models.sh
これで完了。AMIのお陰で、10分くらいで出来上がるほど超簡単。実行コマンドは、
$ th neural_style.lua -num_iterations 2000 -style_image style.jpg -content_image image.jpg -image_size 400 -backend cudnn
で、イテレーションが繰り返されて画像が出力される。
色んな絵画の画風で試してみる
どういう動きをするのか、いくつか試してみると、スタイル画像からPhotoshopでいうブラシのような感じで写真にあてはめていくイメージ。それっぽいよね、という絵になる。あくまでスタイルを分離して、新しい写真にあてはめることが整合性のとれたレベルで実現できる感じ。当然だが、新しい芸術を生みだせるわけではない。
イテレーション回数2000で、サイズを400pxくらいにしておくと、1画像当たり20分くらいで完成する。
伊藤若冲「樹花鳥獣図屏風」

伊藤若冲「紫陽花双鶏図」

伊藤若冲は確かにスタイル画像を使ってはいるんだけど、結局のところ、伊藤若冲の繊細綿密な表現ができるわけではないのでイマイチ。
月岡芳年「郵便報知新聞」

歌川国芳「甲越勇将伝」

江戸時代の絵なのに血みどろ現代風イラスト、といった意外性が大人気の芳年と国芳。これはなかなか雰囲気出てる。
クロード・モネ「散歩、日傘をさす女性」

山口素絢「朝顔狗子図」

元々のスタイル画像が上手く生きるタイプで、雰囲気はそのまま。
Bochaton EMMANUELLE「clin d'oeil à Picasso」

ポップアート的なのもイケるとは。