作者: 佚名 浏览: 日期:2024-05-06
目录
自定义优化器构造函数(optimizer constructor)
我们已经支持所有由pytorch实现的优化器,只需改变配置文件中的optimizer域即可。例如,如果你想使用ADAM(注意,性能可能会降低),做如下修改:
用户仅需修改优化器配置中的lr即可调整模型的学习率。用户可根据Python提供的API doc设置参数。
自定义优化器应按照如下步骤定义:
假设你想添加一个拥有参数a,b和c,名为MyOptimizer的优化器。你需要创建一个新的目录mmdet/core/optimizer。然后在文件中实现新的优化器,例如,在mmdet/core/optimizer/my_optimizer.py:
为了能够找到上述模块,该模块应首先被导入主命名空间(main namespace)。有两种可选方式。
(1)修改mmdet/core/optimizer/__init__.py导入。
新定义的模块应该在mmdet/core/optimizer/__init__.py中被导入,以便注册表可以查询到并添加它:
(2)在配置文件中使用custom_imports手动导入:
模块mmdet.core.optimizer.my_optimizer将会在程序开始时被导入,并且MyOptimizer类会被自动注册。注意,仅有包含MyOptimizer类的包会被导入,mmdet.core.optimizer.my_optimizer.MyOptimizer不会被直接导入。
实际上用户通过这种导入方法可以使用完全不同的目录结构,只要模块的根目录能包含在PYTHONPATH中。
然后你就可以在配置文件中的optimizer域使用MyOptimizer。在这个配置文件中,优化器被optimizer域作如下定义:
为了使用自己的优化器,对域作如下改变:
一些模块可能对优化器有特定的参数设置,例如BN层的权重衰减。用户可通过自定义优化器构造函数来实现参数的精细调整。
默认的构造函数实现方法在这里,可以作为新的构造函数的模板。
待更新......
默认情况下,我们使用逐步学习率和1x策略,这调用了MMCV中的StepLRHook。我们支持很多其他的学习率策略(这里),例如CosineAnnealing和Poly策略。这里给出一些例子。
Poly策略:
ConsineAnnealing策略:
官网给的方法不再适用,可直接在配置文件中的evaluation域指定验证上一轮训练模型的间隔和评价指标,对于COCO格式数据集而言,默认配置如下:
1.实现一个新钩子
有时用户可能需要实现一个新的钩子。MMD从v2.3.0开始支持在训练过程中使用自定义钩子。因此用户可以直接在mmdet或者他们基于mmdet的源码中实现一个钩子,并通过修改训练的配置文件来使用它。在v2.3.0之前,用户需要在训练之前修改源码使得钩子完成注册。这里我们给出一个在mmdet中创建新钩子并在训练中使用它的例子。
用户需要根据钩子的功能,指定其在训练过程中的每个阶段before_run,after_run,after_epoch,before_epoch,before_iter和after_iter的行为。
2.注册新钩子
然后我们需要导入MyHook。假设该文件在mmdet/core/utils/my_hook.py路径下,有两种实现方法:
(1)修改mmdet/core/utils/__init__.py来导入。
新定义的模块应该在mmdet/core/utils/__init__.py被导入,以便Registry可以发现并添加它:
(2)使用custom_imports在配置文件中手动导入:
3.修改配置文件
你也可以通过如下方法添加键priority等于'NORMAL'或?'HIGHEST'设置钩子的优先级:
注册过程中钩子默认优先级为NORMAL。
如果钩子在MMCV中已经实现,你可以直接修改配置文件使用钩子:
4.例子:NumClassCheckHook
我们实现了一个名为NumClassCheckHook的钩子来检查在头部的num_classes是否匹配dataset中CLASSES的长度。
我们将它设置在default_runtime.py文件中。
以下是一些常见的钩子,它们并没有通过custom_hooks注册。
log_config
checkpoint_config
evaluation
lr_config
optimizer_config
momentum_config
在这些钩子中,只有logger钩子拥有VERY_LOW优先级,其他优先级均为NORMAL。上述提到的教程已经覆盖了如何修改optimizer_config,momentum_config和lr_config,这里我们展示log_config,checkpoint_config和evaluation的使用。
Checkpoint config
MMCV runner使用checkpoint_config初始化CheckpointHook。
用户可以设置max_keep_ckpts来保存少数checkpoints文件,或者通过save_optimizer决定是否存储优化器的状态字典。更多参数细节参考这里。
Log config
log_config封装了多个logger钩子,并且能设置间隔。现在MMCV支持WandbLoggerHook,MlflowLoggerHook和TensorboardLoggerHook,详细使用方法请参考文档。
Evaluation config
evaluation的配置将被用于EvalHook的初始化。除了键interval,其他参数例如metric将会被传入dataset.evaluate()