Slide 1

Slide 1 text

機械学習で ポケモン対戦動画を解析する Poke Battle Logger 2023/07/14 リモポケ学会 fufufukakaka(@fukkaa1225)

Slide 2

Slide 2 text

自己紹介 ● fufufukakaka, fu3ka3 (ふか) ● 機械学習エンジニア ○ 自然言語処理・推薦をはじめとして全般 ● ポケモン歴 ○ 赤緑からDP ○ XYから復帰して対戦もちょっとたしなむように(1シーズンだけ やる程度) ○ SVは継続して対戦を楽しめている。レートは1700弱

Slide 3

Slide 3 text

アジェンダ ● ポケモンのランクマッチについて ● Poke_Battle_Logger: なぜ対戦動画を解析したいのか ● Poke_Battle_Logger を構成するコンポーネント ● Web App の紹介 ● 得られたデータからの分析結果 ○ 勝敗率 ○ HOME の Stats とどれくらい差があるのか ● 今後の展望

Slide 4

Slide 4 text

アジェンダ ● ポケモンのランクマッチについて ● Poke_Battle_Logger: なぜ対戦動画を解析したいのか ● Poke_Battle_Logger を構成するコンポーネント ● Web App の紹介 ● 得られたデータからの分析結果 ○ 勝敗率 ○ HOME の Stats とどれくらい差があるのか ● 今後の展望

Slide 5

Slide 5 text

ポケモンのランクマッチ 知っている方・やっている方 🙋🙋🙋

Slide 6

Slide 6 text

ポケモンの対戦 → 2人同時手番非対称情報ゲーム

Slide 7

Slide 7 text

ゲーム理論的な観点から見るポケモン対戦 ● 2人 → シングルなら大体2人 ● 同時手番 → 2人とも同時に次の手を選択する ● 非対称情報 → 相手の技構成は見えない。相手の努力値(ス テータス振り)や持ち物も見えない。 ● かつ、扱えるキャラ(1000体)・技の数も山ほどある ● つまり非常に理論的解析が難しいゲーム ○ 囲碁・将棋よりも探索空間は広い

Slide 8

Slide 8 text

ポケモン対戦: 例 VS

Slide 9

Slide 9 text

ポケモン対戦: 例 VS 持ち物: こだわり鉢巻 AS252B4、意地っ張り つららおとし 聖なる剣 不意打ち 噛み砕く 持ち物: ??? 努力値・性格: ??? ??? ??? ??? ??? 氷・悪

Slide 10

Slide 10 text

ポケモン対戦: 例(同速の場合) 自分\相手 つらら おとし せいなるつ るぎ ふいうち かみくだく つらら おとし (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)

Slide 11

Slide 11 text

ポケモン対戦: テラスタル ● SV からの要素 ● 対戦で一匹にだけ使える ● タイプを事前に決めておいたタイプに変更 できる ○ 18タイプどれにでも変更できる ポケモン公式サイト ポケモンたちが宝石のように光り輝く「テラスタル」 https://www.pokemon.co.jp/ex/sv/ja/features/220803_06/

Slide 12

Slide 12 text

ポケモン対戦: 例(こちらが素早さ が上で、かつテラスタルがお互い 残っている場合) 2パターンのテラスタルの み考察する 1. ゴースト 2. フェアリー 自分はゴーストにテラスで きるとする

Slide 13

Slide 13 text

ポケモン対戦: 例(こちらが素早さ が上で、かつテラスタルがお互い 残っている場合) 自分\相手 ゴーストテラス (確率0.45) フェアリー テラス (確率0.45) テラスしない (確率0.1) ゴースト テラス ? ? ? テラス しない ? ? せいなるつるぎ\ ふいうち 見積もった確率を元に 相手のテラスに対する混 合戦略を求めます

Slide 14

Slide 14 text

1vs1 の解析で既にパンクしそう

Slide 15

Slide 15 text

ポケモン対戦 ● 【悲報】ゲーム理論的な解析解を求めるのは不可能

Slide 16

Slide 16 text

ポケモン対戦 ● 【悲報】ゲーム理論的な解析解を求めるのはほぼ不可能 ● 解析できたとしても、1vs1の対面を突き詰めることしかできない

Slide 17

Slide 17 text

ポケモン対戦 ● 【悲報】ゲーム理論的な解析解を求めるのはほぼ不可能 ● 解析できたとしても、1vs1の対面を突き詰めることしかできない ● 他にも解析したい場面↓ ○ 3匹の選出順番 ○ テラスタルタイミング ○ 交代 ○ etc

Slide 18

Slide 18 text

