【MMCV】让你在10分钟了解mmcv注册器(registry)

本文介绍了MMCV框架中的注册器概念,它用于管理不同模块,如模型、数据集等。注册器作为类到字符串的映射,使得通过字符串能方便地查找和实例化所需模块。文章详细阐述了注册器的使用步骤,包括创建注册器、注册模块及自定义构建函数,并给出了实例。同时,还展示了如何通过父类注册器构建子类注册器。
摘要由CSDN通过智能技术生成


前言

MMCV 使用 注册器 来管理具有相似功能的不同模块, 例如, 检测器中的主干网络、头部、和模型颈部。 在 OpenMMLab 家族中的绝大部分开源项目使用注册器去管理数据集和模型的模块,例如 MMDetection。
官方指南


一、注册器是什么?

在MMCV中,注册器可以看作类到字符串的映射。 一个注册器中的类通常有相似的接口,但是可以实现不同的算法或支持不同的数据集。 借助注册器,用户可以通过使用相应的字符串查找并实例化该类,并根据他们的需要实例化对应模块。

二、使用步骤

1.创建一个构建方法(可选,在大多数情况下您可以只使用默认方法)
2.创建注册器
3.使用此注册器来管理模块

一个简单的例子

file1:
	from mmcv.utils import Registry
	# 创建转换器(converter)的注册器(registry)
	CONVERTERS = Registry('converter')
	
file2:
	from .builder import CONVERTERS
	
	# 使用注册器管理模块
	@CONVERTERS.register_module()
	class Converter1(object):
	    def __init__(self, a, b):
	        self.a = a
	        self.b = b
file3:   
	converter_cfg = dict(type='Converter1', a=a_value, b=b_value)
	converter = CONVERTERS.build(converter_cfg)

在这里就实现了字符串到类的 对应转化——‘Converter1’ -> <class ‘Converter1’>
通过XXX.build( )函数来实例化

自定义构建

我们可以实现一个自定义的 build_func (构建函数)并将其传递到注册器中。

from mmcv.utils import Registry

# 创建一个构建函数
def build_converter(cfg, registry, *args, **kwargs):
    cfg_ = cfg.copy()
    converter_type = cfg_.pop('type')
    if converter_type not in registry:
        raise KeyError(f'Unrecognized converter type {converter_type}')
    else:
        converter_cls = registry.get(converter_type)

    converter = converter_cls(*args, **kwargs, **cfg_)
    return converter

# 创建一个用于转换器(converters)的注册器,并传递(registry)``build_converter`` 函数
CONVERTERS = Registry('converter', build_func=build_converter)

MMCV实例说明

在mmcv/cnn/builder.py 中自定义了build_func( )

def build_model_from_cfg(cfg, registry, default_args=None):
    """Build a PyTorch model from config dict(s). Different from
    ``build_from_cfg``, if cfg is a list, a ``nn.Sequential`` will be built.

    Args:
        cfg (dict, list[dict]): The config of modules, is is either a config
            dict or a list of config dicts. If cfg is a list, a
            the built modules will be wrapped with ``nn.Sequential``.
        registry (:obj:`Registry`): A registry the module belongs to.
        default_args (dict, optional): Default arguments to build the module.
            Defaults to None.

    Returns:
        nn.Module: A built nn module.
    """
    if isinstance(cfg, list):
        modules = [
            build_from_cfg(cfg_, registry, default_args) for cfg_ in cfg
        ]
        return Sequential(*modules)
    else:
        return build_from_cfg(cfg, registry, default_args)


MODELS = Registry('model', build_func=build_model_from_cfg)

其中就包含了自定义函数的注册器的用法
上述函数实现了——如果config类型是一个list,构建一个modules,其类型为‘ nn.Sequential ’

三.注册器的层次

可以通过父类注册器来构建子类注册器

from mmcv.cnn import MODELS as MMCV_MODELS

MODELS = Registry('models', parent=MMCV_MODELS)

总结

注册器是理解mmcv的重要内容,作者也是通过这篇文章来,记下相关内容,供自己学习使用!

mmcv.runner是一个用于管理模型训练和评估过程的模块。在mmcv/runner/base_runner.py文件中定义了runner类,该类是一个基础的运行器,用于管理模型的训练和评估过程。Runner对象的使用步骤包括初始化对象、注册各类Hook到Runner中、调用Runner的resume或load_checkpoint方法对权重进行加载、运行给定的工作流。此外,还有IterBaseRunner类,它与BaseRunner类类似,但没有实现run_iter方法,而是在train和val方法中实现了run_iter的计算。另外,还有一个IterLoader类,用于在迭代完一个epoch后重新遍历数据。总的来说,mmcv.runner提供了一套方便的工具和接口,用于管理模型的训练和评估过程。 #### 引用[.reference_title] - *1* *3* [MMCV之Runner介绍](https://blog.csdn.net/wulele2/article/details/122148362)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [计算机视觉系列-MMCV 组件分析: Runner](https://blog.csdn.net/duan_zhihua/article/details/125083458)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值