Detectron2 代码剖析(一) data 部分

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

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等得到DataLoader

原文地址:https://www.cnblogs.com/zi-wang/p/11777207.html