Detectron2 中data的部分和maskrcnn_benchmark中的不太同樣。
首先,爲了實現數據集的調用與實現的分離,在catalog.py
中實現了DataCatalog
和MetadataCatalog
兩個類,分別存儲了各類數據的屬性,調用接口等。其中由DataCatalog.get(dataset_name')
返回數據列表,並由comom.py
中實現的DatasetFromList
生成data.Dataset
。json
DataCatalog
和MetadataCatalog
兩個類使用了類屬性存儲數據集屬性與數據,用於建立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_names,
dataset_id_to_contiguous_id和
stuff_class_names,分別是類別名稱,原數據集類別標籤到訓練用連續標籤的映射和相對於目標的環境標籤。 並非全部數據集都有以上三種屬性,並且每一個數據集會有其餘屬性,例如coco數據集中會用到
image_root和
json_file`等其餘屬性。函數
總之,DataCatalog
和MetadataCatalog
兩個類實現了torch.utils.data.Dataset
的建立與具體數據集讀取的分,提供了使用字符串建立Dataset
和DataLoader
的方法。
具體Dataset
從DatasetFromLists
建立,而後通過MapDataset
和Sampler
等獲得DataLoader
。3d