论文摘要如下:
本文阐明了遮蔽自编码器(MAE)可以作为计算机视觉的可扩展自监督学习器。我们的MAE方法简单:我们遮蔽输入图像中的随机图像块,并重建丢失的像素。它基于两个核心设计。首先,我们开发了一种非对称编码器-解码器架构,编码器仅对图像块的可见子集(无遮蔽标记)进行操作,同时解码器轻量级地重构建图并从潜在表示和遮蔽标记中重建原始图像。其次,我们发现遮蔽输入图像的大部分(例如,75%)会产生有意义的自监督任务。结合这两个设计,我们能够高效有效地训练大型模型:我们加速了训练(加速3倍或多倍),并提高了精度。我们的可扩展方法允许学习高容量模型,这些模型具有良好的泛化能力:例如,传统的ViT-Huge模型在仅使用ImageNet-1K数据的方法中取得了最佳精度(87.8%)。在下游任务中的迁移性能优于监督预训练,并表现出有前景的扩展行为。
MAE架构。源自原始论文。该模型由nielsr贡献。模型的TensorFlow版本由sayakpaul和ariG23498(贡献相同)贡献。原始代码可在此处找到。
使用技巧
- MAE(遮蔽自编码)是用于Vision Transformers(ViTs)自监督预训练的方法。预训练目标是相对简单的:通过遮蔽图像块的大量部分(75%),模型必须重建原始像素值。可以使用ViTMAEForPreTraining来完成此目的。
- 在预训练后,我们“丢弃”用于重建像素的解码器,并使用编码器进行微调/线性探测。这意味着在微调后,可以直接将权重插入到ViTForImageClassification中。
- 可以使用ViTImageProcessor准备模型所需的图像。有关更多信息,请参阅代码示例。
- 请注意,MAE的编码器仅用于编码视觉块。然后,编码的块与遮蔽标记连接,解码器(也由Transformer块组成)使用它们作为输入。每个遮蔽标记是一个共享的学习向量,指示需要预测的丢失块的当前位置。同时,在编码器和解码器的输入中添加了固定的正弦/余弦位置嵌入。
- 要了解MAE如何工作,您可以查看这篇文章。
使用缩放点积注意(SDPA)
PyTorch 在 torch.nn.functional
中包含一个内置的缩放点积注意(SDPA)操作符。这个函数包含多个实现,可以应用于不同的输入和使用硬件。有关更多信息,请参阅官方文档或GPU推断页面。
当可用时,SDPA 默认用于 torch>=2.1.1
,但您也可以在 from_pretrained()
中设置 attn_implementation="sdpa"
以显式请求使用 SDPA。
from transformers import ViTMAEModel
model = ViTMAEModel.from_pretrained("facebook/vit-mae-base", attn_implementation="sdpa", torch_dtype=torch.float16)
...
为了获得最佳加速,我们建议以半精度(例如 torch.float16
或 torch.bfloat16
)加载模型。
在本地基准测试中(A100-40GB,PyTorch 2.3.0,OS Ubuntu 22.04),使用 float32
和 facebook/vit-mae-base
模型进行推理时,我们看到了以下加速。
批量大小 | 平均推理时间(毫秒),便捷模式 | 平均推理时间(毫秒),sdpa 模型 | 速度比,Sdpa / 便捷(x) |
---|---|---|---|
1 | 11 | 6 | 1.83 |
2 | 8 | 6 | 1.33 |
4 | 8 | 6 | 1.33 |
8 | 8 | 6 | 1.33 |
资源
以下是官方 Hugging Face 和社区(带有 🌎 符号表示)资源列表,以帮助您开始使用 ViTMAE。
- ViTMAEForPreTraining 支持此示例脚本,允许您从头开始预训练模型/在自定义数据上进一步预训练模型。
- 一个说明如何使用 ViTMAEForPreTraining 可视化重建像素值的笔记本可以在这里找到:这里。
如果您有兴趣提交要包括的资源,请随时打开一个 Pull Request,我们将进行审查!最理想的资源应该是展示一些新内容,而不是重复现有的资源。
ViTMAEConfig
类 transformers.ViTMAEConfig
< 来源 >( hidden_size = 768 num_hidden_layers = 12 num_attention_heads = 12 intermediate_size = 3072 hidden_act = 'gelu' hidden_dropout_prob = 0.0 attention_probs_dropout_prob = 0.0 initializer_range = 0.02 layer_norm_eps = 1e-12 image_size = 224 patch_size = 16 num_channels = 3 qkv_bias = True decoder_num_attention_heads = 16 decoder_hidden_size = 512 decoder_num_hidden_layers = 8 decoder_intermediate_size = 2048 mask_ratio = 0.75 norm_pix_loss = False **kwargs )
参数
- hidden_size (
int
, 可选, 默认为 768) — 编码器层和池化层的空间维度。 - num_hidden_layers (
int
, optional, defaults to 12) — Transformer 编码器中隐藏层的数量。 - num_attention_heads (
int
, optional, defaults to 12) — Transformer 编码器中每个注意力层中的注意力头数量。 - intermediate_size (
int
, optional, defaults to 3072) — Transformer 编码器中“中间”(即前馈)层的维度。 - hidden_act (
str
或function
,可选,默认为"gelu"
) — 编码器和解码器中使用的非线性激活函数(函数或字符串)。如果为字符串,支持"gelu"
,"relu"
,"selu"
和"gelu_new"
。 - hidden_dropout_prob (
float
,可选,默认为 0.0) — 嵌入式、编码器和池化中的所有全连接层的dropout概率。 - attention_probs_dropout_prob (
float
,可选,默认为 0.0) — 注意力概率的dropout比率。 - initializer_range (
float
,可选,默认为 0.02) — 所有权重矩阵初始化的truncated_normal_initializer的方差。 - layer_norm_eps (
float
, 可选, 默认为1e-12) — 层归一化的epsilon值。 - image_size (
int
, 可选, 默认为224) — 每个图像的大小(分辨率)。 - patch_size (
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
) — 是否使用标准化像素进行训练(参见论文中的第 3 表)。在作者们的实验中,使用标准化像素提高了表示质量。
这是一个配置类,用于存储 ViTMAEModel 的配置。它用于根据指定的参数实例化 ViT MAE 模型,并定义模型架构。使用默认参数实例化的配置将产生类似于 ViT 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
类 transformers.ViTMAEModel
< source >( config )
参数
- config (ViTMAEConfig) — 包含模型所有参数的模型配置类。使用配置文件初始化时不加载与模型相关的权重,仅加载配置。请检查 from_pretrained() 方法来加载模型权重。
仅输出原始隐藏状态的裸ViTMAE模型,没有顶部任何特定的头。这是一个PyTorch torch.nn.Module 子类。将其用作常规PyTorch模块,并参考PyTorch文档了解所有有关常规使用和行为的问题。
forward (前向传播)
< source >( pixel_values: Optional = None noise: Optional = None head_mask: Optional = None output_attentions: Optional = None output_hidden_states: Optional = None return_dict: Optional = None interpolate_pos_encoding: bool = False ) → transformers.models.vit_mae.modeling_vit_mae.ViTMAEModelOutput
或 tuple(torch.FloatTensor)
参数
- pixel_values (
torch.FloatTensor
of shape(batch_size, num_channels, height, width)
) — 像素值。像素值可以使用 AutoImageProcessor 获取。有关详细信息,请参阅 ViTImageProcessor.call()。 - head_mask (可选,形状为
(num_heads,)
或(num_layers, num_heads)
的torch.FloatTensor
)- 用于使自注意力模块中选定的头部无效的掩码。掩码值在[0, 1]
内选择:- 值为1表示该头部没有被masked,
- 值为0表示该头部被masked。
- output_attentions (可选,布尔类型)- 是否返回所有注意力层的注意力张量。关于返回张量中的
attentions
的更多详细信息,请参阅。 - output_hidden_states (可选,布尔类型)- 是否返回所有层的隐藏状态。关于返回张量中的
hidden_states
的更多详细信息,请参阅。 - return_dict (
bool
, 可选) — 是否返回一个 ModelOutput 而不是普通的元组。 - interpolate_pos_encoding (
bool
, 可选, 默认False
) — 是否插值预训练的位置编码。这主要用于在高分辨率图像上使用模型。
返回值
transformers.models.vit_mae.modeling_vit_mae.ViTMAEModelOutput
或 tuple(torch.FloatTensor)
一个 transformers.models.vit_mae.modeling_vit_mae.ViTMAEModelOutput
或一个 torch.FloatTensor
的元组(如果传递了 return_dict=False
或 config.return_dict=False
),包含根据配置(ViTMAEConfig)和输入的各种元素。
- last_hidden_state (
torch.FloatTensor
形状为(batch_size, sequence_length, hidden_size)
) — 模型最后层输出的隐藏状态的序列。 - mask (
torch.FloatTensor
形状为(batch_size, sequence_length)
) — 指示哪些补丁被掩盖(1)以及哪些没有被掩盖(0)的张量。 - ids_restore (
torch.LongTensor
形状为(batch_size, sequence_length)
) — 包含原始(打乱后的)掩盖补丁索引的张量。 - hidden_states (
tuple(torch.FloatTensor)
,可选,在传递了output_hidden_states=True
或config.output_hidden_states=True
时返回) — 一个torch.FloatTensor
的元组(每个层的输出还有一个嵌入层的输出)的形状为(batch_size, sequence_length, hidden_size)
。每个层的模型隐藏状态以及在嵌入输出后的初始嵌入。 - attentions (
tuple(torch.FloatTensor)
,可选,在传递了output_attentions=True
或config.output_attentions=True
时返回) — 一个形状为(batch_size, num_heads, sequence_length, sequence_length)
的torch.FloatTensor
的元组(每个层一个)的注意力权重,用于计算在自注意力头中的加权平均。
ViTMAEModel 前向方法重写了 __call__
特殊方法。
虽然在函数内部需要定义前向传递的配方,但是在之后应该调用Module
实例而不是这个,因为前者负责处理前后的预处理步骤,而后者则默默忽略它们。
示例
>>> from transformers import AutoImageProcessor, ViTMAEModel
>>> from PIL import Image
>>> import requests
>>> url = "http://images.cocodataset.org/val2017/000000039769.jpg"
>>> image = Image.open(requests.get(url, stream=True).raw)
>>> 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
< source >( config )
参数
- config (ViTMAEConfig) — 包含模型所有参数的模型配置类。使用配置文件初始化不会加载模型相关的权重,只有配置。请查看from_pretrained()方法来加载模型权重。
ViTMAE模型,具有顶部解码器的自监督预训练。
注意,我们在示例目录中提供了一个脚本,用于在自定义数据上对这个模型进行预训练。
该模型是PyTorch torch.nn.Module的子类。将其用作常规PyTorch模块,并参考PyTorch文档了解所有关于通用用法和行为的相关事宜。
forward (前向传播)
< source >( pixel_values: Optional = None noise: Optional = None head_mask: Optional = None output_attentions: Optional = None output_hidden_states: Optional = None return_dict: Optional = None interpolate_pos_encoding: bool = False ) → transformers.models.vit_mae.modeling_vit_mae.ViTMAEForPreTrainingOutput
或 tuple(torch.FloatTensor)
参数
- pixel_values(《torch.FloatTensor》形状为(batch_size,num_channels,height,width))——像素值。可以使用AutoImageProcessor获取像素值。请参见ViTImageProcessor.call()获取详细信息。
- head_mask (
torch.FloatTensor
of shape(num_heads,)
or(num_layers, num_heads)
, optional) — 用于屏蔽自注意力模块选中头的掩码。掩码值选择在[0, 1]
:- 1 表示头未屏蔽,
- 0 表示头已屏蔽。
- output_attentions (
bool
, optional) — 是否返回所有注意力层的张量。请参阅返回张量下的attentions
以获取更多详细说明。 - output_hidden_states (
bool
, optional) — 是否返回所有层的隐藏状态。请参阅返回张量下的hidden_states
以获取更多详细说明。 - return_dict (
bool
, 可选) — 是否返回一个 ModelOutput 而不是一个简单的元组。 - interpolate_pos_encoding (
bool
, 可选, 默认False
) — 是否对预训练的位置编码进行插值。这主要用于在更高分辨率图像中使用模型。
返回值
transformers.models.vit_mae.modeling_vit_mae.ViTMAEForPreTrainingOutput
或 tuple(torch.FloatTensor)
A transformers.models.vit_mae.modeling_vit_mae.ViTMAEForPreTrainingOutput
或一个由 torch.FloatTensor
组成的元组(如果传递了 return_dict=False
或者当 config.return_dict=False
时),包含各种元素,这取决于配置(ViTMAEConfig)和输入。
- loss (
torch.FloatTensor
形状为(1,)
) — 像素重建损失。 - logits (
torch.FloatTensor
形状为(batch_size, sequence_length, patch_size ** 2 * num_channels)
) — 像素重建的标签。 - mask (
torch.FloatTensor
形状为(batch_size, sequence_length)
) — 指示哪些补丁被掩盖(1)以及哪些没有被掩盖(0)的张量。 - ids_restore (
torch.LongTensor
形状为(batch_size, sequence_length)
) — 包含原始(打乱后的)掩盖补丁索引的张量。 - hidden_states (
tuple(torch.FloatTensor)
,可选,在传递了output_hidden_states=True
或config.output_hidden_states=True
时返回) — 一个torch.FloatTensor
的元组(每个层的输出还有一个嵌入层的输出)的形状为(batch_size, sequence_length, hidden_size)
。每个层的模型隐藏状态以及在嵌入输出后的初始嵌入。 - attentions (
tuple(torch.FloatTensor)
,可选,在传递了output_attentions=True
或config.output_attentions=True
时返回) — 一个形状为(batch_size, num_heads, sequence_length, sequence_length)
的torch.FloatTensor
的元组(每个层一个)的注意力权重,用于计算在自注意力头中的加权平均。
ViTMAEForPreTraining 的 forward 方法,重载了 __call__
特殊方法。
虽然在函数内部需要定义前向传递的配方,但是在之后应该调用Module
实例而不是这个,因为前者负责处理前后的预处理步骤,而后者则默默忽略它们。
示例
>>> from transformers import AutoImageProcessor, ViTMAEForPreTraining
>>> from PIL import Image
>>> import requests
>>> url = "http://images.cocodataset.org/val2017/000000039769.jpg"
>>> image = Image.open(requests.get(url, stream=True).raw)
>>> 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
TFViTMAEModel
class transformers.TFViTMAEModel
< 来源 >( config: ViTMAEConfig *inputs **kwargs )
参数
- config (ViTMAEConfig) — 模型参数的配置类。使用配置文件初始化不会加载与模型相关的权重,只会加载配置。请查看from_pretrained() 方法以加载模型权重。
不带任何具体头部的原始隐藏状态输出的 bare ViTMAE 模型转换器。该模型继承自 TFPreTrainedModel。请检查超类文档以获取库对人体所有模型(如下载或保存、调整输入嵌入、修剪头部等)实现的通用方法。
该模型也是 keras.Model 的子类。将其用作常规 TF 2.0 Keras 模型,并查阅 TF 2.0 文档了解所有与通用用法和行为相关的信息。
TensorFlow 模型和层中的 transformers
接受两种输入格式
- 所有输入作为关键字参数(如 PyTorch 模型),或
- 所有输入作为第一个位置参数的列表、元组或字典。
支持第二种格式的原因是,Keras方法在将输入传递给模型和层时更喜欢这种格式。由于这种支持,当使用类似于model.fit()
的方法时,事情应该“直接工作”——只需传递任何格式支持的输入和标签!然而,如果您想在外部使用类似于fit()
和predict()
的Keras方法时,例如在创建自己的层或使用Keras的Functional
API创建模型,那么有三种方式可以检索所有输入Tensor
- 使用仅包含
pixel_values
的单个Tensor而没有其他内容:model(pixel_values)
- 一个长度可变的列表,包含一个或多个按文档字符串中给定的顺序指定的输入Tensor:
model([pixel_values, attention_mask])
或model([pixel_values, attention_mask, token_type_ids])
- 一个字典,包含一个或多个与文档字符串中给定的输入名称关联的输入Tensor:
model({"pixel_values": pixel_values, "token_type_ids": token_type_ids})
请注意,当通过子类化创建模型和层时,您无需担心这些问题,因为您可以将输入传递得像任何其他Python函数一样简单!
调用
< 源 >( pixel_values: TFModelInputType | None = None noise: tf.Tensor = None head_mask: np.ndarray | tf.Tensor | None = None output_attentions: Optional[bool] = None output_hidden_states: Optional[bool] = None return_dict: Optional[bool] = None training: bool = False interpolate_pos_encoding: bool = False ) → transformers.models.vit_mae.modeling_tf_vit_mae.TFViTMAEModelOutput
或tuple(tf.Tensor)
参数
- pixel_values (
np.ndarray
,tf.Tensor
,List[tf.Tensor]
`Dict[str, tf.Tensor]
orDict[str, np.ndarray]
每个示例必须具有形状(batch_size, num_channels, height, width)
) - 像素值。可以使用 AutoImageProcessor 获取像素值。有关详细信息,请参见 ViTImageProcessor.call()。 - head_mask (
np.ndarray
或tf.Tensor
形状为(num_heads,)
或(num_layers, num_heads)
,可选) - 用于取消选择自注意力模块中选定头的掩码。掩码值选择在[0, 1]
之间:- 1 表示头未被掩码。
- 0 表示头被掩码。
- output_attentions (
bool
,可选) - 是否返回所有注意力层的注意力张量。有关更多详细信息,请参见返回张量下的attentions
。此参数仅可用于 eager 模式,在 graph 模式下将使用配置中的值。 - output_hidden_states (
bool
, 可选) — 是否返回所有层的隐藏状态。有关返回张量下hidden_states
的更多详细信息,请参阅。此参数只能在急切模式下使用,在图模式中,将使用配置中的值。 - return_dict (
bool
, 可选) — 是否返回 ModelOutput 而不是纯元组。此参数可以在急切模式下使用,在图模式下,值总是设置为 True。 - training (
bool
, 可选,默认为 `False`) — 是否将模型用于训练模式(某些模块如dropout模块在训练和评估之间有不同的行为)。 - interpolate_pos_encoding (
bool
, optional, defaults toFalse
) — Whether to interpolate the position encodings at the encoder and decoder.
返回值
transformers.models.vit_mae.modeling_tf_vit_mae.TFViTMAEModelOutput
or tuple(tf.Tensor)
A transformers.models.vit_mae.modeling_tf_vit_mae.TFViTMAEModelOutput
or a tuple of tf.Tensor
(if return_dict=False
is passed or when config.return_dict=False
) comprising various elements depending on the configuration (ViTMAEConfig) and inputs.
- last_hidden_state (
tf.Tensor
of shape(batch_size, sequence_length, hidden_size)
) — Sequence of hidden-states at the output of the last layer of the model. - mask (
tf.Tensor
of shape(batch_size, sequence_length)
) — Tensor indicating which patches are masked (1) and which are not (0). - ids_restore (
tf.Tensor
of shape(batch_size, sequence_length)
) — Tensor containing the original index of the (shuffled) masked patches. - hidden_states (
tuple(tf.Tensor)
, optional, returned whenoutput_hidden_states=True
is passed or whenconfig.output_hidden_states=True
) — Tuple oftf.Tensor
(one for the output of the embeddings + one for the output of each layer) of shape(batch_size, sequence_length, hidden_size)
. Hidden-states of the model at the output of each layer plus the initial embedding outputs. - attentions (
tuple(tf.Tensor)
, optional, returned whenoutput_attentions=True
is passed or whenconfig.output_attentions=True
) — Tuple oftf.Tensor
(one for each layer) of shape(batch_size, num_heads, sequence_length, sequence_length)
. Attentions weights after the attention softmax, used to compute the weighted average in the self-attention heads.
TFViTMAEModel 的 forward 方法,覆盖了 __call__
特殊方法。
虽然在函数内部需要定义前向传递的配方,但是在之后应该调用Module
实例而不是这个,因为前者负责处理前后的预处理步骤,而后者则默默忽略它们。
示例
>>> from transformers import AutoImageProcessor, TFViTMAEModel
>>> from PIL import Image
>>> import requests
>>> url = "http://images.cocodataset.org/val2017/000000039769.jpg"
>>> image = Image.open(requests.get(url, stream=True).raw)
>>> image_processor = AutoImageProcessor.from_pretrained("facebook/vit-mae-base")
>>> model = TFViTMAEModel.from_pretrained("facebook/vit-mae-base")
>>> inputs = image_processor(images=image, return_tensors="tf")
>>> outputs = model(**inputs)
>>> last_hidden_states = outputs.last_hidden_state
TFViTMAEForPreTraining
class transformers.TFViTMAEForPreTraining
< 来源 >( config )
参数
- config (ViTMAEConfig) — 包含模型所有参数的模型配置类。使用配置文件初始化不会加载模型相关的权重,只加载配置。查看from_pretrained() 方法加载模型权重。
Top-decoder self-supervised pre-training的ViTMAE模型修改器。此模型继承自TFPreTrainedModel。请查看超类文档,了解库为所有模型实现的通用方法(例如下载或保存、调整输入嵌入的大小、修剪头部等)。
该模型也是 keras.Model 的子类。将其用作常规 TF 2.0 Keras 模型,并查阅 TF 2.0 文档了解所有与通用用法和行为相关的信息。
TensorFlow 模型和层中的 transformers
接受两种输入格式
- 所有输入作为关键字参数(如 PyTorch 模型),或
- 所有输入作为第一个位置参数的列表、元组或字典。
支持第二种格式的原因是,Keras方法在将输入传递给模型和层时更喜欢这种格式。由于这种支持,当使用类似于model.fit()
的方法时,事情应该“直接工作”——只需传递任何格式支持的输入和标签!然而,如果您想在外部使用类似于fit()
和predict()
的Keras方法时,例如在创建自己的层或使用Keras的Functional
API创建模型,那么有三种方式可以检索所有输入Tensor
- 使用仅包含
pixel_values
的单个Tensor而没有其他内容:model(pixel_values)
- 一个长度可变的列表,包含一个或多个按文档字符串中给定的顺序指定的输入Tensor:
model([pixel_values, attention_mask])
或model([pixel_values, attention_mask, token_type_ids])
- 一个字典,包含一个或多个与文档字符串中给定的输入名称关联的输入Tensor:
model({"pixel_values": pixel_values, "token_type_ids": token_type_ids})
请注意,当通过子类化创建模型和层时,您无需担心这些问题,因为您可以将输入传递得像任何其他Python函数一样简单!
调用
< 来源 >( pixel_values: TFModelInputType | None = None noise: tf.Tensor = None head_mask: np.ndarray | tf.Tensor | None = Noneoutput_attentions: Optional[bool] = Noneoutput_hidden_states: Optional[bool] = Nonereturn_dict: Optional[bool] = Nonetraining: bool = Falseinterpolate_pos_encoding: bool = False ) → transformers.models.vit_mae.modeling_tf_vit_mae.TFViTMAEForPreTrainingOutput
or tuple(tf.Tensor)
参数
- pixel_values (
np.ndarray
,tf.Tensor
,List[tf.Tensor]
`Dict[str, tf.Tensor]
orDict[str, np.ndarray]
and each example must have the shape(batch_size, num_channels, height, width)
) — 像素值。像素值可以通过 AutoImageProcessor 获取。有关详细信息,请参阅 ViTImageProcessor.call()。 - head_mask (
np.ndarray
或tf.Tensor
of shape(num_heads,)
或(num_layers, num_heads)
, optional) — 用于取消选中自注意力模块的头部标记。掩码值选择在[0, 1]
:- 1 表示头部 未标记;
- 0 表示头部 标记。
- output_attentions (
bool
, 可选) — 是否返回所有注意力层的注意力张量。详见返回张量下的attentions
。此参数只能在急切模式下使用,在图模式下将使用配置中的值。 - output_hidden_states (
bool
, 可选) — 是否返回所有层的隐藏状态。详见返回张量下的hidden_states
。此参数只能在急切模式下使用,在图模式下将使用配置中的值。 - return_dict (
bool
, 可选) — 是否返回ModelOutput而不是纯元组。此参数可以在急切模式下使用,在图模式下此值将始终设置为True。 - training (
bool
, 可选, 默认为 `False`) — 是否使用训练模式的模型(一些模块如dropout模块在训练和评估时行为不同)。 - interpolate_pos_encoding (
bool
, 可选, 默认为False
) — 是否在编码器和解码器处插值位置编码。
返回值
transformers.models.vit_mae.modeling_tf_vit_mae.TFViTMAEForPreTrainingOutput
或 tuple(tf.Tensor)
A transformers.models.vit_mae.modeling_tf_vit_mae.TFViTMAEForPreTrainingOutput
或一个包含 tf.Tensor
的元组(如果传递了 return_dict=False
或当 config.return_dict=False
)。它包含根据配置(ViTMAEConfig)和输入的不同元素。
- loss (
tf.Tensor
,形状为(1,)
) — 像素重建损失。 - logits (
tf.Tensor
,形状为(batch_size, sequence_length, patch_size ** 2 * num_channels)
) — 像素重建的logits。 - mask (
tf.Tensor
of shape(batch_size, sequence_length)
) — Tensor indicating which patches are masked (1) and which are not (0). - ids_restore (
tf.Tensor
of shape(batch_size, sequence_length)
) — Tensor containing the original index of the (shuffled) masked patches. - hidden_states (
tuple(tf.Tensor)
, optional, returned whenoutput_hidden_states=True
is passed or whenconfig.output_hidden_states=True
) — Tuple oftf.Tensor
(one for the output of the embeddings + one for the output of each layer) of shape(batch_size, sequence_length, hidden_size)
. Hidden-states of the model at the output of each layer plus the initial embedding outputs. - attentions (
tuple(tf.Tensor)
, optional, returned whenoutput_attentions=True
is passed or whenconfig.output_attentions=True
) — Tuple oftf.Tensor
(one for each layer) of shape(batch_size, num_heads, sequence_length, sequence_length)
. Attentions weights after the attention softmax, used to compute the weighted average in the self-attention heads.
TFViTMAEForPreTraining 前向方法覆盖了 __call__
特殊方法。
虽然在函数内部需要定义前向传递的配方,但是在之后应该调用Module
实例而不是这个,因为前者负责处理前后的预处理步骤,而后者则默默忽略它们。
示例
>>> from transformers import AutoImageProcessor, TFViTMAEForPreTraining
>>> from PIL import Image
>>> import requests
>>> url = "http://images.cocodataset.org/val2017/000000039769.jpg"
>>> image = Image.open(requests.get(url, stream=True).raw)
>>> image_processor = AutoImageProcessor.from_pretrained("facebook/vit-mae-base")
>>> model = TFViTMAEForPreTraining.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