【作品解説】ダンスと機械学習をテーマにした映像「BreakGAN feat. BBOY STEEZ」を制作しました
こんにちは!デザイニウムのBBOY/エンジニアの平澤(@eatora22)です。今回はブレイクダンス(Breaking)と機械学習をテーマにした映像作品「BreakGAN feat. BBOY STEEZ」の紹介をします。
はじめに
まずは以下の動画をご覧ください。
こちらの映像は人間のダンサーと機械学習の技術を使って生成したAIのダンサーとのダンスバトルをイメージして制作しました。人間のダンサーには世界的にも有名なブレイクダンサーであるBBOY STEEZさん(THE FLOORRIORZ)にご協力いただき、AIのダンサーもSTEEZさんのダンス映像を学習して生み出されました。
本作品のベースとなった前作についても過去の記事で紹介していますので、そちらもぜひ一度ご覧ください。
技術紹介
ここでは本作品に使用されている主な技術について解説していきます。まずはじめに、AIダンサーの映像を生成するために用いたStyleGANという機械学習モデルをご紹介します。
これはGAN(Generative Adversarial Network)と呼ばれる生成モデルの一つで、NVIDIA社により2018年12月に発表されました。高解像度且つ品質の高い画像を生成できるモデルとして話題になった技術です(その一年後にはStyleGAN2という新しいバージョンのモデルも発表されています)。ちなみに前作で使用したPGGANもNVIDIA社によるモデルで、アーキテクチャの一部はStyleGANにも引き継がれています。GAN自体の基本構造については、以下の記事(BigGAN)でも軽く紹介しているのでご参照ください。
StyleGANのソースコードは、以下のリポジトリをベースに少しカスタマイズを加えて使用しました。
備忘録として一つ苦労した点を残しておくと、上記リポジトリでは学習用データをLMDBというデータベース形式で用意する必要があります。リポジトリ内にある「prepare_data.py」が画像ファイルをLMDB形式に変換してくれるPythonスクリプトなのですが、私のローカル環境ではどうしても上手く動作せず最終的にGoogleColabというオンラインのPython実行環境に移植したら変換することができました。
学習用の画像データについては、前作と同じくダンス映像を撮影してそこから書き出した連番画像を採用することにしました。後述しますが、ダンサー以外の背景には何も映らないようにしたかったので、後処理もしやすいように今回は撮影スタジオで撮影を行います(A STUDIO様にご協力いただきました)。※背景のマスク作業用にはグリーンバックのスタジオがよく使われますが、多くの場合床も布張りでダンスには不向きだったりします。
こちらは撮影中の様子です。カメラマンは昔からの友人でBBOYでもあるJun Aoyamaさんにお願いしました。映像用の楽曲も彼が制作してくれています。またSTEEZさんには撮影中に何度もムーブ(ダンスにおける一連の動き)を繰り返していただき大変感謝しております。
最終的には13分弱の動画(上記は早送りver)を作成し、連番画像を書き出して約23,000枚の学習データ用の画像ファイルを用意しました。これらの画像をGoogleColabからもアクセスしやすいGoogleDriveにアップロードするのですが、なんと二日近くかかりました(ネットワーク環境の問題もあったのですが)。ファイル圧縮すれば早くなったかもですが、それでもけっこう容量が重くネットワークトラブルで上げ直しになったら嫌だな、とかPython上で解凍するとき失敗しないかな、とか色々不安だったので、ファイルを小分けにしながら、ちまちま作業しました(スマートなやり方をご存知の方いたら教えてください)。
こうして学習用データの準備ができたので、次はモデルに学習させていきます。StyleGAN(v1)はPGGANと同じく低解像度の学習から始めて徐々に解像度を上げていく仕組みです。最終的には最大で1024×1024pxサイズまでの学習が可能です。学習するにあたってGoogleColabのGPUリソースを使わせてもらいましたが、使用可能な一番良いTesla P100(お値段は100万円近く?)のGPUでもメモリサイズ(約16GB)的に1024pxサイズは厳しいかなと思い512×512pxサイズまで学習させました。ちなみに本家NVIDIAでは1024pxサイズの顔画像が70,000枚含まれるデータセット(FFHQ)の学習にTesla V100(お値段120万円ぐらい)を8台並列実行して約1週間ほどかかったそうです。
実際の学習では、各解像度で何枚分の画像を学習させるのか調整できるのですが、私の場合は最終的に35日間ほどかかりました(ColabのGPU制限がかかったり、途中学習が安定せず同じ部分を繰り返したりもしたのでこの時間フルで学習させていたわけではありません)。この期間で十分学習できましたというよりは、本番撮影日の直前まで学習させていただけなので、もっと時間をかければより品質が向上していたかもしれません。
学習を進めて出力画像の解像度が上がっていく様子も動画にまとめてみたのでご参照ください(左上から8×8、16×16、32×32、64×64、128×128、256×256、512×512px)。
ちなみに学習が上手くいかないと、上記のようなよく分からない画像が出力されてしまいます。これはこれで面白いのですが、今回は人間から見てもダンスの動きだと認識できるレベルを目指しました。
こちらの動画は、生成したAIダンサーによるムーブのサンプル集です。最初と最後の入力ベクトルだけ固定していますが、後はすべてランダムなベクトルとその線形補完です。ランダムな入力にも関わらず人間ダンサーのような動きを繋いでいる瞬間もあり、その一方で「こんな繋ぎ方(フロー)もあるのか」と私のようなBBOY目線で見てもフレッシュに感じる瞬間が存在します。この辺りの面白さが本プロジェクトの醍醐味なのではないかと思っています。
こうしてAIによるダンス映像の生成ができるようになりました。理想を言うと、人間とのダンスバトル中にリアルタイムで生成したかったのですが、生成処理もそこそこヘビーなので、今回は事前に複数の動画(AIダンサーのムーブ)を用意することにしました。ただし、後述もしますがランダムで動画を流すだけでは、一方通行なコミュニケーションでバトルとしては面白くありません。人間ダンサーのムーブを元にAIダンサーのムーブを決定するような仕組みを考えてみることにします。
今回は、人間ダンサーのムーブの情報を取得するために、Webカメラを使用した骨格検出の技術を採用したいと思います。使用するのは過去記事でも紹介したtf-pose-estimationという機械学習モデルです。
tf-pose-estimationでは、Webカメラからリアルタイムで取得した映像を元に18個の部位の座標情報を取得することができます。今回は首からの手足の相対座標を元に特徴量を算出します。相対座標を使うことで、カメラ映像内における人の位置に影響を受けず情報を取得することができます。非常にシンプルですが、マニュアル操作で指定した一定時間(ダンサーの1ムーブ)の間に取得した相対座標の各々の平均値を今回は特徴量とします(平均値なので時系列変化の特徴は無くなってしまうのですが、リアルタイム性など重視したのでこれはまたの機会に……)。この辺りの話はちょうど参加していた人工知能学会全国大会(JSAI2020)の以下の発表など参考にさせていただきました。
このようにして、リアルタイムで取得した人間ダンサーの特徴量と事前に算出しておいたAIダンサーの特徴量(CSVに記録)とのマッチングを行い、より特徴の近いAIダンサーのムーブ映像を流すような仕組みを構築しました。
こちらの動画は、右側の入力動画に近い特徴を持つ左側の動画を赤枠で示している様子です。立ち踊り同士など何となくではありますが、マッチングしてそうな雰囲気は感じ取れるのではないでしょうか笑。
これを更にAIダンサーのムーブに適用するとこんな感じになります。対象がGANによるモーフィング映像という点と処理速度優先で更に入力解像度を下げたので、精度的には正直微妙な感じです(これもこれで面白いのですが)。色々と課題は考えられますが、システムにダンスバトルとしての意味合いを持たせるという意味では必要な過程であったと思っています。
AIダンサーの映像出力にはTouchDesignerを使用しました。tf-pose-estimation(Python)側からOSC経由で取得したインデックス情報を元に、出力映像をオーディオリアクティブにしたりスクリーンへの投影コントロール等に使っています。
映像周りのシステム構成図は上記のような感じです。
映像を投影するスクリーンについては、その場に実際にAIダンサーが存在するような雰囲気にしたかったので、背景が透けて見える透過型スクリーンを採用することにしました(スモーク投影なども検討しましたが今回は見送り)。
スクリーンについてもいくつか検討し、今回はストレッチフォルムNETという素材を採用させていただきました。動画は投影テストの様子です。(スクリーン後ろに置いてある物が透けて見えている様子が分かりますでしょうか?)
以上で本作品のメイン部分のシステムは完成したのですが、より映像を効果的にかっこよく見せるためにはライティング周りも良い感じにする必要があります。今回は、私と同じくデザイニウムのMaoさん(@rainage)に協力してもらいました(ちなみにMaoさんはプロジェクターの選定・設置などその他ハードウェア周りも担当してくれています)。以下、Maoさんに解説してもらいます。
Mao)こんにちは、ライティングデザインを担当したMaoです。今回の撮影で必要な照明の要件は以下のようになっています。
・撮影場所のレンタル時間を考慮し1~2時間で設置を完了する必要がある
・透過スクリーンへの投影を行いつつ撮影用にダンサーに光を当てる必要がある(3Mx3Mx2M)
そこで、光源としてプロジェクターを使用し、マッピングソフトウェアとしてMadMapperを使ってダンスエリアの光を素早く調整できるようにしました。 また、カメラマンが自分で光の強さを調整できるように、MIDIコントローラーを接続してコントロールできるようにしました。
またこの作品では、DMX LED照明を組み合わせてビジュアル面についてもより向上させることに挑戦しました。
もちろん、MadMapperでLEDピクセルを制御することもできますが、Unityと組み合わせることで今後ARやセンサー系のインタラクションも容易にしたいと考えました。 そのため今回は、UnityでDMX LEDバーを制御するためのリアルタイムなシステムを構築しています。
このシステムのメイン機能は、参照するオブジェクトの座標を介してシェーダーを通過する光の範囲を計算し、それをLEDピクセルに変換することです。
このビジュアルコントロールシステムは、リアルタイムなサウンドトラックの検出とMIDIタイムラインもサポートしています。 音源を設定するだけで、様々な光の動きや色、範囲でエフェクトを制御できます(サウンドトラックの検出とMIDIタイムラインの制御はKeijiroさんのリポジトリに基づいています)。
最後にライティングシステム全体をGAN映像の出力側と同期させる必要があります。今回はサウンドの再生開始をトリガーとして同期するシンプルな構成にしました。GAN側はOSCコマンドを送信して、イーサネット経由でライティングシステムのオンとオフを切り替えます。 またオーディオに合わせて様々なLEDエフェクトを編集する方が都合が良いので、エフェクトのコントロールソースとしてMIDIを選択しました。
最終的なLEDエフェクトとシステム構成は以下のようになりました。
平澤)以上、本作品で使用した技術周りの紹介を行いました。私自身はこれまでソフトウェア周りのエンジニアとしてやってきたので、今回はハードウェア関係も色々と触る必要があり大変でしたが勉強にもなって良かったなと思っています。
※本番映像の撮影には「SOOO dramatic!」様のイベントスペースをお借りしました。
作品解説
ここでは作品コンセプトに関する話をしていきたいと思います(技術解説は分からんという方お待たせしました笑)。とは言ってもベースとなるコンセプトは前作のものを継承していますので、詳細はそちらもご参照ください。ざっくり書きますと「AIを通して新しい可能性(ここではダンス表現)に気付かせてくれる作品」という感じです。
今回は人間とAIの関係性をより際立たせるためダンスバトルという形式に作品を落とし込むことにしました。ストリートダンスの中でもブレイクダンスは特にバトルが盛んにおこなわれているイメージです。お互いのスタイルがぶつかり合うことで、ダンスシーンの発展にも大きく貢献してきたと思います。ダンスショーとの大きな違いは人と人とのコミュニケーションがバトルでは行われている点だと感じています(ショーでは全く行われていないという意味ではないのですが……)。分かりやすい例だと、バトルでは相手のムーブを受けて自分のムーブを即興で組み立てたりするケースがよくあります(敢えて相手の動きに寄せて、自分の方がヤバいぜとアピールする等)。今回のシステムに特徴量抽出の仕組みを加えたのもそういった理由です。また、バトルを通して相手からインスピレーションを受け取る瞬間も存在するように、今作はGANの出力を通して自分のダンススタイルに対する気付きのきっかけになれば良いなと思い制作しました。
最後に本作品の制作にご協力いただいたSTEEZさんに感想をいただいたので、そちらを載せて解説は終わりたいと思います。
AIに学習させるためのダンス撮影から始まり、AIダンサーとのバトルはとても興味深い撮影でした。はじめは、どんな映像になるのか想像出来ませんでしたが、今までにないような新しく面白い映像になったと思います。AIの予期せぬムーブは、自分にとっても新しい動きのヒントになるような感じがして、ダンスだけに限らず、今後この作品を通して新しい発見が色々と生まれていったらいいなと感じました。参加させて頂き、ありがとうございました。
さいごに
以上、ブレイクダンスと機械学習をテーマにした映像作品「BreakGAN ft. BBOY STEEZ」をご紹介いたしました。GANは他の作品にも応用できますし、今回は見送ったアイデアや技術ネタもあるので、またの機会に試せたらと思います。ダンスはもちろん、他分野でも面白いことやってみたいという方はぜひ一度お問い合わせください!
編集後記
広報のマリコ(@marikocco)です。今回はプロのダンサーであるSTEEZさんやクリエイターの方にも参加して頂き、とてもカッコよくて面白い映像作品が出来上がりました❗そして、今作をきっかけに「Designium Dance」というサイトも公開しました✨平澤のように、やりたいことを形にしてみたいという方や一緒にコラボレーションしてみたい!という方からのご連絡などお待ちしています!!頑張ってつくったので、ぜひ一度サイトの方も訪れてみてくださいね😊
The Designium.inc
・Designium Dance
・Interactive website
・Twitter
・Facebook