mmdetection源码阅读

阅读从tools/train.py开始。

功能模块

  1. Register
    位置:utils/registry.py
    用于注册起到相同作用的(例如coco/voc数据类、模型类、数据处理流程类)类别。具体功能是这样的。
    Register__init__加载了两个属性,分别是name,module_dict.
    Register有两个主要功能函数,分别是register_module,get.
    假设我们要生成一个实例,用于注册一些数据集类。我们记这个实例为DATASET.DATASET=Register('dataset'),也就是name属性为dataset。通过使用register_module函数能够向module_dict中添加模块。例如我们可以向该实例中添加coco,voc。则module_dict={‘coco’:coco_class,'voc':voc_class}
    在mmdetection里,主要通过@修饰符的方法来使用这个类。例如在coco.py文件中首先加载DATASET实例,在coco类定义时添加@DATASETS.register_module,则coco类别被注册到DATASET实例中去了。
  2. build_from_cfg函数
    位置:utils/registry.py
    输入:cfg, registry, default_args=None
    其中cfg是字典类型,一般为config文件的一部分内容;registryRegister类的一个实例。该函数主要使用registryget功能,来得到cfg所指定的模型或数据集所对应的类(事先registry已经加载过了),然后将default_args作为该类的参数进行输出。

数据集加载

  1. tain中的build_dataset用于加载数据集类(如coco、voc等)。首先调用了datasets/builder.pybuild_dataset函数。在调用datasets/builder.py时,在import时对coco、voc、pipelines等都通过Register类进行了注册。 build_dataset函数则调用了build_from_cfg函数。
  2. 以voc数据集为例讲一下数据集类的实现。
    # 类的构成
    torch.utils.data.Dataset -> CustomDataset -> XMLDataset -> VOCDataset
    
    查看torch.utils.data.Dataset的代码,其中提到,所有基于Dataset的类,都必须实现__getitem__方法,该方法根据给定的key能够给出相应的数据。那么在CustomDataset类中,可以看到该方法的实现:
        def __getitem__(self, idx):
            if self.test_mode:
                return self.prepare_test_img(idx)
            while True:
                data = self.prepare_train_img(idx)
                if data is None:
                    idx = self._rand_another(idx)
                    continue
                return data
    
    XMLDataset中实现了两个函数,分别是load_annotations,get_ann_info,用于读取xml内容。VOCDataset中增加了self.year属性。

模型加载
build_detector用于加载模型,调用了models/builder.py中的build_detector函数。这里的加载形式与加载数据集相同,不再赘述。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值