Transformers 文档
SigLIP2
并获取增强的文档体验
开始使用
SigLIP2
概述
SigLIP2 模型在 SigLIP 2: Multilingual Vision-Language Encoders with Improved Semantic Understanding, Localization, and Dense Features 中被提出,作者为 Michael Tschannen, Alexey Gritsenko, Xiao Wang, Muhammad Ferjad Naeem, Ibrahim Alabdulmohsin, Nikhil Parthasarathy, Talfan Evans, Lucas Beyer, Ye Xia, Basil Mustafa, Olivier Hénaff, Jeremiah Harmsen, Andreas Steiner 和 Xiaohua Zhai。
该模型有两个变体
1) FixRes - 模型使用固定分辨率图像(向后兼容 SigLIP v1) 2) NaFlex - 模型使用可变图像宽高比和分辨率(transformers
中的 SigLIP2)
论文摘要如下
我们介绍了 SigLIP 2,这是一个新的多语言视觉-语言编码器系列,它建立在原始 SigLIP 的成功之上。在第二次迭代中,我们将原始的图像-文本训练目标与几种先前独立开发的技术扩展到一个统一的配方中——这包括基于解码器的预训练、自监督损失(自蒸馏、掩码预测)和在线数据管理。通过这些更改,SigLIP 2 模型在所有模型规模上都优于其 SigLIP 对等模型,其核心能力包括零样本分类(最佳 SigLIP 2 ViT-g/16 实现了 85.0% 的 ImageNet 零样本准确率)、图像-文本检索以及在为视觉-语言模型 (VLM) 提取视觉表示时的迁移性能。此外,新的训练配方显着提高了定位和密集预测任务的性能。我们还训练了支持多种分辨率并保留输入原始宽高比的变体。最后,我们使用更多样化的数据混合进行训练,其中包括去偏见技术,从而大大提高了多语言理解能力和改进的公平性。为了让用户能够在推理成本和性能之间进行权衡,我们发布了四种尺寸的模型检查点(ViT-B/86M、L/303M、So400m/400M 和 g/1B)。
使用技巧
- SigLIP2 的使用方式与 SigLIP 和 CLIP 类似。与 CLIP 的主要区别在于训练损失,后者不需要全局视图来了解批次内图像和文本的所有成对相似性。需要将 sigmoid 激活函数应用于 logits,而不是 softmax。
- 支持训练,但不使用
torch.distributed
实用程序,这可能会限制批次大小的可扩展性。但是,DDP 和 FDSP 在单节点多 GPU 设置上有效。 - 当使用独立的 GemmaTokenizerFast 时,请确保传递
padding="max_length"
和max_length=64
,因为模型就是这样训练的。 - 模型使用小写文本进行训练,请确保对文本标签进行相同的预处理。
- 为了获得与 pipeline 相同的结果,应使用 “this is a photo of {label}” 的提示模板。
- NaFlex 变体通过调整
Processor
中的max_num_patches
参数,支持以更高分辨率处理图像。默认值为max_num_patches=256
。将max_num_patches
增加到 1024 (4x) 将大致使处理后的图像高度和宽度翻倍,同时保持宽高比。

