mmdetection-3.x学习笔记——测试和训练相关配置(schedule_1x.py)
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。