读mmdetection的faster rcnn代码

一行行看运行过程
读mmdetection的faster rcnn代码_第1张图片
首先将参数传好,第一行设断点,一行行过就完事了。
读mmdetection的faster rcnn代码_第2张图片
很明显是字典。

model = build_detector(cfg.model, train_cfg=cfg.train_cfg, test_cfg=cfg.test_cfg)
#这行创建模型了
def build_detector(cfg, train_cfg=None, test_cfg=None):
    return build(cfg, DETECTORS, dict(train_cfg=train_cfg, test_cfg=test_cfg))
    #接着跳到了这里,接收了cfg.model,也是faster配置文件里的第一个字典。后面接
    #这跳到build,中间的DETECTORS是从哪来的。
from .registry import (BACKBONES, DETECTORS, HEADS, LOSSES, NECKS,
                       ROI_EXTRACTORS, SHARED_HEADS)
#开头写了从registry里掉的,进去看看。
DETECTORS = Registry('detector')
#registry.py里的,再进去看看。

https://www.cnblogs.com/BlueSkyyj/p/9415087.html
这里贴个地址,讲__init__和__all__的作用的,我也是第一次读项目(其实基本的python语句)掌握的也不太明白。我初步理解是__init__.__all__后的模块都会导入。

_all__ = [
    'BACKBONES', 'NECKS', 'ROI_EXTRACTORS', 'SHARED_HEADS', 'HEADS', 'LOSSES',
    'DETECTORS', 'build_backbone', 'build_neck', 'build_roi_extractor',
    'build_shared_head', 'build_head', 'build_loss', 'build_detector'
]

然后看看Registry(‘detector’)是什么。

__all__ = [
    'ATSS', 'BaseDetector', 'SingleStageDetector', 'TwoStageDetector', 'RPN',
    'FastRCNN', 'FasterRCNN', 'MaskRCNN', 'CascadeRCNN', 'HybridTaskCascade',
    'DoubleHeadRCNN', 'RetinaNet', 'FCOS', 'GridRCNN', 'MaskScoringRCNN',
    'RepPointsDetector', 'FOVEA'
]#这里面就有FasterRCNN了

再往下看

@DETECTORS.register_module
class FasterRCNN(TwoStageDetector):#一个双阶段的类

现在跳回build函数。前面没说Registry也是个类。

class Registry(object):
def build(cfg, registry, default_args=None):

所以到了build函数传入的几个参数就是这样的:一个cfg字典,一个registry类。
接着跳到了

#这才开始正题了
def build_from_cfg(cfg, registry, default_args=None):
args = cfg.copy()#读参
obj_type = args.pop('type')#读模型 FasterRCNN
       if mmcv.is_str(obj_type):
        obj_cls = registry.get(obj_type)#这里返回了FasterRCNN类
#再下一步就跳到了FasterRCNN类里了,这块我还不了解(主要是类的继承啥的....原谅菜鸡)。看明白了再写吧。

你可能感兴趣的:(python,pytorch,机器学习)