Transformers 文档

ViTMAE

Hugging Face's logo
加入 Hugging Face 社区

并获得增强的文档体验

开始使用

该模型于 2021 年 11 月 11 日发布在 HF papers 上,并于 2022 年 1 月 18 日贡献给 Hugging Face Transformers。

FlashAttention SDPA

ViTMAE

ViTMAE 是一种自监督视觉模型,通过掩盖图像的很大一部分(约 75%)进行预训练。编码器处理可见的图像分块(patches),解码器则从编码后的分块和掩码标记(mask tokens)中重建丢失的像素。预训练完成后,编码器可以重新用于图像分类或目标检测等下游任务——其表现通常优于通过监督学习训练的模型。

drawing

你可以在 AI at Meta 组织下找到所有原始的 ViTMAE 检查点(checkpoints)。

点击右侧边栏中的 ViTMAE 模型,获取有关如何将 ViTMAE 应用于视觉任务的更多示例。

下面的示例演示了如何使用 ViTMAEForPreTraining 类来重建丢失的像素。

自动模型
import requests
import torch
from PIL import Image

from transformers import ViTImageProcessor, ViTMAEForPreTraining


url = "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/pipeline-cat-chonk.jpeg"
image = Image.open(requests.get(url, stream=True).raw)

processor = ViTImageProcessor.from_pretrained("facebook/vit-mae-base")
inputs = processor(image, return_tensors="pt").to(model.device)
inputs = {k: v.to(model.device) for k, v in inputs.items()}

model = ViTMAEForPreTraining.from_pretrained("facebook/vit-mae-base", attn_implementation="sdpa", device_map="auto")
with torch.no_grad():
    outputs = model(**inputs)

reconstruction = outputs.logits

注意事项

资源

ViTMAEConfig

class transformers.ViTMAEConfig

< >

( transformers_version: str | None = None architectures: list[str] | None = None output_hidden_states: bool | None = False return_dict: bool | None = True dtype: typing.Union[str, ForwardRef('torch.dtype'), NoneType] = None chunk_size_feed_forward: int = 0 is_encoder_decoder: bool = False id2label: dict[int, str] | dict[str, str] | None = None label2id: dict[str, int] | dict[str, str] | None = None problem_type: typing.Optional[typing.Literal['regression', 'single_label_classification', 'multi_label_classification']] = None hidden_size: int = 768 num_hidden_layers: int = 12 num_attention_heads: int = 12 intermediate_size: int = 3072 hidden_act: str = 'gelu' hidden_dropout_prob: float | int = 0.0 attention_probs_dropout_prob: float | int = 0.0 initializer_range: float = 0.02 layer_norm_eps: float = 1e-12 image_size: int | list[int] | tuple[int, int] = 224 patch_size: int | list[int] | tuple[int, int] = 16 num_channels: int = 3 qkv_bias: bool = True decoder_num_attention_heads: int = 16 decoder_hidden_size: int = 512 decoder_num_hidden_layers: int = 8 decoder_intermediate_size: int = 2048 mask_ratio: float = 0.75 norm_pix_loss: bool = False )

