detectron2.data¶
-
detectron2.data.
DatasetCatalog
(dict)¶ 一个全局字典,用于存储有关数据集的信息以及如何获取它们。
它包含一个从字符串(标识数据集的名称,例如“coco_2014_train”)到函数的映射,该函数解析数据集并返回 list[dict] 格式的样本。
如果与 data/build.py,data/detection_transform.py 中的数据加载器功能一起使用,则返回的字典应采用 Detectron2 数据集格式(有关详细信息,请参阅 DATASETS.md)。
拥有此目录的目的是通过在配置中仅使用字符串来简化选择不同数据集的过程。
-
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[source]¶ 类似于 build_detection_train_loader,默认批次大小为 1,采样器为
InferenceSampler
。此采样器协调所有工作程序以生成所有样本的精确集合。- 参数
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 的参数相同。默认情况下,不进行整理,并返回一个数据列表。对于小型批次大小和简单的数据结构,不进行整理是可以的。如果批次大小很大,每个样本包含太多的小张量,则将它们整理到数据加载器中效率更高。
- 返回值
DataLoader – 一个 PyTorch 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)[source]¶ 使用一些默认功能构建用于目标检测的数据加载器。
- 参数
dataset (list or torch.utils.data.Dataset) – 数据集字典列表,或一个 PyTorch 数据集(映射风格或可迭代)。它可以通过使用
DatasetCatalog.get()
或get_detection_dataset_dicts()
获得。mapper (callable) – 一个可调用对象,它接受来自数据集的样本(字典)并返回模型要使用的格式。当使用 cfg 时,默认选择是
DatasetMapper(cfg, is_train=True)
。sampler (torch.utils.data.sampler.Sampler or 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 的参数相同。默认情况下,不进行整理,并返回一个数据列表。对于小型批次大小和简单的数据结构,不进行整理是可以的。如果批次大小很大,每个样本包含太多的小张量,则将它们整理到数据加载器中效率更高。
- 返回值
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)[source]¶ 加载并准备实例检测/分割和语义分割的dataset dicts。
-
detectron2.data.
load_proposals_into_dataset
(dataset_dicts, proposal_file)[source]¶ 将预先计算的对象提议加载到数据集中。
提议文件应为具有以下键的腌制字典
“ids”: list[int] 或 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
[source]¶ Bases:
types.SimpleNamespace
支持简单属性设置器/获取器的类。它旨在存储数据集的元数据并使其在全局范围内可访问。
示例
# 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.
DatasetFromList
(*args, **kwds)[source]¶ Bases:
torch.utils.data.Dataset
将列表包装成 torch Dataset。它将列表的元素作为数据生成。
-
class
detectron2.data.
MapDataset
(dataset, map_func)[source]¶ Bases:
torch.utils.data.Dataset
在数据集中的元素上映射函数。
-
class
detectron2.data.
ToIterableDataset
(*args, **kwds)[source]¶ Bases:
torch.utils.data.IterableDataset
将旧的基于索引(也称为映射风格)数据集转换为可迭代风格数据集。
-
__init__
(dataset: torch.utils.data.Dataset, sampler: torch.utils.data.Sampler, shard_sampler: bool = True, shard_chunk_size: int = 1)[source]¶ - 参数
dataset – 具有
__getitem__
的旧式数据集sampler – 一个廉价的可迭代对象,它生成要应用于
dataset
的索引。shard_sampler –
是否根据当前的 pytorch 数据加载器 worker ID 对 sampler 进行分片。当 IterableDataset 由 pytorch 的 DataLoader 分叉到多个 worker 时,它负责根据 worker ID 对其数据进行分片,以便 worker 不会生成相同的数据。
大多数采样器(例如我们的 TrainingSampler)不根据 dataloader 工作器 ID 进行分片,因此此参数应设置为 True。但某些采样器可能已经分片,在这种情况下,此参数应设置为 False。
shard_chunk_size – 当对采样器进行分片时,每个工作器将
-
-
类
detectron2.data.
DatasetMapper
(*args, **kwargs)[源代码]¶ 基类:
object
一个可调用对象,它接受 Detectron2 Dataset 格式的 dataset dict,并将其映射到模型使用的格式。
这是用于将您的 dataset dict 映射到训练数据的默认可调用对象。您可能需要遵循它来实现自己的可调用对象,以实现自定义逻辑,例如不同的图像读取或转换方式。有关详细信息,请参阅 数据加载器。
该可调用对象当前执行以下操作
从“file_name”读取图像
将裁剪/几何变换应用于图像和标注
将数据和标注准备为张量和
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)[源代码]¶ 注意:此接口是实验性的。
- 参数
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 加载预先计算好的 proposals,并保留每个图像的前 k 个 proposals。
recompute_boxes – 是否通过从实例掩码标注计算紧密边界框来覆盖边界框标注。
detectron2.data.detection_utils 模块¶
典型目标检测数据管道中使用的常见数据处理工具。
-
异常
detectron2.data.detection_utils.
SizeMismatchError
[源代码]¶ 基类:
ValueError
当加载的图像的宽度/高度与标注不同时。
-
detectron2.data.detection_utils.
convert_image_to_rgb
(image, format)[源代码]¶ 将图像从给定格式转换为 RGB。
- 参数
image (np.ndarray 或 Tensor) – 一张 HWC 图像
format (str) – 输入图像的格式,另请参阅 read_image
- 返回值
(np.ndarray) – 0-255 范围内的 (H,W,3) RGB 图像,可以是浮点数或 uint8
-
detectron2.data.detection_utils.
check_image_size
(dataset_dict, image)[源代码]¶ 如果图像的大小与 dict 中指定的大小不匹配,则引发错误。
-
detectron2.data.detection_utils.
transform_proposals
(dataset_dict, image_shape, transforms, *, proposal_topk, min_box_size=0)[源代码]¶ 将变换应用于 dataset_dict 中的 proposals(如果有)。
- 参数
dataset_dict (dict) – 从数据集中读取的 dict,可能包含字段“proposal_boxes”、“proposal_objectness_logits”、“proposal_bbox_mode”
image_shape (tuple) – 高度,宽度
transforms (TransformList) –
proposal_topk (int) – 只保留前 K 个得分最高的 proposals
min_box_size (int) – 任何一边小于此阈值的 proposals 将被移除
输入 dict 在原地修改,上述键被移除。将添加一个新键“proposals”。它的值为一个 Instances 对象,该对象在其字段“proposal_boxes”和“objectness_logits”中包含经过转换的 proposals。
-
detectron2.data.detection_utils.
transform_instance_annotations
(annotation, transforms, image_size, *, keypoint_hflip_indices=None)[源代码]¶ 将变换应用于单个实例的框、分割和关键点标注。
它将对框使用 transforms.apply_box,对分割多边形和关键点使用 transforms.apply_coords。如果您需要为每个数据结构专门设计的任何内容,您需要实现此函数或变换的自己的版本。
- 参数
- 返回值
dict – 与输入 dict 相同,字段“bbox”、“segmentation”、“keypoints”根据 transforms 进行了转换。字段“bbox_mode”将设置为 XYXY_ABS。
-
detectron2.data.detection_utils.
annotations_to_instances
(annos, image_size, mask_format='polygon')[source]¶ 从数据集字典中的实例标注创建模型使用的
Instances
对象。
-
detectron2.data.detection_utils.
annotations_to_instances_rotated
(annos, image_size)[source]¶ 从数据集字典中的实例标注创建模型使用的
Instances
对象。与 annotations_to_instances 相比,此函数仅用于旋转框。
-
detectron2.data.detection_utils.
build_augmentation
(cfg, is_train)[source]¶ 从配置文件创建默认的
Augmentation
列表。现在它包括调整大小和翻转。- 返回值
list[Augmentation]
-
detectron2.data.detection_utils.
create_keypoint_hflip_indices
(dataset_names: Union[str, List[str]]) → List[int][source]¶ - 参数
dataset_names – 数据集名称列表
- 返回值
list[int] – 一个大小为#keypoints 的列表,存储水平翻转后的关键点索引。
detectron2.data.datasets 模块¶
-
detectron2.data.datasets.
load_coco_json
(json_file, image_root, dataset_name=None, extra_annotation_keys=None)[source]¶ 加载使用 COCO 实例标注格式的 json 文件。目前支持实例检测、实例分割和人体关键点标注。
- 参数
json_file (str) – COCO 实例标注格式中 json 文件的完整路径。
image_root (str 或 path-like) – 此 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”之外,还应加载到数据集字典中的每个标注键的列表。这些键的值将按原样返回。例如,密集姿态标注以这种方式加载。
- 返回值
list[dict] – 当 dataset_name 不为 None 时,Detectron2 标准数据集字典格式中的字典列表(参见 使用自定义数据集 )。如果 dataset_name 为 None,返回的 category_ids 可能不连续,可能不符合 Detectron2 标准格式。
笔记
此函数不会读取图像文件。结果没有“image”字段。
-
detectron2.data.datasets.
load_sem_seg
(gt_root, image_root, gt_ext='png', image_ext='jpg')[source]¶ 加载语义分割数据集。所有在“gt_root”下具有“gt_ext”扩展名的文件都将被视为地面真值标注,所有在“image_root”下具有“image_ext”扩展名的文件都将被视为输入图像。地面真值和输入图像使用相对于“gt_root”和“image_root”的相对文件路径进行匹配,而不考虑文件扩展名。这适用于 COCO 和一些其他数据集。
- 参数
- 返回值
list[dict] – detectron2 标准格式中的字典列表,没有实例级标注。
笔记
此函数不会读取图像和地面真值文件。结果没有“image”和“sem_seg”字段。
-
detectron2.data.datasets.
register_coco_instances
(name, metadata, json_file, image_root)[source]¶ 注册使用 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)[source]¶ 将数据集转换为COCO格式并保存到json文件。dataset_name必须在DatasetCatalog中注册,并采用detectron2的标准格式。
- 参数
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)[source]¶ 注册名为name的COCO全景分割数据集的“标准”版本。此注册数据集中的字典遵循detectron2的标准格式。因此称为“标准”。
- 参数
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)[source]¶ 注册名为name的COCO全景分割数据集的“分离”版本。此注册数据集中的注释将包含实例注释和语义注释,每个注释都有其自己的连续ID。因此称为“分离”。
它遵循PanopticFPN论文中使用的设置
实例注释直接来自COCO实例注释任务中的多边形,而不是来自COCO全景注释中的掩码。
这两种格式存在细微差别:实例注释中的多边形可能存在重叠。掩码注释是通过使用深度排序对重叠多边形进行标记而生成的。
语义注释是从全景注释转换而来,其中所有“事物”都被分配为0的语义ID。因此所有语义类别将具有连续范围内的ID [1, #stuff_categories]。
此函数还将注册一个名为
name + '_stuffonly'
的纯语义分割数据集。
-
detectron2.data.datasets.
load_lvis_json
(json_file, image_root, dataset_name=None, extra_annotation_keys=None)[source]¶ 加载LVIS的注释格式的json文件。
- 参数
- 返回值
list[dict] – Detectron2标准格式的字典列表。(请参阅使用自定义数据集 )
笔记
此函数不会读取图像文件。结果没有“image”字段。
-
detectron2.data.datasets.
register_lvis_instances
(name, metadata, json_file, image_root)[source]¶ 注册LVIS json注释格式中的数据集,用于实例检测和分割。
-
detectron2.data.datasets.
get_lvis_instances_meta
(dataset_name)[source]¶ 加载LVIS元数据。
- 参数
dataset_name (str) – 不包含拆分名称的LVIS数据集名称(例如,“lvis_v0.5”)。
- 返回值
dict – 包含以下键的LVIS元数据:thing_classes
detectron2.data.samplers 模块¶
-
class
detectron2.data.samplers.
TrainingSampler
(*args, **kwds)[source]¶ Bases:
torch.utils.data.Sampler
在训练中,我们只关心训练数据的“无限流”。因此,此采样器生成一个无限的索引流,所有工作进程协同工作以正确地洗牌索引并采样不同的索引。
每个工作进程中的采样器实际上生成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 的采样器仅与 map 样式数据集一起使用,不会在工作程序内部执行。但是,如果此采样器以在 DataLoader 工作程序内部执行的方式使用,则需要做额外的工作才能根据工作程序 ID 对其输出进行分片。这是为了防止工作程序生成相同的数据。
ToIterableDataset
实现了此逻辑。此说明适用于 Detectron2 中的所有采样器。
-
class
detectron2.data.samplers.
RandomSubsetTrainingSampler
(*args, **kwds)[source]¶ Bases:
detectron2.data.samplers.distributed_sampler.TrainingSampler
与 TrainingSampler 类似,但只采样索引的随机子集。当您想通过
使用不同的 subset_ratio 训练模型来估计精度与数据数量曲线时,这很有用。
-
class
detectron2.data.samplers.
InferenceSampler
(*args, **kwds)[source]¶ Bases:
torch.utils.data.Sampler
为所有工作程序生成推理索引。推理需要在__完全__相同的样本集上运行,因此当样本总数不能被工作程序数量整除时,此采样器会在不同的工作程序上生成不同数量的样本。
-
class
detectron2.data.samplers.
RepeatFactorTrainingSampler
(*args, **kwds)[source]¶ Bases:
torch.utils.data.Sampler
与 TrainingSampler 类似,但一个样本可能会根据其“重复因子”比其他样本出现更多次。这适用于在像 LVIS 这样的类别不平衡数据集上进行训练。
-
static
repeat_factors_from_category_frequency
(dataset_dicts, repeat_thresh)[source]¶ 根据类别频率计算(分数)每个图像的重复因子。图像的重复因子是该图像中标记的最罕见类别的频率的函数。“类别 c 的频率”在 [0, 1] 中定义为训练集中(无重复)出现类别 c 的图像的比例。见 LVIS: A Dataset for Large Vocabulary Instance Segmentation (>= v2) 附录 B.2。
-
static