MaskFormer
原文链接:
huggingface.co/docs/transformers/v4.37.2/en/model_doc/maskformer
这是一个最近推出的模型,因此 API 尚未经过广泛测试。可能会有一些错误或轻微的破坏性更改,需要在未来修复。如果发现异常,请提交Github Issue。
概述
MaskFormer 模型是由 Bowen Cheng、Alexander G. Schwing 和 Alexander Kirillov 在像素级分类并不是语义分割所需的全部中提出的。MaskFormer 通过掩码分类范式解决语义分割问题,而不是执行经典的像素级分类。
论文摘要如下:
现代方法通常将语义分割形式化为每像素分类任务,而实例级分割则通过另一种掩码分类来处理。我们的关键见解:掩码分类足够通用,可以使用完全相同的模型、损失和训练程序以统一的方式解决语义和实例级分割任务。根据这一观察,我们提出了 MaskFormer,一个简单的掩码分类模型,它预测一组二进制掩码,每个掩码与单个全局类别标签预测相关联。总的来说,提出的基于掩码分类的方法简化了语义和全景分割任务的有效方法,并展示了出色的实证结果。特别是,我们观察到当类别数量较大时,MaskFormer 优于每像素分类基线。我们的基于掩码分类的方法优于当前最先进的语义(ADE20K 上的 55.6 mIoU)和全景分割(COCO 上的 52.7 PQ)模型。
下图展示了 MaskFormer 的架构。摘自原始论文。
使用提示
- MaskFormer 的 Transformer 解码器与 DETR 的解码器相同。在训练过程中,DETR 的作者发现在解码器中使用辅助损失是有帮助的,特别是帮助模型输出每个类别的正确对象数量。如果将 MaskFormerConfig 的参数
use_auxilary_loss
设置为True
,则在每个解码器层之后添加预测前馈神经网络和匈牙利损失(FFNs 共享参数)。 - 如果要在多个节点上的分布式环境中训练模型,则应在
modeling_maskformer.py
中的MaskFormerLoss
类中更新get_num_masks
函数。在多个节点上训练时,应将其设置为所有节点上目标掩码的平均数量,可以在原始实现中看到这里。 - 可以使用 MaskFormerImageProcessor 为模型准备图像和可选的目标。
- 要获得最终的分割结果,根据任务,您可以调用 post_process_semantic_segmentation()或 post_process_panoptic_segmentation()。这两个任务都可以使用 MaskFormerForInstanceSegmentation 输出来解决,全景分割接受一个可选的
label_ids_to_fuse
参数,用于将目标对象(例如天空)的实例融合在一起。
资源
图像分割
- 所有演示推断以及使用 MaskFormer 在自定义数据上进行微调的笔记本都可以在这里找到。
MaskFormer 特定的输出
class transformers.models.maskformer.modeling_maskformer.MaskFormerModelOutput
( encoder_last_hidden_state: Optional = None pixel_decoder_last_hidden_state: Optional = None transformer_decoder_last_hidden_state: Optional = None encoder_hidden_states: Optional = None pixel_decoder_hidden_states: Optional = None transformer_decoder_hidden_states: Optional = None hidden_states: Optional = None attentions: Optional = None )
参数
encoder_last_hidden_state
(torch.FloatTensor
,形状为(batch_size, num_channels, height, width)
) — 编码器模型(骨干)最后一个阶段的最后隐藏状态(最终特征图)。pixel_decoder_last_hidden_state
(torch.FloatTensor
,形状为(batch_size, num_channels, height, width)
) — 像素解码器模型(FPN)最后一个阶段的最后隐藏状态(最终特征图)。transformer_decoder_last_hidden_state
(torch.FloatTensor
,形状为(batch_size, sequence_length, hidden_size)
) — 变换器解码器模型最后一个阶段的最后隐藏状态(最终特征图)。encoder_hidden_states
(tuple(torch.FloatTensor)
, 可选的, 当传递output_hidden_states=True
或config.output_hidden_states=True
时返回) — 形状为(batch_size, num_channels, height, width)
的torch.FloatTensor
元组。编码器模型在每个阶段输出的隐藏状态(也称为特征图)。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_hidden_states
(tuple(torch.FloatTensor)
, 可选的, 当传递output_hidden_states=True
或config.output_hidden_states=True
时返回) — 形状为(batch_size, sequence_length, hidden_size)
的torch.FloatTensor
元组。变换器解码器在每个阶段输出的隐藏状态(也称为特征图)。hidden_states
tuple(torch.FloatTensor)
,可选的,当传递output_hidden_states=True
或config.output_hidden_states=True
时返回) — 包含encoder_hidden_states
、pixel_decoder_hidden_states
和decoder_hidden_states
的torch.FloatTensor
元组。attentions
(tuple(torch.FloatTensor)
, 可选的, 当传递output_attentions=True
或config.output_attentions=True
时返回) — 形状为(batch_size, num_heads, sequence_length, sequence_length)
的torch.FloatTensor
元组(每层一个)。Detr 解码器中注意力 softmax 后的注意力权重,用于计算自注意力头中的加权平均值。
用于 MaskFormerModel 输出的类。该类返回计算 logits 所需的所有隐藏状态。
class transformers.models.maskformer.modeling_maskformer.MaskFormerForInstanceSegmentationOutput
( loss: Optional = None class_queries_logits: FloatTensor = None masks_queries_logits: FloatTensor = None auxiliary_logits: FloatTensor = None encoder_last_hidden_state: Optional = None pixel_decoder_last_hidden_state: Optional = None transformer_decoder_last_hidden_state: Optional = None encoder_hidden_states: Optional = None pixel_decoder_hidden_states: Optional = None transformer_decoder_hidden_states: Optional = None hidden_states: Optional = None attentions: Optional = None )
参数
loss
(torch.Tensor
, 可选) — 计算得到的损失,在存在标签时返回。class_queries_logits
(torch.FloatTensor
) — 形状为(batch_size, num_queries, num_labels + 1)
的张量,表示每个查询的提议类别。请注意+ 1
是因为我们包含了空类。masks_queries_logits
(torch.FloatTensor
) — 形状为(batch_size, num_queries, height, width)
的张量,表示每个查询的提议掩码。encoder_last_hidden_state
(torch.FloatTensor
,形状为(batch_size, num_channels, height, width)
) — 编码器模型(骨干)最后阶段的最后隐藏状态(最终特征图)。pixel_decoder_last_hidden_state
(torch.FloatTensor
,形状为(batch_size, num_channels, height, width)
) — 像素解码器模型(FPN)最后阶段的最后隐藏状态(最终特征图)。transformer_decoder_last_hidden_state
(torch.FloatTensor
,形状为(batch_size, sequence_length, hidden_size)
) — transformer 解码器模型最后阶段的最后隐藏状态(最终特征图)。encoder_hidden_states
(tuple(torch.FloatTensor)
, 可选, 当传递output_hidden_states=True
或config.output_hidden_states=True
时返回) — 形状为(batch_size, num_channels, height, width)
的torch.FloatTensor
元组(一个用于嵌入的输出 + 一个用于每个阶段的输出)。编码器模型在每个阶段的输出的隐藏状态(也称为特征图)。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_hidden_states
(tuple(torch.FloatTensor)
, 可选, 当传递output_hidden_states=True
或config.output_hidden_states=True
时返回) — 形状为(batch_size, sequence_length, hidden_size)
的torch.FloatTensor
元组(一个用于嵌入的输出 + 一个用于每个阶段的输出)。每个阶段的 transformer 解码器的隐藏状态。hidden_states
(tuple(torch.FloatTensor)
, 可选, 当传递output_hidden_states=True
或config.output_hidden_states=True
时返回) — 包含encoder_hidden_states
、pixel_decoder_hidden_states
和decoder_hidden_states
的torch.FloatTensor
元组。attentions
(tuple(torch.FloatTensor)
, 可选, 当传递output_attentions=True
或config.output_attentions=True
时返回) — 形状为(batch_size, num_heads, sequence_length, sequence_length)
的torch.FloatTensor
元组(每层一个)。Detr 解码器在注意力 softmax 之后的注意力权重,用于计算自注意力头中的加权平均值。
用于 MaskFormerForInstanceSegmentation 的输出类。
此输出可以直接传递给 post_process_semantic_segmentation()或 post_process_instance_segmentation()或 post_process_panoptic_segmentation(),具体取决于任务。有关使用详情,请参阅[`~MaskFormerImageProcessor]。
MaskFormerConfig
class transformers.MaskFormerConfig
( fpn_feature_size: int = 256 mask_feature_size: int = 256 no_object_weight: float = 0.1 use_auxiliary_loss: bool = False backbone_config: Optional = None decoder_config: Optional = None init_std: float = 0.02 init_xavier_std: float = 1.0 dice_weight: float = 1.0 cross_entropy_weight: float = 1.0 mask_weight: float = 20.0 output_auxiliary_logits: Optional = None **kwargs )
参数
mask_feature_size
(int
, 可选, 默认为 256) — mask 的特征大小,此值还将用于指定特征金字塔网络特征的大小。no_object_weight
(float
, 可选, 默认为 0.1) — 用于应用于空(无对象)类的权重。use_auxiliary_loss(bool,
可选, 默认为False
) — 如果为True
,MaskFormerForInstanceSegmentationOutput
将包含使用每个解码器阶段的 logits 计算的辅助损失。backbone_config
(Dict
, 可选) — 传递给骨干的配置,如果未设置,将使用与swin-base-patch4-window12-384
对应的配置。decoder_config
(Dict
, 可选) — 传递给变压器解码器模型的配置,如果未设置,则将使用detr-resnet-50
的基本配置。init_std
(float
, 可选, 默认为 0.02) — 用于初始化所有权重矩阵的截断正态初始化器的标准差。init_xavier_std
(float
, 可选, 默认为 1) — 用于 HM Attention map 模块中 Xavier 初始化增益的缩放因子。dice_weight
(float
, 可选, 默认为 1.0) — dice 损失的权重。cross_entropy_weight
(float
, 可选, 默认为 1.0) — 交叉熵损失的权重。mask_weight
(float
, 可选, 默认为 20.0) — mask 损失的权重。output_auxiliary_logits
(bool
, 可选) — 模型是否输出其auxiliary_logits
。
引发
ValueError
ValueError
— 如果选择的骨干模型类型不在["swin"]
中,或者选择的解码器模型类型不在["detr"]
中
这是一个配置类,用于存储 MaskFormerModel 的配置。它用于根据指定的参数实例化一个 MaskFormer 模型,定义模型架构。使用默认值实例化配置将产生类似于在ADE20k-150上训练的 MaskFormer facebook/maskformer-swin-base-ade架构的配置。
配置对象继承自 PretrainedConfig,可用于控制模型输出。阅读 PretrainedConfig 的文档以获取更多信息。
目前,MaskFormer 仅支持 Swin Transformer 作为骨干网络。
示例:
>>> from transformers import MaskFormerConfig, MaskFormerModel >>> # Initializing a MaskFormer facebook/maskformer-swin-base-ade configuration >>> configuration = MaskFormerConfig() >>> # Initializing a model (with random weights) from the facebook/maskformer-swin-base-ade style configuration >>> model = MaskFormerModel(configuration) >>> # Accessing the model configuration >>> configuration = model.config
from_backbone_and_decoder_configs
( backbone_config: PretrainedConfig decoder_config: PretrainedConfig **kwargs ) → export const metadata = 'undefined';MaskFormerConfig
参数
backbone_config
(PretrainedConfig) — 骨干配置。decoder_config
(PretrainedConfig)— 要使用的变压器解码器配置。
返回
MaskFormerConfig
配置对象的一个实例
从预训练的骨干模型配置和 DETR 模型配置实例化一个 MaskFormerConfig(或派生类)。
MaskFormerImageProcessor
class transformers.MaskFormerImageProcessor
( 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 do_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
。do_reduce_labels
(bool
,可选,默认为False
)— 是否减少所有分割地图的标签值。通常用于数据集中使用 0 表示背景,并且背景本身不包含在数据集的所有类中(例如 ADE20k)。背景标签将被替换为ignore_index
。
构造一个 MaskFormer 图像处理器。该图像处理器可用于为模型准备图像和可选目标。
该图像处理器继承自BaseImageProcessor
,其中包含大部分主要方法。用户应参考这个超类以获取有关这些方法的更多信息。
preprocess
( 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 do_reduce_labels: Optional = None return_tensors: Union = None data_format: Union = <ChannelDimension.FIRST: 'channels_first'> input_data_format: Union = None **kwargs )
encode_inputs
( 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。
instance_id_to_semantic_id
(List[Dict[int, int]]
或Dict[int, int]
,可选)— 对象实例 ID 和类别 ID 之间的映射。如果传递了此参数,则segmentation_maps
将被视为实例分割地图,其中每个像素表示一个实例 ID。可以提供一个全局/数据集级别映射的单个字典,或者作为字典列表(每个图像一个),以分别映射每个图像中的实例 ID。return_tensors
(str
或 TensorType,可选)— 如果设置,将返回张量而不是 NumPy 数组。如果设置为'pt'
,则返回 PyTorch 的torch.Tensor
对象。
返回
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
的标签,例如mask_labels[i][j]
的标签为class_labels[i][j]
。
将图像填充到批次中最大的图像,并创建相应的pixel_mask
。
MaskFormer 通过掩模分类范式解决语义分割问题,因此输入的分割地图将被转换为二进制掩模列表及其相应的标签。让我们看一个例子,假设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]
,每个掩模的标签。
post_process_semantic_segmentation
( outputs target_sizes: Optional = None ) → export const metadata = 'undefined';List[torch.Tensor]
参数
outputs
(MaskFormerForInstanceSegmentation)— 模型的原始输出。target_sizes
(List[Tuple[int, int]]
,可选)— 长度为batch_size
的列表,其中每个列表项(Tuple[int, int]]
对应于每个预测的请求最终大小(高度,宽度)。如果保持为 None,则不会调整预测。
返回
List[torch.Tensor]
一个长度为batch_size
的列表,其中每个项目是形状为(高度,宽度)的语义分割地图,对应于目标大小条目(如果指定了target_sizes
)。每个torch.Tensor
的每个条目对应于一个语义类别 ID。
将 MaskFormerForInstanceSegmentation 的输出转换为语义分割地图。仅支持 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
(MaskFormerForInstanceSegmentation)— 模型的原始输出。threshold
(float
,可选,默认为 0.5)— 保留预测实例掩模的概率分数阈值。mask_threshold
(float
, optional, defaults to 0.5) — 将预测的掩码转换为二进制值时使用的阈值。overlap_mask_area_threshold
(float
, optional, defaults to 0.8) — 重叠掩码面积阈值,用于合并或丢弃每个二进制实例掩码中的小断开部分。target_sizes
(List[Tuple]
, optional) — 长度为(batch_size)的列表,其中每个列表项(Tuple[int, int]
)对应于每个预测的请求最终大小(高度,宽度)。如果设置为None
,则不会调整预测大小。return_coco_annotation
(bool
, optional, defaults toFalse
) — 如果设置为True
,分割地图将以 COCO 运行长度编码(RLE)格式返回。return_binary_maps
(bool
, optional, defaults toFalse
) — 如果设置为True
,分割地图将作为二进制分割地图的连接张量返回(每个检测到的实例一个)。
返回
List[Dict]
一个字典列表,每个图像一个,每个字典包含两个键:
segmentation
— 形状为(height, width)
的张量,其中每个像素表示segment_id
或分割地图的List[List]
运行长度编码(RLE),如果return_coco_annotation
设置为True
,则设置为None
,如果未找到高于threshold
的掩码。segments_info
— 包含每个段的附加信息的字典。
id
— 代表segment_id
的整数。label_id
— 代表与segment_id
对应的标签/语义类别 ID 的整数。score
— 带有segment_id
的段的预测分数。
将MaskFormerForInstanceSegmentationOutput
的输出转换为实例分割预测。仅支持 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
(MaskFormerForInstanceSegmentationOutput
) — 来自 MaskFormerForInstanceSegmentation 的输出。threshold
(float
, optional, defaults to 0.5) — 保留预测实例掩码的概率分数阈值。mask_threshold
(float
, optional, defaults to 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]
)对应于批处理中每个预测的请求最终大小(高度,宽度)。如果设置为None
,则不会调整预测大小。
返回
List[Dict]
一个字典列表,每个图像一个,每个字典包含两个键:
segmentation
— 形状为(height, width)
的张量,其中每个像素表示segment_id
,如果未找到高于threshold
的掩码,则设置为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
的段的预测分数。
将MaskFormerForInstanceSegmentationOutput
的输出转换为图像全景分割预测。仅支持 PyTorch。
MaskFormerFeatureExtractor
class transformers.MaskFormerFeatureExtractor
( *args **kwargs )
__call__
( images segmentation_maps = None **kwargs )
encode_inputs
( 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
,可选) — 具有像素级注释的相应语义分割图。(可选,默认为True
):是否将图像填充到批次中最大的图像并创建像素掩码。如果保持默认值,将返回一个像素掩码,即:
- 1 表示真实像素(即
未被遮罩
), - 0 表示填充像素(即
被遮罩
)。
instance_id_to_semantic_id
(List[Dict[int, int]]
或Dict[int, int]
,可选) — 对象实例 id 和类 id 之间的映射。如果传递,segmentation_maps
将被视为实例分割图,其中每个像素表示一个实例 id。可以提供为一个包含全局/数据集级映射的单个字典,或者作为字典列表(每个图像一个),以分别映射每个图像中的实例 id。return_tensors
(str
或 TensorType,可选) — 如果设置,将返回张量而不是 NumPy 数组。如果设置为'pt'
,则返回 PyTorch 的torch.Tensor
对象。
返回
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
。
MaskFormer 使用掩码分类范式解决语义分割问题,因此输入分割图将被转换为二进制掩码列表及其相应的标签。让我们看一个例子,假设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]
,每个掩码的标签。
post_process_semantic_segmentation
( outputs target_sizes: Optional = None ) → export const metadata = 'undefined';List[torch.Tensor]
参数
outputs
(MaskFormerForInstanceSegmentation) — 模型的原始输出。target_sizes
(List[Tuple[int, int]]
,可选) — 长度为batch_size
的列表,其中每个列表项(Tuple[int, int]
)对应于每个预测的请求最终大小(高度,宽度)。如果保持为None
,则不会调整预测大小。
返回
List[torch.Tensor]
长度为batch_size
的列表,其中每个项目是形状为(height, width)
的语义分割图,对应于target_sizes
条目(如果指定了target_sizes
)。每个torch.Tensor
的每个条目对应于一个语义类别 id。
将 MaskFormerForInstanceSegmentation 的输出转换为语义分割图。仅支持 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
(MaskFormerForInstanceSegmentation) — 模型的原始输出。threshold
(float
, optional, defaults to 0.5) — 保留预测实例掩模的概率分数阈值。mask_threshold
(float
, optional, defaults to 0.5) — 将预测掩模转换为二进制值时使用的阈值。overlap_mask_area_threshold
(float
, optional, defaults to 0.8) — 合并或丢弃每个二进制实例掩模中的小断开部分的重叠掩模区域阈值。target_sizes
(List[Tuple]
, optional) — 长度为 (batch_size) 的列表,其中每个列表项 (Tuple[int, int]]
) 对应于每个预测的请求的请求最终大小(高度,宽度)。如果保持为 None,则不会调整预测大小。return_coco_annotation
(bool
, optional, defaults toFalse
) — 如果设置为True
,则以 COCO run-length 编码(RLE)格式返回分割图。return_binary_maps
(bool
, optional, defaults toFalse
) — 如果设置为True
,则分割图将作为二进制分割图的连接张量返回(每个检测到的实例一个)。
返回
List[Dict]
一个字典列表,每个图像一个字典,每个字典包含两个键:
segmentation
— 形状为(height, width)
的张量,其中每个像素表示segment_id
或分割图的List[List]
run-length 编码(RLE),如果 return_coco_annotation 设置为True
。如果未找到高于threshold
的掩模,则设置为None
。segments_info
— 包含每个段的其他信息的字典。
id
— 表示segment_id
的整数。label_id
— 表示与segment_id
对应的标签 / 语义类别 ID 的整数。score
— 具有segment_id
的段的预测分数。
将 MaskFormerForInstanceSegmentationOutput
的输出转换为实例分割预测。仅支持 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
(MaskFormerForInstanceSegmentationOutput
) — 来自 MaskFormerForInstanceSegmentation 的输出。threshold
(float
, optional, defaults to 0.5) — 保留预测实例掩模的概率分数阈值。mask_threshold
(float
, optional, defaults to 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]]
) 对应于批处理中每个预测的请求的最终大小(高度,宽度)。如果保持为 None,则不会调整预测大小。
返回
List[Dict]
一个字典列表,每个图像一个字典,每个字典包含两个键:
segmentation
- 形状为(height, width)
的张量,其中每个像素表示一个segment_id
,如果未找到高于threshold
的掩码,则设置为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
的段的预测分数。
将MaskFormerForInstanceSegmentationOutput
的输出转换为图像全景分割预测。仅支持 PyTorch。
Transformers 4.37 中文文档(六十九)(2)https://developer.aliyun.com/article/1564102