Detectron2 代码剖析(一) data 部分

Detectron2 中data的部分和maskrcnn_benchmark中的不太同样。
首先,为了实现数据集的调用与实现的分离,在catalog.py中实现了DataCatalogMetadataCatalog两个类,分别存储了各类数据的属性,调用接口等。其中由DataCatalog.get(dataset_name') 返回数据列表,并由comom.py中实现的DatasetFromList生成data.Datasetjson

DataCatalogMetadataCatalog两个类使用了类属性存储数据集属性与数据,用于建立data.Dataset,在整个detectron2中能够做为全局变量使用。
其中DataCatalog中维护了一个_REGISTERED类属性,是一个dict{dataset_name:func},用以支持字符串访问并得到数据集的数据,例如能够经过DatasetCatalog.get('coco_2017_train')调用dataset/register_coco.py文件中的load_coco_json()函数地址。
MetadataCatalog类维护了一个'_NAME_TO_META类属性,是一个list[Metadata]。 其中Metadata实例中存储了数据集的一些属性,全部数据集的公用属性有class_namesdataset_id_to_contiguous_idstuff_class_names,分别是类别名称,原数据集类别标签到训练用连续标签的映射和相对于目标的环境标签。 并非全部数据集都有以上三种属性,并且每一个数据集会有其余属性,例如coco数据集中会用到image_rootjson_file`等其余属性。函数

总之,DataCatalogMetadataCatalog两个类实现了torch.utils.data.Dataset的建立与具体数据集读取的分,提供了使用字符串建立DatasetDataLoader的方法。
具体DatasetDatasetFromLists建立,而后通过MapDatasetSampler等获得DataLoader3d

相关文章
相关标签/搜索