mmdetection-3.x学习笔记——测试和训练相关配置(schedule_1x.py)

2023-03-28 Views mmdetection-3.x680字3 min read

MMEngine 的 Runner 使用 Loop 来控制训练,验证和测试过程。 用户可以使用这些字段设置最大训练轮次和验证间隔。

# training schedule for 1x
train_cfg = dict(
    type='EpochBasedTrainLoop',  # 训练循环的类型,基于epoch进行训练
    max_epochs=12,  # 最大训练轮次
    val_interval=1) # 验证间隔。每个 epoch 验证一次
val_cfg = dict(type='ValLoop') # 验证循环的类型
test_cfg = dict(type='TestLoop') # 测试循环的类型

# 注意:在模型的配置文件里也存在train_cfg和test_cfg,
# 那是用于配置模型在训练阶段和测试阶段的相关超参数的,
# 如训练时的正负样本分配策略(MaxIoUAssigner)、测试阶段的非极大值抑制等

# learning rate
param_scheduler = [ # 超参数调度器
    dict(
        type='LinearLR',   # 使用线性学习率预热
        start_factor=0.001,  # 学习率预热的系数,好像是用来计算初始学习率的,
                                    # 即base_lr * start_factor
        by_epoch=False,   # 按 iteration 更新预热学习率
        begin=0,  # 从第一个 iteration 开始
        end=500), # 到第 500 个 iteration 结束
    dict(
        type='MultiStepLR',  # 在训练过程中使用 multi step 学习率策略
        begin=0, # 从第一个 epoch 开始
        end=12, # 到第 12 个 epoch 结束
        by_epoch=True, # 按 epoch 更新学习率
        milestones=[8, 11], # 在哪几个 epoch 进行学习率衰减
        gamma=0.1) # 学习率衰减系数, 即 lr * gamma
]

# optimizer
optim_wrapper = dict( # 优化器封装的配置
    type='OptimWrapper', # 优化器封装的类型。可以切换至 AmpOptimWrapper 来启用混合精度训练
    # 如果你想要使用 BF16,请取消下面一行的代码注释
    # dtype='float16',  # 可用值: ('float16', 'bfloat16', None)
    # 警告:截止到 PyTorch 1.13 版本,在 Convolution 中直接使用 torch.bfloat16 性能低下,
    # 必须手动设置环境变量 TORCH_CUDNN_V8_API_ENABLED=1 
    # 以启用 CuDNN 版本的 BF16 Convolution。相关讨论见 PyTorch Issue
    optimizer=dict( # 优化器配置。支持 PyTorch 的各种优化器。
        # 请参考 https://pytorch.org/docs/stable/optim.html#algorithms
        type='SGD',    # 随机梯度下降优化器
        lr=0.02,  # 基础学习率
        momentum=0.9,  # 带动量的随机梯度下降
        weight_decay=0.0001)) # 权重衰减

# Default setting for scaling LR automatically
#   - `enable` means enable scaling LR automatically
#       or not by default.
#   - `base_batch_size` = (8 GPUs) x (2 samples per GPU).
auto_scale_lr = dict(enable=False, base_batch_size=16) # 学习率自动缩放
# 在配置文件中的学习率是在 8 块 GPU,每块 GPU 有 2 张图像(批大小为 8*2=16)的情况下设置的。
# 如果启用该功能,则会根据机器的GPU数量和训练的批次大小对学习率进行自动缩放,
# 缩放方式详见 线性扩展规则 ,比如:在 8 块 GPU 并且每张 GPU 上有 2 张图片的情况下 lr=0.01,# 那么在 16 块 GPU 并且每张 GPU 上有 4 张图片的情况下, LR 会自动缩放至lr=0.04。

EOF