Detectron2 使用自定义数据集

本文档解释了数据集 API(DatasetCatalog、MetadataCatalog)如何工作,以及如何使用它们来添加自定义数据集。

如果你想使用自定义数据集,同时重用detectron2的数据加载器(data loaders),你需要:

  1. 注册您的数据集(即,告诉detectron2 如何获取您的数据集)。
  2. (可选)为您的数据集注册元数据。

为了让detectron2知道如何获取名为“my_dataset”的数据集,用户需要实现一个函数,这个函数用来返回下文中讲到的数据集的字典列表,然后告诉detectron2这个函数:

def my_dataset_function():
  ...
  return list[dict] in the following format

from detectron2.data import DatasetCatalog
DatasetCatalog.register("my_dataset", my_dataset_function)
# later, to access the data:
data: List[Dict] = DatasetCatalog.get("my_dataset")

在这里,代码片段将名为“my_dataset”的数据集与返回数据的函数相关联。如果多次调用,该函数必须返回相同的数据(具有相同的顺序)。注册一直有效,直到进程退出。
该函数可以做任意事情,并且应该返回 list[dict] 中的数据,每个 dict 都采用以下格式之一:

  • Detectron2 的标准数据集字典,如下所述。这将使其与detectron2中的许多其他内置功能一起使用,因此建议在足够时使用它。
  • 任何自定义格式。您还可以以自己的格式返回任意dicts,例如为新任务添加额外的键。然后,您还需要在下游正确处理它们。请参阅下面的更多细节。
    标准数据集字典
    对于标准任务(实例检测、实例/语义/全景分割、关键点检测),我们将原始数据集加载到字典列表( list[dict]) 中,其规范类似于 COCO 的标注。
    每个 dict 包含有关一个图像的信息。 dict 可能具有以下字段,所需字段根据数据加载器或任务的需要而有所不同(见下文)
Task Fields
Common file_name, height, width, image_id
Instance detection/segmentation annotations
Semantic segmentation sem_seg_file_name
Panoptic segmentation pan_seg_file_name, segments_info
  • file_name:图像文件的完整路径。
  • height, width:整数,图像的形状。
  • image_id(str 或 int):标识此图像的唯一 id。
  • annotations (list[dict]):实例检测/分割或关键点检测任务所需要的。每个 dict 对应的此图像中的一个实例的标注,并且可能包含以下keys:

 1. bbox (list[float], required): 代表实例边界框的 4 个数字的列表。
 2. bbox_mode (int, required): bbox 的格式。它必须是structures.BoxMode的成员。目前支持:BoxMode.XYXY_ABS、BoxMode.XYWH_ABS。
 3. category_id (int, required)[0, num_categories-1] 范围内的整数,表示类别标签。如果适用,保留值 num_categories 以表示“背景”类别。
 4. segmentation (list[list[float]]dict):实例的分割掩码。
 		a. 如果是 list[list[float]],它表示一个多边形列表,对象的每个连接组件一个。每个 list[float] 是一个简单的多边形,格式为 [x1, y1, ..., xn, yn] (n≥3)。 Xs 和 Ys 是以像素为单位的绝对坐标。		
		b. 如果是 dict,则表示 COCO 压缩 RLE 格式中的每像素分割掩码。 dict 应该有键“size”和“counts”。您可以通过 pycocotools.mask.encode(np.asarray(mask, order="F")) 将 0s 和 1s 的 uint8 分段掩码转换为这样的 dict。如果使用这种格式的默认数据加载器,cfg.INPUT.MASK_FORMAT 必须设置为位掩码。		
 5. keypoints (list[float]):格式为 [x1, y1, v1,..., xn, yn, vn]。 v[i] 表示该关键点的可见性。 n 必须等于关键点类别的数量。 Xs 和 Ys 是 [0, W 或 H] 范围内的绝对实值坐标。		
		(注意,COCO 格式的关键点坐标是 [0, W-1 或 H-1] 范围内的整数,这与我们的标准格式不同。Detectron2 将 COCO 关键点坐标加 0.5 以将它们从离散像素索引转换为浮点数坐标。)		
 6. iscrowd:0(默认)或1。此实例是否标记为COCO的“人群区域”。如果您不知道它的含义,请不要包含此字段。

如果 annotations 是一个空列表,则意味着图像被标记为没有对象。默认情况下,此类图像将从训练中删除,但可以使用 DATALOADER.FILTER_EMPTY_ANNOTATIONS 包含在内。

  • sem_seg_file_name (str):语义分割ground truth文件的完整路径。它应该是一个灰度图像,其像素值是整数标签。
  • pan_seg_file_name (str):全景分割ground truth文件的完整路径。它应该是一个 RGB 图像,其像素值是使用 panopticapi.utils.id2rgb 函数编码的整数 id。 id 由segments_info 定义。如果 id
    没有出现在segments_info 中,则该像素被认为是未标记的,并且通常在训练和评估中被忽略。
  • Segments_info(list[dict]):定义全景分割ground truth中每个id的含义。每个 dict 都有以下键:

 1. id (int):出现在ground truth图像中的整数。
 2. category_id(int)[0, num_categories-1] 范围内的整数,表示类别标签。
 3. iscrowd:0(默认)或1。此实例是否标记为COCO的“人群区域”。

你可能感兴趣的:(detectron2,深度学习,detectron2)