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

相關文章
相關標籤/搜索