Transformers 4.37 中文文档(六十八)(4)https://developer.aliyun.com/article/1564094
Mask2FormerForUniversalSegmentation
class transformers.Mask2FormerForUniversalSegmentation
( config: Mask2FormerConfig )
参数
config
(Mask2FormerConfig)— 具有模型所有参数的模型配置类。使用配置文件初始化不会加载与模型相关的权重,只加载配置。查看 from_pretrained()方法以加载模型权重。
Mask2Former 模型在顶部具有用于实例/语义/全景分割的头。这个模型是 PyTorch 的torch.nn.Module子类。将其用作常规的 PyTorch 模块,并参考 PyTorch 文档以获取与一般用法和行为相关的所有内容。
forward
( pixel_values: Tensor mask_labels: Optional = None class_labels: Optional = None pixel_mask: Optional = None output_hidden_states: Optional = None output_auxiliary_logits: Optional = None output_attentions: Optional = None return_dict: Optional = None ) → export const metadata = 'undefined';transformers.models.mask2former.modeling_mask2former.Mask2FormerForUniversalSegmentationOutput or tuple(torch.FloatTensor)
参数
pixel_values
(torch.FloatTensor
,形状为(batch_size, num_channels, height, width)
) — 像素值。可以使用 AutoImageProcessor 获取像素值。有关详细信息,请参阅AutoImageProcessor.preprocess
。pixel_mask
(torch.LongTensor
,形状为(batch_size, height, width)
,optional) — 避免在填充像素值上执行注意力的掩码。选择的掩码值在[0, 1]
中:
- 对于真实像素为 1(即
not masked
), - 对于填充像素为 0(即
masked
)。
- 什么是注意力掩码?
output_hidden_states
(bool
, optional) — 是否返回所有层的隐藏状态。有关更多详细信息,请参阅返回张量下的hidden_states
。output_attentions
(bool
, optional) — 是否返回 Detr 解码器注意力层的注意力张量。return_dict
(bool
, optional) — 是否返回~Mask2FormerModelOutput
而不是普通元组。mask_labels
(List[torch.Tensor]
, optional) — 形状为(num_labels, height, width)
的掩码标签列表,用于馈送到模型。class_labels
(List[torch.LongTensor]
, optional) — 形状为(num_labels, height, width)
的目标类别标签列表,用于馈送到模型。它们标识mask_labels
的标签,例如,如果class_labels[i][j]
的标签是mask_labels[i][j]
。
返回
transformers.models.mask2former.modeling_mask2former.Mask2FormerForUniversalSegmentationOutput 或tuple(torch.FloatTensor)
一个 transformers.models.mask2former.modeling_mask2former.Mask2FormerForUniversalSegmentationOutput 或一个torch.FloatTensor
元组(如果传递了return_dict=False
或config.return_dict=False
时)包含各种元素,这取决于配置(Mask2FormerConfig)和输入。
loss
(torch.Tensor
, optional) — 计算的损失,在存在标签时返回。class_queries_logits
(torch.FloatTensor
) — 形状为(batch_size, num_queries, num_labels + 1)
的张量,表示每个查询的提议类别。请注意,+ 1
是因为我们包含了空类。masks_queries_logits
(torch.FloatTensor
) — 形状为(batch_size, num_queries, height, width)
的张量,表示每个查询的提议掩码。auxiliary_logits
(List[Dict(str, torch.FloatTensor)]
, optional) — 来自变压器解码器每一层的类别和掩码预测的列表。encoder_last_hidden_state
(torch.FloatTensor
,形状为(batch_size, num_channels, height, width)
) — 编码器模型(骨干)最后一个阶段的最后隐藏状态(最终特征图)。encoder_hidden_states
(tuple(torch.FloatTensor)
, optional, 当传递output_hidden_states=True
或config.output_hidden_states=True
时返回) — 形状为(batch_size, num_channels, height, width)
的torch.FloatTensor
元组。编码器模型在每个阶段输出的隐藏状态(也称为特征图)。pixel_decoder_last_hidden_state
(torch.FloatTensor
,形状为(batch_size, num_channels, height, width)
) — 像素解码器模型最后一个阶段的最后隐藏状态(最终特征图)。pixel_decoder_hidden_states
(tuple(torch.FloatTensor)
, 可选,当传递output_hidden_states=True
或config.output_hidden_states=True
时返回) — 形状为(batch_size, num_channels, height, width)
的torch.FloatTensor
元组。像素解码器模型在每个阶段输出的隐藏状态(也称为特征图)。transformer_decoder_last_hidden_state
(tuple(torch.FloatTensor)
) — 变换器解码器的最终输出(batch_size, sequence_length, hidden_size)
。transformer_decoder_hidden_states
(tuple(torch.FloatTensor)
, 可选,当传递output_hidden_states=True
或config.output_hidden_states=True
时返回) — 形状为(batch_size, sequence_length, hidden_size)
的torch.FloatTensor
元组。变换器解码器在每个阶段输出的隐藏状态(也称为特征图)。attentions
(tuple(tuple(torch.FloatTensor))
, 可选,当传递output_attentions=True
或config.output_attentions=True
时返回) — 形状为(batch_size, num_heads, sequence_length, sequence_length)
的tuple(torch.FloatTensor)
元组。变换器解码器的自注意力和交叉注意力权重。
Mask2FormerUniversalSegmentationOutput
Mask2FormerForUniversalSegmentation 的前向方法,覆盖 __call__
特殊方法。
虽然前向传递的步骤需要在此函数内定义,但应该在此之后调用 Module
实例,而不是在此处调用,因为前者负责运行预处理和后处理步骤,而后者会默默地忽略它们。
示例:
实例分割示例:
>>> from transformers import AutoImageProcessor, Mask2FormerForUniversalSegmentation >>> from PIL import Image >>> import requests >>> import torch >>> # Load Mask2Former trained on COCO instance segmentation dataset >>> image_processor = AutoImageProcessor.from_pretrained("facebook/mask2former-swin-small-coco-instance") >>> model = Mask2FormerForUniversalSegmentation.from_pretrained( ... "facebook/mask2former-swin-small-coco-instance" ... ) >>> url = "http://images.cocodataset.org/val2017/000000039769.jpg" >>> image = Image.open(requests.get(url, stream=True).raw) >>> inputs = image_processor(image, return_tensors="pt") >>> with torch.no_grad(): ... outputs = model(**inputs) >>> # Model predicts class_queries_logits of shape `(batch_size, num_queries)` >>> # and masks_queries_logits of shape `(batch_size, num_queries, height, width)` >>> class_queries_logits = outputs.class_queries_logits >>> masks_queries_logits = outputs.masks_queries_logits >>> # Perform post-processing to get instance segmentation map >>> pred_instance_map = image_processor.post_process_semantic_segmentation( ... outputs, target_sizes=[image.size[::-1]] ... )[0] >>> print(pred_instance_map.shape) torch.Size([480, 640])
语义分割示例:
>>> from transformers import AutoImageProcessor, Mask2FormerForUniversalSegmentation >>> from PIL import Image >>> import requests >>> import torch >>> # Load Mask2Former trained on ADE20k semantic segmentation dataset >>> image_processor = AutoImageProcessor.from_pretrained("facebook/mask2former-swin-small-ade-semantic") >>> model = Mask2FormerForUniversalSegmentation.from_pretrained("facebook/mask2former-swin-small-ade-semantic") >>> url = ( ... "https://huggingface.co/datasets/hf-internal-testing/fixtures_ade20k/resolve/main/ADE_val_00000001.jpg" ... ) >>> image = Image.open(requests.get(url, stream=True).raw) >>> inputs = image_processor(image, return_tensors="pt") >>> with torch.no_grad(): ... outputs = model(**inputs) >>> # Model predicts class_queries_logits of shape `(batch_size, num_queries)` >>> # and masks_queries_logits of shape `(batch_size, num_queries, height, width)` >>> class_queries_logits = outputs.class_queries_logits >>> masks_queries_logits = outputs.masks_queries_logits >>> # Perform post-processing to get semantic segmentation map >>> pred_semantic_map = image_processor.post_process_semantic_segmentation( ... outputs, target_sizes=[image.size[::-1]] ... )[0] >>> print(pred_semantic_map.shape) torch.Size([512, 683])
全景分割示例:
>>> from transformers import AutoImageProcessor, Mask2FormerForUniversalSegmentation >>> from PIL import Image >>> import requests >>> import torch >>> # Load Mask2Former trained on CityScapes panoptic segmentation dataset >>> image_processor = AutoImageProcessor.from_pretrained("facebook/mask2former-swin-small-cityscapes-panoptic") >>> model = Mask2FormerForUniversalSegmentation.from_pretrained( ... "facebook/mask2former-swin-small-cityscapes-panoptic" ... ) >>> url = "https://cdn-media.huggingface.co/Inference-API/Sample-results-on-the-Cityscapes-dataset-The-above-images-show-how-our-method-can-handle.png" >>> image = Image.open(requests.get(url, stream=True).raw) >>> inputs = image_processor(image, return_tensors="pt") >>> with torch.no_grad(): ... outputs = model(**inputs) >>> # Model predicts class_queries_logits of shape `(batch_size, num_queries)` >>> # and masks_queries_logits of shape `(batch_size, num_queries, height, width)` >>> class_queries_logits = outputs.class_queries_logits >>> masks_queries_logits = outputs.masks_queries_logits >>> # Perform post-processing to get panoptic segmentation map >>> pred_panoptic_map = image_processor.post_process_panoptic_segmentation( ... outputs, target_sizes=[image.size[::-1]] ... )[0]["segmentation"] >>> print(pred_panoptic_map.shape) torch.Size([338, 676])
Mask2FormerImageProcessor
class transformers.Mask2FormerImageProcessor
( do_resize: bool = True size: Dict = None size_divisor: int = 32 resample: Resampling = <Resampling.BILINEAR: 2> do_rescale: bool = True rescale_factor: float = 0.00392156862745098 do_normalize: bool = True image_mean: Union = None image_std: Union = None ignore_index: Optional = None reduce_labels: bool = False **kwargs )
参数
do_resize
(bool
, 可选,默认为True
) — 是否将输入调整大小到特定的size
。size
(int
, 可选,默认为 800) — 调整输入大小为给定大小。仅在do_resize
设置为True
时有效。如果 size 是一个类似(width, height)
的序列,输出大小将匹配到这个大小。如果 size 是一个整数,图像的较小边将匹配到这个数字。即,如果height > width
,那么图像将被重新缩放为(size * height / width, size)
。size_divisor
(int
, 可选,默认为 32) — 一些主干网络需要可被某个数字整除的图像。如果未传递,则默认为 Swin Transformer 中使用的值。resample
(int
, 可选,默认为Resampling.BILINEAR
) — 可选的重采样滤波器。可以是PIL.Image.Resampling.NEAREST
、PIL.Image.Resampling.BOX
、PIL.Image.Resampling.BILINEAR
、PIL.Image.Resampling.HAMMING
、PIL.Image.Resampling.BICUBIC
或PIL.Image.Resampling.LANCZOS
中的一个。仅在do_resize
设置为True
时有效。do_rescale
(bool
, 可选,默认为True
) — 是否将输入重新缩放到特定的scale
。rescale_factor
(float
, 可选,默认为1/255
) — 通过给定因子重新缩放输入。仅在do_rescale
设置为True
时有效。do_normalize
(bool
, 可选,默认为True
) — 是否对输入进行均值和标准差归一化。image_mean
(int
, 可选,默认为[0.485, 0.456, 0.406]
) — 每个通道的均值序列,用于归一化图像。默认为 ImageNet 均值。image_std
(int
, 可选,默认为[0.229, 0.224, 0.225]
) — 每个通道的标准差序列,用于归一化图像。默认为 ImageNet 标准差。ignore_index
(int
,可选)— 在分割图中为背景像素分配的标签。如果提供,用 0(背景)表示的分割图像素将被替换为ignore_index
。reduce_labels
(bool
,可选,默认为False
)— 是否将所有分割图的标签值减 1。通常用于数据集,其中 0 用于背景,并且背景本身不包含在数据集的所有类别中(例如 ADE20k)。背景标签将被替换为ignore_index
。
构建一个 Mask2Former 图像处理器。该图像处理器可用于为模型准备图像和可选目标。
此图像处理器继承自BaseImageProcessor
,其中包含大多数主要方法。用户应参考此超类以获取有关这些方法的更多信息。
预处理
( images: Union segmentation_maps: Union = None instance_id_to_semantic_id: Optional = None do_resize: Optional = None size: Optional = None size_divisor: Optional = None resample: Resampling = None do_rescale: Optional = None rescale_factor: Optional = None do_normalize: Optional = None image_mean: Union = None image_std: Union = None ignore_index: Optional = None reduce_labels: Optional = None return_tensors: Union = None data_format: Union = <ChannelDimension.FIRST: 'channels_first'> input_data_format: Union = None **kwargs )
编码输入
( pixel_values_list: List segmentation_maps: Union = None instance_id_to_semantic_id: Union = None ignore_index: Optional = None reduce_labels: bool = False return_tensors: Union = None input_data_format: Union = None ) → export const metadata = 'undefined';BatchFeature
参数
pixel_values_list
(List[ImageInput]
)— 要填充的图像(像素值)列表。每个图像应该是形状为(channels, height, width)
的张量。segmentation_maps
(ImageInput
,可选)— 具有像素级注释的相应语义分割图。(bool
,可选,默认为True
):是否将图像填充到批次中最大的图像,并创建像素掩码。如果保留默认设置,将返回以下像素掩码:
- 1 表示真实像素(即
未掩码
), - 0 表示填充像素(即
masked
)。
instance_id_to_semantic_id
(List[Dict[int, int]]
或Dict[int, int]
,可选)— 对象实例 id 和类别 id 之间的映射。如果传递,segmentation_maps
将被视为实例分割图,其中每个像素表示一个实例 id。可以作为一个全局/数据集级别映射的单个字典提供,也可以作为字典列表(每个图像一个),以分别映射每个图像中的实例 id。return_tensors
(str
或 TensorType,可选)— 如果设置,将返回张量而不是 NumPy 数组。如果设置为'pt'
,则返回 PyTorchtorch.Tensor
对象。input_data_format
(ChannelDimension
或str
,可选)— 输入图像的通道维度格式。如果未提供,将被推断。
返回
BatchFeature
一个 BatchFeature,具有以下字段:
pixel_values
— 要馈送给模型的像素值。pixel_mask
— 要馈送给模型的像素掩码(当=True
或pixel_mask
在self.model_input_names
中时)。mask_labels
— 形状为(labels, height, width)
的可选掩码标签列表,用于馈送给模型(当提供annotations
时)。class_labels
— 形状为(labels)
的可选类别标签列表,用于馈送给模型(当提供annotations
时)。它们标识mask_labels
的标签,例如如果class_labels[i][j]
的标签是mask_labels[i][j]
。
将图像填充到批次中最大的图像,并创建相应的pixel_mask
。
Mask2Former 使用掩码分类范式处理语义分割,因此输入分割图将被转换为二进制掩码列表及其相应的标签。让我们看一个例子,假设segmentation_maps = [[2,6,7,9]]
,输出将包含mask_labels = [[1,0,0,0],[0,1,0,0],[0,0,1,0],[0,0,0,1]]
(四个二进制掩码)和class_labels = [2,6,7,9]
,每个掩码的标签。
后处理语义分割
( outputs target_sizes: Optional = None ) → export const metadata = 'undefined';List[torch.Tensor]
参数
outputs
(Mask2FormerForUniversalSegmentation) — 模型的原始输出。target_sizes
(List[Tuple[int, int]]
, 可选) — 长度为(batch_size)的列表,其中每个列表项(Tuple[int, int]]
)对应于每个预测的请求最终大小(高度,宽度)。如果设置为 None,则不会调整预测大小。
返回值
List[torch.Tensor]
一个长度为batch_size
的列表,其中每个项是形状为(高度,宽度)的语义分割地图,对应于 target_sizes 条目(如果指定了target_sizes
)。每个torch.Tensor
的每个条目对应于一个语义类别 id。
将 Mask2FormerForUniversalSegmentation 的输出转换为语义分割地图。仅支持 PyTorch。
post_process_instance_segmentation
( outputs threshold: float = 0.5 mask_threshold: float = 0.5 overlap_mask_area_threshold: float = 0.8 target_sizes: Optional = None return_coco_annotation: Optional = False return_binary_maps: Optional = False ) → export const metadata = 'undefined';List[Dict]
参数
outputs
(Mask2FormerForUniversalSegmentation) — 模型的原始输出。threshold
(float
, 可选, 默认为 0.5) — 保留预测实例掩码的概率分数阈值。mask_threshold
(float
, 可选, 默认为 0.5) — 在将预测的掩码转换为二进制值时使用的阈值。overlap_mask_area_threshold
(float
, 可选, 默认为 0.8) — 合并或丢弃每个二进制实例掩码中的小不连续部分的重叠掩码区域阈值。target_sizes
(List[Tuple]
, 可选) — 长度为(batch_size)的列表,其中每个列表项(Tuple[int, int]]
)对应于每个预测的请求最终大小(高度,宽度)。如果设置为 None,则不会调整预测大小。return_coco_annotation
(bool
, 可选, 默认为False
) — 如果设置为True
,则以 COCO 运行长度编码(RLE)格式返回分割地图。return_binary_maps
(bool
, 可选, 默认为False
) — 如果设置为True
,则将分割地图作为二进制分割地图的连接张量返回(每个检测到的实例一个)。
返回值
List[Dict]
一个字典列表,每个图像一个字典,每个字典包含两个键:
segmentation
— 形状为(高度,宽度)
的张量,其中每个像素表示一个segment_id
或List[List]
的运行长度编码(RLE)的分割地图,如果 return_coco_annotation 设置为True
,则设置为None
,如果没有找到高于threshold
的掩码。segments_info
— 包含每个段的额外信息的字典。
id
— 代表segment_id
的整数。label_id
— 代表与segment_id
对应的标签/语义类别 id 的整数。score
— 具有segment_id
的段的预测分数。
将Mask2FormerForUniversalSegmentationOutput
的输出转换为实例分割预测。仅支持 PyTorch。
post_process_panoptic_segmentation
( outputs threshold: float = 0.5 mask_threshold: float = 0.5 overlap_mask_area_threshold: float = 0.8 label_ids_to_fuse: Optional = None target_sizes: Optional = None ) → export const metadata = 'undefined';List[Dict]
参数
outputs
(Mask2FormerForUniversalSegmentationOutput
) — 来自 Mask2FormerForUniversalSegmentation 的输出。threshold
(float
, 可选, 默认为 0.5) — 保留预测实例掩码的概率分数阈值。mask_threshold
(float
, 可选, 默认为 0.5) — 在将预测的掩码转换为二进制值时使用的阈值。overlap_mask_area_threshold
(float
, optional, defaults to 0.8) — 重叠掩模面积阈值,用于合并或丢弃每个二进制实例掩模中的小不连续部分。label_ids_to_fuse
(Set[int]
, optional) — 此状态中的标签将所有实例合并在一起。例如,我们可以说一张图像中只能有一个天空,但可以有几个人,因此天空的标签 ID 将在该集合中,但人的标签 ID 不在其中。target_sizes
(List[Tuple]
, optional) — 长度为 (batch_size) 的列表,其中每个列表项 (Tuple[int, int]]
) 对应于批处理中每个预测的请求的最终大小(高度,宽度)。如果留空,则预测将不会被调整大小。
返回值
List[Dict]
一个字典列表,每个图像一个字典,每个字典包含两个键:
segmentation
— 形状为(height, width)
的张量,其中每个像素代表一个segment_id
,如果未找到掩模则设置为None
。如果指定了target_sizes
,则将分割调整为相应的target_sizes
条目。segments_info
— 一个包含每个段的附加信息的字典。
id
— 代表segment_id
的整数。label_id
— 代表与segment_id
对应的标签/语义类别 id 的整数。was_fused
— 一个布尔值,如果label_id
在label_ids_to_fuse
中则为True
,否则为False
。相同类别/标签的多个实例被融合并分配一个单独的segment_id
。score
— 带有segment_id
的段的预测分数。
将 Mask2FormerForUniversalSegmentationOutput
的输出转换为图像全景分割预测。仅支持 PyTorch。
— 长度为(batch_size)的列表,其中每个列表项(Tuple[int, int]]
)对应于每个预测的请求最终大小(高度,宽度)。如果设置为 None,则不会调整预测大小。
return_coco_annotation
(bool
, 可选, 默认为False
) — 如果设置为True
,则以 COCO 运行长度编码(RLE)格式返回分割地图。return_binary_maps
(bool
, 可选, 默认为False
) — 如果设置为True
,则将分割地图作为二进制分割地图的连接张量返回(每个检测到的实例一个)。
返回值
List[Dict]
一个字典列表,每个图像一个字典,每个字典包含两个键:
segmentation
— 形状为(高度,宽度)
的张量,其中每个像素表示一个segment_id
或List[List]
的运行长度编码(RLE)的分割地图,如果 return_coco_annotation 设置为True
,则设置为None
,如果没有找到高于threshold
的掩码。segments_info
— 包含每个段的额外信息的字典。
id
— 代表segment_id
的整数。label_id
— 代表与segment_id
对应的标签/语义类别 id 的整数。score
— 具有segment_id
的段的预测分数。
将Mask2FormerForUniversalSegmentationOutput
的输出转换为实例分割预测。仅支持 PyTorch。
post_process_panoptic_segmentation
( outputs threshold: float = 0.5 mask_threshold: float = 0.5 overlap_mask_area_threshold: float = 0.8 label_ids_to_fuse: Optional = None target_sizes: Optional = None ) → export const metadata = 'undefined';List[Dict]
参数
outputs
(Mask2FormerForUniversalSegmentationOutput
) — 来自 Mask2FormerForUniversalSegmentation 的输出。threshold
(float
, 可选, 默认为 0.5) — 保留预测实例掩码的概率分数阈值。mask_threshold
(float
, 可选, 默认为 0.5) — 在将预测的掩码转换为二进制值时使用的阈值。overlap_mask_area_threshold
(float
, optional, defaults to 0.8) — 重叠掩模面积阈值,用于合并或丢弃每个二进制实例掩模中的小不连续部分。label_ids_to_fuse
(Set[int]
, optional) — 此状态中的标签将所有实例合并在一起。例如,我们可以说一张图像中只能有一个天空,但可以有几个人,因此天空的标签 ID 将在该集合中,但人的标签 ID 不在其中。target_sizes
(List[Tuple]
, optional) — 长度为 (batch_size) 的列表,其中每个列表项 (Tuple[int, int]]
) 对应于批处理中每个预测的请求的最终大小(高度,宽度)。如果留空,则预测将不会被调整大小。
返回值
List[Dict]
一个字典列表,每个图像一个字典,每个字典包含两个键:
segmentation
— 形状为(height, width)
的张量,其中每个像素代表一个segment_id
,如果未找到掩模则设置为None
。如果指定了target_sizes
,则将分割调整为相应的target_sizes
条目。segments_info
— 一个包含每个段的附加信息的字典。
id
— 代表segment_id
的整数。label_id
— 代表与segment_id
对应的标签/语义类别 id 的整数。was_fused
— 一个布尔值,如果label_id
在label_ids_to_fuse
中则为True
,否则为False
。相同类别/标签的多个实例被融合并分配一个单独的segment_id
。score
— 带有segment_id
的段的预测分数。
将 Mask2FormerForUniversalSegmentationOutput
的输出转换为图像全景分割预测。仅支持 PyTorch。