https://twitter.com/rimopoke/status/1679815756572401664 のスライドです
機械学習でポケモン対戦動画を解析するPoke Battle Logger2023/07/14 リモポケ学会fufufukakaka(@fukkaa1225)
View Slide
自己紹介● fufufukakaka, fu3ka3 (ふか)● 機械学習エンジニア○ 自然言語処理・推薦をはじめとして全般● ポケモン歴○ 赤緑からDP○ XYから復帰して対戦もちょっとたしなむように(1シーズンだけやる程度)○ SVは継続して対戦を楽しめている。レートは1700弱
アジェンダ● ポケモンのランクマッチについて● Poke_Battle_Logger: なぜ対戦動画を解析したいのか● Poke_Battle_Logger を構成するコンポーネント● Web App の紹介● 得られたデータからの分析結果○ 勝敗率○ HOME の Stats とどれくらい差があるのか● 今後の展望
ポケモンのランクマッチ知っている方・やっている方 🙋🙋🙋
ポケモンの対戦→ 2人同時手番非対称情報ゲーム
ゲーム理論的な観点から見るポケモン対戦● 2人 → シングルなら大体2人● 同時手番 → 2人とも同時に次の手を選択する● 非対称情報 → 相手の技構成は見えない。相手の努力値(ステータス振り)や持ち物も見えない。● かつ、扱えるキャラ(1000体)・技の数も山ほどある● つまり非常に理論的解析が難しいゲーム○ 囲碁・将棋よりも探索空間は広い
ポケモン対戦: 例VS
ポケモン対戦: 例VS持ち物: こだわり鉢巻AS252B4、意地っ張りつららおとし聖なる剣不意打ち噛み砕く持ち物: ???努力値・性格: ???????????????氷・悪
ポケモン対戦: 例(同速の場合)自分\相手つららおとしせいなるつるぎ ふいうち かみくだくつららおとし (40,40) (40,100) (40,30) (40,40)せいなるつるぎ (100,0) (100,0) (100,30) (100,0)ふいうち (30,40) (30,100) (30,30) (30,40)かみくだく (40,40) (40,100) (40,30) (40,40)自分が先手を取れる場合(確率: 0.5)
ポケモン対戦: テラスタル● SV からの要素● 対戦で一匹にだけ使える● タイプを事前に決めておいたタイプに変更できる○ 18タイプどれにでも変更できるポケモン公式サイト ポケモンたちが宝石のように光り輝く「テラスタル」https://www.pokemon.co.jp/ex/sv/ja/features/220803_06/
ポケモン対戦: 例(こちらが素早さが上で、かつテラスタルがお互い残っている場合)2パターンのテラスタルのみ考察する1. ゴースト2. フェアリー自分はゴーストにテラスできるとする
ポケモン対戦: 例(こちらが素早さが上で、かつテラスタルがお互い残っている場合)自分\相手ゴーストテラス(確率0.45)フェアリーテラス(確率0.45)テラスしない(確率0.1)ゴーストテラス ? ? ?テラスしない ? ?せいなるつるぎ\ふいうち見積もった確率を元に相手のテラスに対する混合戦略を求めます
1vs1 の解析で既にパンクしそう
ポケモン対戦● 【悲報】ゲーム理論的な解析解を求めるのは不可能
ポケモン対戦● 【悲報】ゲーム理論的な解析解を求めるのはほぼ不可能● 解析できたとしても、1vs1の対面を突き詰めることしかできない
ポケモン対戦● 【悲報】ゲーム理論的な解析解を求めるのはほぼ不可能● 解析できたとしても、1vs1の対面を突き詰めることしかできない● 他にも解析したい場面↓○ 3匹の選出順番○ テラスタルタイミング○ 交代○ etc
ポケモン対戦● 【悲報】ゲーム理論的な解析解を求めるのはほぼ不可能● 解析できたとしても、1vs1の対面を突き詰めることしかできない● 他にも解析したい場面↓○ 3匹の選出順番○ テラスタルタイミング○ 交代○ etc→ データを集めて立ち向かう
対戦を記録して振り返りたい→ 動画を撮ろうAVerMedia 2Plusを使っていますavermedia 公式サイトhttps://www.avermedia.co.jp/product-detail/GC513
…
動画を見返すよりも効率よく振り返りたい勝った試合だけは何度も見ます
Poke Battle📹 Logger
Poke Battle Logger の概要
Poke Battle Logger の概要● 動画から対戦の統計を取り出す動画解析バッチ○ 6vs6 の見せ合いでどんなポケモンを出したか○ 実際に選んだ 3匹はなんだったのか○ 先発は誰だったのか○ どのポケモン同士が対面したのか○ どのポケモンで相手のポケモンを倒した(倒された)のか
Poke Battle Logger の概要● 動画から対戦の統計を取り出す動画解析バッチ○ 6vs6 の見せ合いでどんなポケモンを出したか○ 実際に選んだ 3匹はなんだったのか○ 先発は誰だったのか○ どのポケモン同士が対面したのか○ どのポケモンで相手のポケモンを倒した(倒された)のか● それらを集計・表示する web application の開発
Poke Battle Logger のコンポーネント1. フレーム抽出2. 6vs6 の画面からのポケモン識別3. 対戦中の画面からのポケモン名識別
Poke Battle Logger: フレーム抽出● どのフレームに着目するか、を決めてそれを抽出する処理○ ポケモンの選出画面○ 対戦中の画面○ 勝ち負け・ランクが表示されている画面○ etc
Poke Battle Logger: フレーム抽出● どのフレームに着目するか、を決めてそれを抽出する処理○ ポケモンの選出画面○ 対戦中の画面○ 勝ち負け・ランクが表示されている画面○ etc● 「選出画面は ”Standing By” をテンプレートマッチングできれば取れる」「対戦画面は “Lv.50”をテンプレートで...」などを取りたい画面に対して、必要なテンプレートを地道に整備
Poke Battle Logger の概要● まず必要なもの● どのフレームに着目するか、を決めてそれを抽出する処理○ ポケモンの選出画面○ 対戦中の画面○ 勝ち負け・ランクが表示されている画面○ etc● 「選出画面は ”Standing By” をテンプレートマッチングできれば取れる」「対戦画面は “Lv.50”をテンプレートで...」などを取りたい画面に対して地道に整備する
Poke Battle Logger: 6vs6 の画面からのポケモン識別
Poke Battle Logger: 6vs6 の画面からのポケモン識別TemplateMatchingFine-tunedSwinTransformer🤗
Poke Battle Logger: 6vs6 の画面からのポケモン識別TemplateMatchingFine-tunedSwinTransformer🤗Microsoft が開発した Transformer を画像系へ応用したモデルの一つ細かいウィンドウに区切った後に Transformer に通し、それをマージする今回は事前に集めたポケモン画像(400枚)を使ってこれを fine-tuning したSwin Transformer
Poke Battle Logger: 6vs6 の画面からのポケモン識別Fine-tunedSwinTransformer🤗TemplateMatching
実際に選んだ 3匹はなんだったのか
実際に選んだ 3匹はなんだったのかOCR(Tesseract)for 7 lang
実際に選んだ 3匹はなんだったのかOrthworm,ミミズズ,Ferdeter,Schlurm,꿈트렁,拖拖蚓,拖拖蚓OCR(Tesseract)for 7 lang
実際に選んだ 3匹はなんだったのか英語のOCRは日本語よりも簡単なので自分は英語を選択してプレイしていますOCR(Tesseract)for 7 lang
技術スタックなど● FastAPI + NextJS + ChakraUI● ユーザ認証: Auth0● DB: MySQL● 動画読み込みと諸々の関数: OpenCV
勝敗率先発率 勝率採用率 選出率シーズン6(5月)
勝敗率先発率 負け率遭遇率 選出率シーズン6(5月)
HOMEとの遭遇率比較(5月)
今後の展望(1/4)● 技の読み取り○ 英語ロムなら出来るが、この機能を実装すると日本語ロムが地獄になる(OCR精度の問題)○ しかし一番やりたいことでもある。なぜならこれをやらないとこのゲームの解析はいつまで経っても進捗しないから...
今後の展望(2/4)● 似ている試合」の検索○ ポケモンをベクトルで表現できれば、ある試合をベクトルで表現できて vector search ができる■ パーティ・3体の並び・行動順などから、ポケモンを word・並びを sentence に見立てて item2vec が学習できる○ ポケ徹のパーティ情報とかを抽出して学習したいが、スクレイピングしたくない...ので、自分でたくさん対戦してデータをためる(現在の保有試合数: 400くらい)
今後の展望(3/4)● 対戦中のスコア表示: (将棋みたいなやつ)○ とりあえず特徴量を使って計算するアプローチから始めたい。どんな特徴量が勝敗に寄与するのか?○ 現在得られているデータから何かしらの勝率を推測できるか
今後の展望(4/4)● 対戦中のスコア表示: (将棋みたいなやつ)○ とりあえず特徴量を使って計算するアプローチから始めたい。どんな特徴量が勝敗に寄与するのか?○ 現在得られているデータから何かしらの勝率を推測できるか友人内での private alpha テストが終わったらアプリケーションをインターネットに放流したいと思っています見かけたら「おっやっとるな」と思っていただけると嬉しいですThank You ForYour Attention!
引用元出典● 画像○ いらすとや https://www.irasutoya.com○ ポケモン図鑑 https://zukan.pokemon.co.jp○ ポケモン公式サイト ポケモンたちが宝石のように光り輝く「テラスタル」https://www.pokemon.co.jp/ex/sv/ja/features/220803_06/○ application 内で用いている sprites https://pokemondb.net/sprites○ Tessrract OCRhttps://commons.wikimedia.org/wiki/File:Tesseract_OCR_logo_%28Google%29.png● 論文○ Swin Transformer: Hierarchical Vision Transformer using ShiftedWindows https://arxiv.org/abs/2103.14030