Help us understand the problem. What is going on with this article?

VAEにモーショングラフィックスを学習させてみた

More than 1 year has passed since last update.

モーショングラフィックスとは

図形,ロゴ,イラストなどをかっこ良く動かしたものです.かなり曖昧な定義ですよね.実際に明確な定義はないと思います.俗に言うエモいという映像にはモーショングラフィックスが使われていることが多いです.
アーティストのMVや企業のCMなどに使われていることが多いです.YouTubeなどで「モーショングラフィックス」と検索するとかっこいい映像がたくさん出てくるのでぜひ見てみてください.

モーショングラフィックスを自動生成したい!

モーショングラフィックスはクリエイターの方が手作業で作成してることがほとんどなんですよね.これってとっても時間がかる大変な作業なんですよ.
そこで最近はやりのAIをつかって生成できないかと考えました.モーショングラフィックスをAIに学習させて生成したら楽しそうじゃないですか?

データセット

生成するにしても,学習用のデータセットが必要です.しかし僕のリサーチした結果ではモーショングラフィックスのデータセットは存在しませんでした.そこで自分でデータセットを作成する必要があります.しかし,大量のデータセットを作成するには膨大な時間が必要なため,今回は簡易的に,6種類のパーティクルのモーショングラフィックスを作成しました.
データセットの作成にはAdobeのAfrer Effectsを使用しました.

作成したデータセット

123456

ae.png

学習に使うモデル

データセットは作成した(かなり小規模でデータセットと呼べるかどうかは置いておいて)ので次に考えるのはモデルです.生成モデルはいくつかあり,現在主流なのはGANかVAEです.GANは学習が難しく,今回のようにデータセットが少ない場合,うまく学習してくれない可能性が高いのでVAEを採用しました.VAEとはAEの派生系で,データセットを圧縮,復元することで,潜在変数の分布を獲得します.訓練後,デコーダ部分にノイズzを与えることで生成することが可能になります.AE,VAEについては以下の記事が参考になると思います.
Variational Autoencoder徹底解説
今回は動画の生成を行うのでVAEは3次元畳み込みによるUnet構造のモデルを構築しました.3次元畳み込みにより動画の時空間情報を学習します.デコーダ部分のtranspose convは転置畳み込みです.転置畳み込みはここの記事で動画付きで分かりやすく解説されています.

models figure (1).png

学習

データセットが少ないので学習はすぐに終わりました,およそ200epochのところで生成できていると判断したため,そこで学習を終了しました.GTX1080Tiで1時間ほどかかりました.

実験詳細

動画サイズ epoch数 フレームワーク GPU
128x128x32 200 PyTorch GTX1080Ti

生成結果

gen1.gif
gen2.gif
gen3.gif
gen4.gif

ちゃんと学習データっぽいモーショングラフィックスが生成できています.

Morphing

デコーダに与えるノイズベクトルzをモーショングラフィックス間で補完していくことで,2つのモーショングラフィックスの中間的なモーショングラフィックスが生成できます.よくGANで生成されたものが少しづづ変化していくアレの動画バージョンです.
111111

以下の式のように潜在変数zをモーショングラフィクス間で補完することで中間的なモーショングラフィクスを生成します.

z = t z_1 + (1-t)z_2 \\
0 < t < 1

まとめ

モーショングラフィックスをdeep learnigを使って生成することができました.今回はかなり小規模なデータセットのため生成に多様性はみられませんでした.大規模なモーショングラフィックスデータセットがあれば是非実験してみたいと思います.(誰か作ってくれないかなー)
しかし,Mophingなどで中間的なものを生成することができるのは面白いですね.小規模なデータセットでもMorphigができることが今回の実験で分かりました.

参考

Variational Autoencoder徹底解説
ニューラルネットワークにおけるDeconvolution

kult
深層学習を用いた動画生成系の研究をしています
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away