はじめに
あるゲームにおける上位勢と中級者の違いを可視化できないかと考えて、行動パターンの可視化を試みました。
今回はTPS (Third-Person Shooter)ゲームとして、Splatoon3を選択しました。
Splatoon3とは
インクを撃ち合う、任天堂のシューティングゲーム『Splatoon』シリーズの3作目。インクを撃って自分の陣地を広げるという斬新なゲームシステムだけでなく、BGMやSEもイカしています。筆者のウデマエはXP2500程度で、中級者~ぐらいだと思います。
YOLOとは
YOLO (You Only Look Once)は、一枚の画像から複数の物体を検出できるアルゴリズムで、検出した物体のクラスも分類できます。その他のアルゴリズムと比べて、YOLOは処理が高速で、リアルタイムのアプリケーションも可能です。
You Only Look Once:Unified, Real-Time Object Detectionより引用
上記はYOLOの例です。人がairplaneとして検出されてしまっている箇所がありますが、おおむね精度よく検出できていることがわかります。
YOLOV5より引用
今回は比較的小さなモデルであるYOLOv5sを使います。
コードなどは別の記事でまとめたのでこちらでどうぞ。
LabelImgと学習データ
キャプチャーボードで自分のプレイ動画を録画しデータとしました。異なるステージやインク色で学習を行いたかったので、10試合の動画を使いました。
各試合から15枚ずつ、合計150枚の画像を取り出します。訓練用に100枚、検証用に50枚に分け、モデルの学習を行います。その際に、画像内から検出するものとして、以下のように8種類のラベルを手作業で作成しました。
- イカ移動
- 人移動
- メインウェポン
- サブウェポン
- マップ
- デス
- 潜伏
- スペシャルウェポン
LabelImgを用いたラベル作成例。図の場合は"メインウェポン"。
学習にはある程度時間がかかりますが、そのモデルを使って物体検出するのは非常に高速です。
実行中の画像ですが、1枚あたり10msほどです。
結果
このように学習させたモデルで、1試合分の行動検出を行ってみました。
学習データで使っていたブキは、ボトルガイザーとドライブワイパー、ジムワイパーでしたが、ロングブラスターでも検出できていますね。
また、飛沫の上がっていないイカ移動を潜伏(hide)としましたが、ある程度検出できて驚いています。
ただし、今回は動画から適当に選んだ画像で学習したので、イカ移動やメインウェポンの学習データが多く、サブウェポンやスペシャルのデータがほとんど学習できなかったと思います。集めるデータを工夫すれば、精度はもっと改善すると思います。
次は
- 自チームと敵チームの人数差をを有利 or 不利状況の度合いとし、各状況における行動パターン or 俯瞰視点から見た移動量の可視化(+上位勢と中級者の比較)
- 自チームと敵チームのデスのタイミングとカウントの進行から、寄与の大きい行動の可視化
などを行いたいと思います。