〖open-mmlab: MMDetection〗解析文件:configs/_base_/schedules

详细解析三个训练调度文件:schedule_1x.py、schedule_2x.py、schedule_20e.py

在深度学习模型训练过程中,训练调度(Training Schedule)是至关重要的,它决定了模型训练过程中学习率(Learning Rate, LR)的变化以及训练的总轮数(Epochs)。本文将详细解析三个训练调度文件:schedule_1x.pyschedule_2x.pyschedule_20e.py,这三个文件分别对应不同的训练时长和策略。

区别

这三个文件的主要区别在于训练的总轮数(max_epochs)和学习率调度策略(param_scheduler)中的milestones参数。max_epochs决定了训练的总轮数,而milestones参数则定义了在哪些epoch时学习率会进行衰减。

  • schedule_1x.py:训练总轮数为12轮,学习率在第8轮和第11轮时衰减。
  • schedule_2x.py:训练总轮数为24轮,学习率在第16轮和第22轮时衰减。
  • schedule_20e.py:训练总轮数为20轮,学习率在第16轮和第19轮时衰减。

schedule_1x.py 解析

# training schedule for 1x
train_cfg = dict(type='EpochBasedTrainLoop', max_epochs=12, val_interval=1)
val_cfg = dict(type='ValLoop')
test_cfg = dict(type='TestLoop')

# learning rate
param_scheduler = [
    dict(
        type='LinearLR', start_factor=0.001, by_epoch=False, begin=0, end=500),
    dict(
        type='MultiStepLR',
        begin=0,
        end=12,
        by_epoch=True,
        milestones=[8, 11],
        gamma=0.1)
]

# optimizer
optim_wrapper = dict(
    type='OptimWrapper',
    optimizer=dict(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)

训练配置(train_cfg

  • type: 'EpochBasedTrainLoop',表示训练循环是基于epoch的。
  • max_epochs: 12,训练的总轮数为12轮。
  • val_interval: 1,表示每1轮进行一次验证。

验证和测试配置(val_cfgtest_cfg

  • 两者都设置为默认的循环配置。

学习率调度(param_scheduler

  • 首先使用LinearLR,从0开始线性增加到start_factor=0.001,直到end=500迭代。
  • 然后使用MultiStepLR,在第8轮和第11轮时,学习率乘以gamma=0.1进行衰减。

优化器配置(optim_wrapper

  • 使用SGD作为优化器,初始学习率为0.02,动量为0.9,权重衰减为0.0001

自动缩放学习率(auto_scale_lr

  • enable: False,表示不自动缩放学习率。
  • base_batch_size: 16,基础批量大小。

schedule_2x.py 解析

# training schedule for 2x
train_cfg = dict(type='EpochBasedTrainLoop', max_epochs=24, val_interval=1)
val_cfg = dict(type='ValLoop')
test_cfg = dict(type='TestLoop')

# learning rate
param_scheduler = [
    dict(
        type='LinearLR', start_factor=0.001, by_epoch=False, begin=0, end=500),
    dict(
        type='MultiStepLR',
        begin=0,
        end=24,
        by_epoch=True,
        milestones=[16, 22],
        gamma=0.1)
]

# optimizer
optim_wrapper = dict(
    type='OptimWrapper',
    optimizer=dict(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)

训练配置(train_cfg

  • max_epochs: 24,训练的总轮数为24轮。

学习率调度(param_scheduler

  • 使用MultiStepLR,在第16轮和第22轮时,学习率乘以gamma=0.1进行衰减。

schedule_20e.py 解析

# training schedule for 20e
train_cfg = dict(type='EpochBasedTrainLoop', max_epochs=20, val_interval=1)
val_cfg = dict(type='ValLoop')
test_cfg = dict(type='TestLoop')

# learning rate
param_scheduler = [
    dict(
        type='LinearLR', start_factor=0.001, by_epoch=False, begin=0, end=500),
    dict(
        type='MultiStepLR',
        begin=0,
        end=20,
        by_epoch=True,
        milestones=[16, 19],
        gamma=0.1)
]

# optimizer
optim_wrapper = dict(
    type='OptimWrapper',
    optimizer=dict(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)

训练配置(train_cfg

  • max_epochs: 20,训练的总轮数为20轮。

学习率调度(param_scheduler

  • 使用MultiStepLR,在第16轮和第19轮时,学习率乘以gamma=0.1进行衰减。

总结

这三个训练调度文件主要区别在于训练的总轮数和学习率衰减的时机。通过调整这些参数,可以控制模型的训练过程,以达到更好的训练效果。在实际应用中,根据模型的复杂度和训练数据的量,可以灵活选择或调整这些参数。

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值