Detectron2注册机制Registry实现的示例分析
发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,今天就跟大家聊聊有关Detectron2注册机制Registry实现的示例分析,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。Detectron
千家信息网最后更新 2026年11月02日Detectron2注册机制Registry实现的示例分析
1.目的 1.1 注册机制的使用方法
首先来看一下注册机制是如何使用的: 对于detectron2这种,需要支持许多不同的模型的大型框架,理想情况下所有的模型的参数都希望写在配置文件中,那问题来了,如果我希望根据我的配置文件,决定我是需要用VGG还是用ResNet ,我要怎么写呢?
今天就跟大家聊聊有关Detectron2注册机制Registry实现的示例分析,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。
Detectron2注册机制 Registry 实现
在Detectron2 中,经常会对一个类或者函数进行注册:
关于这种操作,必须要明确两点:
1.1 注册机制的使用方法
registry_machine = Registry('registry_machine')registry_machine.register()def print_hello_world(word):print('hello {}'.format(word))registry_machine.register()def print_hi_world(word):print('hi {}'.format(word))if __name__ == '__main__':cfg1 = 'print_hello_word'registry_machine.get(cfg1)('world')cfg2 = 'print_hi_word'registry_machine.get(cfg2)('world')
可以看到,如果创建了一个Registry的对象,并在方法/类定义的时候用装饰器装饰它,则可以通过 registry_machine.get(方法名)的 办法来间接的调用被注册的函数
1.2 为什么使用注册类
如果是我,我可能会写出这种可扩展性超级低的暴搓的代码:
if class_name == 'VGG': model = build_VGG(args)elif class_name == 'ResNet': model = build_ResNet(args)
但是如果用了注册类,代码就是这样的:
class_name = 'VGG' # 'ResNet'model = model_registry(class_name)(args)
可以看到代码的可扩展性变得非常强了
2 具体实现细节
这部分就直接展示注册类的代码了,有兴趣的朋友可以研究一下其中的细节,个人觉得对装饰器的应用是非常的好了
# Copyright (c) Facebook, Inc. and its affiliates. All Rights Reservedclass Registry(object):def __init__(self, name):"""Args:name (str): the name of this registry"""self._name = nameself._obj_map = {}def _do_register(self, name, obj):assert (name not in self._obj_map), "An object named '{}' was already registered in '{}' registry!".format(name, self._name)self._obj_map[name] = objdef register(self, obj=None):"""Register the given object under the the name `obj.__name__`.Can be used as either a decorator or not. See docstring of this class for usage."""if obj is None:# used as a decoratordef deco(func_or_class):name = func_or_class.__name__self._do_register(name, func_or_class)return func_or_classreturn deco# used as a function callname = obj.__name__self._do_register(name, obj)def get(self, name):ret = self._obj_map.get(name)if ret is None:raise KeyError("No object named '{}' found in '{}' registry!".format(name, self._name))return retregistry_machine = Registry('registry_machine')registry_machine.register()def print_hello_world(word):print('hello {}'.format(word))registry_machine.register()def print_hi_world(word):print('hi {}'.format(word))if __name__ == '__main__':cfg1 = 'print_hello_word'registry_machine.get(cfg1)('world')cfg2 = 'print_hi_word'registry_machine.get(cfg2)('world')
看完上述内容,你们对Detectron2注册机制Registry实现的示例分析有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注行业资讯频道,感谢大家的支持。
机制
代码
内容
方法
示例
分析
函数
可扩展性
文件
模型
细节
支持
配置
不同
个人
使用方法
兴趣
办法
参数
可以通过
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
小米移动互联网科技园
新华互联网科技
平安科技 互联网
期待互联网科技
中国互联网科技发展
亿账通互联网科技
科技互联网公司logo
广州凡科互联网科技
狮子座互联网科技培训
顺网科技2021年互联网排名
佛山市拉法互联网科技有限公司
长沙互联网科技
恒生互联网科技业指数调整周期
智帮互联网科技公司最近动向
产业互联网科技服务公司
西安有哪些互联网高科技企业
兰石爱特工业互联网科技分公司
瑞安市蟠桃会互联网科技有限公司
如何强化互联网金融科技
小牛互联网科技有限公司地址
咖啡
互联网科技会
西安互联网科技
奇酷互联网科技
互联网金融中的现代科技
互联网媒体平台算高科技产业
深圳育鹏互联网科技有限公司招聘
乌鲁木齐新华智原互联网科技学校
广州新华互联网科技学校电竞方面
科技互联网海报