Transformers 文档

I-JEPA

Hugging Face's logo
加入 Hugging Face 社区

并获得增强的文档体验

开始使用

I-JEPA

PyTorch FlashAttention SDPA

概述

I-JEPA 模型在 Mahmoud Assran、Quentin Duval、Ishan Misra、Piotr Bojanowski、Pascal Vincent、Michael Rabbat、Yann LeCun、Nicolas Ballas 的基于图像的联合嵌入预测架构中提出。I-JEPA 是一种自监督学习方法,它基于同一图像的其他部分预测图像一个部分的表示。这种方法侧重于学习语义特征,而不依赖于手工数据转换的预定义不变性(这可能会偏向特定任务),也不依赖于填充像素级细节(这通常会导致意义较少的表示)。

该论文的摘要如下:

本文演示了一种学习高度语义图像表示的方法,该方法不依赖于手工制作的数据增强。我们介绍了基于图像的联合嵌入预测架构 (I-JEPA),这是一种用于从图像进行自监督学习的非生成方法。I-JEPA 背后的思想很简单:从单个上下文块预测同一图像中各种目标块的表示。引导 I-JEPA 生成语义表示的核心设计选择是掩码策略;具体来说,至关重要的是 (a) 采样足够大尺度(语义)的目标块,以及 (b) 使用足够信息量(空间分布)的上下文块。经验表明,当与 Vision Transformers 结合使用时,我们发现 I-JEPA 具有高度可扩展性。例如,我们在不到 72 小时内使用 16 个 A100 GPU 在 ImageNet 上训练了一个 ViT-Huge/14,从而在从线性分类到对象计数和深度预测的各种任务中实现了强大的下游性能。

绘图 I-JEPA 架构。摘自原始论文。

此模型由jmtzt贡献。原始代码可以在这里找到。

如何使用

以下是如何使用此模型进行图像特征提取:

import requests
import torch
from PIL import Image
from torch.nn.functional import cosine_similarity

from transformers import AutoModel, AutoProcessor

url_1 = "http://images.cocodataset.org/val2017/000000039769.jpg"
url_2 = "http://images.cocodataset.org/val2017/000000219578.jpg"
image_1 = Image.open(requests.get(url_1, stream=True).raw)
image_2 = Image.open(requests.get(url_2, stream=True).raw)

model_id = "facebook/ijepa_vith14_1k"
processor = AutoProcessor.from_pretrained(model_id)
model = AutoModel.from_pretrained(model_id)

@torch.no_grad()
def infer(image):
    inputs = processor(image, return_tensors="pt")
    outputs = model(**inputs)
    return outputs.last_hidden_state.mean(dim=1)


embed_1 = infer(image_1)
embed_2 = infer(image_2)

similarity = cosine_similarity(embed_1, embed_2)
print(similarity)

资源

以下是官方 Hugging Face 和社区(🌎 表示)资源列表,可帮助您开始使用 I-JEPA。

图像分类

IJepaConfig

class transformers.IJepaConfig

< >

( 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 pooler_output_size = None pooler_act = 'tanh' **kwargs )

