歩行者カウントアルゴリズム


12

現在、歩行者カウンタープロジェクトを開発しています(LinuxでOpenCV + QTを使用)。アプローチについての私の考えは次のとおりです。

  1. フレームをキャプチャする
  2. バックグラウンド減算を行う
  3. 明確なノイズ(侵食、拡張)
  4. BLOBの検索(cvBlobslib)-フォアグラウンドオブジェクト
  5. 各BLOBについて、ROIを設定し、これらのBLOBで歩行者(detectMultiScaleを使用したLBP)を検索します(パフォーマンス向上のため)
  6. 見つかった歩行者ごとに、ネストされた上半身検索を実行します(不明)(信頼性の向上)
  7. 同じ歩行者が連続するフレーム(3〜4フレーム)で見つかった場合-その領域をカムシフトとトラックに追加-歩行者としてマークする
  8. 次のフレームのBLOB検出からカムシフト追跡領域を除外する
  9. 歩行者が行のインクリメント数を超える場合

順調に進んでいるかどうかを確認したい。私のアプローチを改善する方法について何か提案はありますか?誰かが似たようなことに取り組んだ場合、この問題に関する有用なヒント、リソース(および批判)をいただければ幸いです。


5
質問を言い換えて、OpenCVパーツを省略したい場合があります。それが実際にある概念的な質問のように言います(歩行者のカウントと追跡のアルゴリズム)。
Geerten

2
あなたのアプローチは理にかなっているようですが、関連する学術文献を検索しましたか?それはあなたに最新技術のアイデアを与える必要があります。バックグラウンドの減算は難しい場合があり、環境の影響だけでなく影も問題になる可能性があります。
geometrikal

回答:


8

このアプローチには多くの問題があります。ここでの私自身の経験から、非常によく似たアプローチで歩行者カウントシステムを改善することから話しています。それどころか、正確で堅牢なシステムを構築するために克服しなければならない可能性があるハードルについて警告したいと思います。

まず、バックグラウンドの減算では、対象のオブジェクトが常に移動し、カウントに関心のないオブジェクトは完全に静止したままになると想定しています。確かにこれはあなたのシナリオの場合かもしれませんが、それでも非常に限定的な仮定です。また、背景の減算は照明の変化に非常に敏感であることがわかりました(geometrikalに同意します)。

環境が適切に制御されていると考えている場合でも、1 blob = 1 personあると仮定することに注意してください。人々が移動していないか、小さすぎたために、人々に対応するブロブが検出されないことが頻繁に起こりました。そのため、侵食またはいくつかのしきい値基準によって削除されました。すべてが機能するまでしきい値を調整する」トラップ。それは機能しません;))。また、1人のブロブが2人で一緒に歩いている場合や、1人で何らかの荷物を運んでいる場合もあります。または犬。だから、ブロブについて賢明な仮定をしないでください。

幸いなことに、人の検出に LBPを使用していることに言及しているので、上記の段落で間違いを犯さないという正しい道を進んでいると思います。ただし、特にLBPの有効性についてコメントすることはできません。また、HOG(勾配のヒストグラム)は、人を検出する最先端の方法であると読みました。「人の検出のための方向付けられた勾配のヒストグラム」を参照してください。

私の最後の不満は、カムシフトの使用に関連しています。カラーヒストグラムに基づいているため、トラッキングウィンドウが十分に大きく、オクルージョンや急激な変化がない限り、色で区別しやすい単一のオブジェクトをトラッキングする場合、それ自体でうまく機能します。しかし、すぐにあなたは非常によく似た色の記述を有していてもよく、これは複数のターゲットを追跡するために持っているようになりお互いに非常に近い移動を、あなたは単に何とかあなたが複数の仮説を維持することを可能にするアルゴリズムなしで行うことはできません。これは、パーティクルフィルターまたはMCMCDA(マルコフチェーンモンテカルロデータアソシエーション、マルチターゲットトラッキングのマルコフチェーンモンテカルロデータアソシエーションを参照)などのフレームワークです。)。複数のオブジェクトを追跡するときにMeanshiftを単独で使用した私の経験は、追跡では発生しないはずのすべてです。追跡の紛失、ターゲットの混乱、バックグラウンドでの固定など。結局、複数の人を数える心(あなたの目標は追跡しないことを数えるので「そうかもしれない」と言うので、追跡せずに数える巧妙なアプローチの可能性を完全に捨てません...)