参数

  • hidden_size (int, 可选, 默认为 768) — 隐藏表示的维度。
  • num_hidden_layers (int, 可选, 默认为 12) — Transformer 解码器中的隐藏层数量。
  • num_attention_heads (int, 可选, 默认为 12) — Transformer 解码器中每个注意力层的注意力头数量。
  • intermediate_size (int, 可选, 默认为 3072) — MLP 表示的维度。
  • hidden_act (str, 可选, 默认为 gelu) — 解码器中的非线性激活函数(函数或字符串)。例如 "gelu""relu""silu" 等。
  • hidden_dropout_prob (Union[float, int], 可选, 默认为 0.0) — 嵌入层、编码器和池化层中所有全连接层的丢弃概率。
  • attention_probs_dropout_prob (Union[float, int], 可选, 默认为 0.0) — 注意力概率的丢弃比率。
  • initializer_range (float, 可选, 默认为 0.02) — 用于初始化所有权重矩阵的截断正态分布初始化器(truncated_normal_initializer)的标准差。
  • layer_norm_eps (float, 可选, 默认为 1e-12) — 层归一化层使用的 epsilon 值。
  • image_size (Union[int, list[int], tuple[int, int]], 可选, 默认为 224) — 每张图像的大小(分辨率)。
  • patch_size (Union[int, list[int], tuple[int, int]], 可选, 默认为 16) — 每个分块的大小(分辨率)。
  • num_channels (int, 可选, 默认为 3) — 输入通道数。
  • qkv_bias (bool, 可选, 默认为 True) — 是否为查询(queries)、键(keys)和值(values)添加偏置。
  • decoder_num_attention_heads (int, 可选, 默认为 16) — Transformer 解码器中每个注意力层的注意力头数量。
  • decoder_hidden_size (int, 可选, 默认为 512) — 隐藏表示的维度。
  • decoder_num_hidden_layers (int, 可选, 默认为 8) — 解码器中的隐藏层数量。
  • decoder_intermediate_size (int, 可选, 默认为 2048) — MLP 表示的维度。
  • mask_ratio (float, 可选, 默认为 0.75) — 输入序列中被掩盖的标记比例。
  • norm_pix_loss (bool, 可选, 默认为 False) — 是否使用归一化像素进行训练(参见论文中的表 3)。作者在实验中发现,使用归一化像素提高了表示质量。

这是用于存储 ViTMAEModel 配置的配置类。它根据指定的参数实例化一个 ViTMAE 模型,定义模型架构。使用默认值实例化配置将产生与 facebook/vit-mae-base 类似的配置。

配置对象继承自 PreTrainedConfig,可用于控制模型输出。阅读 PreTrainedConfig 的文档以获取更多信息。

示例

>>> from transformers import ViTMAEConfig, ViTMAEModel

>>> # Initializing a ViT MAE vit-mae-base style configuration
>>> configuration = ViTMAEConfig()

>>> # Initializing a model (with random weights) from the vit-mae-base style configuration
>>> model = ViTMAEModel(configuration)

>>> # Accessing the model configuration
>>> configuration = model.config

ViTMAEModel

class transformers.ViTMAEModel

< >

( config: ViTMAEConfig )

参数

原始的 ViTMAE 模型,输出原始隐藏状态,顶部没有任何特定任务头(head)。

该模型继承自 PreTrainedModel。请查看超类文档以了解该库为所有模型实现的通用方法(例如下载或保存、调整输入嵌入大小、剪枝头部等)。

此模型也是一个 PyTorch torch.nn.Module 子类。像普通的 PyTorch Module 一样使用它,并参考 PyTorch 文档了解一般用法和行为的所有相关信息。

forward

< >

( pixel_values: torch.Tensor | None = None noise: torch.Tensor | None = None interpolate_pos_encoding: bool | None = None attention_mask: torch.Tensor | None = None **kwargs: typing_extensions.Unpack[transformers.utils.generic.TransformersKwargs] ) ViTMAEModelOutputtuple(torch.FloatTensor)

参数

  • pixel_values (形状为 (batch_size, num_channels, image_size, image_size)torch.Tensor可选) — 对应于输入图像的张量。像素值可以使用 ViTImageProcessor 获取。详情请参阅 ViTImageProcessor.__call__()processor_class 使用 ViTImageProcessor 来处理图像)。
  • noise (形状为 (batch_size, sequence_length)torch.FloatTensor可选) — 主要用于测试目的,以控制随机性并保持可复现性。
  • interpolate_pos_encoding (bool可选,默认值为 False) — 是否对预训练的位置编码进行插值。这主要用于在更高分辨率的图像上使用该模型。
  • attention_mask (形状为 (batch_size, sequence_length)torch.Tensor可选) — 用于避免对填充标记索引执行注意力计算的掩码。掩码值选自 [0, 1]

    • 1 表示未遮盖的标记,
    • 0 表示被遮盖的标记。

    什么是注意力掩码?