此模型由 qubvel 贡献。 原始代码可以在 这里 找到。
使用示例
使用 SigLIP2 主要有两种方式:使用 pipeline API,它可以为您抽象化所有复杂性;或者自己使用 Siglip2Model
类。
FixRes 变体
Pipeline API
pipeline 允许您用几行代码使用模型
>>> from transformers import pipeline
>>> from PIL import Image
>>> import requests
>>> # load pipe
>>> image_classifier = pipeline(
... task="zero-shot-image-classification",
... model="google/siglip2-base-patch16-224",
... )
>>> # load image
>>> url = 'http://images.cocodataset.org/val2017/000000039769.jpg'
>>> image = Image.open(requests.get(url, stream=True).raw)
>>> # inference
>>> candidate_labels = ["2 cats", "a plane", "a remote"]
>>> outputs = image_classifier(image, candidate_labels=candidate_labels)
>>> outputs = [{"score": round(output["score"], 4), "label": output["label"] } for output in outputs]
>>> print(outputs)
[{'score': 0.1499, 'label': '2 cats'}, {'score': 0.0008, 'label': 'a remote'}, {'score': 0.0, 'label': 'a plane'}]
自己使用模型
如果您想自己进行预处理和后处理,请按以下步骤操作
>>> from PIL import Image
>>> import requests
>>> from transformers import AutoProcessor, AutoModel
>>> import torch
>>> model = AutoModel.from_pretrained("google/siglip2-base-patch16-224")
>>> processor = AutoProcessor.from_pretrained("google/siglip2-base-patch16-224")
>>> url = "http://images.cocodataset.org/val2017/000000039769.jpg"
>>> image = Image.open(requests.get(url, stream=True).raw)
>>> candidate_labels = ["2 cats", "2 dogs"]
# follows the pipeline prompt template to get same results
>>> texts = [f"This is a photo of {label}." for label in candidate_labels]
# IMPORTANT: we pass `padding=max_length` and `max_length=64` since the model was trained with this
>>> inputs = processor(text=texts, images=image, padding="max_length", max_length=64, return_tensors="pt")
>>> with torch.no_grad():
... outputs = model(**inputs)
>>> logits_per_image = outputs.logits_per_image
>>> probs = torch.sigmoid(logits_per_image) # these are the probabilities
>>> print(f"{probs[0][0]:.1%} that image 0 is '{candidate_labels[0]}'")
15.0% that image 0 is '2 cats'
NaFlex 变体
NaFlex 结合了 FlexiViT 的思想,即使用单个 ViT 模型支持多个预定义的序列长度,以及 NaViT,即以其原始宽高比处理图像。这使得能够以适当的分辨率处理不同类型的图像,例如,使用更大的分辨率来处理文档图像,同时最大限度地减少宽高比失真对某些推理任务(例如 OCR)的影响。
给定补丁大小和目标序列长度,NaFlex 通过首先调整输入图像的大小来预处理数据,使得调整大小后的高度和宽度是补丁大小的倍数,同时
- 尽可能保持宽高比失真最小
- 产生最大长度为所需目标序列长度 (
max_num_patches
) 的序列长度
宽度和高度的最终失真分别最多为 (patch_size - 1) / width
和 (patch_size - 1) / height
,这对于常见分辨率和宽高比来说往往很小。调整大小后,图像被分成一系列补丁,并添加带有填充信息的掩码。
>>> from PIL import Image
>>> import requests
>>> from transformers import AutoProcessor, AutoModel
>>> import torch
>>> model = AutoModel.from_pretrained("google/siglip2-base-patch16-naflex")
>>> processor = AutoProcessor.from_pretrained("google/siglip2-base-patch16-naflex")
>>> url = "http://images.cocodataset.org/val2017/000000039769.jpg"
>>> image = Image.open(requests.get(url, stream=True).raw)
>>> candidate_labels = ["2 cats", "2 dogs"]
# follows the pipeline prompt template to get same results
>>> texts = [f"This is a photo of {label}." for label in candidate_labels]
# default value for `max_num_patches` is 256, but you can increase resulted image resolution providing
# higher values e.g. `max_num_patches=512`
>>> inputs = processor(text=texts, images=image, max_num_patches=256, return_tensors="pt")
>>> with torch.no_grad():
... outputs = model(**inputs)
>>> logits_per_image = outputs.logits_per_image
>>> probs = torch.sigmoid(logits_per_image) # these are the probabilities
>>> print(f"{probs[0][0]:.1%} that image 0 is '{candidate_labels[0]}'")
21.1% that image 0 is '2 cats'
资源
Hugging Face 官方和社区(标有 🌎)资源列表,可帮助您开始使用 SigLIP2。
- 零样本图像分类任务指南
- SigLIP2 的演示 notebook 可以在这里找到。 🌎
如果您有兴趣提交资源以包含在此处,请随时打开 Pull Request,我们将对其进行审核!该资源应理想地展示一些新的东西,而不是复制现有资源。
结合 SigLIP2 和 Flash Attention 2
首先,请确保安装最新版本的 Flash Attention 2。
pip install -U flash-attn --no-build-isolation
还要确保您的硬件与 Flash-Attention 2 兼容。有关更多信息,请阅读 flash-attn 存储库的官方文档。还要确保以半精度加载模型(例如 torch.float16“
)
要加载和运行使用 Flash Attention 2 的模型,请参考下面的代码片段
>>> import torch
>>> import requests
>>> from PIL import Image
>>> from transformers import AutoProcessor, AutoModel
>>> device = "cuda" # the device to load the model onto
>>> model = AutoModel.from_pretrained(
... "google/siglip2-so400m-patch14-384",
... attn_implementation="flash_attention_2",
... torch_dtype=torch.float16,
... device_map=device,
... )
>>> processor = AutoProcessor.from_pretrained("google/siglip2-so400m-patch14-384")
>>> url = "http://images.cocodataset.org/val2017/000000039769.jpg"
>>> image = Image.open(requests.get(url, stream=True).raw)
>>> candidate_labels = ["2 cats", "2 dogs"]
# follows the pipeline prompt template to get same results
>>> texts = [f'This is a photo of {label}.' for label in candidate_labels]
# important: we pass `padding=max_length` since the model was trained with this
>>> inputs = processor(text=texts, images=image, padding="max_length", return_tensors="pt").to(device)
>>> with torch.no_grad():
... with torch.autocast(device):
... outputs = model(**inputs)
>>> logits_per_image = outputs.logits_per_image
>>> probs = torch.sigmoid(logits_per_image) # these are the probabilities
>>> print(f"{probs[0][0]:.1%} that image 0 is '{candidate_labels[0]}'")
19.8% that image 0 is '2 cats'
Siglip2Config
class transformers.Siglip2Config
< source >( text_config = None vision_config = None **kwargs )
参数
- text_config (
dict
, 可选) — 用于初始化 Siglip2TextConfig 的配置选项字典。 - vision_config (
dict
, 可选) — 用于初始化 Siglip2VisionConfig 的配置选项字典。 - kwargs (可选) — 关键字参数字典。
Siglip2Config 是用于存储 Siglip2Model 配置的配置类。 它用于根据指定的参数实例化 Siglip2 模型,定义文本模型和视觉模型配置。 使用默认值实例化配置将产生与 Siglip2 google/siglip2-base-patch16-224 架构类似的配置。
配置对象继承自 PretrainedConfig,可用于控制模型输出。 有关更多信息,请阅读 PretrainedConfig 的文档。
示例
>>> from transformers import Siglip2Config, Siglip2Model
>>> # Initializing a Siglip2Config with google/siglip2-base-patch16-224 style configuration
>>> configuration = Siglip2Config()
>>> # Initializing a Siglip2Model (with random weights) from the google/siglip2-base-patch16-224 style configuration
>>> model = Siglip2Model(configuration)
>>> # Accessing the model configuration
>>> configuration = model.config
>>> # We can also initialize a Siglip2Config from a Siglip2TextConfig and a Siglip2VisionConfig
>>> from transformers import Siglip2TextConfig, Siglip2VisionConfig
>>> # Initializing a Siglip2Text and Siglip2Vision configuration
>>> config_text = Siglip2TextConfig()
>>> config_vision = Siglip2VisionConfig()
>>> config = Siglip2Config.from_text_vision_configs(config_text, config_vision)
from_text_vision_configs
< source >( text_config: Siglip2TextConfig vision_config: Siglip2VisionConfig **kwargs ) → Siglip2Config
从 siglip2 文本模型配置和 siglip2 视觉模型配置实例化 Siglip2Config(或派生类)。
Siglip2TextConfig
class transformers.Siglip2TextConfig
< source >( vocab_size = 32000 hidden_size = 768 intermediate_size = 3072 num_hidden_layers = 12 num_attention_heads = 12 max_position_embeddings = 64 hidden_act = 'gelu_pytorch_tanh' layer_norm_eps = 1e-06 attention_dropout = 0.0 pad_token_id = 1 bos_token_id = 49406 eos_token_id = 49407 projection_size = None **kwargs )
参数
- vocab_size (
int
, 可选, 默认为 32000) — Siglip2 文本模型的词汇表大小。 定义了调用 Siglip2Model 时传递的inputs_ids
可以表示的不同 tokens 的数量。 - hidden_size (
int
, 可选, 默认为 768) — 编码器层和池化器层的维度。 - intermediate_size (
int
, 可选, 默认为 3072) — Transformer 编码器中“中间”(即,前馈)层的维度。 - num_hidden_layers (
int
, 可选, 默认为 12) — Transformer 编码器中隐藏层的数量。 - num_attention_heads (
int
, 可选, 默认为 12) — Transformer 编码器中每个注意力层的注意力头数。 - max_position_embeddings (
int
, 可选, 默认为 64) — 此模型可能使用的最大序列长度。 通常将其设置为较大的值以防万一(例如,512 或 1024 或 2048)。 - hidden_act (
str
或function
, 可选, 默认为"gelu_pytorch_tanh"
) — 编码器和池化器中的非线性激活函数(函数或字符串)。 如果是字符串,则支持"gelu"
、"relu"
、"selu"
和"gelu_new"
、"quick_gelu"
。 - layer_norm_eps (
float
, 可选, 默认为 1e-06) — 层归一化层使用的 epsilon 值。 - attention_dropout (
float
, 可选, 默认为 0.0) — 注意力概率的 dropout 比率。 - pad_token_id (
int
, 可选, 默认为 1) — 词汇表中填充 token 的 id。 - bos_token_id (
int
, 可选, 默认为 49406) — 词汇表中序列开始 token 的 id。 - eos_token_id (
int
, 可选, 默认为 49407) — 词汇表中序列结束 token 的 id。 - projection_size (
int
, 可选, 默认为hidden_size
) — 投影头的大小。
这是用于存储 Siglip2TextModel 配置的配置类。 它用于根据指定的参数实例化 Siglip2 文本编码器,定义模型架构。 使用默认值实例化配置将产生与 Siglip2 google/siglip2-base-patch16-224 架构的文本编码器类似的配置。
配置对象继承自 PretrainedConfig,可用于控制模型输出。 有关更多信息,请阅读 PretrainedConfig 的文档。
示例
>>> from transformers import Siglip2TextConfig, Siglip2TextModel
>>> # Initializing a Siglip2TextConfig with google/siglip2-base-patch16-224 style configuration
>>> configuration = Siglip2TextConfig()
>>> # Initializing a Siglip2TextModel (with random weights) from the google/siglip2-base-patch16-224 style configuration
>>> model = Siglip2TextModel(configuration)
>>> # Accessing the model configuration
>>> configuration = model.config
Siglip2VisionConfig
class transformers.Siglip2VisionConfig
< source >( hidden_size = 768 intermediate_size = 3072 num_hidden_layers = 12 num_attention_heads = 12 num_channels = 3 num_patches = 256 patch_size = 16 hidden_act = 'gelu_pytorch_tanh' layer_norm_eps = 1e-06 attention_dropout = 0.0 **kwargs )
参数
- hidden_size (
int
, 可选, 默认为 768) — 编码器层和池化器层的维度。 - intermediate_size (
int
, 可选, 默认为 3072) — Transformer 编码器中“中间”(即,前馈)层的维度。 - num_hidden_layers (
int
, 可选, 默认为 12) — Transformer 编码器中隐藏层的数量。 - num_attention_heads (
int
, 可选, 默认为 12) — Transformer 编码器中每个注意力层的注意力头数。 - num_channels (
int
, 可选, 默认为 3) — 输入图像中的通道数。 - num_patches (
int
, 可选, 默认为 256) — 图像中的 patch 数量,patch 的大小为 (patch_size
,patch_size
)。图像将被调整大小以填充此最大 patch 数量,并保持宽高比。如果最终的 patch 数量较低,则图像将在 “patch” 维度上进行填充。 - patch_size (
int
, 可选, 默认为 16) — 每个 patch 的大小(分辨率)。 - hidden_act (
str
或function
, 可选, 默认为"gelu_pytorch_tanh"
) — 编码器和池化器中的非线性激活函数(函数或字符串)。如果为字符串,则支持"gelu"
、"relu"
、"selu"
、"gelu_new"
和"quick_gelu"
。 - layer_norm_eps (
float
, 可选, 默认为 1e-06) — 层归一化层使用的 epsilon 值。 - attention_dropout (
float
, 可选, 默认为 0.0) — 注意力概率的 dropout 比率。
这是用于存储 Siglip2VisionModel 配置的配置类。它用于根据指定的参数实例化 Siglip2 视觉编码器,定义模型架构。使用默认值实例化配置将产生与 Siglip2 google/siglip2-base-patch16-naflex 架构的视觉编码器类似的配置。
配置对象继承自 PretrainedConfig,可用于控制模型输出。 有关更多信息,请阅读 PretrainedConfig 的文档。
示例
>>> from transformers import Siglip2VisionConfig, Siglip2VisionModel
>>> # Initializing a Siglip2VisionConfig with google/siglip2-base-patch16-naflex style configuration
>>> configuration = Siglip2VisionConfig()
>>> # Initializing a Siglip2VisionModel (with random weights) from the google/siglip2-base-patch16-naflex style configuration
>>> model = Siglip2VisionModel(configuration)
>>> # Accessing the model configuration
>>> configuration = model.config
Siglip2ImageProcessor
class transformers.Siglip2ImageProcessor
< source >( do_resize: bool = True resample: Resampling = <Resampling.BILINEAR: 2> do_rescale: bool = True rescale_factor: float = 0.00392156862745098 do_normalize: bool = True image_mean: typing.Union[float, typing.List[float], NoneType] = None image_std: typing.Union[float, typing.List[float], NoneType] = None do_convert_rgb: typing.Optional[bool] = None patch_size: int = 16 max_num_patches: int = 256 **kwargs )
参数
- do_resize (
bool
, 可选, 默认为True
) — 是否调整图像尺寸以根据给定的patch_size
适应max_num_patches
。可以被preprocess
方法中的do_resize
覆盖。 - resample (
PILImageResampling
, 可选, 默认为Resampling.BILINEAR
) — 如果调整图像大小,则使用的重采样滤波器。可以被preprocess
方法中的resample
覆盖。 - do_rescale (
bool
, 可选, 默认为True
) — 是否按指定的比例rescale_factor
缩放图像。可以被preprocess
方法中的do_rescale
覆盖。 - rescale_factor (
int
或float
, 可选, 默认为1/255
) — 如果缩放图像,则使用的缩放因子。可以被preprocess
方法中的rescale_factor
覆盖。 - do_normalize (
bool
, 可选, 默认为True
) — 是否通过指定的均值和标准差来标准化图像。可以被preprocess
方法中的do_normalize
覆盖。 - image_mean (
float
或List[float]
, 可选, 默认为[0.5, 0.5, 0.5]
) — 如果标准化图像,则使用的均值。这是一个浮点数或浮点数列表,其长度为图像中的通道数。可以被preprocess
方法中的image_mean
参数覆盖。 - image_std (
float
或List[float]
, 可选, 默认为[0.5, 0.5, 0.5]
) — 如果标准化图像,则使用的标准差。这是一个浮点数或浮点数列表,其长度为图像中的通道数。可以被preprocess
方法中的image_std
参数覆盖。可以被preprocess
方法中的image_std
参数覆盖。 - do_convert_rgb (
bool
, 可选, 默认为True
) — 是否将图像转换为 RGB 格式。 - patch_size (
int
, 可选, 默认为 16) — 图像将被分割成的每个 patch 的大小(分辨率)。 - max_num_patches (
int
, 可选, 默认为 256) — 图像将被调整大小,使其最多具有此数量的 patch,然后在 “patch” 维度上进行填充以完全匹配此数量。
构建 SigLIP2 图像处理器。
preprocess
< source >( images: typing.Union[ForwardRef('PIL.Image.Image'), numpy.ndarray, ForwardRef('torch.Tensor'), list['PIL.Image.Image'], list[numpy.ndarray], list['torch.Tensor']] do_resize: typing.Optional[bool] = None resample: typing.Optional[PIL.Image.Resampling] = None do_rescale: typing.Optional[bool] = None rescale_factor: typing.Optional[float] = None do_normalize: typing.Optional[bool] = None image_mean: typing.Union[float, typing.List[float], NoneType] = None image_std: typing.Union[float, typing.List[float], NoneType] = None return_tensors: typing.Union[str, transformers.utils.generic.TensorType, NoneType] = None input_data_format: typing.Union[str, transformers.image_utils.ChannelDimension, NoneType] = None do_convert_rgb: typing.Optional[bool] = None patch_size: typing.Optional[int] = None max_num_patches: typing.Optional[int] = None )
参数
- images (
ImageInput
) — 要预处理的图像。 期望单个或一批像素值范围为 0 到 255 的图像。如果传入像素值介于 0 和 1 之间的图像,请设置do_rescale=False
。 - do_resize (
bool
, 可选, 默认为self.do_resize
) — 是否调整图像大小。 - size (
Dict[str, int]
, 可选, 默认为self.size
) — 调整大小后图像的大小。 - resample (
int
, 可选, 默认为self.resample
) — 如果调整图像大小,则使用的重采样滤波器。这可以是枚举PILImageResampling
之一。仅在do_resize
设置为True
时有效。 - do_rescale (
bool
, 可选, 默认为self.do_rescale
) — 是否缩放图像。 - rescale_factor (
float
, 可选, 默认为self.rescale_factor
) — 如果do_rescale
设置为True
,则用于缩放图像的缩放因子。 - do_normalize (
bool
, 可选, 默认为self.do_normalize
) — 是否标准化图像。 - image_mean (
float
或List[float]
, 可选, 默认为self.image_mean
) — 用于归一化的图像均值。仅当do_normalize
设置为True
时才生效。 - image_std (
float
或List[float]
, 可选, 默认为self.image_std
) — 用于归一化的图像标准差。仅当do_normalize
设置为True
时才生效。 - return_tensors (
str
或TensorType
, 可选) — 返回张量的类型。可以是以下之一:- Unset: 返回
np.ndarray
列表。 TensorType.TENSORFLOW
或'tf'
: 返回tf.Tensor
类型的批次。TensorType.PYTORCH
或'pt'
: 返回torch.Tensor
类型的批次。TensorType.NUMPY
或'np'
: 返回np.ndarray
类型的批次。TensorType.JAX
或'jax'
: 返回jax.numpy.ndarray
类型的批次。
- Unset: 返回
- input_data_format (
ChannelDimension
或str
, 可选) — 输入图像的通道维度格式。如果未设置,则通道维度格式从输入图像推断。可以是以下之一:"channels_first"
或ChannelDimension.FIRST
: 图像格式为 (通道数, 高度, 宽度)。"channels_last"
或ChannelDimension.LAST
: 图像格式为 (高度, 宽度, 通道数)。"none"
或ChannelDimension.NONE
: 图像格式为 (高度, 宽度)。
- do_convert_rgb (
bool
, 可选, 默认为self.do_convert_rgb
) — 是否将图像转换为 RGB。 - patch_size (
int
, 可选, 默认为self.patch_size
) — 用于处理的图块大小,与模型中使用的图块大小相同。 - max_num_patches (
int
, 可选, 默认为self.max_num_patches
) — 每张图像的最大图块数,图像将被调整大小以最多拥有此数量的图块。
预处理图像或图像批次。
Siglip2ImageProcessorFast
class transformers.Siglip2ImageProcessorFast
< 源代码 >( **kwargs: typing_extensions.Unpack[transformers.models.siglip2.image_processing_siglip2_fast.Siglip2FastImageProcessorKwargs] )
参数
- do_resize (
bool
, 可选, 默认为self.do_resize
) — 是否将图像的(高度,宽度)尺寸调整为指定的size
。可以被preprocess
方法中的do_resize
参数覆盖。 - size (
dict
, 可选, 默认为self.size
) — 调整大小后输出图像的大小。可以被preprocess
方法中的size
参数覆盖。 - default_to_square (
bool
, 可选, 默认为self.default_to_square
) — 如果 size 是整数,是否在调整大小时默认为正方形图像。 - resample (
PILImageResampling
, 可选, 默认为self.resample
) — 如果调整图像大小,则使用的重采样过滤器。仅当do_resize
设置为True
时才生效。可以被preprocess
方法中的resample
参数覆盖。 - do_center_crop (
bool
, 可选, 默认为self.do_center_crop
) — 是否将图像中心裁剪为指定的crop_size
。可以被preprocess
方法中的do_center_crop
参数覆盖。 - crop_size (
Dict[str, int]
可选, 默认为self.crop_size
) — 应用center_crop
后输出图像的大小。可以被preprocess
方法中的crop_size
参数覆盖。 - do_rescale (
bool
, 可选, 默认为self.do_rescale
) — 是否按指定的比例rescale_factor
重新缩放图像。可以被preprocess
方法中的do_rescale
参数覆盖。 - rescale_factor (
int
或float
, 可选, 默认为self.rescale_factor
) — 如果重新缩放图像,则使用的缩放因子。仅当do_rescale
设置为True
时才生效。可以被preprocess
方法中的rescale_factor
参数覆盖。 - do_normalize (
bool
, 可选, 默认为self.do_normalize
) — 是否对图像进行归一化。可以被preprocess
方法中的do_normalize
参数覆盖。可以被preprocess
方法中的do_normalize
参数覆盖。 - image_mean (
float
或List[float]
, 可选, 默认为self.image_mean
) — 如果对图像进行归一化,则使用的均值。这是一个浮点数或浮点数列表,其长度为图像中通道的数量。可以被preprocess
方法中的image_mean
参数覆盖。可以被preprocess
方法中的image_mean
参数覆盖。 - image_std (
float
或List[float]
, 可选, 默认为self.image_std
) — 如果对图像进行归一化,则使用的标准差。这是一个浮点数或浮点数列表,其长度为图像中通道的数量。可以被preprocess
方法中的image_std
参数覆盖。可以被preprocess
方法中的image_std
参数覆盖。 - do_convert_rgb (
bool
, 可选, 默认为self.do_convert_rgb
) — 是否将图像转换为 RGB。 - return_tensors (
str
或TensorType
, 可选, 默认为self.return_tensors
) — 如果设置为 `pt`,则返回堆叠的张量,否则返回张量列表。 - data_format (
ChannelDimension
或str
, 可选, 默认为self.data_format
) — 仅支持ChannelDimension.FIRST
。为了与慢速处理器兼容而添加。 - input_data_format (
ChannelDimension
或str
, 可选, 默认为self.input_data_format
) — 输入图像的通道维度格式。如果未设置,则通道维度格式从输入图像推断。可以是以下之一:"channels_first"
或ChannelDimension.FIRST
: 图像格式为 (通道数, 高度, 宽度)。"channels_last"
或ChannelDimension.LAST
: 图像格式为 (高度, 宽度, 通道数)。"none"
或ChannelDimension.NONE
: 图像格式为 (高度, 宽度)。
- device (
torch.device
, 可选, 默认为self.device
) — 用于处理图像的设备。如果未设置,则设备从输入图像推断。 - patch_size (
int
, 可选, 默认为 16) — 图像将被分割成的每个图块的大小(分辨率)。 - max_num_patches (
int
, 可选, 默认为 256) — 图像将被调整大小,使其最多具有此数量的patch,然后在“patch”维度中进行填充,以完全匹配此数量。
构建一个快速的 Siglip2 图像处理器。
preprocess
< source >( images: typing.Union[ForwardRef('PIL.Image.Image'), numpy.ndarray, ForwardRef('torch.Tensor'), list['PIL.Image.Image'], list[numpy.ndarray], list['torch.Tensor']] **kwargs: typing_extensions.Unpack[transformers.models.siglip2.image_processing_siglip2_fast.Siglip2FastImageProcessorKwargs] )
参数
- images (
ImageInput
) — 要预处理的图像。 期望是像素值范围从 0 到 255 的单张或批量图像。如果传入的图像像素值在 0 和 1 之间,请设置do_rescale=False
。 - do_resize (
bool
, 可选, 默认为self.do_resize
) — 是否调整图像大小。 - size (
Dict[str, int]
, 可选, 默认为self.size
) — 描述模型的最大输入尺寸。 - resample (
PILImageResampling
或InterpolationMode
, 可选, 默认为self.resample
) — 如果调整图像大小,则使用的重采样滤波器。 这可以是枚举PILImageResampling
之一。 仅当do_resize
设置为True
时才有效。 - do_center_crop (
bool
, 可选, 默认为self.do_center_crop
) — 是否对图像进行中心裁剪。 - crop_size (
Dict[str, int]
, 可选, 默认为self.crop_size
) — 应用center_crop
后输出图像的大小。 - do_rescale (
bool
, 可选, 默认为self.do_rescale
) — 是否重新缩放图像。 - rescale_factor (
float
, 可选, 默认为self.rescale_factor
) — 如果do_rescale
设置为True
,则用于重新缩放图像的重新缩放因子。 - do_normalize (
bool
, 可选, 默认为self.do_normalize
) — 是否标准化图像。 - image_mean (
float
或List[float]
, 可选, 默认为self.image_mean
) — 用于标准化的图像均值。 仅当do_normalize
设置为True
时才有效。 - image_std (
float
或List[float]
, 可选, 默认为self.image_std
) — 用于标准化的图像标准差。 仅当do_normalize
设置为True
时才有效。 - do_convert_rgb (
bool
, 可选, 默认为self.do_convert_rgb
) — 是否将图像转换为 RGB。 - return_tensors (
str
或TensorType
, 可选, 默认为self.return_tensors
) — 如果设置为 `pt`,则返回堆叠的张量,否则返回张量列表。 - data_format (
ChannelDimension
或str
, 可选, 默认为self.data_format
) — 仅支持ChannelDimension.FIRST
。 添加此项是为了与慢速处理器兼容。 - input_data_format (
ChannelDimension
或str
, 可选, 默认为self.input_data_format
) — 输入图像的通道维度格式。 如果未设置,则通道维度格式将从输入图像中推断出来。 可以是以下之一:"channels_first"
或ChannelDimension.FIRST
:(num_channels, height, width) 格式的图像。"channels_last"
或ChannelDimension.LAST
:(height, width, num_channels) 格式的图像。"none"
或ChannelDimension.NONE
:(height, width) 格式的图像。
- device (
torch.device
, 可选, 默认为self.device
) — 用于处理图像的设备。 如果未设置,则设备将从输入图像中推断出来。 - patch_size (
int
, 可选, 默认为self.patch_size
) — 图像将被分割成的每个 patch 的大小(分辨率)。 - max_num_patches (
int
, 可选, 默认为self.max_num_patches
) — 图像将被调整大小,使其最多具有此数量的patch,然后在“patch”维度中进行填充,以完全匹配此数量。
预处理图像或图像批次。
Siglip2Processor
class transformers.Siglip2Processor
< source >( image_processor tokenizer )
参数
- image_processor (Siglip2ImageProcessor) — 图像处理器是必需的输入。
- tokenizer (GemmaTokenizerFast) — 分词器是必需的输入。
构建一个 Siglip2 处理器,它将 Siglip2 图像处理器和 Gemma 分词器包装到单个处理器中。
Siglip2Processor 提供 Siglip2ImageProcessor 和 GemmaTokenizerFast 的所有功能。 有关更多信息,请参阅 __call__()
和 decode()。
此方法将其所有参数转发到 Siglip2Tokenizer 的 batch_decode()。 有关更多信息,请参阅此方法的文档字符串。
此方法将其所有参数转发到 Siglip2Tokenizer 的 decode()。 有关更多信息,请参阅此方法的文档字符串。
Siglip2Model
class transformers.Siglip2Model
< source >( config: Siglip2Config )
参数
- config (Siglip2Config) — 带有模型所有参数的模型配置类。 使用配置文件初始化不会加载与模型关联的权重,仅加载配置。 查看 from_pretrained() 方法以加载模型权重。
此模型继承自 PreTrainedModel。 查看超类文档,了解库为其所有模型实现的通用方法(例如下载或保存、调整输入嵌入大小、剪枝头等)。
此模型也是 PyTorch torch.nn.Module 子类。 将其用作常规 PyTorch 模块,并参阅 PyTorch 文档,了解与常规用法和行为相关的所有事项。
forward
< 源代码 >( input_ids: typing.Optional[torch.LongTensor] = None pixel_values: typing.Optional[torch.FloatTensor] = None pixel_attention_mask: typing.Optional[torch.Tensor] = None spatial_shapes: typing.Optional[torch.LongTensor] = None attention_mask: typing.Optional[torch.Tensor] = None position_ids: typing.Optional[torch.LongTensor] = None return_loss: typing.Optional[bool] = None output_attentions: typing.Optional[bool] = None output_hidden_states: typing.Optional[bool] = None return_dict: typing.Optional[bool] = None ) → transformers.models.siglip2.modeling_siglip2.Siglip2Output
或 tuple(torch.FloatTensor)
参数
- input_ids (
torch.LongTensor
,形状为(batch_size, sequence_length)
) — 词汇表中输入序列 tokens 的索引。如果您提供 padding,默认情况下将被忽略。索引可以使用 AutoTokenizer 获得。 请参阅 PreTrainedTokenizer.encode() 和 PreTrainedTokenizer.call() 了解详细信息。
- attention_mask (
torch.Tensor
,形状为(batch_size, sequence_length)
,可选) — 遮罩,用于避免在 padding token 索引上执行 attention。遮罩值在[0, 1]
中选择:- 1 表示 未遮罩 的 tokens,
- 0 表示 已遮罩 的 tokens。
- position_ids (
torch.LongTensor
,形状为(batch_size, sequence_length)
,可选) — 每个输入序列 tokens 在位置嵌入中的位置索引。在范围[0, config.max_position_embeddings - 1]
中选择。 - pixel_values (
torch.FloatTensor
,形状为(batch_size, num_channels, height, width)
) — 像素值。如果您提供 padding,默认情况下将被忽略。像素值可以使用 AutoImageProcessor 获得。 请参阅 CLIPImageProcessor.call() 了解详细信息。 - return_loss (
bool
,可选) — 是否返回对比损失。 - output_attentions (
bool
,可选) — 是否返回所有 attention 层的 attention tensors。 有关更多详细信息,请参见返回的 tensors 下的attentions
。 - output_hidden_states (
bool
,可选) — 是否返回所有层的 hidden states。 有关更多详细信息,请参见返回的 tensors 下的hidden_states
。 - interpolate_pos_encoding (
bool
,可选,默认为False
) — 是否插值预训练的位置编码。 - return_dict (
bool
,可选) — 是否返回 ModelOutput 而不是普通元组。
返回值
transformers.models.siglip2.modeling_siglip2.Siglip2Output
或 tuple(torch.FloatTensor)
一个 transformers.models.siglip2.modeling_siglip2.Siglip2Output
或 torch.FloatTensor
的元组(如果传递了 return_dict=False
或当 config.return_dict=False
时),包含各种元素,具体取决于配置 (<class 'transformers.models.siglip2.configuration_siglip2.Siglip2Config'>
) 和输入。
- loss (
torch.FloatTensor
,形状为(1,)
,可选,当return_loss
为True
时返回) — 图像-文本相似度的对比损失。 - logits_per_image (
torch.FloatTensor
,形状为(image_batch_size, text_batch_size)
) —image_embeds
和text_embeds
之间缩放的点积分数。 这表示图像-文本相似度得分。 - logits_per_text (
torch.FloatTensor
,形状为(text_batch_size, image_batch_size)
) —text_embeds
和image_embeds
之间缩放的点积分数。 这表示文本-图像相似度得分。 - text_embeds (
torch.FloatTensor
,形状为(batch_size, output_dim
) — 通过将投影层应用于 Siglip2TextModel 的 pooled 输出而获得的文本嵌入。 - image_embeds (
torch.FloatTensor
,形状为(batch_size, output_dim
) — 通过将投影层应用于 Siglip2VisionModel 的 pooled 输出而获得的图像嵌入。 - text_model_output (
BaseModelOutputWithPooling
) — Siglip2TextModel 的输出。 - vision_model_output (
BaseModelOutputWithPooling
) — Siglip2VisionModel 的输出。
Siglip2Model 的 forward 方法,覆盖了 __call__
特殊方法。
尽管 forward 传递的配方需要在该函数中定义,但之后应调用 Module
实例而不是此函数,因为前者负责运行预处理和后处理步骤,而后者会默默地忽略它们。
示例
>>> from PIL import Image
>>> import requests
>>> from transformers import AutoProcessor, AutoModel
>>> import torch
>>> model = AutoModel.from_pretrained("google/siglip2-base-patch16-224")
>>> processor = AutoProcessor.from_pretrained("google/siglip2-base-patch16-224")
>>> url = "http://images.cocodataset.org/val2017/000000039769.jpg"
>>> image = Image.open(requests.get(url, stream=True).raw)
>>> texts = ["a photo of 2 cats", "a photo of 2 dogs"]
>>> # important: we pass `padding=max_length` since the model was trained with this
>>> inputs = processor(text=texts, images=image, padding="max_length", return_tensors="pt")
>>> with torch.no_grad():
... outputs = model(**inputs)
>>> logits_per_image = outputs.logits_per_image
>>> probs = torch.sigmoid(logits_per_image) # these are the probabilities
>>> print(f"{probs[0][0]:.1%} that image 0 is '{texts[0]}'")
31.9% that image 0 is 'a photo of 2 cats'
get_text_features
< 源代码 >( input_ids: typing.Optional[torch.Tensor] = None attention_mask: typing.Optional[torch.Tensor] = None position_ids: typing.Optional[torch.Tensor] = None output_attentions: typing.Optional[bool] = None output_hidden_states: typing.Optional[bool] = None return_dict: typing.Optional[bool] = None ) → text_features (torch.FloatTensor
,形状为 (batch_size, output_dim
)
参数
- input_ids (
torch.LongTensor
,形状为(batch_size, sequence_length)
) — 词汇表中输入序列 tokens 的索引。如果您提供 padding,默认情况下将被忽略。索引可以使用 AutoTokenizer 获得。 请参阅 PreTrainedTokenizer.encode() 和 PreTrainedTokenizer.call() 了解详细信息。
- attention_mask (
torch.Tensor
,形状为(batch_size, sequence_length)
,可选) — 遮罩,用于避免在 padding token 索引上执行 attention。遮罩值在[0, 1]
中选择:- 1 表示 未遮罩 的 tokens,
- 0 表示 已遮罩 的 tokens。
- position_ids (
torch.LongTensor
,形状为(batch_size, sequence_length)
,可选) — 每个输入序列 tokens 在位置嵌入中的位置索引。在范围[0, config.max_position_embeddings - 1]
中选择。 - output_attentions (
bool
,可选) — 是否返回所有 attention 层的 attention tensors。 有关更多详细信息,请参见返回的 tensors 下的attentions
。 - output_hidden_states (
bool
,可选) — 是否返回所有层的 hidden states。 有关更多详细信息,请参见返回的 tensors 下的hidden_states
。 - return_dict (
bool
,可选) — 是否返回 ModelOutput 而不是普通元组。
返回值
text_features (torch.FloatTensor
,形状为 (batch_size, output_dim
)
通过将投影层应用于 Siglip2TextModel 的 pooled 输出而获得的文本嵌入。
Siglip2Model 的 forward 方法,覆盖了 __call__
特殊方法。
尽管 forward 传递的配方需要在该函数中定义,但之后应调用 Module
实例而不是此函数,因为前者负责运行预处理和后处理步骤,而后者会默默地忽略它们。
示例
>>> from transformers import AutoTokenizer, AutoModel
>>> import torch
>>> model = AutoModel.from_pretrained("google/siglip2-base-patch16-224")
>>> tokenizer = AutoTokenizer.from_pretrained("google/siglip2-base-patch16-224")
>>> # important: make sure to set padding="max_length" as that's how the model was trained
>>> inputs = tokenizer(["a photo of a cat", "a photo of a dog"], padding="max_length", return_tensors="pt")
>>> with torch.no_grad():
... text_features = model.get_text_features(**inputs)
get_image_features
< 源代码 >( pixel_values: typing.Optional[torch.FloatTensor] = None pixel_attention_mask: typing.Optional[torch.Tensor] = None spatial_shapes: typing.Optional[torch.LongTensor] = None output_attentions: typing.Optional[bool] = None output_hidden_states: typing.Optional[bool] = None return_dict: typing.Optional[bool] = None ) → image_features (torch.FloatTensor
,形状为 (batch_size, output_dim
)
参数
- pixel_values (
torch.FloatTensor
,形状为(batch_size, num_channels, height, width)
) — 像素值。如果您提供 padding,默认情况下将被忽略。像素值可以使用 AutoImageProcessor 获得。 请参阅 CLIPImageProcessor.call() 了解详细信息。 - output_attentions (
bool
,可选) — 是否返回所有 attention 层的 attention tensors。 有关更多详细信息,请参见返回的 tensors 下的attentions
。 - output_hidden_states (
bool
,可选) — 是否返回所有层的 hidden states。 有关更多详细信息,请参见返回的 tensors 下的hidden_states
。 - interpolate_pos_encoding (
bool
,可选,默认为False
) — 是否插值预训练的位置编码。 - return_dict (
bool
,可选) — 是否返回 ModelOutput 而不是普通元组。
返回值
image_features (torch.FloatTensor
,形状为 (batch_size, output_dim
)
通过将投影层应用于 Siglip2VisionModel 的 pooled 输出而获得的图像嵌入。
Siglip2Model 的 forward 方法,覆盖了 __call__
特殊方法。
尽管 forward 传递的配方需要在该函数中定义,但之后应调用 Module
实例而不是此函数,因为前者负责运行预处理和后处理步骤,而后者会默默地忽略它们。
示例
>>> from PIL import Image
>>> import requests
>>> from transformers import AutoProcessor, AutoModel
>>> import torch
>>> model = AutoModel.from_pretrained("google/siglip2-base-patch16-224")
>>> processor = AutoProcessor.from_pretrained("google/siglip2-base-patch16-224")
>>> url = "http://images.cocodataset.org/val2017/000000039769.jpg"
>>> image = Image.open(requests.get(url, stream=True).raw)
>>> inputs = processor(images=image, return_tensors="pt")
>>> with torch.no_grad():
... image_features = model.get_image_features(**inputs)
Siglip2TextModel
class transformers.Siglip2TextModel
< source >( config: Siglip2TextConfig )
参数
- config (Siglip2Config) — 包含模型所有参数的模型配置类。使用配置文件初始化不会加载与模型关联的权重,仅加载配置。查看 from_pretrained() 方法来加载模型权重。
Siglip2 的文本模型,顶部没有任何 head 或 projection。此模型继承自 PreTrainedModel。查看超类文档,了解库为所有模型实现的通用方法(例如下载或保存、调整输入嵌入大小、剪枝 head 等)。
此模型也是 PyTorch torch.nn.Module 子类。 将其用作常规 PyTorch 模块,并参阅 PyTorch 文档,了解与常规用法和行为相关的所有事项。
forward
< source >( input_ids: typing.Optional[torch.Tensor] = None attention_mask: typing.Optional[torch.Tensor] = None position_ids: typing.Optional[torch.Tensor] = None output_attentions: typing.Optional[bool] = None output_hidden_states: typing.Optional[bool] = None return_dict: typing.Optional[bool] = None ) → transformers.modeling_outputs.BaseModelOutputWithPooling or tuple(torch.FloatTensor)
参数
- input_ids (形状为
(batch_size, sequence_length)
的torch.LongTensor
) — 词汇表中输入序列 tokens 的索引。如果您提供 padding,默认情况下将被忽略。索引可以使用 AutoTokenizer 获得。 有关详细信息,请参见 PreTrainedTokenizer.encode() 和 PreTrainedTokenizer.call()。
- attention_mask (形状为
(batch_size, sequence_length)
的torch.Tensor
, 可选) — 避免对 padding token 索引执行 attention 的 Mask。 Mask 值在[0, 1]
中选择:- 1 表示 未被 Mask 的 tokens,
- 0 表示 被 Mask 的 tokens。
- position_ids (形状为
(batch_size, sequence_length)
的torch.LongTensor
, 可选) — 每个输入序列 token 在位置嵌入中的位置索引。在范围[0, config.max_position_embeddings - 1]
中选择。 - output_attentions (
bool
, 可选) — 是否返回所有 attention 层的 attention tensors。 有关更多详细信息,请参见返回的 tensors 下的attentions
。 - output_hidden_states (
bool
, 可选) — 是否返回所有层的 hidden states。 有关更多详细信息,请参见返回的 tensors 下的hidden_states
。 - return_dict (
bool
, 可选) — 是否返回 ModelOutput 而不是普通 tuple。
返回值
transformers.modeling_outputs.BaseModelOutputWithPooling or tuple(torch.FloatTensor)
一个 transformers.modeling_outputs.BaseModelOutputWithPooling 或一个 torch.FloatTensor
的 tuple (如果传递了 return_dict=False
或当 config.return_dict=False
时),其中包含各种元素,具体取决于配置 (<class 'transformers.models.siglip2.configuration_siglip2.Siglip2TextConfig'>
) 和输入。
-
last_hidden_state (形状为
(batch_size, sequence_length, hidden_size)
的torch.FloatTensor
) — 模型最后一层的输出处的 hidden-states 序列。 -
pooler_output (形状为
(batch_size, hidden_size)
的torch.FloatTensor
) — 序列的第一个 token (分类 token) 的最后一层 hidden-state,在通过用于辅助预训练任务的层进一步处理之后。例如,对于 BERT 系列模型,这返回通过线性层和 tanh 激活函数处理后的分类 token。线性层权重从预训练期间的下一个句子预测(分类)目标中训练而来。 -
hidden_states (
tuple(torch.FloatTensor)
, 可选, 当传递output_hidden_states=True
或当config.output_hidden_states=True
时返回) —torch.FloatTensor
的 Tuple (如果模型具有嵌入层,则一个用于嵌入的输出,+ 每个层的输出一个),形状为(batch_size, sequence_length, hidden_size)
。模型在每一层输出端的 Hidden-states,加上可选的初始嵌入输出。
-
attentions (
tuple(torch.FloatTensor)
, 可选, 当传递output_attentions=True
或当config.output_attentions=True
时返回) —torch.FloatTensor
的 Tuple (每层一个),形状为(batch_size, num_heads, sequence_length, sequence_length)
。attention softmax 之后的 Attentions 权重,用于计算 self-attention heads 中的加权平均值。
Siglip2TextModel forward 方法,覆盖了 __call__
特殊方法。
尽管 forward 传递的配方需要在该函数中定义,但之后应调用 Module
实例而不是此函数,因为前者负责运行预处理和后处理步骤,而后者会默默地忽略它们。
示例
>>> from transformers import AutoTokenizer, Siglip2TextModel
>>> model = Siglip2TextModel.from_pretrained("google/siglip2-base-patch16-224")
>>> tokenizer = AutoTokenizer.from_pretrained("google/siglip2-base-patch16-224")
>>> # important: make sure to set padding="max_length" as that's how the model was trained
>>> inputs = tokenizer(["a photo of a cat", "a photo of a dog"], padding="max_length", return_tensors="pt")
>>> outputs = model(**inputs)
>>> last_hidden_state = outputs.last_hidden_state
>>> pooled_output = outputs.pooler_output # pooled (EOS token) states
Siglip2VisionModel
class transformers.Siglip2VisionModel
< source >( config: Siglip2VisionConfig )
参数
- config (Siglip2Config) — 包含模型所有参数的模型配置类。使用配置文件初始化不会加载与模型关联的权重,仅加载配置。查看 from_pretrained() 方法来加载模型权重。
Siglip2 的视觉模型,顶部没有任何 head 或 projection。此模型继承自 PreTrainedModel。查看超类文档,了解库为所有模型实现的通用方法(例如下载或保存、调整输入嵌入大小、剪枝 head 等)。
此模型也是 PyTorch torch.nn.Module 子类。 将其用作常规 PyTorch 模块,并参阅 PyTorch 文档,了解与常规用法和行为相关的所有事项。
forward
< source >( pixel_values: FloatTensor pixel_attention_mask: Tensor spatial_shapes: LongTensor output_attentions: typing.Optional[bool] = None output_hidden_states: typing.Optional[bool] = None return_dict: typing.Optional[bool] = None ) → transformers.modeling_outputs.BaseModelOutputWithPooling or tuple(torch.FloatTensor)
参数
- pixel_values (形状为
(batch_size, num_channels, height, width)
的torch.FloatTensor
) — 像素值。如果您提供 padding,默认情况下将被忽略。像素值可以使用 AutoImageProcessor 获得。 有关详细信息,请参见 CLIPImageProcessor.call()。 - output_attentions (
bool
, 可选) — 是否返回所有 attention 层的 attention tensors。 有关更多详细信息,请参见返回的 tensors 下的attentions
。 - output_hidden_states (
bool
, 可选) — 是否返回所有层的 hidden states。 有关更多详细信息,请参见返回的 tensors 下的hidden_states
。 - interpolate_pos_encoding (
bool
, 可选, 默认为False
) — 是否插值预训练的位置编码。 - return_dict (
bool
, 可选) — 是否返回 ModelOutput 而不是普通 tuple。
返回值
transformers.modeling_outputs.BaseModelOutputWithPooling or tuple(torch.FloatTensor)
一个 transformers.modeling_outputs.BaseModelOutputWithPooling 或一个 torch.FloatTensor
的 tuple (如果传递了 return_dict=False
或当 config.return_dict=False
时),其中包含各种元素,具体取决于配置 (<class 'transformers.models.siglip2.configuration_siglip2.Siglip2VisionConfig'>
) 和输入。
-
last_hidden_state (形状为
(batch_size, sequence_length, hidden_size)
的torch.FloatTensor
) — 模型最后一层的输出处的 hidden-states 序列。 -
pooler_output (形状为
(batch_size, hidden_size)
的torch.FloatTensor
) — 序列的第一个 token (分类 token) 的最后一层 hidden-state,在通过用于辅助预训练任务的层进一步处理之后。例如,对于 BERT 系列模型,这返回通过线性层和 tanh 激活函数处理后的分类 token。线性层权重从预训练期间的下一个句子预测(分类)目标中训练而来。 -
hidden_states (
tuple(torch.FloatTensor)
, 可选, 当传递output_hidden_states=True
或当config.output_hidden_states=True
时返回) —torch.FloatTensor
的 Tuple (如果模型具有嵌入层,则一个用于嵌入的输出,+ 每个层的输出一个),形状为(batch_size, sequence_length, hidden_size)
。模型在每一层输出端的 Hidden-states,加上可选的初始嵌入输出。
-
attentions (
tuple(torch.FloatTensor)
, 可选, 当传递output_attentions=True
或当config.output_attentions=True
时返回) —torch.FloatTensor
的 Tuple (每层一个),形状为(batch_size, num_heads, sequence_length, sequence_length)
。attention softmax 之后的 Attentions 权重,用于计算 self-attention heads 中的加权平均值。
Siglip2VisionModel forward 方法,覆盖了 __call__
特殊方法。
尽管 forward 传递的配方需要在该函数中定义,但之后应调用 Module
实例而不是此函数,因为前者负责运行预处理和后处理步骤,而后者会默默地忽略它们。
示例
>>> from PIL import Image
>>> import requests
>>> from transformers import AutoProcessor, Siglip2VisionModel
>>> model = Siglip2VisionModel.from_pretrained("google/siglip2-base-patch16-224")
>>> processor = AutoProcessor.from_pretrained("google/siglip2-base-patch16-224")
>>> url = "http://images.cocodataset.org/val2017/000000039769.jpg"
>>> image = Image.open(requests.get(url, stream=True).raw)
>>> inputs = processor(images=image, return_tensors="pt")
>>> outputs = model(**inputs)
>>> last_hidden_state = outputs.last_hidden_state
>>> pooled_output = outputs.pooler_output # pooled features
Siglip2ForImageClassification
class transformers.Siglip2ForImageClassification
< source >( config: Siglip2Config )
参数
- config (Siglip2Config) — 包含模型所有参数的模型配置类。使用配置文件初始化不会加载与模型关联的权重,仅加载配置。查看 from_pretrained() 方法来加载模型权重。
Siglip2 视觉编码器,顶部带有一个图像分类 head(patch tokens 的 pooled 最终 hidden states 之上的线性层),例如用于 ImageNet。
此模型继承自 PreTrainedModel。 查看超类文档,了解库为其所有模型实现的通用方法(例如下载或保存、调整输入嵌入大小、剪枝头等)。
此模型也是 PyTorch torch.nn.Module 子类。 将其用作常规 PyTorch 模块,并参阅 PyTorch 文档,了解与常规用法和行为相关的所有事项。
forward
< source >( pixel_values: typing.Optional[torch.Tensor] = None pixel_attention_mask: typing.Optional[torch.Tensor] = None spatial_shapes: typing.Optional[torch.LongTensor] = None labels: typing.Optional[torch.Tensor] = None output_attentions: typing.Optional[bool] = None output_hidden_states: typing.Optional[bool] = None return_dict: typing.Optional[bool] = None ) → transformers.modeling_outputs.ImageClassifierOutput or tuple(torch.FloatTensor)
参数
- input_ids (
torch.LongTensor
,形状为(batch_size, sequence_length)
) — 词汇表中输入序列 tokens 的索引。 如果您提供填充,默认情况下将被忽略。索引可以使用 AutoTokenizer 获得。 请参阅 PreTrainedTokenizer.encode() 和 PreTrainedTokenizer.call() 了解详情。
- attention_mask (
torch.Tensor
,形状为(batch_size, sequence_length)
,可选) — 用于避免在填充 token 索引上执行注意力的掩码。 掩码值在[0, 1]
中选择:- 1 表示 未被掩蔽 的 tokens,
- 0 表示 被掩蔽 的 tokens。
- position_ids (
torch.LongTensor
,形状为(batch_size, sequence_length)
,可选) — 每个输入序列 tokens 在位置嵌入中的位置索引。 在范围[0, config.max_position_embeddings - 1]
中选择。 - pixel_values (
torch.FloatTensor
,形状为(batch_size, num_channels, height, width)
) — 像素值。 如果您提供填充,默认情况下将被忽略。 像素值可以使用 AutoImageProcessor 获得。 请参阅 CLIPImageProcessor.call() 了解详情。 - return_loss (
bool
,可选) — 是否返回对比损失。 - output_attentions (
bool
,可选) — 是否返回所有注意力层的注意力张量。 有关更多详细信息,请参见返回张量下的attentions
。 - output_hidden_states (
bool
,可选) — 是否返回所有层的隐藏状态。 有关更多详细信息,请参见返回张量下的hidden_states
。 - interpolate_pos_encoding (
bool
,可选,默认为False
) — 是否插值预训练的位置编码。 - return_dict (
bool
,可选) — 是否返回 ModelOutput 而不是普通元组。 - labels (
torch.LongTensor
,形状为(batch_size,)
,可选) — 用于计算图像分类/回归损失的标签。 索引应在[0, ..., config.num_labels - 1]
中。 如果config.num_labels == 1
,则计算回归损失(均方误差损失),如果config.num_labels > 1
,则计算分类损失(交叉熵)。
返回值
transformers.modeling_outputs.ImageClassifierOutput 或 tuple(torch.FloatTensor)
一个 transformers.modeling_outputs.ImageClassifierOutput 或 torch.FloatTensor
元组 (如果传递了 return_dict=False
或当 config.return_dict=False
时),其中包含各种元素,具体取决于配置 (Siglip2Config) 和输入。
-
loss (
torch.FloatTensor
,形状为(1,)
,可选,当提供labels
时返回) — 分类(或回归,如果 config.num_labels==1)损失。 -
logits (
torch.FloatTensor
,形状为(batch_size, config.num_labels)
) — 分类(或回归,如果 config.num_labels==1)得分(在 SoftMax 之前)。 -
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
时返回) —torch.FloatTensor
元组(每层一个),形状为(batch_size, num_heads, patch_size, sequence_length)
。attention softmax 之后的 Attentions 权重,用于计算 self-attention heads 中的加权平均值。
Siglip2ForImageClassification 的 forward 方法,覆盖了 __call__
特殊方法。
尽管 forward 传递的配方需要在该函数中定义,但之后应调用 Module
实例而不是此函数,因为前者负责运行预处理和后处理步骤,而后者会默默地忽略它们。
示例
>>> from transformers import AutoImageProcessor, Siglip2ForImageClassification
>>> import torch
>>> from PIL import Image
>>> import requests
>>> torch.manual_seed(3)
>>> url = "http://images.cocodataset.org/val2017/000000039769.jpg"
>>> image = Image.open(requests.get(url, stream=True).raw)
>>> # note: we are loading a `Siglip2Model` from the hub here,
>>> # so the head will be randomly initialized, hence the predictions will be random if seed is not set above.
>>> image_processor = AutoImageProcessor.from_pretrained("google/siglip2-base-patch16-224")
>>> model = Siglip2ForImageClassification.from_pretrained("google/siglip2-base-patch16-224")
>>> inputs = image_processor(images=image, return_tensors="pt")
>>> outputs = model(**inputs)
>>> logits = outputs.logits
>>> # model predicts one of the two classes
>>> predicted_class_idx = logits.argmax(-1).item()
>>> print("Predicted class:", model.config.id2label[predicted_class_idx])
Predicted class: LABEL_1