[ディープラーニング] yolov5+deepsort がカウントと歩行者の再識別追跡を完了


序文

歩行者の再識別はコンピュータ ビジョンの基本的なタスクの 1 つであり、まず検出器 (ターゲットを検出する検出器) が必要で、次に検出されたターゲットが追跡装置 (追跡装置) に送信されて、歩行者の識別と追跡が完了します。同じターゲットです。
これに基づいて、このテクノロジーを次の用途に使用できます。
1. 単一カメラの交通量と人の流れの計算
2. カメラ追跡 (徘徊検出)
3. 複数のカメラをまたいだ追跡。
明らかに、タスク 3 はタスク 1 よりも難しく、タスク 2 はタスク 1 の続きであり、他のテクニックの導入が必要です。


1. 知識体系

1.1 前提条件

DeepSort の前身はソート アルゴリズムであり、ソート アルゴリズムの中核となるのはカルマン フィルター アルゴリズムとハンガリアン アルゴリズムです。
カルマン フィルター アルゴリズムの機能: 次の瞬間の動き変数を予測するのは現在の一連の動き変数ですが、最初の検出結果はカルマン フィルターの動き変数を初期化するために使用されます。
ハンガリーアルゴリズム: 割り当て問題を解決するには、カルマンによって予測されたフレームに検出フレームのグループを割り当て、カルマンによって予測されたフレームに、追跡の効果を達成するためにそれ自体に最もよく一致する検出フレームを見つけさせます。本質は、予測フレームのマッチング問題を解決するために状態行列を維持することです。

1.2 ソートのワークフロー

ここに画像の説明を挿入

検出は、オブジェクトによって検出されるボックスです。Tracks はトラック情報です。
アルゴリズム全体のワークフローは次のとおりです。
(1) 最初のフレームの検出結果から、対応するトラックを作成します。カルマン フィルターの動き変数を初期化し、カルマン フィルターを通じて対応するフレームを予測します。

(2) フレームターゲット検出のフレームと、前のフレームで Tracks によって予測されたフレームに対して IOU マッチングを実行し、IOU マッチング結果を通じてコスト行列 (コスト行列、計算方法は 1-IOU) を計算します。

(3) (2) で取得したすべてのコスト行列をハンガリアン アルゴリズムの入力として使用し、線形マッチング結果を取得します。この時点で 3 つの結果が得られます。1 つ目はトラックの不一致 (Unmatched Tracks) です。不一致のトラックは直接削除します。トラック、2 番目は検出の不一致 (不一致検出)、そのような検出を新しいトラック (新しいトラック) として初期化します、3 番目は検出フレームと予測フレームのペアリングの成功で、前のフレームと予測フレームの追跡に成功したことを示します。次のフレームで、対応する検出のカルマン フィルターを通じて対応する Tracks 変数を更新します。

(4) ビデオ フレームが終了するまで、手順 (2) ~ (3) を繰り返します。
私の印象では、ここでの予測は線形予測です。これは、予測子が弱く、ID スイッチの問題が発生しやすく、外観の特徴ではなく動きの相関特徴のみが考慮されるためです。これらの問題はディープソートで最適化されます。

1.3 ディープソート

ディープソートアルゴリズムは、ソートアルゴリズムをベースにマッチングカスケード(Matching Cascade)と新たな軌跡の確認(confirmed)を追加します。トラックは確認済み状態 (confirmed) と未確認状態 (unconfirmed) に分けられ、新しく生成されたトラックは未確認状態、未確認状態 トラックは確認状態に変換される前に、一定回数 (デフォルトは 3) 検出と一致する必要があります。 。確認済みトラックは、削除される前に、一定回数 (デフォルトは 30 回) 継続的に検出と不一致になる必要があります。
ここに画像の説明を挿入
アルゴリズム全体のワークフローは次のとおりです。

(1) 最初のフレームの検出結果から、対応するトラックを作成します。カルマン フィルターの動き変数を初期化し、カルマン フィルターを通じて対応するフレームを予測します。この時点でのトラックは未確認である必要があります。

(2) フレームターゲット検出のフレームと最初のフレームの Tracks によって予測されたフレームに対して IOU マッチングを実行し、IOU マッチング結果を通じてコスト行列 (コスト行列、計算方法は 1-IOU) を計算します。

(3) (2) で取得したすべてのコスト行列をハンガリアン アルゴリズムの入力として使用し、線形マッチング結果を取得します。この時点で 3 つの結果が得られます。1 つ目はトラックの不一致 (Unmatched Tracks) です。不一致のトラックは直接削除します。トラック (このトラックは不確実な状態にあるため、確定した状態の場合は、連続して一定の回数 (デフォルトは 30 回) に達した後でのみ削除できます)、2 番目は検出の不一致 (不一致の検出) です。 , このような検出を新しいトラック (新しいトラック) として初期化します。3 番目は、検出フレームと予測フレームが正常にペアリングされたことです。これは、前のフレームと次のフレームの追跡に成功し、対応する検出が渡されたことを意味します。カルマン フィルターを通じて、対応する Tracks 変数を更新します。

(4) 確認したトラックが表示されるか、ビデオ フレームが終了するまで、手順 (2) ~ (3) を繰り返します。

(5) カルマンフィルターを通して、確定状態のトラックと不確定状態のトラックに対応するボックスを予測します。確認されたトラック フレームと検出のカスケード マッチング (以前は、トラックが一致する限り、検出の外観特徴とモーション情報が保存され、デフォルトで最初の 100 フレームが保存され、外観特徴とモーション情報は保存されます)これは、確認された状態 (確認済み) のトラックと検出が一致する可能性が高いためです)。

(6) カスケード マッチングの後に考えられる結果は 3 つあります。1 つ目は、トラックのマッチングです。このようなトラックは、カルマン フィルターを通じて、対応するトラック変数を更新します。2 番目と 3 番目のタイプは、Detection と Track の不一致であり、このとき、以前に未確認の Track と不一致の Track を 1 つずつ Unmatched Detection と照合して IOU マッチングを行い、コスト マトリックス (コスト マトリックス) を計算します。 IOU 照合結果に基づき、その計算方法は 1-IOU) です。

(7) (6) で取得したすべてのコスト行列をハンガリアン アルゴリズムの入力として使用し、線形マッチング結果を取得します。この時点で 3 つの結果が得られます。1 つ目はトラックの不一致 (Unmatched Tracks) であり、不一致のものを直接削除します。トラック (このトラックは不確実な状態にあるため、確定した状態の場合は、連続して特定の回数 (デフォルトは 30 回) に達した後でのみ削除できます)、2 番目は検出の不一致 (不一致の検出) です。 , このような検出を新しいトラック (新しいトラック) として初期化します。3 番目は、検出フレームと予測フレームが正常にペアリングされたことです。これは、前のフレームと次のフレームの追跡に成功し、対応する検出が渡されたことを意味します。カルマン フィルターを通じて、対応する Tracks 変数を更新します。

(8) ビデオ フレームが終了するまで手順 (5) ~ (7) を繰り返します。

2. 実用化

コードは私の Git ウェアハウスにあります: https://github.com/justinge/yolov5-deepsort
その中の Readyme を確認する必要があり、実行できます。1 台のカメラを数えるのは簡単です。
私の以前の記事と連携することもできます: https://blog.csdn.net/weixin_40293999/article/details/127811380

要約する

クロスカメラトラッキングに関してはまだ良い方法が思い浮かばないので、まずは穴をあけてみましょう。

おすすめ

転載: blog.csdn.net/weixin_40293999/article/details/128888841