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

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

2025-06-19 05:45:50作者:邬祺芯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项目的训练过程,实现从基础参数配置到深度定制化的全方位控制。建议根据具体任务需求,先从基础配置开始,逐步尝试高级定制功能,以获得最佳模型性能。

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

热门内容推荐

最新内容推荐

项目优选

收起
ohos_react_nativeohos_react_native
React Native鸿蒙化仓库
C++
176
260
RuoYi-Vue3RuoYi-Vue3
🎉 (RuoYi)官方仓库 基于SpringBoot,Spring Security,JWT,Vue3 & Vite、Element Plus 的前后端分离权限管理系统
Vue
854
505
openGauss-serveropenGauss-server
openGauss kernel ~ openGauss is an open source relational database management system
C++
129
182
openHiTLSopenHiTLS
旨在打造算法先进、性能卓越、高效敏捷、安全可靠的密码套件,通过轻量级、可剪裁的软件技术架构满足各行业不同场景的多样化要求,让密码技术应用更简单,同时探索后量子等先进算法创新实践,构建密码前沿技术底座!
C
254
295
ShopXO开源商城ShopXO开源商城
🔥🔥🔥ShopXO企业级免费开源商城系统,可视化DIY拖拽装修、包含PC、H5、多端小程序(微信+支付宝+百度+头条&抖音+QQ+快手)、APP、多仓库、多商户、多门店、IM客服、进销存,遵循MIT开源协议发布、基于ThinkPHP8框架研发
JavaScript
93
15
Cangjie-ExamplesCangjie-Examples
本仓将收集和展示高质量的仓颉示例代码,欢迎大家投稿,让全世界看到您的妙趣设计,也让更多人通过您的编码理解和喜爱仓颉语言。
Cangjie
331
1.08 K
HarmonyOS-ExamplesHarmonyOS-Examples
本仓将收集和展示仓颉鸿蒙应用示例代码,欢迎大家投稿,在仓颉鸿蒙社区展现你的妙趣设计!
Cangjie
397
370
note-gennote-gen
一款跨平台的 Markdown AI 笔记软件,致力于使用 AI 建立记录和写作的桥梁。
TSX
83
4
CangjieCommunityCangjieCommunity
为仓颉编程语言开发者打造活跃、开放、高质量的社区环境
Markdown
1.07 K
0
kernelkernel
deepin linux kernel
C
21
5