PCゲーマーの悩みの種、cheater!いつもお世話になっているBattlefield Vでもチートだらけで、公式サーバーでは満足に遊べません。誰かが常に監視している個人サーバーじゃないと、まともに遊べない。BFV以外のゲームでも酷いことになっていますね。Apexとか。バトロワは好きじゃないので、あんまり知らないけども。
Twitterでは、なんでチート隔離しないんだ!チーター放置の無能運営!と騒がれます。アンチチートを開発しても、アンチチートを回避する方法がまた開発されるのでイタチごっこなのでしょう。
ふと、どんな研究が公開されているのかを調べてみたら、FPSゲーマーで画像処理ごりごりやってる自分にとっては興味深い論文が見つかりました!※オープンアクセスの論文なので誰でも読めます
- Robust Vision-Based Cheat Detection in Competitive Gaming (ACM on Computer Graphics and Interactive Technique, 2021)
- 2021年4月なので最新といえる研究。NVIDIAが絡んでいて、そこそこ名の通っているACMでの発表なので良さげな研究
以下、読み込んでいきます。アンチチートに焦点を当てているので、ビジョンの話でキモではないところはすっ飛ばしてたりします。
Contents
Robust Vision-Based Cheat Detection in Competitive Gaming (競技性の高いゲームにおける視覚ベースの堅牢なチート検出)
- Proceedings of the ACM on Computer Graphics and Interactive Techniques, April 2021
- ADITYA JONNALAGADDA (University of California, Santa Barbara), IURI FROSIO (NVIDIA), SETH SCHNEIDER (NVIDIA), MORGAN MCGUIRE (NVIDIA) JOOHWAN KIM (NVIDIA)
- 論文はこちら
どんな研究か
shooter gameの2つの主なチート、エイムアシストとvisual hackのうち、visual hackに焦点をあてた研究
ゲーム画面の1フレームを入力として、ディープラーニングでチート情報が含まれている可能性Pとその不確かさUを推定することで、チート検出を行う。(不確かさUにより、間違ってチートである検出することを防ぐ)画像Aは通常のゲーム画面、画像Bはチート情報が含まれたゲーム画面(敵の周りの四角とかだと思う)。AではP=0.0026%, 信頼度(1-U)=99.7%、画像BではP=99.995%, 信頼度=99.99%という結果が得られる。
GPUのバッファにあるレンダリングされたフレームをモニターに表示する前に処理するので、チートツールが干渉できないし、プライバシーに関する問題もない。
概要(アブスト翻訳)
anti-cheatの会社とゲーム会社は、オンラインゲームにおけるチートを防ぐことに失敗が続いている。この研究では、ゲームの最終的なフレームの状態からビジョンベースで不正を検知する新たな手法を提案する。2つのFPSゲームと3つのチートツールを使ってデータセットを作成し、DNN(ディープニューラルネット)検出器を学習・評価した。DNNで動作する様々なアーキテクチャの長所と短所を調査する。出力の信頼性を解析することで、検出の信頼性のなさを回避し、ネットワークが再トレーニングが必要かを知る。比較実験で、Interval Bound Propagation(IBP)を使用して、どのように潜在的な敵対攻撃にも強い検出器を構築するか(DNNを騙すための攻撃に対する堅牢さのことだと思われる)を示し、信頼性を見ることでIBPの効果を調べる。実験結果は、機械学習によるロバスト(堅牢:ノイズに強かったり、様々なシーンに対応可能だったり)で効果的なanti-cheatが実際に実行可能であり、オンラインゲームでの公正なプレイを保証するために使用できることを示している。
イントロ掻い摘み(一般的なゲーマーはここだけ読めば満足だと思う)
公式トーナメントでもチートの使用があるほどに、ゲームでのチート利用が増えている。様々なサイトで少額or無料でチートツールが配布されている。もし全プレイヤーのうち6%がチートプレイヤーであれば、5v5のCS:GOやValorantでは42.7%, 6v6のOverwatchでは49.4%のマッチでチートプレイヤーと遭遇することになる。
shooter gameのチートには主に2つある。1つはエイムアシスト(aimbotなど)で、[Alayed et al. 2013]などで機械学習によりチート検出する手法が研究されている。この研究では、もうひとつのvisual hack/wall hack/extra sensory perceptionについて焦点を当てており、これまであまり注目されてこなかった。
チート防止には主に3種類の方法がある
- game logの解析により人らしからぬ動きを検知
- チートツールは人らしい動きを加えて、検出を難しくしている
- ホストマシンのメモリを監視
- セキュリティとプライバシーの問題がある
- 第三者の監視による人力報告
- 労力がかかり過ぎだし間違いも多い
この研究では、visual hackに対する新しいvision-basedなチート検出方法を研究する。vision-baseの方法では、処理の最も最後に実行されるのでチートツールに影響されない、視覚的な結果になるので人間にとって結果の解釈が簡単という利点がある。
チート検出率が高くても、DNNの不確かさを見ることで、間違ってチートと検出することを防ぐ。(チート検出率が高いと誤検出も多いし、誤検出を小さくしようとするとチート検出率が低いというトレードオフの関係に通常はある)さらに、不確かさを用いることでチートツールが手法を変更してチート検出ツールのDNNの再トレーニングが必要になったことを検知する手法も提案する。比較実験によりInterval Bound Propagation(IBP)がDNNへの攻撃に対する堅牢さを持つことを示す。
アンチチートに関する先行研究
ホストマシンのメモリを調べて[Philbert 2018]特定の不正行為ソフトウェアの存在を検出することは、プライバシーの問題でダメ。ゲームログから、サーバーサイドでチート検出を行う手法はいくつか提案されている。
decision trees, naive Bayes, random forests, DNNs, or support vector machinesなどの機械学習で行う手法 [Galli et al. 2011][Kotkov et al. 2018]はいくつか提案されている。現在利用可能なanti-cheatシステムは、視覚的特徴に着目していない[Cox et al. 2019; FACEIT 2021;Punkbuster 2000; Wells 2020] [Islam et al. 2020]。例えば、Punkbusterr [Punkbuster 2000](参考wikipedia)はプレイヤーのマシンのメモリをスキャンし、HestiaNet[Wells 2020](HestiaNetの日本語参考文献)は機械学習でデータを解析し、VACNet[Cox et al. 2019](VACNetの日本語参考文献)はプレイヤーの行動や意思決定を解析する。
著者らの知る限り、プライバシー問題に焦点を当てて、レンダリングされたフレームを処理してanti-cheatを行う手法は存在しない。GPUのバッファーにあるレンダリングされたフレームを表示する前に処理するだけなので、プライバシーに関する点でも安全である。ローカルマシン内で検出を実行するならば、フレームを送信する必要もない。
データセット
ディープラーニングでは重要な、データセットについて。
2つのゲームでデータ収集を行った。(どのゲームかはGame1、Game2と表記されていてわからない)これらはプロのトーナメントもたくさん開催されているゲームであるが、不正行為を防ぐことに成功していない。
どのように同じ場面での通常プレイとチートプレイの2つのデータを収集するか
ゲームをプレイしてゲーム内の試合保存機能を利用する。記録されたマッチをリプレイするとき、ゲームエンジンが記録された情報を基に再レンダリングする。プレイ中と記録の再生中のレンダリングシステムは同じであるため、チートツールはゲームプレイ中と同様にリプレイに反応する。これを利用して、データセットに不正行為を追加する。
チートツールには、AimWare[Aimware 2014], Iniuria[iNIURIA 2021], Artemis[Skycheats 2021]を用いる。これらは実際に広く使われているので、実際のチートツールに対してトレーニングとテスト、評価を行うことができる。
どんなデータセットを作成したか
データセットは以下の表に示すように、3種類作成する。SaとSbを使うことで、同じゲームで使用される異なるチートツールに対する実験を行うことができるため、特定のチートツールで学習されたDNN検出器が別のチートツールに対応可能かを調べることができる。チートツールは一般的には1つのゲームに特化しているため、同じチートツールを異なるゲームに適応した場合は想定していない。
チート使用者の好みに応じて、チートツールやその設定が違う。最悪のケースでは、チートツール自体がDNNを騙そうと攻撃する。(DNN検出器は少しのノイズを加えると、人間が見ても違うようには見えないのに、全く違う推定をする場合があることが知られており、それを利用したDNNへの攻撃/防御について研究が進んでいる)データセットではそれに対応するように、Sb, Scではvisual hackの量(上表のcheateing software config)も制御した。
ネットワークについて
ネットワーク図がなくて言葉での説明のみだったので、わかりにくかった。合ってるか不明。
入力はフル解像度、1080×1920ピクセル、3 RGB のフレームを用いる。DNNでの処理としては重いが、不正行為の詳細がDNNに渡されることを保証するにはフル解像度が必要。
まず4層のconvolutionがあり、そこからglobal head, local headに派生する。
global headはvisual hackが使われているかの確率を出力し、全結合層とsoftmax層からなる。global headは、以下の式を最小化することで学習される。
local headは、1×1のフィルターでlogsig[Pytorch 2019]のactivationをもつconvolution1層で構成される。出力は最初の図(以下に再掲)に示すように、ピクセルごとにチートの疑いを示す確率を表す(図の左上の黄色い四角)
global detectorは、細かい情報は考えずに、そのシーンが不正行為であるかだけに着目している。一方で、local detectorは局所的な不正行為の特徴に注意を向けている。そのため、local headからの勾配の伝播が暗黙的にatenntion mechanismとして機能して、cheat/non-cheatのクラス分類において、シーンに存在する視覚的なvisual hackの特徴に焦点を当てるように促すことを期待している。
さらに、local detectorの出力は視覚的にフレーム内のhackを識別することを容易にするような出力であるため、説明可能性の点で優れている。global detectorは、Grad-CamなどのDNNがどこを見ているか視覚化する手法に頼らないと、このような空間的な解釈は出来ない。一般的にGrad-Camなどの手法は時間がかかり、ノイズが多くて解釈も困難である。
local headの学習は、入力にはchat/non-cheatのラベルしかなく、画像内のどの位置に不正情報があるかがわからないため、学習が不可能であるように見えるがその方法を発見した。local detectorには、どの局所領域に不正情報が含まれるかの情報はないが、不正行為を含むフレームではあるピクセルが不正行為の情報を表す場所である確率は50%(不正の場所であるかそうでないかの2択)であるが、不正行為を含まないフレームでは不正行為を含む可能性は低い(間違っていないければすべてのピクセルは確実に不正行為を含まない)。
local headは以下の式を最小化することで学習される。
ネットワーク全体では、global head/local headのlossを組み合わせて以下の損失関数に従う。
ネットワークの信頼性(再学習必要性の検出とチート誤検出への対応)
日々出てくる新しいツールにDNNを適用するには、新しい条件を考慮してDNNを再学習する必要がある。この手法のネットワークサイズは小さく、トレーニング時間が再学習の大きな障害になることはない。しかし、自動的にDNNが再学習必要かどうかを検出することは、重要になると考えられる。この問題に対処するために、信頼度分析を提案する。DNNの平均信頼度が低い場合には、入力データが学習データと違うものになっていることを説明できるため、再学習が必要なことを検出できる。また、この信頼度をチートの誤検出に使うことも提案する。
Dropoutを用いたネットワークの信頼度
Dropoutを使うことで、ノイズが存在する場合でも信頼度が高い場合はネットワークの出力はあまり変化せず、逆もまた同様であることから、DNNの信頼度を推定することができる[Michelmore et al. 2018]。
ネットワークの信頼度に基づいた不確かさ
(この後のチート誤検出につながる大事なところだと思うけど、いまいち理解しきれていない(´・ω・`))
DNNの出力 {𝑙0,𝑙1}(?)から以下のようにe, αを定義する
ここから、berief(信念)および不確かさuを次のように定義する
これにより、sofmax層から出力される確率と信念が明確につながる。不確かさuは、この場合はクラス分類の不確かである確率を意味する。またΣbi + u = 1 である。
DNN検出器の学習は、[Sensoy et al., 2018]で紹介されているuncertainty loss(不確かさ損失)を最小にするように働く。詳細は [Sensoy et al., 2018] を読むと良い(読んでない)。ここで定義されているuncertainty lossをUL_globalと呼ぶ。
UL_globalを用いる場合、いくつかの理由で上述のCE_localはよくないため、代わりにMSEを用いる。
最終的に不確かさを考慮したDNN検出器の損失関数は、以下の式に従う。
チートの誤検出の回避
信頼性の推定をせずにそのままDNNの出力を用いた場合、不正行為をしているフレームの約3分の1がチートとして正しく認定される(434 TP + 1056FN = に対する434TP)が、96 FPは誤って不正行為として分類されてしまう。(下記表の1行目)Dropoutを用いたネットワークの信頼度(Confident/Non-confiden, Variation Ratio), ネットワークの信頼度に基づいた不確かさ(MES_combined/UL_combined)を用いることで、誤ってチートと認定する(FP)を劇的に減らしている(下記表の4行目confident)。
再訓練の必要性の検出
再検出の必要性の検出のために、Likelihood Ratio(LR)を導入する。
LRは常に1以上であり、サンプルがどのくらい支配クラスに属するか(?)を表しており、上記のeやuと密接に関連している。DNNの信頼性が高いとLRも高いことが期待され、性能が低下した場合にはLRも低下する。
学習時に、positive, negative, allの3つに対してLRを計算する。運用時には、この3つのLRのうち、1つでも学習時に測定したLRよりも大幅に低下した場合にDNNの再学習が必要とみなす。
以下の表に、実験結果を示す。学習データ(=ゲームの違いやチートツールの違い)が違うと性能(sensitivity, precision, accuracy)が大きく下がっているが、Re-trainのフラグは正常に立っている。
敵対的攻撃
入力にノイズを載せたときに、どれくらい性能が変わるかを検証して、良い感じということを言っている。
今後、このようなanti-cheatの手法が搭載されるようになったら、cheat tool側でこのような攻撃方法(アンチチート回避方法)が容易に想像できるが、それにもそれなりに強い。
(詳細省略)
おわり
チート検出の最新手法について知ることができました。ビジョンベースでの検出がいまだにあまりされてないのは意外でした。(企業が隠してるだけで、実はしてるのかも?)
おわり!
No responses yet