ライザのアトリエでリアルタイム物体検出してみる

2022年11月20日

はじめに

きっかけ

最近、Youtubeでゲームプレイを垂れ流す配信をしていて、何か面白い配信が出来ないかなぁと日々考えていたところ、友人がsteam版の「ライザのアトリエ 〜常闇の女王と秘密の隠れ家〜」をプレゼントしてくれました。

すごいですよね。何がとは言わないけど。大きいというかボリューミーというか。

少しプレイしてふと思いました。私はどれくらいいやらしい目で見ているんだろうかと。
見てないはずなんですけどね。絶対に見てないとは言い切れないですよね。

そこで、私が見ていそうなところを物体検出して、視点情報を取り込んでプレイしてみようと思ったわけです。
ついでですが、こちらのチャンネルで配信してます。見に来てくれたらうれしいです。

物体検出のターゲット

直接的な表現は避けるべきですね。所謂、胸筋というか、ボリューミーな感じのところです。
ライザのアトリエには魅力的なキャラクター達が複数登場します。その中でメインキャラクターっぽい以下のキャラクターを検出のターゲットとします。

・ライザ
主人公ですね。いかにも主人公!って感じのすごい感じです。
ライザは「もも」も頻繁に話題に上がりますので追加で検出します。

・ライザのお母さん
主人公のお母さんです。登場機会は少な目ですが、一応ターゲットにしました。

・クラウディア
少し控えめな印象を受けるキャラクターです。とても可憐ですね。

・リラ
爆発力というか画面制圧力が色んな意味ですごいです。強い。

物体検出

使用した物体検出モデル

今回はyolov5を使用しました。
投稿時点でyolov7も公開されていたので試しましたが、検出率は悪くなかったですが誤検知が多いように感じました。(私の用意した学習データが悪い説があります。)

2020年6月に公開されて日が経ち、使用方法等はネット上を探せばたくさん出てくるので今回は割愛します。

学習データの取得

物体検出の肝となる学習データの用意です。
実際のゲーム画面を録画して、学習データを用意します。

GeForce Experienceの録画機能を使用してプレイ画面を録画しました。
出来上がった動画を1秒ごとにフレームを切り出して学習データの元にします。

ゲーム内でフォトモード等があれば使用するのもアリだと思います。
様々な角度、大きさの学習データを用意できれば間違いないです。

アノテーション

アノテーションには、labelImgを使用します。非常に使いやすいアノテーションツールです。

アノテーションはとにかく根気のいる作業でした。枠で囲ってラベルを付ける枠で囲ってラベルを付ける枠で囲ってラベルを付ける枠枠枠ラベルラベルワクワクワクワク!!!
私がもし閻魔様なら地獄におちた後の罰としてアノテーションをさせます。それぐらいには辛いです。

一気にやるのは精神衛生上よくないので1日100枚ずつとか決めた枚数分やることをおススメします。

余談ですが、もし初回のアノテーションを終えることができたら、推論結果を用いてアノテーション自体を自動化することをおススメします。そうすることで認識できているものと認識できていないものが判別できるためより優れた結果につながる気がします。(気がするだけかもしれないです)

学習

厳しいアノテーション地獄を終えたらようやく学習に入ります。
学習自体はただひたすら良い結果になるよう祈ってGPUのぬくもりを感じながら待つ作業です。

ただ通常の学習と違い、ゲーム画面の学習においては、あえて過学習させることが大事ではないかと思います。
汎用性を無くして特化させる方が誤検知の心配が減ってやりたいことができるような気がします。
(使用用途にもよります)

過学習させるべく、通常よりも長く学習をさせる必要があるので辛抱強く待ちましょう。

もし学習の際、PCへの負荷やPCスペックが気になるようでしたら、Google Colaboratory(通称Colab)を使用するのもありです。ただ無料版はいろいろと制約があるのでローカル環境でできるのが一番だと思います。仮想通貨マイニングしているようなものだと思いましょう。

推論

学習が済んだら、ついにお試しです。
適当なゲーム録画を使用して推論結果を確認しましょう。

思うような結果じゃなかった場合は、もう一度アノテーションで遊べるドン!!!!

視点情報の利用

機械学習の話ばかりでしたが、本題はここからです。
私は全く胸とかそういういやらしい目で見ないんですが、本人が見てないというものほど信用なりません。ここは機械に平等に判定してもらうべきです。

使用した機材

今回は比較的安価なtobii eye tracker 5を使用しました。
実際使ってみるとすごいです。小さなデバイスで視線を完全にトレースしています。

今回のケース以外でも視線情報を使って色々面白いことができそうです。
普段、自分の視線なんて気にしてなかったのでいい買い物でした。

視線情報の取り込みの注意点

あとはPythonへ視線情報を取り込めば完成だーっと思っていたら実際のところ、ここで詰まりました。
なんとtobii eye tracker 5ではPythonへの視線情報の取得ができないようなのです。
というよりはtobii eye tracker 5はTobii Pro SDKの互換性がないのでStream Engine SDKを使用してC#かC++でやってね!ということでした。
(ちなみにStream Engine SDKは公式に使用許可申請をして許可が下りないと使えません)

tobii eye tracker 5の購入を検討している方は気を付けてください。

実際に試してみる

あとは推論結果と視線情報を用いて、おりゃ!っとやります。

Youtube配信

参考までに配信動画を載せておきます。

まとめ

見とるやんけ!!!