以下链接是个人关于detectron2(目标检测框架),所有见解,如有错误欢迎大家指出,我会第一时间纠正。有兴趣的朋友可以加微信:a944284742相互讨论技术。若是帮助到了你什么,一定要记得点赞!因为这是对我最大的鼓励。
detectron2(目标检测框架)无死角玩转-00:目录
前言
根据前面的博客,已经知道如何去训练自己的数据,本人是在之前的编写的程序上进行分析,也就是使用configs/My/retinanet_R_50_FPN_3x.yaml配置文件。通过tools/train_my.py的代码,可以在main函数看到如下:
trainer = Trainer(cfg)
trainer.resume_or_load(resume=args.resume)
return trainer.train()
说到底,其核心在于Trainer(cfg),既然如此,我们就来对其解剖一下。
Registry
进入Trainer,可以看到,重写了两个函数分别为:
def build_evaluator(cls, cfg, dataset_name, output_folder=None):
def test_with_TTA(cls, cfg, model):
暂时我们不去理会,到底是什么玩意,先看看Trainer继承的父类DefaultTrainer,在初始化函数可以看到如下:
def __init__(self, cfg):
model = self.build_model(cfg) # 构建模型
optimizer = self.build_optimizer(cfg, model) # 构建优化方式
data_loader = self.build_train_loader(cfg) # 构建训练数据迭代器
是的,就是这么简单,整体框架就是这样的,倒是其内部的实现是很复杂的,比如我们进入self.build_model中的build_model(cfg),追踪到detectron2\modeling\meta_arch\build.py文件,真的很简单,就下面几句代码:
from detectron2.utils.registry import Registry
META_ARCH_REGISTRY = Registry("META_ARCH") # noqa F401 isort:skip
META_ARCH_REGISTRY.__doc__ = """
def build_model(cfg):
meta_arch = cfg.MODEL.META_ARCHITECTURE
return META_ARCH_REGISTRY.get(meta_arch)(cfg)
相信大家看了之后也明白,核心要点就是META_ARCH_REGISTRY = Registry(“META_ARCH”),那么这到底是个什么东西呢?