教程 4:在MMagic环境下训练与测试⚓︎
在该部分中,您将学到如何在MMagic环境下完成训练与测试
我们提供如下教程:
- 预先准备
- 在MMagic中测试模型
- 在单个GPU上测试
- 在多个GPU上测试
- 在Slurm上测试
- 使用特定指标进行测试
- 在MMagic中训练模型
- 在单个GPU上训练
- 在多个GPU上训练
- 在多个节点上训练
- 在Slurm上训练
- 使用特定的评估指标进行训练
预先准备⚓︎
用户需要首先 准备数据集 从而能够在MMagic环境中训练和测试。
在MMagic中测试模型⚓︎
在单个GPU上测试⚓︎
您可以通过如下命令使用单个GPU来测试预训练模型。
python tools/test.py ${CONFIG_FILE} ${CHECKPOINT_FILE}
例如:
python tools/test.py configs/example_config.py work_dirs/example_exp/example_model_20200202.pth
在多个GPU上测试⚓︎
MMagic支持使用多个GPU测试,能够极大地节约模型测试时间。 可以通过如下命令使用多个GPU来测试预训练模型。
./tools/dist_test.sh ${CONFIG_FILE} ${CHECKPOINT_FILE} ${GPU_NUM}
例如:
./tools/dist_test.sh configs/example_config.py work_dirs/example_exp/example_model_20200202.pth
在Slurm上测试⚓︎
如果您在由 slurm 管理的集群上运行MMagic,可以使用脚本slurm_test.sh。(此脚本还支持单机测试。)
[GPUS=${GPUS}] ./tools/slurm_test.sh ${PARTITION} ${JOB_NAME} ${CONFIG_FILE} ${CHECKPOINT_FILE}
下面是一个使用8个GPU在“dev”分区上测试一个示例模型的例子,作业名称为“test”。
GPUS=8 ./tools/slurm_test.sh dev test configs/example_config.py work_dirs/example_exp/example_model_20200202.pth
您可以检查 slurm_test.sh 以获取完整的参数和环境变量。
使用特定指标进行测试⚓︎
MMagic 提供各种评估值指标,例如:MS-SSIM、SWD、IS、FID、Precision&Recall、PPL、Equivarience、TransFID、TransIS等。
我们在tools/test.py中为所有模型提供了统一的评估脚本。
如果用户想用一些指标来评估他们的模型,你可以像这样将 metrics 添加到你的配置文件中:
# 在文件 configs/styleganv2/stylegan2_c2_ffhq_256_b4x8_800k.py 的末尾
metrics = [
    dict(
        type='FrechetInceptionDistance',
        prefix='FID-Full-50k',
        fake_nums=50000,
        inception_style='StyleGAN',
        sample_model='ema'),
    dict(type='PrecisionAndRecall', fake_nums=50000, prefix='PR-50K'),
    dict(type='PerceptualPathLength', fake_nums=50000, prefix='ppl-w')
]
如上所述, metrics 由多个指标字典组成。 每个指标包含 type 来表示其类别。 fake_nums 表示模型生成的图像数量。
有些指标会输出一个结果字典,您也可以设置 prefix 来指定结果的前缀。
如果将FID的前缀设置为 FID-Full-50k,则输出的示例可能是
FID-Full-50k/fid: 3.6561  FID-Full-50k/mean: 0.4263  FID-Full-50k/cov: 3.2298
然后用户可以使用下面的命令测试模型:
bash tools/dist_test.sh ${CONFIG_FILE} ${CKPT_FILE}
如果您在 slurm 环境中,请使用如下命令切换到 tools/slurm_test.sh:
sh slurm_test.sh ${PLATFORM} ${JOBNAME} ${CONFIG_FILE} ${CKPT_FILE}
在MMagic中训练模型⚓︎
MMagic支持多种训练方式:
Specifically, all outputs (log files and checkpoints) will be saved to the working directory,
which is specified by work_dir in the config file.
在单个GPU上训练⚓︎
CUDA_VISIBLE=0 python tools/train.py configs/example_config.py --work-dir work_dirs/example
在多个节点上训练⚓︎
要在多台机器上启动分布式训练,这些机器可以通过IP访问,运行以下命令:
在第一台机器上:
NNODES=2 NODE_RANK=0 PORT=$MASTER_PORT MASTER_ADDR=$MASTER_ADDR tools/dist_train.sh $CONFIG $GPUS
在第二台机器上:
NNODES=2 NODE_RANK=1 PORT=$MASTER_PORT MASTER_ADDR=$MASTER_ADDR tools/dist_train.sh $CONFIG $GPUS
为了提高网络通信速度,建议使用高速网络硬件,如Infiniband。 请参考 PyTorch docs 以获取更多信息。
在多个GPU上训练⚓︎
./tools/dist_train.sh ${CONFIG_FILE} ${GPU_NUM} [optional arguments]
在Slurm上训练⚓︎
如果您在由 slurm 管理的集群上运行MMagic,可以使用脚本slurm_train.sh。(此脚本还支持单机测试。)
[GPUS=${GPUS}] ./tools/slurm_train.sh ${PARTITION} ${JOB_NAME} ${CONFIG_FILE} ${WORK_DIR}
下面是一个使用8个gpu在dev分区上训练inpainting模型的示例。
GPUS=8 ./tools/slurm_train.sh dev configs/inpainting/gl_places.py /nfs/xxxx/gl_places_256
你可以在 slurm_train.sh 上查阅完整参数和环境变量。
可选参数⚓︎
- --amp:此参数用于固定精度训练。
- --resume:此参数用于在训练中止时自动恢复。
使用特定的评估指标进行训练⚓︎
受益于 mmengine的 Runner,我们可以在训练过程中对模型进行简单的评估,如下所示。
# 定义指标
metrics = [
    dict(
        type='FrechetInceptionDistance',
        prefix='FID-Full-50k',
        fake_nums=50000,
        inception_style='StyleGAN')
]
# 定义dataloader
val_dataloader = dict(
    batch_size=128,
    num_workers=8,
    dataset=dict(
        type='BasicImageDataset',
        data_root='data/celeba-cropped/',
        pipeline=[
            dict(type='LoadImageFromFile', key='img'),
            dict(type='Resize', scale=(64, 64)),
            dict(type='PackInputs')
        ]),
    sampler=dict(type='DefaultSampler', shuffle=False),
    persistent_workers=True)
# 定义 val interval
train_cfg = dict(by_epoch=False, val_begin=1, val_interval=10000)
# 定义 val loop 和 evaluator
val_cfg = dict(type='MultiValLoop')
val_evaluator = dict(type='Evaluator', metrics=metrics)
可以设置 val_begin 和 val_interval 来调整何时开始验证和验证间隔。
有关指标的详细信息,请参考 metrics' guide.
创建日期: November 27, 2023