MMCV 自定义

假设想要添加MyOptimizer的新优化器,有abc三个参数,需要创建一个新的路径 mmdet/core/optimizer。然后在config文件中应用一个新的优化器 mmdet/core/optimizer/my_optimizer.py

from .registry import OPTIMIZERS
from torch.optim import Optimizer


@OPTIMIZERS.register_module()
class MyOptimizer(Optimizer):

    def __init__(self, a, b, c)

1.2.2 将新的优化器添加到注册器中

上边定义完成的模块想要在config文件中使用,就必须import到一个明明空间中,两种方法,实现这个工作:

  • 直接在__init__.py文件中,导入,在mmdet/core/optimizer/__init__.py

    from .my_optimizer import MyOptimizer
  • 在config文件中实现

    custom_imports = dict(imports=['mmdet.core.optimizer.my_optimizer'], allow_failed_imports=False)

该模块mmdet.core.optimizer.my_optimizer将在程序开始时导入,然后自动注册MyOptimizer这个类。请注意,仅应该导入包含MyOptimizer的包。 mmdet.core.optimizer.my_optimizer.MyOptimizer 无法直接导入。

实际上,使用这种导入的方式,使用者可以直接使用不同的文件路径结构,只要模块的路径在PYTHONPATH中可以找到即可。

1.2.3 在config文件中指定优化器

在config文件中的optimizer字段中使用MyOptimizer

# 原始的优化器使用方法
optimizer = dict(type='SGD', lr=0.02, momentum=0.9, weight_decay=0.0001)
# 自定义优化器使用方法
optimizer = dict(type='MyOptimizer', a=a_value, b=b_value, c=c_value)