町田SE meet up #4 でモンハンに関する機械学習について発表しました!
こんばんは。
ボイラーこと、ラグザイアの本間です。
去る2024月11月27日(水)に弊社主催のイベント「町田SE meet up」の第4回に登壇者として参加し、発表を行いました。発表タイトルは「モンハンワールドにおける金冠サイズ検出のための回帰モデルの開発」です。
発表内容の要約
モンスターハンターワールドを遊んでいる時、最大サイズのモンスターや最小サイズのモンスターを狩ることで、記録に金の王冠(通称、金冠:最大金冠/最小金冠)が付きます。全部のモンスターの最大金冠・最小金冠を集めたい!しかし、最大サイズや最小サイズを見分けるのは非常に難しい。
そこで、プレイ中の様子をキャプチャして、リアルタイムで映像内に映るモンスターを認識して、モンスターのおおよそのサイズの自動計測するAIによるシステムを考えました。サイズを自動計測することで楽に金冠モンスターを探しやすくなる、はずです。
前提条件に「モンスターのサイズはモンスター狩猟後かつサイズ更新時のみ判明する」があります。これにより教師データ集めに苦労することが予想されます。
金冠モンスターをAIで検出する道筋を考えました。
- サイズの更新が可能なモンスターを狩り続けながら録画する
- 録画した動画でサイズ更新した動画クリップのみを集める
- 集めた動画クリップをラベル付けしてデータセットを作る
- データセットを元にディープラーニングによるトレーニングを行う
1, 2は気合でなんとかなりそうなので、まず4について考えます。私はPythonコードをあまり書いたことがないので、得意なC#でAI開発できないかを考えました。PythonにはNumPyやCuPyがあります。C#にはNuGetライブラリでNumpy.NETというものがあり、CuPy.NETはありません。なのでNumpy.NETの作り方を真似て、CuPy.NETを作ることにしました。
CuPy.NETを作ったあとはディープラーニングフレームワークをどうするかですが、私は書籍「ゼロから作るDeep Learning 3 フレームワーク編」 のサンプルとして用意されていたDeZero の実装を参考に、C#コードへ移植したDeZero.NETを作りました。
3のデータセットを作る方法はどうしたらいいでしょうか。私はWebサービスで動画のデータセットを作れそうなサービスがないか検討しましたが、見つからず。ここは自分で作るしかないと思い作りました。その名も「VLADS (Video Labelling and Automatic Dataset System)」。これによりデータセットをつくることができます。
今回の発表では3までの必要な揃えたものの紹介をしました。トレーニング結果はYouTubeで動画投稿する予定です。お楽しみに~
気をつけたこと
本記事では、第四回 町田SE meet up を成功させるにあたり気をつけたことを述べたいと思います。
1. 発表内容の難易度
今回の町田SE meet upに集まってくれそうな層は「どちらかというと弊社ラグザイアのRuby色が強いエンジニアが多そうだ」と事前に考えていました。もちろん、各種イベントプラットフォーム(connpass等)で集まった人の中には、発表タイトルに興味を持った機械学習エンジニアの方も何人かはいらっしゃるだろうと予測していました。
今回の発表タイトルではディープラーニングの内容を取り扱っているがために、このようにディープラーニングについて詳しい人、詳しくない人が一同に集まる会なので、どれぐらい詳しくない人に知識をフォローするようなスライドを用意したらいいかが難しかったです。結局は時間の関係(50分間の発表時間)でディープラーニングの簡単な説明のスライドは省いてしまいました。その点は申し訳なかったなと思います。またもう一方の詳しい人達に対してはモデルのアーキテクチャの説明スライドを用意しましたが、文字だけの非常に見づらいものになってしまいました。アーキテクチャの図を作ればよかったなと反省しています。
2. 口の乾き
50分間の発表時間が設けられているので、私はもちろん50分間喋り倒す心づもりでいました。今回の発表でも、喋っている途中で口が乾いて、呂律が回らなくなるかもしれないと警戒していました。普段長時間トークするにあたっては必ず手元に飲み物を用意しています。そのため、500mlの水を用意しましたがこれが大正解でした。今回の発表内でスライド内に用意した動画を見ながら私が解説する時間がありました。その動画では基本的に、見やすくなるようにカットとクロスディゾルブを多用して、参加者に待ち時間を与えないようにしました。例えばVLADS(Video Labelling and Automatic Dataset System)の動画エンコード機能を動画で見せた時に、処理進捗20%~80%の間はカットして20%の地点と80%の地点をクロスディゾルブでなめらかにトランジションしました。ただし、一部カットを省略しないで私が水を飲む時間を少しだけ確保しまして、給水することができました。このような準備は長時間の発表では必要ですね。
3. 発表後の懇親会で振る舞われるピザの選定
発表後は念願の懇親会、参加者との貴重なトークの時間です。もちろん軽食(ピザやスナック)などが振る舞われました。私は事前の打ち合わせで主催の方に無理を言って、ピザーラのピザ(しかもテリヤキチキン)を注文してほしいとお願いをしました。ピザーラのピザは比較的高価なのですが、大変おいしいので今回の懇親会でも是非食べたいと思っていました。参加者の皆さんにピザーラのテリヤキチキンのピザを振る舞うことができてよかったです。(会社のお金で)
おわりに
何か発表できそうなネタができたら、また町田SE meet upで発表したいな~と思いました。今回の発表では発表中にも改善できそうなポイントがいくつか見つかったので年が明けた2025年3月ごろに、修正+内容追記して、「モンハンワールドにおける金冠サイズ検出のための回帰モデルの開発 完結編」をYouTube動画として投稿しようと考えています。是非お楽しみに~。

株式会社ラグザイア(luxiar.com)の技術広報ブログです。 ラグザイアはRuby on RailsとC#に特化した町田の受託開発企業です。フルリモートでの開発を積極的に推進しており、全国からの参加を可能にしています。柔軟な働き方で最新のソフトウェアソリューションを提供します。
Discussion