8

コールオブデューティーのゲームプレイのビデオで人物を見つけることができるプログラムを作成しようとしています。このビデオから、人物が含まれている、または含まれていない、約2200の個別の画像のリストをまとめました。次に、2セットの画像の違いを伝えるためにニューラルネットワークをトレーニングしようとしました。

次に、各ビデオフレームを数百のグリッド長方形に分割し、それぞれをANNで確認します。長方形は、グリッドの長方形の間にある図形をキャプチャしようと重なっていますが、これはうまく機能していないようです。だから私はいくつかの質問があります:

  1. ニューラルネットワークは進むべき道ですか?他の機械学習アルゴリズムと比較して非常に高速であることを読みました。最終的には、これをリアルタイムのビデオで使用する予定であり、速度は非常に重要です。

  2. ANNでテストするために画像フレーム内の図を検索するための最良の方法は何ですか?自分のやり方があまり良くない気がします。確かにそれほど速くも正確でもありません。画像960x540のフレームあたり約1秒かかり、精度が低くなります。

  3. 私が抱えていたもう1つの問題は、ANNへの入力として使用する特徴ベクトルを構築するための最良の方法です。現在、すべての入力画像を25 x 50ピクセルに縮小し、すべてのピクセルの強度を含む特徴ベクトルを作成しています。これは非常に大きなベクトルです(1250フロート)。特徴ベクトルを構築するためのより良い方法は何ですか?

私がここで行っていることの詳細については、CodAI:ComputerVisionをご覧ください。

編集:もう少し詳しく知りたいのですが。特徴を計算するための最良の方法は何ですか。私は多くの異なる位置で人間の姿を認識できる必要があります。直立、しゃがみ、傾向の違いを認識するために、個別の分類子を作成する必要がありますか?

4

4 に答える 4

7

この問題は、通常のANNには難しすぎます。

ANNは、多くの空間変換を伴う画像(つまり、さまざまな位置にいる人物)にはあまり適していません。平行移動、回転、スケーリングなどをうまく一般化できないため、可能な位置をそれぞれ個別に効果的に学習する必要があります。それを機能させることができたとしても、おそらく数十億のトレーニング画像と数年のトレーニング時間が必要になります。

あなたの最善の策は、おそらく次のいずれかを使用することです。

于 2011-01-20T19:03:14.283 に答える
7
  • 特徴ベクトルとして生の強度を使用することは機能しません1。照明などによる変動が多すぎます。
  • 最初のステップとして見るべき良い機能はHOGでしょう。opencv 2.2には、高速な検出器のGPU(cuda)バージョンがあります。
  • ニューラルネットワークはおそらく最善の方法ではありません。通常、分類器2としてSVMまたはブースティングを使用します。ニューラルネットワークが十分に強力ではないということではなく、トレーニング/パラメータを正しく取得するのが難しいということです。極小値などで立ち往生することが多すぎます。
  • 傾向のある/しゃがんだ/立っている人物の場合、間違いなく異なる分類子が必要であり、それらを混合モデルで使用します。
  • あなたは「最善の方法」を求めました-人間の検出は、はるかに解決された問題ではないので、誰も最善の方法を知りません。上記のものはかなりうまく機能することが知られています。
  • 良い結果が必要な場合は、ターゲットが特定のものであることを悪用する必要があります。つまり、コールオブデューティーで人間を検出しようとしていることを悪用します。確認する必要のある位置の範囲は画像全体ではなく、図は地面の近くにあります。これにより、検索を高速化し、誤検出を減らすことができます。可能であれば、レンダリングの詳細を減らします。詳細が少ないほど、バリエーションが少なくなり、学習の問題が簡単になります。

脚注:
1ニトピッカーの場合:非常に複雑な分類子なし。
2ブーストされた分類器のカスケードを使用して、検出率をあまり上げずに速度を上げることもできます。

于 2011-01-24T15:35:28.723 に答える
1

より優れた機能は、より優れた学習アルゴリズムに勝ちます。特徴選択の基本原則は、最良の特徴がクラス間分散を最大化し、クラス内分散を最小化することです。あなたの場合、機能は人物を含む画像と含まない画像の違いを強調し、同じクラスの画像の違いを強調しないようにする必要があります。

たとえば、人物の輪郭を見つけて、その輪郭に基づいて特徴を計算することができます。OpenCVには、輪郭の特徴を計算するための関数がすでにいくつかあります。モーメントGetCentralMomentNormalizedCentralMomentなどです。問題は、人物を背景からセグメント化して、輪郭を見つける方法です。テクスチャセグメンテーションを使用するなど、この問題に取り組む方法はいくつかあります。

セグメンテーションの問題を解決し、妥当な特徴を計算できれば、学習アルゴリズムの選択はそれほど重要ではありません。しかし、いくつか試してみて、何が最も効果的かを見てみませんか?OpenCVドキュメントの機械学習セクションをご覧ください。

于 2011-01-20T20:03:19.803 に答える
0

あなたが何を達成しようとしているのかははっきりしていませんが、間違ったアプローチを使用してリアルタイムのプレーヤー追跡(または同様の何か)を行おうとしているようです。人身売買は、実際の人間の写真のデジタル画像/ビデオ処理を通じて行われることが期待されるものです。

目的によっては、プレーヤーの追跡は、CPUに非常に負荷がかかる可能性があるため、画像処理では実行しないでください。ゲーム内のプレーヤーモデルの追跡は、通常、アプリケーションの不正行為に使用される手法であり、ゲームプロセスにコードを挿入するか、ゲームエンジンとグラフィックスドライバーの仲介役になる必要があります。ゲームクライアントは他のプレーヤーがどこにいるかを常に知っているので(見えなくても)、プロセスメモリでプレーヤーのX、Y、Z座標を検索したり、グラフィックレンダリング呼び出しをインターセプトしてプレーヤーの場所を検索したりできます。モデルは画面にレンダリングされます(OpenGL / DirectXとデバッグスキルの基本的な理解が必要なため、少し注意が必要です)。

StackOverflowでそのようなテクニックを詳しく説明してもよいかどうかはわかりませんが、このトピックはGameDeceptionのようないくつかのリバースエンジニアリング/不正行為のフォーラムで主に議論されていると言えます。

于 2011-01-24T15:16:39.180 に答える