注:项目地址:https://github.com/jmu201521121021/yolo.pytorch
一、注册机制的使用方法(参考链接:https://zhuanlan.zhihu.com/p/93835858)
from fvcore.common.registry import Registry
# 创建一个Registry对象
registry_machine = Registry('registry_machine')
# 注册
@registry_machine.register()
def print_hello_world(word):
print(word)
# 其中cfg为所调用的函数名/类名
cfg = "print_hello_world"
# 相当与调用print_hello_world('hello world')
registry_machine.get(cfg)('hello world')
先创建一个Registry的对象,并在方法/类定义的时候用装饰器装饰它,则可以通过 registry_machine.get(方法名)的 办法来间接的调用被注册的函数
使用注册机制的好处:代码的可扩展性变强
二、项目中所用到的注册机制
例子(加载训练数据mnist):
1、目录结构
2、运行顺序
2.1、调用dataloader.py文件中的 build_classifier_train_dataloader(cfg) 函数
其中cfg.DATASET.DATASET_NAME = "BuildMnistDataset" ->用于调用被注册的BuildMnistDataset类
2.2、执行上图中的dataset = build_dataset(cfg, training=True)前会先进入dataset文件夹下的__init__.py,将注册好的类/方法加载进来
2.3、执行dataset = build_dataset(cfg, training=True)时调用build.py中的build_dataset函数,函数中的DATASET_REGISTRY.get(dataset_name)(cfg, training)方法相当于创建一个mnist_dataset.py中的BuildMnistDataset(cfg, training)对象
2.4、在上一步的创建对象时调用BuildMnistDataset(BaseDataset)类中的__init__方法执行setItems(cfg)后调用get_image_list方法就可以获取数据