2021年8月24日(火)から26日(木)までの3日間、日本最大のコンピュータエンターテインメント開発者向けカンファレンス「CEDEC2021」(CEDEC=セデック:Computer Entertainment Developers Conference 主催:一般社団法人コンピュータエンターテインメント協会、略称CESA)が開催。昨年に引き続き、新型コロナウィルス感染拡大を防止する観点から本年もオンラインで開催された。
本稿では、8月26日(木)に開催されたセッション「『ラブライブ!スクールアイドルフェスティバル ALL STARS』の機械学習によるコンテンツ制作支援〜譜面作成ヘのディープラーニング活用〜」の模様をレポートしていく。
【講演者】
譜面制作の機械学習を導入後、作業時間は50%カットに
このセミナーでは、TVアニメ「ラブライブ!」を題材にしたスマートフォン向けリズムゲーム『ラブライブ!スクールアイドルフェスティバル ALL STARS(以下、スクスタ)』の譜面作成を機械学習で効率化させる仕組みについて語られた。
『スクスタ』には、音楽に合わせてノーツをタップするリズムアクションパートが存在する。譜面とは、この際に流れてくるノーツのタイミングや種類を示すものだ。
各楽曲の長さは1分半から2分程度。難易度は初級、中級、上級、上級+が存在し、難しくなるほどノーツの数が増えていく。ノーツには、タップ、スワイプ、長押し、演出に絡むギミックノーツが存在する。
人間が制作する譜面制作のワークフローでは、ゲームの音楽などを担当するサウンドメンバーがメディファイル形式で譜面の元データを制作し、そこに企画メンバーが演出などを合わせることで完成していく。
その際に特に大変な部分が、メディファイルの作成だ。音楽に合わせてノーツを置きたい場所に手作業で指定するので、どうしても作業時間が掛かってしまうとのこと。1曲あたりには30時間から40時間の作業を要するそうだ。
譜面制作ツールが導入された経緯は、2020年に新曲追加のペースが倍増したことがきっかけだ。当初では年に24曲を追加していく予定だったが、年に60曲にまで増やしたいという要望が届き、チームの体制を変える必要が出てきたという。そこで、機械学習のチームも巻き込んで制作効率化のツール開発に臨むことになったとのこと。
このプロジェクトで実現したいことは、全自動で譜面を作ることではなく、人間の調整を加えながらツールを活用して効率化を図るというものだ。『スクスタ』の譜面では、ダンスの振り付けに合わせてスワイプの向きを変えたり、歌詞に合わせてノーツの種類を変えたり、こだわりをもって制作する部分があり、それらを完全に自動化するのは難しいという。
また、近年には機械学習によるコンテンツの自動生成という領域が注目を集めているという要因も大きかったとのこと。
しかし、その段階ではまだ実用化に結びついているケースは少なかった。そこで、譜面制作というゲーム制作の中でも自由度が低いコンテンツであれば実現可能では、と考えたそうだ。結果的に、この自動化ツールを導入したことで、作業時間の50%をカットすることに成功している。
扱いやすさを追求したツールの詳細を公開
セミナーでは、ツールの詳細な使い方の説明が行われた。まずは、専用アカウントにログインして楽曲をアップロード。この際に、楽曲ごとにBPMを指定することも可能だ。BPM情報を指定することで、楽曲制作の精度が上がるようになっている。
アップロード終了後には、楽曲に対応する譜面制作に必要なデータを取得するための前処理が行われる。ここで処理を挟むことで、その後の処理コストを抑える効果があるそうだ。
前処理が終わると、楽曲の難易度別の管理画面に移行する。この画面では、ボタン1つで数種類のモデルで譜面を生成できる。譜面のパラメーターもここで入力するが、エラー検知機能もあるので、マニュアルを読んでない人でも問題なく作業ができる仕組みだ。
作成済みの譜面はエキスポートボタンで、MIDIとJSONの2種類の形式で出力可能。基本的にはMIDIを使うことになるそうだ。他にも、SLACKの通知機能も備わっており、譜面生成が完了した通知をSLACKで受け取ることも可能だ。困った際にマニュアル確認もアプリから行える。
譜面自動化のWEBサービスにおける3つのポイント
譜面自動化のWEBサービスは、システム構成、使いやすさのポイント、少人数で効率化のためのポイントの3つに分けて解説された。
譜面はWEBアプリで生成され、サウンドチームと企画チームの編集を経てゲームに導入される。WEBアプリという形であれば、非エンジニアでも使いやすくするため、ブラウザだけあれば済むため環境依存もなくなる。
システム構成は図で説明が行われた。サーバーとクライアントで分割されており、クライアントはGUIを提供し、サーバーはAPIを提供。やり取りはメッセージパックで行わる。
サーバー側となるバックエンド構成は、FsatAPIをメインフレームワークとして、データベースをCouchDB、タスク管理はCelery、メッセージキューはRabbitMQを使用している。フロントエンド構成は、メインフレームワークにVue.jsとして、そこにいくつかのプラグインを加えることで形成される。
1つ目のポイントは非同期状態表示。譜面生成は時間が掛かる作業なので、UIで状態をリアルタイムで確認できるようされている。Slackの通知なども活用することで、最低限の作業で制作を進められるようになった。
また、UIを楽曲と譜面で同じ構成にすることで、分かりやすさを優先した。開発としても、同じUIを使用することで開発コストの軽減に成功している。
ボタンやパラメーターにはTootipを用意しており、カーソルを重ねればボタンの使い方などを表示してくれる。エラー表示も用意することで、誰でも操作できる扱いやすさを実現した。
操作を確認したくなったときのために、Markdownで見やすいマニュアルを直接WEBアプリで確認できるようにもしている。使いやすさを追及したので基本的に読まずに操作可能だが、細部は複雑な構造になっており、共有の際などに活用しやすい。
このマニュアルは作成コストが低いわりに見た目が綺麗で見やすく、編集や更新も簡単に行えるというメリットを備えている。現場でも使いやすいと好評を得ているとのことだ。
続いては、少人数で効率的に開発を行うためのポイントだ。この運用システムは、フロントエンド、バックエンド、データベースなど、一般的なWEBサービスの要素を全て組み込んだ複雑なシステムだが、開発期間もリソースも少なく済んだそうだ。
その要因となった理由の1つは開発環境だ。開発環境は、例えるならば木こり(開発)が使う斧のようなもの。斧の使いやすさは、開発効率に大きく影響する。効率的な開発環境の一番のオススメは、DockerとVisual Studio Codeの組み合わせだ。
バックエンドは、Pythonで作成した機械学習モデルをそのまま使用したいので、ここでも同じくPythonを使用している。Pythonは性能面ではネガティブな印象が強いが、非同期ベースのASGIでは、それなりのパフォーマンスに期待できるとのことだ。
ASGIフレームワークの中で最もオススメはFastAPI。これは、有名なStarletteのラッパーのような存在で、FastAPIの方が使いやすく、ドキュメントもわかりやすく、チュートリアルも5分で完走できるほどの使いさす差を持っている。
APIドキュメント自動生成の機能もあり、簡単にAPIのテストも行えるので、バックエンドの開発がさらに快適に行えるようになるとのことだ。
続いて、モデルの扱いの関する部分。モデルは機械学習におけるコアの部分であり、更新頻度が高く、複数モデルを同時採用したいという特徴がある。これに対応するために、モデルごとに独立リポジトリでの開発と管理を行い、共通のインターフェースを決め、開発効率の向上を図った。
今回の運用システム開発では、機械学習モデルは別チームで開発を行ったため、応用システムとは並行して開発した形になる。ただし、モデルがなければ応用システムの開発にも手間が掛かるので、先にスピード重視でベースモデルの開発が行われた。
ベースモデルは下記の図の通りに作成された。既存モデルを用いて要素分解やタイミング情報の抽出を行ったり、計算コストの低いHAVモデルを使ってソート種類を予想して簡単な譜面を作成したりしてくれるモデルとなっている。
最後にデプロイと更新の工夫について。WEBアプリはメリットが多いものの、サーバーが必要になり、そのコストが掛かるというデメリットがある。そこで、コストと性能を両立させるため、自動スケーリングが行えるkubernetesでのデプロイの実施をしたそうだ。
運用システムやモデルに更新が入ると、ビルドとデプロイをやり直す必要がある。こちらのステップの頻度が高く、kubernetesも絡むのでシステム構造は複雑化しやすい。その工数増加の対策として、GitHubEnterpriseでソースコードを管理し、CloudBuild機能を利用してワンボタン化した。これで一度のビルドとデプロイの設定を行えば、以降の更新は図の実行ボタン1つで完結するようになる。
ディープラーニングによる譜面制作支援モデルの最終目標
続いては、機械学習モデルについての紹介となる。
プロジェクトチームは機械学習グループが担当した。モデルは既存研究を元に、さまざまな独自改良を加えたモデルを使用しており、学習に使用するデータは、『スクスタ』のゲーム内データを元にしている。2021年3月からは九州大学櫻井研究室と共同研究を開始し、譜面作成支援のさらなるモデル改良を目指しているとのこと。
今回の機械学習モデルでやりたいことはディープラーニングで、リズムアクションゲームの譜面を作成すること。入出力の観点では、入力する音源データ、出力となる譜面データとなる。この入出力の流れをモデルに学習されることが、この機械学習の最終的な目標だ。
これに関しては、先行研究としてリズムゲーム『ダンスダンスレボリューション』で論文が存在しており、KLabでもこの論文を元に開発をしている。違いとしては、KLabではサンプル実装とは別にPytorchで再実装したものになる部分だと言う。
論文では、基本的に2種類のモデルを組み合わせることで譜面作成を行っている。それぞれ、Onsetモデル、Symモデルという2種類が存在し、前者は音源から時系列上でノーツの位置を推定する形、後者はノーツの種類の選定を行うモデルだ。この2つを組み合わせることで、譜面制作を行っていく。
Onsetモデルでは、音源データをメルスペクトログラム化して二次元の画像のデータのような構造として扱っている。これをConvolution層という画像認識と同じレイヤーで認識し、その出力をLSTM層という自然言語のレイヤーで処理していく。加えて、この段階で、難易度や小節・拍のデータを追加していくことになる。
symモデルは、入力で過去のノーツ種類と間隔を用いて、次に来るノーツの種類を出力する。このモデルは自然言語の文章校正に使用されるものと同じ言語モデルが使われている。元の論文ではLSTMを使用しているが、KLabではより性能の良いTransformerを採用しているとのこと。
入力とし使用するデータは、90秒程度の楽曲が100曲近く。加えて、それぞれに4つの難易度があり、BPMによって拍と音節の位置を追加している。出力データは、ゲーム内で使用している譜面データを元に作成される仕組みだ。
BPM情報が主に利用されるのは低難易度の譜面の際だ。低難易度では、ノーツの位置が小節・拍の位置にあることがほとんどになり、この位置がBPMの数値によって決定されるとのことだ。BPMは人間が譜面を作る際も重要な情報なので、社内でも管理用のデータとして保管されているという。
続いては、現在実験的に検証を行っている内容の紹介になる。KLabでは、敵対的生成ネットワーク(GAN)を導入できないかの検証を行っている。GANは画像生成の領域で注目されている技術だが、根本はモデル学習のシステムなので、画像に限らず様々なデータで使用することが可能だ。そこで、譜面制作でも応用できないか注目しているとのこと。
譜面制作の場合はこれが少し異なり、ジェネレーターは音楽の譜面を生成する役割で、ディスクリミネーターは人間の作ったリアルデータとジェネレーターが生成した譜面を識別するようになっている。こうしてGANの訓練を行い、ジェネレーターがディスクリミネーターを騙せるようになれば、高度な譜面制作を自動化できると考えているそうだ。
最後に、今回のプロジェクト全体の意義のまとめの説明が行われた。現在は画像や音楽の自動音楽生成というのは機械学習で非常にホットな領域だが、画像や音楽など自由度が高い領域では、ビジネス的に満足いく成果を上げるにはもう1歩足りないという印象を受けているとのこと。
一方で、ゲームの素材の中には、譜面やマップやテクスチャなど、自由度が低い部分が存在するので、その領域であれば実用は現実的であると考えているそうだ。人間による修正を前提にした形であれば、さらに導入のハードルは下がるはずと高田氏は語る。
総まとめとして「ゲームはコンテンツの種類や量が多く、どうしても単純作業になる部分が存在する。それを機械学習に任せて、人間はよりクリエイティブな作業に集中できるだろう」と高田氏が述べ、セミナーは終了となった。