首页
/ Hi-FT/ERD项目运行时配置深度定制指南

Hi-FT/ERD项目运行时配置深度定制指南

2025-06-19 19:13:32作者:邬祺芯Juliet

前言

在深度学习模型训练过程中,合理的运行时配置对模型性能有着至关重要的影响。本文将全面介绍如何在Hi-FT/ERD项目中定制化训练过程的各个关键环节,包括优化器配置、训练调度策略、训练循环以及钩子机制等。

优化器配置详解

基础优化器配置

Hi-FT/ERD项目采用optim_wrapper统一管理优化相关配置,包含三个核心部分:

  1. 优化器(optimizer):定义基础优化算法
  2. 参数级配置(paramwise_cfg):支持对不同参数组设置差异化策略
  3. 梯度裁剪(clip_grad):防止梯度爆炸的稳定措施
# 典型配置示例
optim_wrapper = dict(
    type='OptimWrapper',
    optimizer=dict(
        type='AdamW',  # 使用AdamW优化器
        lr=0.0001,    # 基础学习率
        weight_decay=0.05,
        eps=1e-8,
        betas=(0.9, 0.999)),
    
    # 参数级学习率和权重衰减设置
    paramwise_cfg=dict(
        custom_keys={
            'backbone': dict(lr_mult=0.1),  # 骨干网络学习率降为1/10
        },
        norm_decay_mult=0.0),  # 归一化层权重衰减系数
    
    # 梯度裁剪配置
    clip_grad=dict(max_norm=0.01, norm_type=2))

使用PyTorch内置优化器

项目支持所有PyTorch原生优化器,只需简单修改配置即可切换:

# 使用ADAM优化器示例
optim_wrapper = dict(
    type='OptimWrapper',
    optimizer=dict(type='Adam', lr=0.0003, weight_decay=0.0001))

自定义优化器实现

1. 实现新优化器类

在项目中创建新的优化器需要以下步骤:

from mmdet.registry import OPTIMIZERS
from torch.optim import Optimizer

@OPTIMIZERS.register_module()
class MyOptimizer(Optimizer):
    """自定义优化器实现示例"""
    def __init__(self, params, a, b, c, **kwargs):
        # 实现初始化逻辑
        super().__init__(params, defaults)
        
    def step(self, closure=None):
        # 实现参数更新逻辑

2. 注册优化器

有两种方式使系统识别新优化器:

  • 修改__init__.py:在对应目录的__init__.py中导入新类
  • 配置导入:通过custom_imports动态导入
# 方法二:配置动态导入
custom_imports = dict(
    imports=['mmdet.engine.optimizers.my_optimizer'],
    allow_failed_imports=False)

3. 配置使用

optim_wrapper = dict(
    type='OptimWrapper',
    optimizer=dict(type='MyOptimizer', a=1.0, b=0.5, c=0.1))

优化器包装器定制

对于需要精细控制参数优化策略的场景,可以自定义优化器包装器:

from mmengine.optim import DefaultOptimWrapperConstructor
from mmdet.registry import OPTIM_WRAPPER_CONSTRUCTORS

@OPTIM_WRAPPER_CONSTRUCTORS.register_module()
class MyOptimizerWrapperConstructor(DefaultOptimWrapperConstructor):
    """自定义优化器包装器示例"""
    def __call__(self, model):
        # 实现参数分组逻辑
        return optim_wrapper

高级优化技巧

梯度裁剪

optim_wrapper = dict(
    _delete_=True,  # 覆盖基础配置
    clip_grad=dict(max_norm=35, norm_type=2))

动量调度

配合学习率调度器使用可加速收敛:

param_scheduler = [
    # 学习率调度
    dict(type='CosineAnnealingLR', T_max=8, eta_min=lr*10),
    # 动量调度
    dict(type='CosineAnnealingMomentum', T_max=8, eta_min=0.85)
]

训练调度策略定制

常用学习率策略

多项式衰减策略

param_scheduler = [
    dict(type='PolyLR', power=0.9, eta_min=1e-4, begin=0, end=8)
]

余弦退火策略

param_scheduler = [
    dict(type='CosineAnnealingLR', T_max=8, eta_min=lr*1e-5)
]

训练循环定制

基于轮次的训练循环

train_cfg = dict(
    type='EpochBasedTrainLoop',
    max_epochs=12,
    val_begin=1,    # 从第1轮开始验证
    val_interval=1)  # 每轮验证一次

基于迭代的动态训练循环

train_cfg = dict(
    type='IterBasedTrainLoop',
    max_iters=368750,
    val_interval=5000,
    dynamic_intervals=[(365001, 368750)])  # 后期调整验证间隔

钩子机制深度定制

自定义钩子实现

1. 创建新钩子

from mmengine.hooks import Hook
from mmdet.registry import HOOKS

@HOOKS.register_module()
class MyHook(Hook):
    """自定义训练钩子示例"""
    
    def before_train_epoch(self, runner):
        # 训练周期开始前执行
        pass
        
    def after_train_iter(self, runner, batch_idx, data_batch, outputs):
        # 训练迭代结束后执行
        pass

2. 注册与使用

custom_hooks = [
    dict(type='MyHook', a=1.0, b=2.0, priority='NORMAL')
]

内置钩子配置

检查点钩子

default_hooks = dict(
    checkpoint=dict(
        type='CheckpointHook',
        interval=1,           # 保存间隔(epoch)
        max_keep_ckpts=3,     # 最大保留检查点数
        save_optimizer=True)) # 是否保存优化器状态

日志钩子

default_hooks = dict(
    logger=dict(type='LoggerHook', interval=50))  # 每50次迭代记录一次

可视化钩子

vis_backends = [
    dict(type='LocalVisBackend'),        # 本地可视化
    dict(type='TensorboardVisBackend')   # TensorBoard支持
]

visualizer = dict(
    type='DetLocalVisualizer',
    vis_backends=vis_backends,
    name='visualizer')

结语

通过本文介绍的各种定制方法,研究人员可以灵活调整Hi-FT/ERD项目的训练过程,实现从基础参数配置到深度定制化的全方位控制。建议根据具体任务需求,先从基础配置开始,逐步尝试高级定制功能,以获得最佳模型性能。

登录后查看全文
热门项目推荐