私の最後のアドバイスは、与えられたアプローチできることはそれだけであり、より良いパフォーマンスを達成するためにはより洗練されたもの必要になるということです(したがって、この点でuser36624には同意しません)。これは、より強力な何かによってアルゴリズムの一部を変更したり、アーキテクチャを完全に変更したりすることを意味します。もちろん、あなたはどの派手なものがあなたにとって本当に役立つかを知る必要があります。原則的な方法で問題を解決しようとする出版物がありますが、他の人は単に特定のデータセットのアルゴリズムを考え出し、手元の問題にあまり適していない分類器を訓練することを期待しますが、いくつかのしきい値も調整します。人数カウント進行中の研究なので、物事が簡単に来るとは期待しないでください。あなたの能力をわずかに超えていることを学ぶ努力をしてください、そしてそれを何度も繰り返してください...

私は解決策を提供していないことを認め、代わりにあなたのアプローチの欠陥を指摘しただけです(これらはすべて私自身の経験から来ています)。インスピレーションについては、リアルタイム監視ビデオでの安定したマルチターゲット追跡など、最近の調査を読むことをお勧めします。幸運を!


9

あなたが求めているのは、あなたの歩行者アルゴリズムの実現可能性についてだと思います。

この種の問題には、2つの一般的な戦略があります。

  1. (下から上)各フレームで歩行者のみを検出する、純粋な検出問題と考えてください。それらを検出すると、a)フレーム内でそれらの数を数えるのはかなり簡単です。b)連続したフレームでそれらのいずれかを追跡することも簡単です。したがって、すべてを解決します。

  2. (上から下)アクション認識の問題と考えてください。連続したフレームのROIがそのアクションに従って歩行者であるかどうかを検出します。この問題を解決したら、検出と追跡の問題を同時に解決します。

ヒューリスティックアルゴリズムは最初のカテゴリにあります。私はあなたを落胆させたくありませんが、あなたは歩行者を検出する方法という重要なポイントを見逃すかもしれません。実際のデータは思ったよりも複雑になる可能性があるためです。たとえば、これが地下鉄のカメラの場合、そのフレームには歩行者がいっぱいである可能性があるため、背景を削除したり、塊を検出したりしてもまったく役に立ちません。この場合、顔検出アルゴリズムと顔認識アルゴリズムを使用して問題を解決する方が合理的です。これは、顔が見つかった場合は歩行者が見つかるからです。一方、歩行者の定義によっては、フレームに登場するすべての人が歩行者として扱われるべきではないかもしれません。この場合、行動認識アルゴリズム(2番目のカテゴリ)を使用するのが妥当かもしれません。ここでは、歩行者の行動に基づいて歩行者を明示的に定義できます。

私の経験に基づいたいくつかのヒントを以下に示します。

  1. あなたが知っていること、そして簡単に手に入れることができるものに固執します。何かに時間を費やさないでくださいが、あなたが持っていない多くのバックグラウンドが必要です。私を信じて、これらのアルゴリズムはすべて、ある場合には良いが、他のいくつかでは悪いでしょう。したがって、最初に行うことは、それがどれほど良いか悪いかに関係なく、何かを機能させることです。

  2. データの詳細を知ってから、メソッドを決定します。多くの場合、問題に関する一般的な説明では不十分です。

  3. アイデアを実証する場合は、MATLABを使用してプロトタイプを構築することをお勧めします。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.