Transformers documentation
UPerNet
该模型于 2018-07-26 在 HF papers 上发表,并于 2023-01-16 贡献至 Hugging Face Transformers。
UPerNet
概述
UPerNet 模型由 Tete Xiao、Yingcheng Liu、Bolei Zhou、Yuning Jiang 和 Jian Sun 在 Unified Perceptual Parsing for Scene Understanding 中提出。UPerNet 是一个通用框架,能够利用 ConvNeXt 或 Swin 等任意视觉骨干网络,有效地从图像中分割出广泛的概念。
该论文的摘要如下:
人类在多个层面上感知视觉世界:我们能够轻松地对场景进行分类并检测其中的物体,同时还能识别物体的纹理和表面,以及它们不同的组成部分。本文研究了一项名为统一感知解析(Unified Perceptual Parsing)的新任务,该任务要求机器视觉系统从给定图像中识别尽可能多的视觉概念。我们开发了一个名为 UPerNet 的多任务框架以及一种训练策略,以从异构的图像标注中学习。我们在统一感知解析任务上对该框架进行了基准测试,结果表明它能够有效地从图像中分割出广泛的概念。训练好的网络还被进一步应用于发现自然场景中的视觉知识。
UPerNet framework. Taken from the original paper. 该模型由 nielsr 贡献。原始代码基于 OpenMMLab 的 mmsegmentation,在此处。
使用示例
UPerNet 是一个用于语义分割的通用框架。它可以与任意视觉骨干网络配合使用,例如:
from transformers import SwinConfig, UperNetConfig, UperNetForSemanticSegmentation
backbone_config = SwinConfig(out_features=["stage1", "stage2", "stage3", "stage4"])
config = UperNetConfig(backbone_config=backbone_config)
model = UperNetForSemanticSegmentation(config)若要使用其他视觉骨干网络,例如 ConvNeXt,只需使用相应的骨干网络实例化模型即可:
from transformers import ConvNextConfig, UperNetConfig, UperNetForSemanticSegmentation
backbone_config = ConvNextConfig(out_features=["stage1", "stage2", "stage3", "stage4"])
config = UperNetConfig(backbone_config=backbone_config)
model = UperNetForSemanticSegmentation(config)请注意,这将随机初始化模型的所有权重。
资源
一份来自 Hugging Face 官方和社区(以 🌎 标识)的资源列表,帮助你快速上手 UPerNet。
- UPerNet 的演示笔记本可在此处找到。
- UperNetForSemanticSegmentation 受此 notebook 支持。
- 另请参阅:语义分割任务指南
如果您有兴趣提交资源以收录在此处,请随时发起 Pull Request,我们将对其进行审核!理想情况下,该资源应展示一些新内容,而不是重复现有资源。
UperNetConfig
class transformers.UperNetConfig
< source >( transformers_version: str | None = Nonearchitectures: list[str] | None = Noneoutput_hidden_states: bool | None = Falsereturn_dict: bool | None = Truedtype: str | torch.dtype | None = Nonechunk_size_feed_forward: int = 0is_encoder_decoder: bool = Falseid2label: dict[int, str] | dict[str, str] | None = Nonelabel2id: dict[str, int] | dict[str, str] | None = Noneproblem_type: Literal['regression', 'single_label_classification', 'multi_label_classification'] | None = Nonebackbone_config: dict | transformers.configuration_utils.PreTrainedConfig | None = Nonehidden_size: int = 512initializer_range: float = 0.02pool_scales: list[int] | tuple[int, ...] = (1, 2, 3, 6)use_auxiliary_head: bool = Trueauxiliary_loss_weight: float = 0.4auxiliary_in_channels: int | None = Noneauxiliary_channels: int = 256auxiliary_num_convs: int = 1auxiliary_concat_input: bool = Falseloss_ignore_index: int = 255 )
参数
- backbone_config (
Union[dict, ~configuration_utils.PreTrainedConfig],可选) — 主干模型的配置。 - hidden_size (
int,可选,默认为512) — 隐藏表示的维度。 - initializer_range (
float,可选,默认为0.02) — 用于初始化所有权重矩阵的 truncated_normal_initializer 的标准差。 - pool_scales (
tuple[int],可选,默认为[1, 2, 3, 6]) — 应用于最后一个特征图的 Pooling Pyramid Module 中使用的池化比例。 - use_auxiliary_head (
bool,可选,默认为True) — 是否在训练期间使用辅助头。 - auxiliary_loss_weight (
float,可选,默认为 0.4) — 辅助头交叉熵损失的权重。 - auxiliary_in_channels (
int,可选,默认为 256) — 辅助头中的输入通道数。 - auxiliary_channels (
int,可选,默认为 256) — 辅助头中使用的通道数。 - auxiliary_num_convs (
int,可选,默认为 1) — 辅助头中使用的卷积层数量。 - auxiliary_concat_input (
bool,可选,默认为False) — 是否将辅助头的输出与输入拼接,然后再送入分类层。 - loss_ignore_index (
int,可选,默认为 255) — 损失函数中忽略的索引。
这是用于存储 UpernetModel 配置的类。它根据指定的参数实例化 Upernet 模型,并定义模型架构。使用默认值实例化配置将得到与 openmmlab/upernet-convnext-tiny 类似的配置。
配置对象继承自 PreTrainedConfig,可用于控制模型输出。有关更多信息,请参阅 PreTrainedConfig 的文档。
示例:
>>> from transformers import UperNetConfig, UperNetForSemanticSegmentation
>>> # Initializing a configuration
>>> configuration = UperNetConfig()
>>> # Initializing a model (with random weights) from the configuration
>>> model = UperNetForSemanticSegmentation(configuration)
>>> # Accessing the model configuration
>>> configuration = model.configUperNetForSemanticSegmentation
class transformers.UperNetForSemanticSegmentation
< source >( config: UperNetConfig )
参数
- config (UperNetConfig) — 模型的配置类,包含模型的所有参数。使用配置文件进行初始化时,不会加载与模型关联的权重,仅加载配置。请查看 from_pretrained() 方法以加载模型权重。
利用任意视觉骨干网络的 UperNet 框架,例如用于 ADE20k、CityScapes。
该模型继承自 PreTrainedModel。请查阅父类文档,了解该库为所有模型实现的通用方法(例如下载或保存、调整输入嵌入大小、剪枝头等)。
该模型也是 PyTorch torch.nn.Module 的子类。 请将其作为常规的 PyTorch Module 使用,有关通用用法和行为的所有事项,请参阅 PyTorch 文档。
forward
< source >( pixel_values: typing.Optional[torch.Tensor] = Noneoutput_attentions: bool | None = Noneoutput_hidden_states: bool | None = Nonelabels: typing.Optional[torch.Tensor] = Nonereturn_dict: bool | None = None**kwargs ) → SemanticSegmenterOutput or tuple(torch.Tensor)
参数
- pixel_values (
torch.Tensor,形状为(batch_size, num_channels, image_size, image_size),可选) — 对应输入图像的张量。像素值可通过 SegformerImageProcessor 获取。有关详细信息,请参阅 SegformerImageProcessor.call()(processor_class使用 SegformerImageProcessor 处理图像)。 - output_attentions (
bool, 可选) — 是否返回所有注意力层的注意力张量。有关详细信息,请参阅返回张量中的attentions。 - output_hidden_states (
bool,可选) — 是否返回所有层的隐藏状态。有关更多详细信息,请参阅返回张量中的hidden_states。 - labels(形状为
(batch_size, height, width)的torch.LongTensor,可选) — 用于计算损失的语义分割真值图。索引应在[0, ..., config.num_labels - 1]范围内。如果config.num_labels > 1,则计算分类损失(交叉熵)。 - return_dict (
bool, 可选) — 是否返回 ModelOutput 而不是普通元组。
返回值
SemanticSegmenterOutput 或 tuple(torch.Tensor)
一个 SemanticSegmenterOutput 或 torch.Tensor 元组(如果传入了 return_dict=False 或 config.return_dict=False),其包含的元素取决于配置(UperNetConfig)和输入。
UperNetForSemanticSegmentation 的 forward 方法重写了 __call__ 特殊方法。
尽管前向传播的实现需要在此函数中定义,但之后应调用
Module实例,而不是直接调用此函数,因为前者会负责执行预处理和后处理步骤,而后者则会静默地忽略这些步骤。
loss (
torch.Tensor,形状为(1,),可选,当提供labels时返回) — 分类损失(如果 config.num_labels==1,则为回归损失)。logits(形状为
(batch_size, config.num_labels, logits_height, logits_width)的torch.Tensor)— 每个像素的分类分数。返回的 logits 的大小不一定与作为输入传入的
pixel_values相同。这样做的目的是避免进行两次插值,从而在用户需要作为后处理将 logits 调整回原始图像大小时损失一些质量。您应始终检查 logits 的形状,并根据需要进行调整。hidden_states (
tuple(torch.Tensor),可选,当传入output_hidden_states=True或config.output_hidden_states=True时返回) — 一个torch.Tensor元组(如果模型具有嵌入层,则包含嵌入层的输出,以及每一层的输出),形状为(batch_size, patch_size, hidden_size)。模型在每一层输出处的隐藏状态,以及可选的初始嵌入输出。
attentions (
tuple(torch.Tensor),可选,当传入output_attentions=True或config.output_attentions=True时返回) — 一个torch.Tensor元组(每层一个),形状为(batch_size, num_heads, patch_size, sequence_length)。注意力权重,即经过注意力 softmax 之后的权重,用于在自注意力头中计算加权平均值。
示例:
>>> from transformers import AutoImageProcessor, UperNetForSemanticSegmentation
>>> from PIL import Image
>>> from huggingface_hub import hf_hub_download
>>> image_processor = AutoImageProcessor.from_pretrained("openmmlab/upernet-convnext-tiny")
>>> model = UperNetForSemanticSegmentation.from_pretrained("openmmlab/upernet-convnext-tiny")
>>> filepath = hf_hub_download(
... repo_id="hf-internal-testing/fixtures_ade20k", filename="ADE_val_00000001.jpg", repo_type="dataset"
... )
>>> image = Image.open(filepath).convert("RGB")
>>> inputs = image_processor(images=image, return_tensors="pt")
>>> outputs = model(**inputs)
>>> logits = outputs.logits # shape (batch_size, num_labels, height, width)
>>> list(logits.shape)
[1, 150, 512, 512]