返回

ViTMAEModelOutputtuple(torch.FloatTensor)

ViTMAEModelOutputtorch.FloatTensor 元组(如果传递了 return_dict=False 或当 config.return_dict=False 时),根据配置(ViTMAEConfig)和输入包含不同的元素。

ViTMAEModel 的前向传播方法,覆盖了 __call__ 特殊方法。

虽然 forward pass 的实现需要在此函数中定义,但你应该在之后调用 Module 实例而不是这个,因为前者负责运行预处理和后处理步骤,而后者会静默地忽略它们。

  • last_hidden_state (形状为 (batch_size, sequence_length, hidden_size)torch.FloatTensor, 可选,默认为 None) — 模型最后一层输出的隐藏状态序列。

  • mask (形状为 (batch_size, sequence_length)torch.FloatTensor) — 指示哪些分块(patch)被遮盖 (1) 哪些未被遮盖 (0) 的张量。

  • ids_restore (形状为 (batch_size, sequence_length)torch.LongTensor) — 包含(已打乱的)被遮盖分块的原始索引的张量。

  • hidden_states (tuple[torch.FloatTensor]可选,在传入 output_hidden_states=Trueconfig.output_hidden_states=True 时返回) — torch.FloatTensor 元组(一个用于嵌入层的输出(如果模型有嵌入层的话) + 一个用于每层输出),形状为 (batch_size, sequence_length, hidden_size)

    模型在每个层输出的隐藏状态以及可选的初始嵌入输出。

  • attentions (tuple[torch.FloatTensor]可选,在传入 output_attentions=Trueconfig.output_attentions=True 时返回) — torch.FloatTensor 元组(每层一个),形状为 (batch_size, num_heads, sequence_length, sequence_length)

    注意力 softmax 后的注意力权重,用于计算自注意力头中的加权平均值。

示例

>>> from transformers import AutoImageProcessor, ViTMAEModel
>>> from PIL import Image
>>> import httpx
>>> from io import BytesIO

>>> url = "http://images.cocodataset.org/val2017/000000039769.jpg"
>>> with httpx.stream("GET", url) as response:
...     image = Image.open(BytesIO(response.read()))

>>> image_processor = AutoImageProcessor.from_pretrained("facebook/vit-mae-base")
>>> model = ViTMAEModel.from_pretrained("facebook/vit-mae-base")

>>> inputs = image_processor(images=image, return_tensors="pt")
>>> outputs = model(**inputs)
>>> last_hidden_states = outputs.last_hidden_state

ViTMAEForPreTraining

class transformers.ViTMAEForPreTraining

< >

( config: ViTMAEConfig )

参数

  • config (ViTMAEConfig) — 具有模型所有参数的模型配置类。使用配置文件初始化不会加载与模型相关的权重,仅加载配置。查看 from_pretrained() 方法以加载模型权重。

带有解码器的 ViTMAE 模型转换器,用于自监督预训练。

请注意,我们在 examples directory 中提供了一个脚本,用于在自定义数据上预训练此模型。

该模型继承自 PreTrainedModel。请查看超类文档以了解该库为所有模型实现的通用方法(例如下载或保存、调整输入嵌入大小、剪枝头部等)。

此模型也是一个 PyTorch torch.nn.Module 子类。像普通的 PyTorch Module 一样使用它,并参考 PyTorch 文档了解一般用法和行为的所有相关信息。

forward

< >

( pixel_values: torch.Tensor | None = None noise: torch.Tensor | None = None interpolate_pos_encoding: bool | None = None attention_mask: torch.Tensor | None = None **kwargs: typing_extensions.Unpack[transformers.utils.generic.TransformersKwargs] ) ViTMAEForPreTrainingOutputtuple(torch.FloatTensor)