ポケモン対戦 ● 【悲報】ゲーム理論的な解析解を求めるのはほぼ不可能 ● 解析できたとしても、1vs1の対面を突き詰めることしかできない ● 他にも解析したい場面↓ ○ 3匹の選出順番 ○ テラスタルタイミング ○ 交代 ○ etc → データを集めて立ち向かう

Slide 19

Slide 19 text

対戦を記録して振り返りたい → 動画を撮ろう AVerMedia 2Plus を使っています avermedia 公式サイト https://www.avermedia.co.jp/product-detail/GC513

Slide 20

Slide 20 text

No content

Slide 21

Slide 21 text

Slide 22

Slide 22 text

動画を見返すよりも 効率よく振り返りたい 勝った試合だけは 何度も見ます

Slide 23

Slide 23 text

Poke Battle 📹 Logger

Slide 24

Slide 24 text

Poke Battle Logger の概要

Slide 25

Slide 25 text

Poke Battle Logger の概要 ● 動画から対戦の統計を取り出す動画解析バッチ ○ 6vs6 の見せ合いでどんなポケモンを出したか ○ 実際に選んだ 3匹はなんだったのか ○ 先発は誰だったのか ○ どのポケモン同士が対面したのか ○ どのポケモンで相手のポケモンを倒した(倒された)のか

Slide 26

Slide 26 text

Poke Battle Logger の概要 ● 動画から対戦の統計を取り出す動画解析バッチ ○ 6vs6 の見せ合いでどんなポケモンを出したか ○ 実際に選んだ 3匹はなんだったのか ○ 先発は誰だったのか ○ どのポケモン同士が対面したのか ○ どのポケモンで相手のポケモンを倒した(倒された)のか ● それらを集計・表示する web application の開発

Slide 27

Slide 27 text

アジェンダ ● ポケモンのランクマッチについて ● Poke_Battle_Logger: なぜ対戦動画を解析したいのか ● Poke_Battle_Logger を構成するコンポーネント ● Web App の紹介 ● 得られたデータからの分析結果 ○ 勝敗率 ○ HOME の Stats とどれくらい差があるのか ● 今後の展望

Slide 28

Slide 28 text

Poke Battle Logger のコンポーネント 1. フレーム抽出 2. 6vs6 の画面からのポケモン識別 3. 対戦中の画面からのポケモン名識別

Slide 29

Slide 29 text

Poke Battle Logger: フレーム抽出 ● どのフレームに着目するか、を決めてそれを抽出する処理 ○ ポケモンの選出画面 ○ 対戦中の画面 ○ 勝ち負け・ランクが表示されている画面 ○ etc

Slide 30

Slide 30 text

Poke Battle Logger: フレーム抽出 ● どのフレームに着目するか、を決めてそれを抽出する処理 ○ ポケモンの選出画面 ○ 対戦中の画面 ○ 勝ち負け・ランクが表示されている画面 ○ etc ● 「選出画面は ”Standing By” をテンプレートマッチングできれば取 れる」「対戦画面は “Lv.50”をテンプレートで...」などを取りたい画面 に対して、必要なテンプレートを地道に整備

Slide 31

Slide 31 text

Poke Battle Logger の概要 ● まず必要なもの ● どのフレームに着目するか、を決めてそれを抽出する処理 ○ ポケモンの選出画面 ○ 対戦中の画面 ○ 勝ち負け・ランクが表示されている画面 ○ etc ● 「選出画面は ”Standing By” をテンプレートマッチングできれば取れる」「対戦画面 は “Lv.50”をテンプレートで...」などを取りたい画面に対して地道に整備する

Slide 32

Slide 32 text

Poke Battle Logger: 6vs6 の画面からのポケモン識別

Slide 33

Slide 33 text

Poke Battle Logger: 6vs6 の画面からのポケモン識別

Slide 34

Slide 34 text

Poke Battle Logger: 6vs6 の画面からのポケモン識別 Template Matching Fine-tuned Swin Transformer 🤗

Slide 35

Slide 35 text

Poke Battle Logger: 6vs6 の画面からのポケモン識別 Template Matching Fine-tuned Swin Transformer 🤗 Microsoft が開発した Transformer を画像系へ応用したモデルの一つ 細かいウィンドウに区切った後に Transformer に通し、それをマージする 今回は事前に集めたポケモン画像(400枚)を使ってこれを fine-tuning した Swin Transformer

Slide 36

Slide 36 text

Poke Battle Logger: 6vs6 の画面からのポケモン識別 Fine-tuned Swin Transformer 🤗 Template Matching

Slide 37

Slide 37 text

実際に選んだ 3匹はなんだったのか

Slide 38

Slide 38 text

実際に選んだ 3匹はなんだったのか

Slide 39

Slide 39 text

実際に選んだ 3匹はなんだったのか

Slide 40

