ショートカット

学習とテスト方法

学習

このセクションでは、サポートされているデータセットで既存のモデルを学習する方法を示します。以下の学習環境がサポートされています。

  • CPU

  • シングルGPU

  • シングルノードマルチGPU

  • マルチノード

Slurm を使用してジョブを管理することもできます。

重要

  • train_cfgtrain_cfg = dict(val_interval=10) のように変更することで、学習中の評価間隔を変更できます。これは、10エポックごとにモデルを評価することを意味します。

  • すべての設定ファイルのデフォルトの学習率は8個のGPU用です。線形スケーリング則に従って、異なるGPU数やGPUあたりの画像数を使用する場合は、バッチサイズに比例して学習率を設定する必要があります。例:8個のGPU * 1画像/GPUの場合はlr=0.01、16個のGPU * 2画像/GPUの場合はlr=0.04

  • 学習中は、ログファイルとチェックポイントは、CLI引数--work-dirで指定された作業ディレクトリに保存されます。デフォルトでは./work_dirs/CONFIG_NAMEを使用します。

  • 混合精度学習を行う場合は、CLI引数--ampを指定するだけです。

1. CPUでの学習

モデルはデフォルトでCUDAデバイスに配置されます。CUDAデバイスがない場合のみ、モデルはCPUに配置されます。そのため、CPUでモデルを学習するには、最初にexport CUDA_VISIBLE_DEVICES=-1を実行してGPUの視認性を無効にする必要があります。MMEngineの詳細を参照してください。

CUDA_VISIBLE_DEVICES=-1 python tools/train.py ${CONFIG_FILE} [optional arguments]

MOTモデルQDTrackをCPUで学習する例

CUDA_VISIBLE_DEVICES=-1 python tools/train.py configs/qdtrack/qdtrack_faster-rcnn_r50_fpn_8xb2-4e_mot17halftrain_test-mot17halfval.py

2. シングルGPUでの学習

シングルGPUでモデルを学習する場合は、次のようにtools/train.pyを直接使用できます。

python tools/train.py ${CONFIG_FILE} [optional arguments]

export CUDA_VISIBLE_DEVICES=$GPU_IDを使用してGPUを選択できます。

MOTモデルQDTrackをシングルGPUで学習する例

CUDA_VISIBLE_DEVICES=2 python tools/train.py configs/qdtrack/qdtrack_faster-rcnn_r50_fpn_8xb2-4e_mot17halftrain_test-mot17halfval.py

3. シングルノードマルチGPUでの学習

複数のGPUで学習を開始するには、tools/dist_train.shを提供しています。基本的な使い方は次のとおりです。

bash ./tools/dist_train.sh ${CONFIG_FILE} ${GPU_NUM} [optional arguments]

単一のマシンで複数のジョブ(たとえば、8個のGPUを持つマシンで4個のGPUトレーニングの2つのジョブ)を起動する場合は、通信の競合を避けるために、各ジョブに異なるポート(デフォルトでは29500)を指定する必要があります。

たとえば、コマンドでポートを次のように設定できます。

CUDA_VISIBLE_DEVICES=0,1,2,3 PORT=29500 ./tools/dist_train.sh ${CONFIG_FILE} 4
CUDA_VISIBLE_DEVICES=4,5,6,7 PORT=29501 ./tools/dist_train.sh ${CONFIG_FILE} 4

MOTモデルQDTrackをシングルノードマルチGPUで学習する例

bash ./tools/dist_train.sh configs/qdtrack/qdtrack_faster-rcnn_r50_fpn_8xb2-4e_mot17halftrain_test-mot17halfval.py 8

4. マルチノードでの学習

イーサネット接続の複数のマシンで起動する場合は、次のコマンドを実行するだけで済みます。

最初のマシンで

NNODES=2 NODE_RANK=0 PORT=$MASTER_PORT MASTER_ADDR=$MASTER_ADDR bash tools/dist_train.sh $CONFIG $GPUS

2番目のマシンで

NNODES=2 NODE_RANK=1 PORT=$MASTER_PORT MASTER_ADDR=$MASTER_ADDR bash tools/dist_train.sh $CONFIG $GPUS

InfiniBandなどの高速ネットワークがない場合は、通常遅くなります。

5. Slurmを使用した学習

Slurm は、コンピューティングクラスタのための優れたジョブスケジューリングシステムです。Slurmによって管理されているクラスタでは、slurm_train.shを使用してトレーニングジョブを生成できます。シングルノードとマルチノードの両方のトレーニングをサポートしています。

基本的な使い方は次のとおりです。

bash ./tools/slurm_train.sh ${PARTITION} ${JOB_NAME} ${CONFIG_FILE} ${WORK_DIR} ${GPUS}

SlurmでMOTモデルQDTrackを学習する例

