跳转至

学习训练和测试⚓︎

训练⚓︎

本节将介绍如何在支持的数据集上训练现有模型。 支持以下训练环境:

  • CPU
  • 单 GPU
  • 单节点多 GPU
  • 多节点

您还可以使用 Slurm 管理作业。

重要:

  • 在训练过程中,您可以通过修改 train_cfg 来改变评估间隔。 train_cfg = dict(val_interval=10)。这意味着每 10 个 epoch 对模型进行一次评估。
  • 所有配置文件中的默认学习率为 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.

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

在 CPU 上训练 MOT 模型 QDTrack 的示例:

```shell 脚本
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.

```shell 脚本 python tools/train.py ${CONFIG_FILE} [optional arguments]

您可以使用 `export CUDA_VISIBLE_DEVICES=$GPU_ID` 命令选择GPU.

在单 GPU 上训练 MOT 模型 QDTrack 的示例:

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

3. 在单节点多 GPU 上进行训练⚓︎

我们提供了 tools/dist_train.sh,用于在多个 GPU 上启动训练。 基本用法如下。

```shell 脚本 bash ./tools/dist_train.sh ${CONFIG_FILE} ${GPU_NUM} [optional arguments]

如果您想在一台机器上启动多个作业、
例如,在拥有 8 个 GPU 的机器上启动 2 个 4-GPU 训练作业、
需要为每个作业指定不同的端口(默认为 29500),以避免通信冲突。

例如,可以在命令中设置端口如下。

```shell 脚本
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

在单节点多 GPU 上训练 MOT 模型 QDTrack 的示例:

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

4. 在多个节点上训练⚓︎

如果使用以太网连接多台机器,只需运行以下命令即可:

在第一台机器上

```shell 脚本 NNODES=2 NODE_RANK=0 PORT=\(MASTER_PORT MASTER_ADDR=\)MASTER_ADDR bash tools/dist_train.sh $CONFIG $GPUS

在第二台机器上:

```shell script
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 生成训练作业。 它支持单节点和多节点训练。

基本用法如下。

```shell 脚本 bash ./tools/slurm_train.sh ${PARTITION} ${JOB_NAME} ${CONFIG_FILE} ${WORK_DIR} ${GPUS}

使用 Slurm 训练 MOT 模型 QDTrack 的示例:

```shell脚本
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来加载权重。
  • 我们提供了两种评估和测试模型的方法,即基于视频的测试和基于图像的测试。 有些算法如 StrongSORT, Mask2former 只支持基于视频的测试. 如果您的 GPU 内存无法容纳整个视频,您可以通过设置采样器类型来切换测试方式。 例如 基于视频的测试:sampler=dict(type='DefaultSampler', shuffle=False, round_up=False) 基于图像的测试:sampler=dict(type='TrackImgSampler')
  • 您可以通过修改 evaluator 中的关键字 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 上测试模型,您需要 export CUDA_VISIBLE_DEVICES=-1 先禁用 GPU 可见性。

更多细节请参考MMEngine.

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

在 CPU 上测试 MOT 模型 SORT 的示例:

```shell 脚本
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,如下所示。

```shell 脚本 python tools/test_tracking.py ${CONFIG_FILE} [optional arguments]

您可以使用 `export CUDA_VISIBLE_DEVICES=$GPU_ID` 来选择 GPU。

在单 GPU 上测试 MOT 模型 QDTrack 的示例:

```shell 脚本
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 上进行测试⚓︎

我们提供了 tools/dist_test_tracking.sh,用于在多个 GPU 上启动测试。 基本用法如下。

```shell 脚本 bash ./tools/dist_test_tracking.sh ${CONFIG_FILE} ${GPU_NUM} [optional arguments]

在单节点多 GPU 上测试 MOT 模型 DeepSort 的示例:

```shell 脚本
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 生成测试作业。 它支持单节点和多节点测试。

基本用法如下。

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

使用 Slurm 测试 VIS 模型 Mask2former 的示例:

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


最后更新: November 27, 2023
创建日期: November 27, 2023