Configsについて学ぶ¶
我々は、Pythonファイルを設定システムとして使用しています。提供されているすべての設定は、`$MMDetection/configs`以下にあります。
我々の設定システムには、モジュール式と継承の設計が組み込まれており、様々な実験を容易に行うことができます。設定ファイルを確認したい場合は、`python tools/misc/print_config.py /PATH/TO/CONFIG`を実行して、完全な設定を確認することができます。
完全な設定の簡単な説明¶
完全な設定には、通常、以下の主要なフィールドが含まれています。
model
: モデルの基本設定。data_preprocessor
、モジュール(例:detector
、motion
)、train_cfg
、test_cfg
など。train_dataloader
: 訓練用データローダーの設定。通常、batch_size
、num_workers
、sampler
、dataset
など。val_dataloader
: 検証用データローダーの設定。train_dataloader
と同様です。test_dataloader
: テスト用データローダーの設定。train_dataloader
と同様です。val_evaluator
: 検証用評価器の設定。例えば、MOTChallengeベンチマークでのMOTタスクにはtype='MOTChallengeMetrics'
。test_evaluator
: テスト用評価器の設定。val_evaluator
と同様です。train_cfg
: 訓練ループの設定。例えば、type='EpochBasedTrainLoop'
。val_cfg
: 検証ループの設定。例えば、type='VideoValLoop'
。test_cfg
: テストループの設定。例えば、type='VideoTestLoop'
。default_hooks
: デフォルトフックの設定。タイマー、ロガー、パラメータスケジューラ、チェックポイント、サンプラーシード、可視化などのフックが含まれる場合があります。vis_backends
: 可視化バックエンドの設定。デフォルトではtype='LocalVisBackend'
を使用します。visualizer
: 可視化ツール設定。MOTタスクではtype='TrackLocalVisualizer'
。param_scheduler
: パラメータスケジューラの設定。通常、学習率スケジューラを設定します。optim_wrapper
: オプティマイザラッパーの設定。オプティマイザ、勾配クリッピングなどの最適化関連の情報を含みます。load_from
: 指定されたパスから事前学習済みモデルとしてモデルを読み込みます。resume
:True
の場合、load_from
からチェックポイントを再開し、チェックポイントが保存されたエポックから訓練が再開されます。
スクリプト引数による設定の変更¶
tools/train.py
またはtools/test_tracking.py
を使用してジョブを送信する際、--cfg-options
を指定して設定をインプレースで変更できます。いくつかの例を以下に示します。詳細については、MMEngineを参照してください。
辞書チェーンの設定キーの更新。
設定オプションは、元の設定における辞書キーの順序に従って指定できます。例えば、
--cfg-options model.detector.backbone.norm_eval=False
は、モデルのバックボーン内のすべてのBNモジュールを訓練モードに変更します。設定リスト内のキーの更新。
一部の設定辞書は、設定内でリストとして構成されています。例えば、テストパイプライン
test_dataloader.dataset.pipeline
は通常、リスト(例:[dict(type='LoadImageFromFile'), ...]
)です。LoadImageFromFile
をパイプライン内のLoadImageFromWebcam
に変更したい場合は、--cfg-options test_dataloader.dataset.pipeline.0.type=LoadImageFromWebcam
を指定します。リスト/タプルの値の更新。
更新する値がリストまたはタプルである場合があります。例えば、
--cfg-options model.data_preprocessor.mean=[0,0,0]
を指定することで、data_preprocessor
のキーmean
を変更できます。指定した値内には、**空白文字は使用できません**。
設定ファイルの構造¶
`config/_base_`には、データセット、モデル、default_runtimeという3つの基本的なコンポーネントタイプがあります。SORT、DeepSORTなど、多くの方法は、それぞれ1つずつで簡単に構築できます。`_base_`からのコンポーネントで構成される設定は、「プリミティブ」と呼ばれます。
同一フォルダ内のすべての設定ファイルについて、**1つだけ**のプリミティブな設定ファイルを持つことを推奨します。他のすべての設定ファイルは、このプリミティブな設定ファイルを継承する必要があります。これにより、継承レベルの最大値は3になります。
理解を容易にするため、コントリビューターは既存のメソッドを継承することを推奨します。例えば、Faster R-CNNをベースに何らかの修正を行う場合、まず_base_ = ../_base_/models/faster-rcnn_r50-dc5.py
を指定して基本的なFaster R-CNN構造を継承し、その後、設定ファイル内の必要なフィールドを修正します。
既存のメソッドと構造を共有しない全く新しいメソッドを作成する場合は、configs
フォルダの下にmethod_name
フォルダを作成できます。
詳細なドキュメントについては、MMEngineを参照してください。
設定ファイル名のスタイル¶
設定ファイルの名前には以下のスタイルに従います。コントリビューターは同じスタイルに従うことをお勧めします。
{method}_{module}_{train_cfg}_{train_data}_{test_data}
{method}
: メソッド名、例:sort
。{module}
: メソッドの基本モジュール、例:faster-rcnn_r50_fpn
。{train_cfg}
: バッチサイズ、エポック数などを含むトレーニング設定、例:8xb4-80e
。{train_data}
: トレーニングデータ、例:mot17halftrain
。{test_data}
: テストデータ、例:test-mot17halfval
。
よくある質問¶
基本設定ファイルの一部フィールドの無視
場合によっては、_delete_=True
を設定して、基本設定ファイルの一部フィールドを無視できます。簡単な説明についてはMMEngineを参照してください。
トラッキングデータ構造の紹介¶
利点と新機能¶
mmdetectionのトラッキングタスクでは、ビデオを使用してデータセットを構成し、TrackDataSampleを使用してデータセット情報を記述します。
ビデオベースの構成に基づいて、キーフレームと参照フレームをサンプリングするための変換
UniformRefFrameSample
を提供し、クリップトレーニングのためにTransformBroadcaster
を使用します。TrackDataSampleは、ある程度複数のDetDataSampleのラッパーと見なすことができます。各々が単一のフレームに対応するDetDataSampleのリストである
video_data_samples
プロパティが含まれています。さらに、メタ情報には、クリップトレーニング方式を適用するためのkey_frames_indsとref_frames_indsが含まれています。ビデオベースのデータ構成のおかげで、ビデオ全体を直接テストできます。この方法はより簡潔で直感的です。GPUメモリがビデオ全体を収容できない場合は、image_basedテスト方法も提供しています。
TODO¶
StrongSORT、Mask2Formerなどのアルゴリズムは、ビデオベースのテストをサポートしていません。これらのアルゴリズムはGPUメモリに課題を突きつけます。この問題は今後最適化していきます。
現在、MOTチャレンジデータセットなどのビデオベースのデータセットと、Crowdhumanなどの画像ベースのデータセットの、アルゴリズムQDTrackの同時トレーニングはサポートしていません。この問題は今後最適化していきます。