参考 Detectron2入门教程 - 云+社区 - 腾讯云
目录
2.3. build_detection_train_loader 方法解析
demo
中的脚本。configs
:示例配置文件合集。datasets
:数据集准备工作,主要就是各个数据集的基本结构,以及需要如何预处理。demo
:快速体验Detectron2,与Getting Started文档对应。如果想要体验Model ZOO中结果的内容就可以用这个。detectron2
:项目主要代码都在这里了。dev
:一些开发者会用到的脚本。docker
:没啥好介绍的。docs
:一些官方文档。projects
:基于Detectron2的三个项目,DensePose/TensorMask/TridentNet。
tests
:单元测试类。tools
:常用脚本,如训练、benchmark、展示数据集等。detectron2/config/default.py
文件。configs
文件夹中,且使用yaml形式。_BASE_
属性,可以将其他示例配置文件作为基础,如果有冲突则用当前配置文件的信息覆盖。@registry_object.register
修饰目标方法/类,这样可以在导入detectron2的同时将 key/value 保存起来。detectron2/modeling/__init__.py
文件。build.py
,主要就是从Registry中通过名称获取方法/类,然后将示例配置文件中参数导入目标方法/类中。detectron2/data/catalog.py
中的 MetadataCatalog
与 DatasetCatalog
,前者保存了数据集的元数据,后者保留了一个方法,该方法用于获取数据集 list(dict)
。detectron2/data/datasets/buildin.py
中调用了 register_all_coco()
等四个方法,这些方法调用了 MetadataCatalog
和 DatasetCatalog
的注册方法。build_detection_train_loader
方法,该方法会调用DatasetCatalog
中的方法,获取 list(dict)
。get_dict
方法,该方法用于获取一个 list[dict]
对象,每个字典就是一条输入数据,具体的key列表可以到文档中自己看。MetadataCatalog.get(dataset_name).set(name, value)
为新数据库添加元数据。list[dict]
对象。DatasetMapeer
中。model.forward()
的输入。build_model
, build_backbone
,build_roi_heads
等方法来构建。DetectionCheckpointer(model).load(file_path)
。outputs = model(inputs)
list[dict]
来实现,即上面dataloader的输出,具体的key形式可以参考这个页面中的内容。list[dict]
,具体的形式可以参考这篇文章中的内容。tools/plain_train_net.py
来训练模型。SimpleTrainer().train()
。DefaultTrainer().train()
。CfgNode
对象的使用。_BASE_
参数来重复配置定义到一个文件中。detectron2/data/build.py
中的 build_detection_train_loader
或build_detection_test_loader
方法。detectron2/detectron2/data
目录下。detectron2/config/defaults.py
中 _C.INPUT _C.DATASETS _C.DATALOADER
开头的配置。1.3.
中的内容。detectron2/detectron2/data/datasets/builtin.py
。DatasetCatalog
对象以及 MetadataCatalog
对象,解析数据集并获取数据集基本信息。
DatasetCatalog
中的对应的方法,获取 list[dict]
对象。DatasetCatalog
获取的是 list[dict]
,mapper函数输出的也是 list[dict]
,但前后两个字典的形式是不一样的,具体可以参考官方文档,里面都有具体的描述。detectron2/detectron2/data/build.py
中。list[dict]
对象。先根据数据库名称调用 DatasetCatalog
中的方法,获取原始 list[dict]
对象,再通过一些条件进行筛选。DatasetFromList
对象,该类是 torch.utils.data.Dataset
的子类。DatasetMapper
的源码,主要工作包括读取图像、resize、crop、flip、转换数据与标签的形式等。torch.utils.data.sampler.Sampler
对象,实现的功能好像包括Repeat Sample、shuffle、batch功能。torch.utils.data.DataLoader
对象。DatasetFromList
、MapDataset
等,有点 tf.data
的感觉,挺有意思。detectron2/detectron2/data/transforms/transform_gen.py
中定义。from detectron2.data import transforms as T
以及 T.ResizeShortestEdge
来实现。DatasetMapper
的源码中看。detectron2/detectron2/modeling/meta_arch/build.py
中的 def build_model(cfg)
方法。detectron2/detectron2/modeling
目录下。detectron2/config/defaults.py
中_C.MODEL
开头的配置。META_ARCHITECTURE
参数,选择基本框架,也就是 meta arch。
ANCHOR_GENERATOR_REGISTRY
:如何生成anchors。BACKBONE_REGISTRY
:主干网络,包括FPN。META_ARCH_REGISTRY
:基本网络,总体结构。SEM_SEG_HEADS_REGISTRY
:应该是用来做语义分隔的。PROPOSAL_GENERATOR_REGISTRY
:Faster RCNN中的Region proposal Network,即如何生成proposals。RPN_HEAD_REGISTRY
:第一阶段训练所需的输入。ROI_BOX_HEAD_REGISTRY
:ROI Head中的bbox分支。ROI_HEADS_REGISTRY
:通过特征图和第一阶段的proposals得到ROI。ROI_KEYPOINT_HEAD_REGISTRY
:ROI Head中的keypoint分支。ROI_MASK_HEAD_REGISTRY
:ROI Head中的mask分支。detectron2/detectron2/engine/defaults.py
中的 DefaultTrainer, DefaultPredictor
。detectron2/detectron2/engine
和 detectron2/detectron2/solver
中detectron2/config/defaults.py
中_C.SOLVER _C.TEST
开头的配置。TrainerBase, SimpleTrainer, DefaultTrainer
三个类。TrainerBase
:
detectron2/detectron2/engine/train_loop.py
中。HookBase
对象,在训练过程的各个时间点进行自定义处理。train(self, start_iter: int, max_iter: int)
,且维训练提供了一个 EventStorage
对象。SimpleTrainer
:
detectron2/detectron2/engine/train_loop.py
中。TrainerBase
的基础上添加了训练所需的基本参数以及最基本的训练过程代码。model/data_loader/optimizer
run_step
函数中,主要包括的功能是:
EventStorage
对象中。DefaultTrainer
detectron2/detectron2/engine/defaults.py
中。SimpleTrainer
的基础上,提供了通过配置文件创建模型、数据集、优化器、学习率等一系列操作。detectron2/detectron2/engine/hooks.py
中。