学習とテスト方法¶
学習¶
このセクションでは、サポートされているデータセットで既存のモデルを学習する方法を示します。以下の学習環境がサポートされています。
CPU
シングルGPU
シングルノードマルチGPU
マルチノード
Slurm を使用してジョブを管理することもできます。
重要
train_cfg
をtrain_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では、
DeepSORT
、SORT
、StrongSORT
などのアルゴリズムでは、reid
の重みとdetector
の重みを個別に読み込む必要があります。ByteTrack
、OCSORT
、QDTrack
などの他のアルゴリズムは必要ありません。そのため、重みを読み込むために--checkpoint
、--detector
、--reid
を提供しています。モデルを評価およびテストする方法は2つあります。ビデオベーステストと画像ベーステストです。
StrongSORT
、Mask2former
などのアルゴリズムは、ビデオベーステストのみをサポートしています。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}