Deep Learningを使って映像作品を作った

本記事は Deep Learning Advent Calendar 2015 19日目の記事です。

the four painters from takuya on Vimeo.

写真をアーティスト風に変換できるneural-style

僕はディープラーニングやニューラルネットワークの専門家ではないのですが、昨今ではそんなミーハーでも簡単に機械学習ができるツールが多く出ています。

ディープラーニングは画像識別能力が高いので、早速ラーメンの写真からラーメン屋をオススメするアプリを作ってみたりしました。素人でもこんな簡単に作れるので、本当に将来が楽しみでしょうがありません。(技術的な話はこちら)

今回は、そんなディープラーニングの技術を使って映像作品を作ってみたという話です。
New Neural Algorithm Can ‘Paint’ Photos In Style Of Any Artist From Van Gogh To Picassoという記事にもあるように、ディープラーニングは画家の画風を学習して模倣することができます。
つまり誤解を恐れずに言えば、もはやコンピュータは画家のセンスを理解できる、という事です。

嬉しいことに、ChainerやTorchというフレームワークを使ってこの技術を使いやすく実装してくれた方がいます。
いくつかあるのですが、今回はneural-styleを使いました。

さっそく自分の画風を模倣させてみた

僕は趣味で絵を描きます。以下の作品を入力して学習させてみました。

1-fff46414b142062da65c5ede67cddc0d

油彩でも水彩でもないので、ちょっと模倣しづらそうな感じがします。
変換する写真は以下のものを選びました。ヨーロッパの町並みです。

1-dc9ad203263f34352e18bc29b03e1066

その結果がこちら。ちゃんと町並みっぽく見える!

1-f0e7746c499451e3ce94e640502ed8c6

画家の見ていた情景を再現できる?

自分を著名画家と並べて語るのはおこがましいですが、いち絵描きとして言えることは、作品とは自分の目を通して見た情景であるということです。
脳科学によると、人間は見たものをそのままの映像で捉えているわけではなく、情報処理効率を上げるためにある程度「要約」しているらしいです。
その要約によって、無駄をそぎ落として大事なところを強調しているわけです。

つまり情景とは、要約のプロセスを経て自分の過去と今の心情を加味して強調した結果見える景色と言えそうです。
という事は、画家の画風とはこの要約プロセスの一部と捉えることができるのではないか?
もしかしたら画風を模倣して映像にすることで、画家が普段どんな景色を見ていたのか少し再現できるかもしれない。

かなり無理やりな動機付けですが、ようは映像にしたら面白いんじゃね?と思って始めました。

4人の画家

作品は、4人の画家の画風に変換した短いビデオをつなぎあわせたものです。それぞれ説明していきます。

ゴッホで「くらげ」

Starry Night:

starry_night

品川の水族館で撮ってきたくらげ:

123

変換結果:

123

ムンクで「木漏れ日」

叫び:

the_scream_sm

近所の公園で撮った木漏れ日:

197

変換結果:

197

山下清で「薔薇」

長岡の花火:

yamashita_kiyoshi_2_crop

薔薇の花:

128

変換結果:

rose

まるで宝石が散らばってるみたいですね!

葛飾北斎で「波」

千絵の海 蚊鉢流:

hokusai095_main

波:

064

変換結果:

064

iMacで1ヶ月かかった

家のiMac(Late 2013)で作業していたのですが、正直言って大変でした。
このiMacのビデオカードはNVIDIA製だったのでCUDAが使えたのが救いでした。

画像を4分割して処理

iMacは家庭用PCなのでGPUメモリが2GBしかありません。
大きな画像を生成するには、相応のメモリ容量が必要なのですが、iMacでは500×282程度のサイズしか扱えませんでした。
ディスプレイの解像度を640×480に落とすと、GPUの空き容量が増えるので少しだけ大きな画像を生成できました。
それでも720pの高画質の動画を生成するには、画像を分割して個別に変換していく必要がありました。

その副作用で、画像の繋ぎ目が不自然になってしまっています。

イテレーションは200〜400が限界

よい結果を得るにはイテレーションは1000ぐらい回した方がいいのですが、その分時間がかかります。
1作品300フレームとして4分割して1200枚。
それぞれ1000イテレーション回すと一ヶ月ぐらいかかりそうです。
なので、それっぽい結果が得られる最低限のイテレーションに留めました。

初期化はノイズより元画像の方がいい

前述の通りイテレーションを多く回せないので、初期化はノイズのランダム画像よりも元画像を使った方がいい結果が得られました。

結果的にneural-styleでは以下のようにオプションを指定しました。

th neural_style.lua -backend cudnn \
  -image_size 640 \
  -style_image examples/inputs/starry_night_crop.png \
  -num_iterations 200 \
  -save_iter 200 \
  -content_image $fn \
  -output_image $dest \
  -init image

ディープラーニングは新しい種類の筆

やってみてわかったのは、予想外に美しい結果が得られるものがあった事です。
個人的に山下清風の薔薇の花は宝石を散りばめたような画風で、とても気に入っています。

もっとコンピュータの性能が上がってPhotoshopとかでカジュアルに利用できるようになったら、めちゃくちゃ楽しいと思います。
画風のマッシュアップが次々と起こって、音楽のDJみたいに新しい表現形態が生まれそうです。

作ってます↓

Inkdrop - The Notebook App for Markdown Lover

気に入ったらシェアしてね


コメントを残す