Slide 40 text

実際に選んだ 3匹はなんだったのか OCR (Tesseract) for 7 lang

Slide 41

Slide 41 text

実際に選んだ 3匹はなんだったのか Orthworm,ミミズズ,Ferdeter,Schlurm, 꿈트렁,拖拖蚓,拖拖蚓 OCR (Tesseract) for 7 lang

Slide 42

Slide 42 text

実際に選んだ 3匹はなんだったのか 英語のOCRは日本語よりも簡単なので 自分は英語を選択してプレイしています OCR (Tesseract) for 7 lang

Slide 43

Slide 43 text

No content

Slide 44

Slide 44 text

アジェンダ ● ポケモンのランクマッチについて ● Poke_Battle_Logger: なぜ対戦動画を解析したいのか ● Poke_Battle_Logger を構成するコンポーネント ● Web App の紹介 ● 得られたデータからの分析結果 ○ 勝敗率 ○ HOME の Stats とどれくらい差があるのか ● 今後の展望

Slide 45

Slide 45 text

No content

Slide 46

Slide 46 text

No content

Slide 47

Slide 47 text

No content

Slide 48

Slide 48 text

No content

Slide 49

Slide 49 text

No content

Slide 50

Slide 50 text

No content

Slide 51

Slide 51 text

No content

Slide 52

Slide 52 text

技術スタックなど ● FastAPI + NextJS + ChakraUI ● ユーザ認証: Auth0 ● DB: MySQL ● 動画読み込みと諸々の関数: OpenCV

Slide 53

Slide 53 text

アジェンダ ● ポケモンのランクマッチについて ● Poke_Battle_Logger: なぜ対戦動画を解析したいのか ● Poke_Battle_Logger を構成するコンポーネント ● Web App の紹介 ● 得られたデータからの分析結果 ○ 勝敗率 ○ HOME の Stats とどれくらい差があるのか ● 今後の展望

Slide 54

Slide 54 text

勝敗率 先発率 勝率 採用率 選出率 シーズン6 (5月)

Slide 55

Slide 55 text

勝敗率 先発率 負け率 遭遇率 選出率 シーズン6 (5月)

Slide 56

Slide 56 text

HOMEとの 遭遇率比較 (5月)

Slide 57

Slide 57 text

HOMEとの 遭遇率比較 (5月)

Slide 58

Slide 58 text

アジェンダ ● ポケモンのランクマッチについて ● Poke_Battle_Logger: なぜ対戦動画を解析したいのか ● Poke_Battle_Logger を構成するコンポーネント ● Web App の紹介 ● 得られたデータからの分析結果 ○ 勝敗率 ○ HOME の Stats とどれくらい差があるのか ● 今後の展望

Slide 59

Slide 59 text

今後の展望(1/4) ● 技の読み取り ○ 英語ロムなら出来るが、この機能を実装すると日本語ロムが地 獄になる(OCR精度の問題) ○ しかし一番やりたいことでもある。なぜならこれをやらないとこの ゲームの解析はいつまで経っても進捗しないから...

Slide 60

Slide 60 text

今後の展望(2/4) ● 似ている試合」の検索 ○ ポケモンをベクトルで表現できれば、ある試合をベクトルで表現 できて vector search ができる ■ パーティ・3体の並び・行動順などから、ポケモンを word・並 びを sentence に見立てて item2vec が学習できる ○ ポケ徹のパーティ情報とかを抽出して学習したいが、スクレイピ ングしたくない...ので、自分でたくさん対戦してデータをためる (現在の保有試合数: 400くらい)

Slide 61

Slide 61 text

今後の展望(3/4) ● 対戦中のスコア表示: (将棋みたいなやつ) ○ とりあえず特徴量を使って計算するアプローチから始めたい。ど んな特徴量が勝敗に寄与するのか? ○ 現在得られているデータから何かしらの勝率を推測できるか

Slide 62

Slide 62 text

今後の展望(4/4) ● 対戦中のスコア表示: (将棋みたいなやつ) ○ とりあえず特徴量を使って計算するアプローチから始めたい。ど んな特徴量が勝敗に寄与するのか? ○ 現在得られているデータから何かしらの勝率を推測できるか 友人内での private alpha テストが終わったらアプリケーションをイン ターネットに放流したいと思っています 見かけたら「おっやっとるな」と思っていただけると嬉しいです Thank You For Your Attention!

Slide 63

Slide 63 text

引用元出典 ● 画像 ○ いらすとや 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 OCR https://commons.wikimedia.org/wiki/File:Tesseract_OCR_logo_%28Goog le%29.png ● 論文 ○ Swin Transformer: Hierarchical Vision Transformer using Shifted Windows https://arxiv.org/abs/2103.14030