物体検出AIポケモン図鑑~AI-Pokedex~
はじめに
最近,物体認識のAIなどがエッジデバイスやアプリとかで流行っていますよね.また,ディープラーニングのフレームワークも豊富で簡単かつ,手軽に実装することができます.しかし,手書き文字やタイタニックや花のデータセットなどを扱ってもちっとも面白くありませんよね.そこで,最近流行りのケットモンスター スカーレット・バイオレットと絡めることで楽しく物体認識のディープラーニングに触れていきたいと思います.
また,ポケモンのデータセットは調べたところ見つからなかったので,自分でデータセットを構築しするところから初めて,アプリ化までを一括でやってみようと思います.
AI-Pokedex(AI ポケモン図鑑)
AI-Pokedex(AI ポケモン図鑑)とは最新の物体検出のモデルを活用して物体検出でポケモンを特定するアプリです.
ここで,AI-Pokedexを作成する上でのルールを設けました.
ルール1:ラベルは自身のポケモン図鑑記載の名前のみ
使用するクラスラベルについてのルールです.ネットなどで調べればケットモンスター スカーレット・バイオレットのポケモン一覧などが出てきますが,これは使用しません.
実施に自分がプレイしたゲームにて図鑑に登録されたポケモン(ゲームで名前が表示されたポケモン)のみクラスラベルを付けるようにします.
ただし,コライドンは除きます.名前が判明しているため例外とします.
ルール2:データセットは自身のプレイ動画のみ
データセット収集に関してのルールです.人のプレイ動画やネットに落ちている画像などは使用しない方向です.ただし,著しく精度が低下しどうしようもない場合につき,このルールは変更する可能性があります.
ルール3:テラスタルは別個体
テラスタル化の扱いについてです.例えばラルトスの場合,通常時のクラスは「ラルトス」ですが,テラスタル化した場合のクラスは「ラルトス.T」といった感じに別のラベルを付与します.この理由として通常時とテラスタル化した場合では見た目があまりに異なります,そのため,テラスタル化のデータを通常時と同じラベルにした場合,精度が落ちると考えたからです.
ただし,今回のポケモンの数は全部で400種類,全部がテラスタル化した場合も含めると800となってしまいますので,自身のGPUで学習できない可能性があります.その場合はテラスタル化のデータは除外するか,同じラベルにして対応するかもしれないです,
開発パイプライン
AI-Pokedexの開発パイプラインは下記の図のようにやっていきます.全体的にWindows11のDocker-compose
を用いて環境を構築していきます.Windows11からDocker
でもGPUが使えるなったので,Windows11でアノテーションや学習などを一括でやっていきます.
- 動画のキャプチャー:
プレイ動画をキャプチャボードを用いてキャプチャーします. - 画像の抽出:
プレイ動画をただ画像に変換したものだと大量のデータになってしまうため必要そうな画像だけを抽出します. - アノテーション:
学習したモデルを用いた自動アノテーション機能を活用してラベルを付与していきます. - データセット作成:
アノテーションしたデータをtrain/valにスプリットしてデータセットを作成します. - 学習:
データセットを用いて学習します.ここで学習したモデルは上記の自動アノテーション機能に活用されます.
動画キャプチャー
使用機材
使用ソフト
- Windows11
- OBS Studio
システム構成
システムは上記の機材/ソフトをこのように配置する.最終的なフォーマットはmp4
で出力する.これによって容量を押さえつつPython
で処理しやすいようにする.
データセット関係
データセットを生成するにあたり,下記の項目に分けて実施していきます.
- 画像抽出
- アノテーション
- データセットの生成
画像抽出
動画を分解して画像にします.しかし,ただ画像にするだけでは膨大な画像の枚数になってしまい,アノテーションするのに苦労します.そこで,変化の少ない画像は省きたいため画像の差分などを考慮し,劇的な変化が起こったフレームのみを抽出して保存するようにします.
アノテーション
アノテーションを一人ですべてこなすことは不可能なので,自動アノテーション機能が搭載されているlabel-studioを使っていきます.ただし,モデルは自身で用意する必要があります.
データセットの生成
label-studioをCOCO
フォーマットで生成すると若干のバグを含んでいるのでその修正とtrainとvalに分割します.
詳細な説明はこちら

随時追記予定
コメント