PORT=29501 \
GPUS_PER_NODE=8 \
SRUN_ARGS="--quotatype=reserved" \
bash ./tools/slurm_train.sh \
mypartition \
mottrack
configs/qdtrack/qdtrack_faster-rcnn_r50_fpn_8xb2-4e_mot17halftrain_test-mot17halfval.py
./work_dirs/QDTrack \
8

テスト

このセクションでは、サポートされているデータセットで既存のモデルをテストする方法を示します。以下のテスト環境がサポートされています。

  • CPU

  • シングルGPU

  • シングルノードマルチGPU

  • マルチノード

Slurm を使用してジョブを管理することもできます。

重要

  • MOTでは、DeepSORTSORTStrongSORTなどのアルゴリズムでは、reidの重みとdetectorの重みを個別に読み込む必要があります。ByteTrackOCSORTQDTrackなどの他のアルゴリズムは必要ありません。そのため、重みを読み込むために--checkpoint--detector--reidを提供しています。

  • モデルを評価およびテストする方法は2つあります。ビデオベーステストと画像ベーステストです。StrongSORTMask2formerなどのアルゴリズムは、ビデオベーステストのみをサポートしています。GPUメモリにビデオ全体を収容できない場合は、サンプラーの種類を設定してテスト方法を切り替えることができます。例:ビデオベーステスト:sampler=dict(type='DefaultSampler', shuffle=False, round_up=False) 画像ベーステスト:sampler=dict(type='TrackImgSampler')

  • 評価器のキーoutfile_prefixを変更することで、結果の保存パスを設定できます。例えば、val_evaluator = dict(outfile_prefix='results/sort_mot17')のようにします。それ以外の場合は、一時ファイルが作成され、評価後に削除されます。

  • 評価なしでフォーマットされた結果のみが必要な場合は、format_only=Trueを設定できます。例えば、test_evaluator = dict(type='MOTChallengeMetric', metric=['HOTA', 'CLEAR', 'Identity'], outfile_prefix='sort_mot17_results', format_only=True) のようにします。

1. CPUでのテスト

モデルはデフォルトでCUDAデバイス上に配置されます。CUDAデバイスがない場合のみ、モデルはCPU上に配置されます。そのため、CPUでモデルをテストするには、GPUの可視性を無効にするためにexport CUDA_VISIBLE_DEVICES=-1を実行する必要があります。詳細はMMEngineを参照してください。

CUDA_VISIBLE_DEVICES=-1 python tools/test_tracking.py ${CONFIG_FILE} [optional arguments]

MOTモデルSORTをCPUでテストする例

CUDA_VISIBLE_DEVICES=-1 python tools/test_tracking.py configs/sort/sort_faster-rcnn_r50_fpn_8xb2-4e_mot17halftrain_test-mot17halfval.py --detector ${CHECKPOINT_FILE}

2. シングルGPUでのテスト

シングルGPUでモデルをテストする場合は、以下のようにtools/test_tracking.pyを直接使用できます。

python tools/test_tracking.py ${CONFIG_FILE} [optional arguments]

export CUDA_VISIBLE_DEVICES=$GPU_IDを使用してGPUを選択できます。

MOTモデルQDTrackをシングルGPUでテストする例

CUDA_VISIBLE_DEVICES=2 python tools/test_tracking.py configs/qdtrack/qdtrack_faster-rcnn_r50_fpn_8xb2-4e_mot17halftrain_test-mot17halfval.py --detector ${CHECKPOINT_FILE}

3. シングルノード複数GPUでのテスト

複数GPUでのテストを実行するためにtools/dist_test_tracking.shを提供しています。基本的な使い方は以下のとおりです。

bash ./tools/dist_test_tracking.sh ${CONFIG_FILE} ${GPU_NUM} [optional arguments]

MOTモデルDeepSortをシングルノード複数GPUでテストする例

bash ./tools/dist_test_tracking.sh configs/qdtrack/qdtrack_faster-rcnn_r50_fpn_8xb2-4e_mot17halftrain_test-mot17halfval.py 8 --detector ${CHECKPOINT_FILE} --reid ${CHECKPOINT_FILE}

4. 複数ノードでのテスト

「複数ノードでのトレーニング」と同様に、複数ノードでテストを実行できます。

5. Slurmを使用したテスト

Slurmによって管理されているクラスタでは、slurm_test_tracking.shを使用してテストジョブを生成できます。シングルノードとマルチノードの両方のテストをサポートしています。

基本的な使い方は次のとおりです。

[GPUS=${GPUS}] bash tools/slurm_test_tracking.sh ${PARTITION} ${JOB_NAME} ${CONFIG_FILE} [optional arguments]

VISモデルMask2formerをSlurmでテストする例

GPUS=8
bash tools/slurm_test_tracking.sh \
mypartition \
vis \
configs/mask2former_vis/mask2former_r50_8xb2-8e_youtubevis2021.py \
--checkpoint ${CHECKPOINT_FILE}