参数

  • pixel_values (形状为 (batch_size, num_channels, image_size, image_size)torch.Tensor可选) — 对应于输入图像的张量。像素值可以使用 ViTImageProcessor 获取。详情请参阅 ViTImageProcessor.__call__()processor_class 使用 ViTImageProcessor 来处理图像)。
  • noise (形状为 (batch_size, sequence_length)torch.FloatTensor可选) — 主要用于测试目的,以控制随机性并保持可复现性。
  • interpolate_pos_encoding (bool可选,默认值为 False) — 是否对预训练的位置编码进行插值。这主要用于在更高分辨率的图像上使用该模型。
  • attention_mask (形状为 (batch_size, sequence_length)torch.Tensor可选) — 用于避免对填充标记索引执行注意力计算的掩码。掩码值选自 [0, 1]

    • 1 表示未遮盖的标记,
    • 0 表示被遮盖的标记。

    什么是注意力掩码?

返回

ViTMAEForPreTrainingOutputtuple(torch.FloatTensor)

ViTMAEForPreTrainingOutputtorch.FloatTensor 元组(如果传递了 return_dict=False 或当 config.return_dict=False 时),根据配置(ViTMAEConfig)和输入包含不同的元素。

ViTMAEForPreTraining 的前向传播方法,覆盖了 __call__ 特殊方法。

虽然 forward pass 的实现需要在此函数中定义,但你应该在之后调用 Module 实例而不是这个,因为前者负责运行预处理和后处理步骤,而后者会静默地忽略它们。

  • loss (torch.FloatTensor,形状为 (1,)) — 像素重建损失。

  • logits (形状为 (batch_size, sequence_length, patch_size ** 2 * num_channels)torch.FloatTensor) — 像素重构对数(logits)。

  • mask (形状为 (batch_size, sequence_length)torch.FloatTensor) — 指示哪些分块(patch)被遮盖 (1) 哪些未被遮盖 (0) 的张量。

  • ids_restore (形状为 (batch_size, sequence_length)torch.LongTensor) — 包含(已打乱的)被遮盖分块的原始索引的张量。

  • hidden_states (tuple[torch.FloatTensor]可选,在传入 output_hidden_states=Trueconfig.output_hidden_states=True 时返回) — torch.FloatTensor 元组(一个用于嵌入层的输出(如果模型有嵌入层的话) + 一个用于每层输出),形状为 (batch_size, sequence_length, hidden_size)

    模型在每个层输出的隐藏状态以及可选的初始嵌入输出。

  • attentions (tuple[torch.FloatTensor]可选,在传入 output_attentions=Trueconfig.output_attentions=True 时返回) — torch.FloatTensor 元组(每层一个),形状为 (batch_size, num_heads, sequence_length, sequence_length)

    注意力 softmax 后的注意力权重,用于计算自注意力头中的加权平均值。

示例

>>> from transformers import AutoImageProcessor, ViTMAEForPreTraining
>>> from PIL import Image
>>> import httpx
>>> from io import BytesIO

>>> url = "http://images.cocodataset.org/val2017/000000039769.jpg"
>>> with httpx.stream("GET", url) as response:
...     image = Image.open(BytesIO(response.read())).convert("RGB")

>>> image_processor = AutoImageProcessor.from_pretrained("facebook/vit-mae-base")
>>> model = ViTMAEForPreTraining.from_pretrained("facebook/vit-mae-base")

>>> inputs = image_processor(images=image, return_tensors="pt")
>>> outputs = model(**inputs)
>>> loss = outputs.loss
>>> mask = outputs.mask
>>> ids_restore = outputs.ids_restore
在 GitHub 上更新

© . This site is unofficial and not affiliated with Hugging Face, Inc.