目次
4.2 deep_sort/deep_sort/deep ディレクトリの下:
4.3 deep_sort/deep_sort/sort ディレクトリの下:
DeepSORT (ディープ ラーニング ベースの SORT) は、ディープ ラーニングに基づく視覚的ターゲット追跡アルゴリズムであり、ディープ ラーニングと従来のターゲット追跡アルゴリズム SORT (Simple Online and Realtime Tracking) を組み合わせたものです。
DeepSORT は、ターゲット検出器 (YOLO、Faster R-CNN など) に基づいて画像の各フレーム内のターゲットを検出し、多特徴融合 (Muti-feature Fusion) テクノロジを使用してターゲットを表現および記述し、ターゲットを検出するための SORT アルゴリズム。DeepSORT では、SORT アルゴリズムに基づいて、ターゲット ID を決定する問題を解決するために Re-IDentification (Re-ID) モデルを導入しています。Re-ID モデルは、ターゲットの類似性を計算することでターゲットの一意の ID を決定します。複数のフレーム画像。
DeepSORT アルゴリズムの利点は、高精度、強力な堅牢性、およびターゲットのオクルージョンと変形に対する優れた適応性です。歩行者、車両、その他のターゲットの追跡やインテリジェントなビデオ監視などの分野で広く使用されています。
1. ターゲット追跡の主な手順
- オリジナルのビデオフレームを取得する
- オブジェクト検出器を使用してビデオ フレーム内のオブジェクトを検出する
- 検出されたターゲットのフレーム内の外観特徴 (ID スイッチを回避するための特徴比較に便利) と動き特徴 (動き特徴はカルマン フィルターによる予測に便利) を含む特徴を抽出します。
- 前後 2 フレームのターゲットの一致度を計算し (ハンガリアン アルゴリズムとカスケード マッチングを使用)、追跡した各ターゲットに ID を割り当てます。
2. 従来のソートアルゴリズムのプロセス
ディープソートの前身はソート アルゴリズムであり、ソート アルゴリズムの中核となるのはカルマン フィルター アルゴリズムとハンガリアン アルゴリズムです。
カルマン フィルター アルゴリズムの機能: このアルゴリズムの主な機能は、現在の一連の運動変数を使用して次の瞬間の運動変数を予測することですが、最初の検出結果はカルマン フィルターの運動変数を初期化するために使用されます。
ハンガリーアルゴリズムの役割: 簡単に言うと、割り当て問題を解決します。これは、検出フレームのグループとカルマンによって予測されたフレームを割り当て、カルマンによって予測されたフレームがそれ自体に最もよく一致する検出フレームを見つけて達成できるようにすることです。トラッキング効果。
並べ替えのワークフローを次の図に示します。
検出は、ターゲットによって検出されたフレームです。Tracks はトラック情報です。
(1) 最初のフレームの検出結果に基づいて、対応するトラックを作成します。カルマン フィルターの動き変数を初期化し、カルマン フィルターを通じて対応するフレームを予測します。
(2) このフレームでターゲットによって検出されたフレームと、前のフレームで Tracks によって予測されたフレームを 1 つずつ照合し、IOU 照合結果を通じてコスト行列 (コスト行列、計算方法は 1-IOU) を計算します。 。
(3) (2) で得られたすべてのコスト行列をハンガリアン アルゴリズムの入力として使用し、線形マッチング結果を取得します。このとき得られる結果は 3 種類あります。1 つ目はトラックの不一致 (Unmatched Tracks) です。直接削除します。不一致のトラック、2 つ目は検出の不一致 (不一致検出)、そのような検出を新しいトラック (新しいトラック) に初期化します、3 つ目は、検出フレームと予測フレームが正常にペアリングされていることです。フレームと次のフレームが正常に更新され、カルマン フィルタリングを通じて対応するトラック変数が更新されました。
(4) ビデオ フレームが終了するまで、手順 (2) ~ (3) を繰り返します。
3.ディープソートアルゴリズムの処理
ソート アルゴリズムは依然として比較的大まかな追跡アルゴリズムであるため、オブジェクトが遮られると ID が特に失われやすくなります。ディープソート アルゴリズムは、ソート アルゴリズムにマッチング カスケードと新しい軌跡の確認を追加します。トラックは確認済み状態 (confirmed) と未確認状態 (unconfirmed) に分けられます。新しく生成されたトラックは未確認状態ですが、未確認トラックは確認状態に変換される前に、一定回数 (デフォルトは 3) 検出と一致する必要があります。確認済みトラックは、削除される前に、一定回数 (デフォルトは 30 回) 検出と不一致になる必要があります。
ディープソート アルゴリズムのワークフローを次の図に示します。
アルゴリズム全体のワークフローは次のとおりです。
(1) 最初のフレームの検出結果に基づいて、対応するトラックを作成します。カルマン フィルターの動き変数を初期化し、カルマン フィルターを通じて対応するフレームを予測します。この時点でのトラックは未確認である必要があります。
(2) このフレームでターゲットによって検出されたフレームと、前のフレームで Tracks によって予測されたフレームを 1 つずつ照合し、IOU 照合結果を通じてコスト行列 (コスト行列、計算方法は 1-IOU) を計算します。 。
(3) (2) で得られたすべてのコスト行列をハンガリアン アルゴリズムの入力として使用し、線形マッチング結果を取得します。このとき得られる結果は 3 種類あります。1 つ目はトラックの不一致 (Unmatched Tracks) です。直接削除します。不一致のトラック (このトラックは不確実な状態にあるため。確定した状態にある場合は、一定の回数 (デフォルトは 30 回) に達した後に削除する必要があります); 2 番目のタイプは不一致の検出です。このような検出は初期化されます。 3 番目は、検出フレームと予測フレームが正常にペアリングされ、前のフレームと次のフレームが正常に追跡され、対応する検出がカルマン フィルターを通過して更新されることを意味します。対応する Tracks 変数。
(4) 確認されたトラックが表示されるか、ビデオ フレームが終了するまで、手順 (2) ~ (3) を繰り返します。
(5)カルマンフィルタリングを使用して、確認済み状態のトラックと未確認状態のトラックに対応するフレームを予測する。確認されたトラックと検出のフレームをカスケード マッチングします (以前は、トラックがマッチングされるたびに、検出の外観特徴とモーション情報が保存されていました。デフォルトで最初の 100 フレームが保存され、外観特徴とモーション情報を使用してカスケードされました)検出とのマッチング。確認されたトラックと検出が一致する可能性が高いため、これが行われます)。
(6) カスケード マッチングを実行した後、考えられる結果は 3 つあります。1 つ目はトラックのマッチングで、そのようなトラックはカルマン フィルターを通じて対応するトラック変数を更新します。2 番目と 3 番目のタイプは、検出とトラックの不一致であり、このとき、以前に未確認のトラックと不一致のトラックが IOU によって 1 つずつ不一致の検出と照合され、IOU の照合結果に基づいてコスト マトリックスが計算されます. 、その計算方法は 1-IOU) です。
(7) (6) で得られたすべてのコスト行列をハンガリアン アルゴリズムの入力として使用し、線形マッチング結果を取得します。このとき得られる結果は 3 種類あります。1 つ目はトラックの不一致 (Unmatched Tracks) です。直接削除します。不一致のトラック (このトラックは不確実な状態にあるため。確定した状態にある場合は、一定の回数 (デフォルトは 30 回) に達した後に削除する必要があります); 2 番目のタイプは不一致の検出です。このような検出は初期化されます。 3 番目は、検出フレームと予測フレームが正常にペアリングされ、前のフレームと次のフレームが正常に追跡され、対応する検出がカルマン フィルターを通過して更新されることを意味します。対応する Tracks 変数。
(8) ビデオ フレームが終了するまで手順 (5) ~ (7) を繰り返します。
4. 目標追跡全体のコード
以下に、ターゲット追跡に重要なコードの機能を説明します。
まず、コードは 3 つの部分に分かれています。
- ターゲット追跡に関連するコードと重み
- ターゲット検出関連のコードと重み。ここでは yolov5.5 ターゲット検出アルゴリズムが使用されます。
- 通話検出および追跡コード関連の py ファイル
ターゲット検出の内容については、他の記事をご覧ください。
ここではターゲット追跡に関わるコード部分を中心に説明します。メインの py ファイルを次の図に示します。 各 py ファイルの主な機能を 1 つずつ説明します。
主な機能
4.1 Configs ファイルディレクトリ内:
deep_sort.yaml: この yaml ファイルは主にいくつかのパラメーターを保存します。
(1) 特徴抽出重みを含むディレクトリ パス。
(2) カスケード マッチングに使用される最大コサイン距離。しきい値より大きい場合、無視されます。
(3) 検出結果の信頼度閾値
(4) 非最大抑制しきい値。抑制がないことを示すには 1 に設定されます。
(5) 最大 IOU しきい値
(6) 最大存続期間。つまり、オブジェクトが MAX_AGE フレーム後に追跡されなかった場合、軌道は削除された状態に変更されます。
(7) 最高ヒット数ヒットすると、不確定状態から確定状態に変化します。
(8) 特徴量を保存する最大フレーム数 フレーム数を超える場合は、ローリング保存が行われます。
4.2 deep_sort/deep_sort/deep ディレクトリの下:
ckpt.t7: これは特徴抽出ネットワークの重みファイルです。この重みファイルは特徴抽出ネットワークの学習後に生成され、ターゲット追跡中にターゲット フレーム内の特徴を抽出し、ターゲット追跡中の ID スイッチを回避するのに便利です。
evaluate.py: 特徴抽出モデルの精度を計算します。
feature_extractor.py: 対応する境界ボックス内の特徴を抽出し、類似度の計算に使用する境界ボックスの代表として固定次元の特徴を取得します。
model.py: トレーニング特徴抽出ネットワークの重みを抽出するために使用される特徴抽出ネットワーク モデル。
train.py: 特徴抽出ネットワークをトレーニングするための Python ファイル
test.py: トレーニングされた特徴抽出ネットワークのパフォーマンスをテストします。
4.3 deep_sort/deep_sort/sort ディレクトリの下:
detect.py: ターゲット検出に合格した検出フレーム、フレームの信頼度、および取得された特徴を保存します。また、フレームのさまざまな形式の変換方法も提供します。
iou_matching.py: 2 つのフレーム間の IOU を計算します。
kalman_filter.py: カルマン フィルターの関連コード。主に検出フレームの軌跡情報を予測するためにカルマン フィルターを使用します。
Linear_assignment.py: 最適なマッチング効果を得るために、ハンガリーのアルゴリズムを使用して予測軌跡フレームと検出フレームをマッチングします。
nn_matching.py: ユークリッド距離、コサイン距離、その他の距離を計算して最も近いカラー距離を計算します。
preprocessing.py: 非最大抑制コード。非最大抑制アルゴリズムを使用して最適な検出フレームを出力します。
track.py: 主に、軌跡フレームの位置と速度情報、軌跡フレームのIDとステータスを含む軌跡情報を保存します。その中には、確定状態、不確定状態、削除状態の 3 つの状態があります。 。
tracker.py: すべての軌跡情報を保存し、最初のフレームの初期化、カルマン フィルターの予測と更新を担当し、カスケード マッチングと IOU マッチングを担当します。
deep_sort/deep_sort/deep_sort.py: ディープソートの全体的なカプセル化。ディープソート追跡の全体的な効果を実現します。
deep_sort/utils: ここの主なものには、ピクチャ フレーム ツール、ログ保存ツールなど、さまざまなツールの Python コードが含まれています。
リンク: https://pan.baidu.com/s/1uORzJIav2z2SXMqaBfJ5pQ
抽出コード: ztaw
デモを実行します。
結果
次の章では、独自の特徴抽出ネットワークをトレーニングする方法について説明します。