参数

  • hidden_size (int, optional, defaults to 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 (strfunction, optional, defaults to "gelu") — 编码器和池化器中的非线性激活函数(函数或字符串)。如果为字符串,则支持 "gelu""relu""selu""gelu_new"
  • hidden_dropout_prob (float, optional, defaults to 0.0) — 嵌入、编码器和池化器中所有全连接层的 dropout 概率。
  • attention_probs_dropout_prob (float, optional, defaults to 0.0) — 注意力概率的 dropout 比率。
  • initializer_range (float, optional, defaults to 0.02) — 用于初始化所有权重矩阵的截断正态分布初始化器的标准差。
  • layer_norm_eps (float, optional, defaults to 1e-12) — 层归一化层使用的 epsilon 值。
  • image_size (int, optional, defaults to 224) — 每张图片的大小(分辨率)。
  • patch_size (int, optional, defaults to 16) — 每个 patch 的大小(分辨率)。
  • num_channels (int, optional, defaults to 3) — 输入通道的数量。
  • qkv_bias (bool, optional, defaults to True) — 是否为 queries, keys 和 values 添加偏置。
  • pooler_output_size (int, optional) — pooler 层的维度。如果为 None,则默认为 hidden_size
  • pooler_act (str, optional, defaults to "tanh") — pooler 层使用的激活函数。Flax 和 Pytorch 支持 ACT2FN 的键,Tensorflow 支持 https://tensorflowcn.cn/api_docs/python/tf/keras/activations 的元素。

这是用于存储 IJepaModel 配置的配置类。它用于根据指定的参数实例化 IJEPA 模型,定义模型架构。使用默认值实例化配置将产生与 I-JEPA facebook/ijepa_vith14_1k 架构类似的配置。

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

示例

>>> from transformers import IJepaConfig, IJepaModel

>>> # Initializing a IJEPA ijepa-base-patch16-224 style configuration
>>> configuration = IJepaConfig()

>>> # Initializing a model (with random weights) from the ijepa-base-patch16-224 style configuration
>>> model = IJepaModel(configuration)

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

IJepaModel

class transformers.IJepaModel

< >

( config: IJepaConfig add_pooling_layer: bool = False use_mask_token: bool = False )

参数

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

裸 IJepa 模型 Transformer,输出原始隐藏状态,顶部没有任何特定的 head。此模型是 PyTorch torch.nn.Module 的子类。将其用作常规 PyTorch 模块,并参考 PyTorch 文档以了解所有与常规用法和行为相关的事项。

forward

< >

( pixel_values: typing.Optional[torch.Tensor] = None bool_masked_pos: typing.Optional[torch.BoolTensor] = None head_mask: typing.Optional[torch.Tensor] = None output_attentions: typing.Optional[bool] = None output_hidden_states: typing.Optional[bool] = None interpolate_pos_encoding: typing.Optional[bool] = None return_dict: typing.Optional[bool] = None ) transformers.modeling_outputs.BaseModelOutputWithPoolingtuple(torch.FloatTensor)

参数

  • pixel_values (torch.FloatTensor of shape (batch_size, num_channels, height, width)) — 像素值。像素值可以使用 AutoImageProcessor 获取。有关详细信息,请参阅 IJepaImageProcessor.__call__
  • head_mask (torch.FloatTensor of shape (num_heads,) or (num_layers, num_heads), optional) — 用于使自注意力模块的选定 head 失效的掩码。掩码值在 [0, 1] 中选择:

    • 1 表示 head 未被掩盖
    • 0 表示 head 被掩盖
  • output_attentions (bool, optional) — 是否返回所有注意力层的 attention tensors。有关更多详细信息,请参阅返回的 tensors 下的 attentions
  • output_hidden_states (bool, optional) — 是否返回所有层的 hidden states。有关更多详细信息,请参阅返回的 tensors 下的 hidden_states
  • interpolate_pos_encoding (bool, optional) — 是否对预训练的位置编码进行插值。
  • return_dict (bool, optional) — 是否返回 ModelOutput 而不是普通元组。
  • bool_masked_pos (torch.BoolTensor of shape (batch_size, num_patches), optional) — 布尔掩码位置。指示哪些 patch 被掩盖 (1) ,哪些未被掩盖 (0) 。

返回值

transformers.modeling_outputs.BaseModelOutputWithPoolingtuple(torch.FloatTensor)

一个 transformers.modeling_outputs.BaseModelOutputWithPooling 或 torch.FloatTensor 的元组 (如果传递 return_dict=False 或当 config.return_dict=False 时),包含各种元素,具体取决于配置 (IJepaConfig) 和输入。

  • last_hidden_state (torch.FloatTensor of shape (batch_size, sequence_length, hidden_size)) — 模型最后一层输出的 hidden-states 序列。

  • pooler_output (torch.FloatTensor of shape (batch_size, hidden_size)) — 序列的第一个 token(分类 token)的最后一层 hidden-state,在通过用于辅助预训练任务的层进一步处理之后。例如,对于 BERT 系列模型,这返回通过线性层和 tanh 激活函数处理后的分类 token。线性层权重从预训练期间的下一句预测(分类)目标中训练。

  • hidden_states (tuple(torch.FloatTensor), optional, returned when output_hidden_states=True is passed or when config.output_hidden_states=True) — torch.FloatTensor 的元组 (如果模型具有 embedding 层,则为 embedding 的输出提供一个,+ 为每一层的输出提供一个),形状为 (batch_size, sequence_length, hidden_size)

    模型在每一层输出的 hidden-states 加上可选的初始 embedding 输出。

  • attentions (tuple(torch.FloatTensor), optional, returned when output_attentions=True is passed or when config.output_attentions=True) — torch.FloatTensor 的元组 (每层一个),形状为 (batch_size, num_heads, sequence_length, sequence_length)

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

IJepaModel 的 forward 方法,覆盖了 __call__ 特殊方法。

尽管 forward pass 的配方需要在该函数中定义,但应该在之后调用 Module 实例而不是此函数,因为前者负责运行 pre 和 post processing 步骤,而后者会默默地忽略它们。

示例

>>> from transformers import AutoImageProcessor, IJepaModel
>>> import torch
>>> from datasets import load_dataset

>>> dataset = load_dataset("huggingface/cats-image", trust_remote_code=True)
>>> image = dataset["test"]["image"][0]

>>> image_processor = AutoImageProcessor.from_pretrained("facebook/ijepa_vith14_1k")
>>> model = IJepaModel.from_pretrained("facebook/ijepa_vith14_1k")

>>> inputs = image_processor(image, return_tensors="pt")

>>> with torch.no_grad():
...     outputs = model(**inputs)

>>> last_hidden_states = outputs.last_hidden_state
>>> list(last_hidden_states.shape)
[1, 256, 1280]

IJepaForImageClassification

class transformers.IJepaForImageClassification

< >

( config: IJepaConfig )

参数

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

IJepa 模型 Transformer,顶部带有图像分类 head(最终隐藏状态顶部的线性层),例如用于 ImageNet。

请注意,通过在模型的 forward 中将 interpolate_pos_encoding 设置为 True,可以在比 IJepa 训练时使用的图像分辨率更高的图像上微调 IJepa。这将把预训练的位置 embedding 插值到更高的分辨率。

此模型是 PyTorch torch.nn.Module 的子类。将其用作常规 PyTorch 模块,并参考 PyTorch 文档以了解所有与常规用法和行为相关的事项。

forward

< >

( pixel_values: typing.Optional[torch.Tensor] = None head_mask: typing.Optional[torch.Tensor] = None labels: typing.Optional[torch.Tensor] = None output_attentions: typing.Optional[bool] = None output_hidden_states: typing.Optional[bool] = None interpolate_pos_encoding: typing.Optional[bool] = None return_dict: typing.Optional[bool] = None ) transformers.modeling_outputs.ImageClassifierOutputtuple(torch.FloatTensor)

参数

  • pixel_values (torch.FloatTensor of shape (batch_size, num_channels, height, width)) — 像素值。像素值可以使用 AutoImageProcessor 获得。 详情请参阅 IJepaImageProcessor.__call__
  • head_mask (torch.FloatTensor of shape (num_heads,) or (num_layers, num_heads), optional) — 用于置空自注意力模块中选定 head 的 Mask。 Mask 值在 [0, 1] 中选择:

    • 1 表示 head 未被 Mask
    • 0 表示 head 被 Mask
  • output_attentions (bool, optional) — 是否返回所有注意力层的 attentions 张量。 有关更多详细信息,请参见返回张量下的 attentions
  • output_hidden_states (bool, optional) — 是否返回所有层的 hidden states。 有关更多详细信息,请参见返回张量下的 hidden_states
  • interpolate_pos_encoding (bool, optional) — 是否插值预训练的位置编码。
  • return_dict (bool, optional) — 是否返回 ModelOutput 而不是纯元组。
  • labels (torch.LongTensor of shape (batch_size,), optional) — 用于计算图像分类/回归损失的标签。 索引应在 [0, ..., config.num_labels - 1] 中。 如果 config.num_labels == 1,则计算回归损失(均方误差损失);如果 config.num_labels > 1,则计算分类损失(交叉熵损失)。

返回值

transformers.modeling_outputs.ImageClassifierOutputtuple(torch.FloatTensor)

一个 transformers.modeling_outputs.ImageClassifierOutput 或一个 torch.FloatTensor 元组 (如果传递 return_dict=False 或当 config.return_dict=False 时),包括各种元素,具体取决于配置 (IJepaConfig) 和输入。

  • loss (torch.FloatTensor of shape (1,), optional, 当提供 labels 时返回) — 分类损失(如果 config.num_labels==1 则为回归损失)。

  • logits (torch.FloatTensor of shape (batch_size, config.num_labels)) — 分类得分(或如果 config.num_labels==1 则为回归得分)(在 SoftMax 之前)。

  • hidden_states (tuple(torch.FloatTensor), optional, 当传递 output_hidden_states=True 或当 config.output_hidden_states=True 时返回) — torch.FloatTensor 元组(如果模型具有嵌入层,则为嵌入层的输出,每个阶段的输出也各有一个),形状为 (batch_size, sequence_length, hidden_size)。 模型在每个阶段输出的 hidden-states(也称为特征图)。

  • attentions (tuple(torch.FloatTensor), optional, 当传递 output_attentions=True 或当 config.output_attentions=True 时返回) — torch.FloatTensor 元组(每层一个),形状为 (batch_size, num_heads, patch_size, sequence_length)

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

IJepaForImageClassification 的 forward 方法,覆盖了 __call__ 特殊方法。

尽管 forward pass 的配方需要在该函数中定义,但应该在之后调用 Module 实例而不是此函数,因为前者负责运行 pre 和 post processing 步骤,而后者会默默地忽略它们。

示例

>>> from transformers import AutoImageProcessor, IJepaForImageClassification
>>> import torch
>>> from datasets import load_dataset

>>> dataset = load_dataset("huggingface/cats-image", trust_remote_code=True)
>>> image = dataset["test"]["image"][0]

>>> image_processor = AutoImageProcessor.from_pretrained("facebook/ijepa_vith14_1k")
>>> model = IJepaForImageClassification.from_pretrained("facebook/ijepa_vith14_1k")

>>> inputs = image_processor(image, return_tensors="pt")

>>> with torch.no_grad():
...     logits = model(**inputs).logits

>>> # model predicts one of the 1000 ImageNet classes
>>> predicted_label = logits.argmax(-1).item()
>>> print(model.config.id2label[predicted_label])
Egyptian cat
< > 在 GitHub 上更新