detectron2.data¶
-
detectron2.data.DatasetCatalog(dict)¶ 一个全局字典,用于存储有关数据集及其获取方式的信息。
它包含一个从字符串(用于标识数据集的名称,例如“coco_2014_train”)到函数的映射,该函数会解析数据集并以list[dict]的格式返回样本。
返回的字典应符合Detectron2数据集格式(详情请参阅DATASETS.md),如果与data/build.py,data/detection_transform.py中的数据加载功能一起使用。
创建此目录的目的是为了通过仅使用配置中的字符串,轻松选择不同的数据集。
-
detectron2.data.MetadataCatalog(dict)¶ MetadataCatalog 是一个全局字典,提供对给定数据集的
Metadata的访问。与特定名称关联的元数据是单例模式:一旦创建,该元数据将保持存在,并在后续调用
get(name)时返回。这类似于全局变量,因此不要滥用它。 它用于存储程序执行过程中恒定且共享的知识,例如:COCO数据集中的类别名称。
-
detectron2.data.build_detection_test_loader(dataset: Union[List[Any], torch.utils.data.Dataset], *, mapper: Callable[[Dict[str, Any]], Any], sampler: Optional[torch.utils.data.Sampler] = None, batch_size: int = 1, num_workers: int = 0, collate_fn: Optional[Callable[[List[Any]], Any]] = None) → torch.utils.data.DataLoader[源代码]¶ 类似于build_detection_train_loader,默认批处理大小=1, 采样器为
InferenceSampler。该采样器协调所有工作进程 以生成完全相同的样本集合。- Parameters
dataset – 一个数据集字典列表,或一个pytorch数据集(可以是映射式或可迭代式)。可以通过使用
DatasetCatalog.get()或get_detection_dataset_dicts()获取。mapper – 一个可调用对象,它从数据集中获取样本(字典)并返回模型可消费的格式。当使用cfg时,默认选择是
DatasetMapper(cfg, is_train=False)。sampler - 一个生成索引的采样器,这些索引将应用于
dataset。默认为InferenceSampler,它会在所有工作节点间分割数据集。如果dataset是可迭代的,则采样器必须为None。batch_size – 要创建的数据加载器的批次大小。默认为每个工作进程1张图像,因为这是在论文中报告推理时间的标准做法。
num_workers – 并行数据加载工作线程的数量
collate_fn - 与 torch.utils.data.DataLoader 的参数相同。默认不进行数据整理,直接返回数据列表。
- Returns
DataLoader - 一个torch DataLoader,用于加载指定的检测数据集,包含测试时转换和批处理功能。
示例:
data_loader = build_detection_test_loader( DatasetRegistry.get("my_test"), mapper=DatasetMapper(...)) # or, instantiate with a CfgNode: data_loader = build_detection_test_loader(cfg, "my_test")
-
detectron2.data.build_detection_train_loader(dataset, *, mapper, sampler=None, total_batch_size, aspect_ratio_grouping=True, num_workers=0, collate_fn=None, prefetch_factor=None, persistent_workers=False, pin_memory=False)[源代码]¶ 构建一个具有一些默认特性的目标检测数据加载器。
- Parameters
dataset (list 或 torch.utils.data.Dataset) – 可以是数据集字典的列表,或者是PyTorch数据集(映射式或可迭代式)。可以通过使用
DatasetCatalog.get()或get_detection_dataset_dicts()获取。mapper (可调用对象) – 一个可调用对象,它从数据集中获取一个样本(字典)并返回模型可消费的格式。当使用cfg时,默认选择是
DatasetMapper(cfg, is_train=True)。sampler (torch.utils.data.sampler.Sampler 或 None) - 一个生成索引的采样器,这些索引将应用于
dataset。 如果dataset是映射式的,默认采样器是TrainingSampler,它协调所有工作进程间的无限随机洗牌序列。 如果dataset是可迭代的,则采样器必须为None。total_batch_size (int) – 所有工作节点的总批次大小。
aspect_ratio_grouping (bool) – 是否对具有相似宽高比的图像进行分组以提高效率。启用时,要求数据集中的每个元素都是一个包含"width"和"height"键的字典。
num_workers (int) – 并行数据加载工作线程的数量
collate_fn - 一个决定如何进行批处理的函数,与torch.utils.data.DataLoader的参数相同。默认为不进行合并并返回数据列表。对于小批量大小和简单的数据结构,不合并是可以的。如果您的批量较大且每个样本包含太多小张量,在数据加载器中进行合并会更高效。
- Returns
torch.utils.data.DataLoader - 一个数据加载器。它的每个输出是一个长度为
total_batch_size / num_workers的list[mapped_element]列表,其中mapped_element由mapper生成。
-
detectron2.data.get_detection_dataset_dicts(names, filter_empty=True, min_keypoints=0, proposal_files=None, check_consistency=True)[源代码]¶ 加载并准备用于实例检测/分割和语义分割的数据集字典。
- Parameters
- Returns
list[dict] – 遵循标准数据集字典格式的字典列表。
-
detectron2.data.load_proposals_into_dataset(dataset_dicts, proposal_file)[源代码]¶ 将预计算的对象提议加载到数据集中。
提案文件应为一个包含以下键的pickled字典:
“ids”: list[int] or list[str], 图像ID列表
"boxes": list[np.ndarray], 每个都是对应图像ID的Nx4数组形式的边界框
“objectness_logits”: list[np.ndarray],每个都是与对应边界框相关的N维目标性评分数组。
“bbox_mode”: 边界框数组的BoxMode。默认为
BoxMode.XYXY_ABS。
-
class
detectron2.data.Metadata[源代码]¶ -
一个支持简单属性设置/获取的类。 它旨在存储数据集的元数据并使其全局可访问。
示例:
# somewhere when you load the data: MetadataCatalog.get("mydataset").thing_classes = ["person", "dog"] # somewhere when you print statistics or visualize: classes = MetadataCatalog.get("mydataset").thing_classes
-
class
detectron2.data.ToIterableDataset(*args, **kwds)[源代码]¶ 基类:
torch.utils.data.IterableDataset将一个基于索引的旧式(也称为映射式)数据集转换为可迭代式数据集。
-
__init__(dataset: torch.utils.data.Dataset, sampler: torch.utils.data.Sampler, shard_sampler: bool = True, shard_chunk_size: int = 1)[源代码]¶ - Parameters
dataset – 一个旧式数据集,包含
__getitem__方法sampler – 一个低成本的可迭代对象,用于生成要应用于
dataset的索引。shard_sampler –
是否基于当前PyTorch数据加载器的工作进程ID对采样器进行分片。当IterableDataset被PyTorch的DataLoader分叉到多个工作进程时,它需要根据工作进程ID对其数据进行分片,以避免不同工作进程产生相同数据。
大多数采样器(如我们的TrainingSampler)不会基于数据加载器工作进程ID进行分片,此时该参数应设为True。但某些采样器可能已实现分片功能,这种情况下该参数应设为False。
shard_chunk_size - 当对采样器进行分片时,每个工作进程将
-
-
class
detectron2.data.DatasetMapper(*args, **kwargs)[源代码]¶ 基类:
object一个可调用对象,接收Detectron2数据集格式的字典数据,并将其映射为模型使用的格式。
这是默认的可调用函数,用于将数据集字典映射为训练数据。 您可能需要参考它来实现自定义逻辑, 例如不同的图像读取或转换方式。 详情请参阅Dataloader。
当前可调用对象执行以下操作:
从“file_name”读取图像
对图像和标注应用裁剪/几何变换
准备数据和标注为Tensor和
Instances
-
__init__(is_train: bool, *, augmentations: List[Union[detectron2.data.transforms.Augmentation, detectron2.data.transforms.Transform]], image_format: str, use_instance_mask: bool = False, use_keypoint: bool = False, instance_mask_format: str = 'polygon', keypoint_hflip_indices: Optional[numpy.ndarray] = None, precomputed_proposal_topk: Optional[int] = None, recompute_boxes: bool = False)[源代码]¶ 注意:此接口为实验性功能。
- Parameters
is_train – 用于训练还是推理
augmentations - 要应用的一系列增强或确定性变换的列表
image_format – 由
detection_utils.read_image()支持的图像格式。use_instance_mask – 如果可用,是否处理实例分割标注
use_keypoint – 如果存在关键点标注,是否进行处理
instance_mask_format – 可选 "polygon" 或 "bitmask"。将实例分割掩码处理为此格式。
keypoint_hflip_indices – 参见
detection_utils.create_keypoint_hflip_indices()precomputed_proposal_topk – 如果提供此参数,将从dataset_dict加载预计算提案,并为每张图像保留前k个提案。
recompute_boxes – 是否通过从实例掩码标注计算紧密边界框来覆盖原有的边界框标注。
detectron2.data.detection_utils 模块¶
在典型的目标检测数据管道中使用的通用数据处理工具。
-
exception
detectron2.data.detection_utils.SizeMismatchError[源代码]¶ 基类:
ValueError当加载的图像宽度/高度与标注信息不一致时。
-
detectron2.data.detection_utils.convert_image_to_rgb(image, format)[源代码]¶ 将给定格式的图像转换为RGB格式。
- Parameters
image (np.ndarray or Tensor) - 一个HWC格式的图像
format (str) – 输入图像的格式,另请参阅 read_image
- Returns
(np.ndarray) – (高度,宽度,3通道) 0-255范围的RGB图像,可以是浮点型或uint8类型
-
detectron2.data.detection_utils.transform_proposals(dataset_dict, image_shape, transforms, *, proposal_topk, min_box_size=0)[源代码]¶ 对dataset_dict中的提案应用变换(如果有的话)。
- Parameters
dataset_dict (dict) - 从数据集中读取的字典,可能包含字段"proposal_boxes"、"proposal_objectness_logits"、"proposal_bbox_mode"
image_shape (tuple) – 高度,宽度
transforms (TransformList) –
proposal_topk (int) – 仅保留得分最高的K个提案
min_box_size (int) - 任何一边小于此阈值的候选框将被移除
输入字典会被原地修改,上述提到的键会被移除。将新增一个键"proposals",其值为一个Instances对象,该对象在其字段"proposal_boxes"和"objectness_logits"中包含转换后的提案。
-
detectron2.data.detection_utils.transform_instance_annotations(annotation, transforms, image_size, *, keypoint_hflip_indices=None)[源代码]¶ 对单个实例的边界框、分割和关键点标注应用变换。
对于边界框,它将使用transforms.apply_box;对于分割多边形和关键点,则使用transforms.apply_coords。如果您需要针对每种数据结构更专门化的处理,就需要自行实现该函数或变换的定制版本。
- Parameters
- Returns
dict – 相同的输入字典,其中的"bbox"、"segmentation"、"keypoints"字段会根据transforms进行转换。"bbox_mode"字段将被设置为XYXY_ABS。
-
detectron2.data.detection_utils.annotations_to_instances(annos, image_size, mask_format='polygon')[源代码]¶ 从数据集字典中的实例标注创建一个由模型使用的
Instances对象。
-
detectron2.data.detection_utils.annotations_to_instances_rotated(annos, image_size)[源代码]¶ 从数据集字典中的实例标注创建一个由模型使用的
Instances对象。 与annotations_to_instances相比,此函数仅适用于旋转框
-
detectron2.data.detection_utils.build_augmentation(cfg, is_train)[源代码]¶ 根据配置创建默认的
Augmentation列表。目前包含调整大小和翻转。- Returns
列表[增强]
-
detectron2.data.detection_utils.create_keypoint_hflip_indices(dataset_names: Union[str, List[str]]) → List[int][源代码]¶ - Parameters
dataset_names – 数据集名称列表
- Returns
list[int] – 一个大小为#关键点的列表,存储水平翻转后的关键点索引。
-
detectron2.data.detection_utils.filter_empty_instances(instances, by_box=True, by_mask=True, box_threshold=1e-05, return_mask=False)[源代码]¶ 过滤掉Instances对象中的空实例。
detectron2.data.datasets 模块¶
-
detectron2.data.datasets.load_coco_json(json_file, image_root, dataset_name=None, extra_annotation_keys=None)[源代码]¶ 加载一个采用COCO实例标注格式的json文件。 当前支持实例检测、实例分割以及人体关键点标注。
- Parameters
json_file (str) - COCO实例标注格式的json文件完整路径。
image_root (str 或 路径类) – 该json文件中图片所在的目录。
数据集的名称(例如:coco_2017_train)。 当提供此参数时,该函数还将执行以下操作:
将"thing_classes"添加到与此数据集关联的元数据中
将类别ID映射到一个连续范围内(标准数据集格式所需),并将"thing_dataset_id_to_contiguous_id"添加到与此数据集关联的元数据中
通常应提供此选项,除非用户需要加载原始JSON内容并手动进行更多处理。
extra_annotation_keys (list[str]) – 除了"iscrowd"、"bbox"、"keypoints"、"category_id"和"segmentation"之外,还应加载到数据集字典中的每个标注键列表。这些键对应的值将按原样返回。例如,densepose标注就是以这种方式加载的。
- Returns
list[dict] - 当dataset_name不为None时,返回一个符合Detectron2标准数据集字典格式的字典列表(参见 Using Custom Datasets)。 如果dataset_name为None,返回的category_ids可能不连续且可能不符合Detectron2标准格式。
说明
此函数不会读取图像文件。 结果中不包含“image”字段。
-
detectron2.data.datasets.load_sem_seg(gt_root, image_root, gt_ext='png', image_ext='jpg')[源代码]¶ 加载语义分割数据集。"gt_root"目录下所有扩展名为"gt_ext"的文件被视为真实标注数据,"image_root"目录下所有扩展名为"image_ext"的文件作为输入图像。真实标注与输入图像通过相对于"gt_root"和"image_root"的文件路径进行匹配,不考虑文件扩展名。该方法适用于COCO及其他一些数据集。
- Parameters
- Returns
list[dict] – 一个字典列表,采用detectron2标准格式,不包含实例级别的标注。
说明
此函数不会读取图像和真实标注文件。结果中不包含"image"和"sem_seg"字段。
-
detectron2.data.datasets.register_coco_instances(name, metadata, json_file, image_root)[源代码]¶ 为实例检测、实例分割和关键点检测任务注册一个COCO JSON标注格式的数据集。 (即http://cocodataset.org/#format-data中所述的类型1和2, 数据集中的instances*.json和person_keypoints*.json文件)。
这是一个如何注册新数据集的示例。 你可以参照这个函数进行类似操作,来注册新的数据集。
-
detectron2.data.datasets.convert_to_coco_json(dataset_name, output_file, allow_cached=True)[源代码]¶ 将数据集转换为COCO格式并保存为json文件。 dataset_name必须在DatasetCatalog中注册,并符合detectron2的标准格式。
- Parameters
dataset_name – 配置文件中对数据目录的引用,必须在DatasetCatalog中注册且符合detectron2的标准格式
output_file – 将要保存的json文件路径
allow_cached - 如果json文件已存在则跳过转换
-
detectron2.data.datasets.register_coco_panoptic(name, metadata, image_root, panoptic_root, panoptic_json, instances_json=None)[源代码]¶ 注册一个名为name的COCO全景分割数据集的"标准"版本。 该注册数据集中的字典遵循detectron2的标准格式。 因此被称为"标准"版本。
- Parameters
name (str) – 用于标识数据集的名称,例如"coco_2017_train_panoptic"
metadata (dict) – 与此数据集关联的额外元数据。
image_root (str) – 包含所有图像的目录
panoptic_root (str) - 包含COCO格式全景标注图像的目录
panoptic_json (str) – COCO格式的json全景标注文件路径
sem_seg_root (none) - 未使用,以保持与register_coco_panoptic_separated的一致性。
instances_json (str) – JSON实例标注文件的路径
-
detectron2.data.datasets.register_coco_panoptic_separated(name, metadata, image_root, panoptic_root, panoptic_json, sem_seg_root, instances_json)[源代码]¶ 注册一个名为name的COCO全景分割数据集的"分离"版本。 在这个已注册的数据集中,标注将同时包含实例标注和语义标注,每个标注都有其独立的连续ID。因此被称为"分离"版本。
它遵循了PanopticFPN论文中使用的设置:
实例标注直接来源于COCO实例标注任务中的多边形,而非COCO全景标注中的掩码。
这两种格式存在细微差异: 实例标注中的多边形可能存在重叠。 掩码标注是通过对重叠多边形进行深度排序标注生成的。
语义标注是从全景标注转换而来,其中所有"物体"被赋予语义ID 0。因此所有语义类别的ID将位于连续范围[1, #stuff_categories]内。
此函数还将注册一个名为
name + '_stuffonly'的纯语义分割数据集。
-
detectron2.data.datasets.load_lvis_json(json_file, image_root, dataset_name=None, extra_annotation_keys=None)[源代码]¶ 加载一个LVIS标注格式的json文件。
- Parameters
- Returns
list[dict] – 一个符合Detectron2标准格式的字典列表。(参见 Using Custom Datasets )
说明
此函数不会读取图像文件。 结果中不包含“image”字段。
-
detectron2.data.datasets.register_lvis_instances(name, metadata, json_file, image_root)[源代码]¶ 为实例检测和分割任务注册一个符合LVIS JSON标注格式的数据集。
-
detectron2.data.datasets.get_lvis_instances_meta(dataset_name)[源代码]¶ 加载LVIS元数据。
- Parameters
dataset_name (str) – 不包含分割名称的LVIS数据集名称(例如"lvis_v0.5")。
- Returns
字典 – 包含键值thing_classes的LVIS元数据
detectron2.data.samplers 模块¶
-
class
detectron2.data.samplers.TrainingSampler(*args, **kwds)[源代码]¶ -
在训练过程中,我们只关注训练数据的"无限流"。 因此,该采样器会生成一个无限的索引流, 所有工作进程协同工作以正确打乱索引顺序并采样不同的索引。
每个工作进程中的采样器实际上生成的是indices[worker_id::num_workers] 其中indices是一个由 shuffle(range(size)) + shuffle(range(size)) + …(如果shuffle为True) 或range(size) + range(size) + …(如果shuffle为False) 组成的无限索引流
请注意,此采样器不会基于PyTorch DataLoader的工作进程ID进行分片。传递给PyTorch DataLoader的采样器仅用于映射式数据集,并且不会在工作进程内部执行。但如果以某种方式在数据加载器工作进程内部执行此采样器,则需要额外工作来基于工作进程ID对其输出进行分片。这是必要的,以避免工作进程产生相同的数据。
ToIterableDataset实现了这一逻辑。此说明适用于detectron2中的所有采样器。
-
class
detectron2.data.samplers.RandomSubsetTrainingSampler(*args, **kwds)[源代码]¶ 基类:
detectron2.data.samplers.distributed_sampler.TrainingSampler与TrainingSampler类似,但仅随机采样索引的子集。当您希望通过以下方式估算准确率与数据量关系曲线时,此功能非常有用
使用不同的子集比例训练模型。
-
class
detectron2.data.samplers.InferenceSampler(*args, **kwds)[源代码]¶ -
为所有工作进程生成推理索引。推理需要在__完全一致__的样本集上运行,因此当样本总数无法被工作进程数整除时,该采样器会在不同工作进程上生成不同数量的样本。
-
class
detectron2.data.samplers.RepeatFactorTrainingSampler(*args, **kwds)[源代码]¶ -
与TrainingSampler类似,但样本可能根据其"重复因子"出现多次。这适用于在LVIS等类别不平衡的数据集上进行训练。
-
static
repeat_factors_from_category_frequency(dataset_dicts, repeat_thresh)[源代码]¶ 基于类别频率计算每张图像的(分数)重复因子。 图像的重复因子是该图像中标注的最稀有类别频率的函数。类别c的“频率”在[0, 1]范围内定义为训练集中(无重复)出现类别c的图像所占比例。 详见LVIS: A Dataset for Large Vocabulary Instance Segmentation (>= v2) 附录B.2。
-
static