CLIP
概述
CLIP模型在Alec Radford、Jong Wook Kim、Chris Hallacy、Aditya Ramesh、Gabriel Goh、Sandhini Agarwal、Girish Sastry、Amanda Askell、Pamela Mishkin、Jack Clark、Gretchen Krueger以及Ilya Sutskever的论文《从自然语言中学习可迁移的视觉模型》中提出,该论文链接为https://arxiv.org/abs/2103.00020。CLIP(对比语言-图像预训练)是一种在多种(图像,文本)对上训练的神经网络。它可以使用自然语言来指示给出一幅图像后预测最相关的文本片段,而不直接针对任务进行优化,类似于GPT-2和3的零样本能力。
该论文的摘要如下
最先进的计算机视觉系统被训练来预测一组固定的预定义物体类别。这种受限形式的监督限制了它们的通用性和可用性,因为需要额外的标记数据来指定任何其他视觉概念。从关于图像的原始文本直接学习是一个有希望的选择,它利用了广泛得多的监督来源。我们证明,预测哪个图像配哪条描述的任务是高效且可扩展的,可以从收集自互联网的4亿个(图像,文本)对的数据集从头开始学习SOTA图像表示。在预训练之后,自然语言用于引用学到的视觉概念(或描述新的概念),使得模型可以零样本迁移到下游任务。我们通过在30多个不同的现有计算机视觉数据集上基准测试来研究这种方法的性能,包括OCR、视频中的动作识别、地理定位以及许多类型的细粒度物体分类。该模型在大多数任务上转移并具有竞争力,通常与完全监督的基线对齐,而无需任何特定数据集的培训。例如,我们在ImageNet零样本上匹配了原始ResNet-50的精确度,而不需要使用其训练中使用的128万个训练示例。我们在此处的https URL发布了我们的代码和预训练模型权重。
使用技巧和示例
CLIP是一个多模态视觉和语言模型。它可以用于图像-文本相似度和零样本图像分类。CLIP使用ViT样式的transformer获得视觉特征,并使用因果语言模型获得文本特征。文本和视觉特征随后被投影到一个具有相同维度的潜在空间。投影图像和文本特征之间的点积被用作相似度评分。
为了向Transformer编码器提供图像,每个图像被分割成一系列固定大小的非重叠补丁,然后进行线性嵌入。添加了一个[CLS]标记作为整个图像的表示。作者还添加了绝对位置嵌入,并将生成的向量序列输入到标准的Transformer编码器。可以使用CLIPImageProcessor对图像进行缩放(或缩放)和归一化,以便用于模型。
使用CLIPTokenizer对文本进行编码。将CLIPImageProcessor和CLIPTokenizer封装到一个实例中,以使用CLIPTokenizer编码文本并准备图像。以下示例展示了如何使用CLIPProcessor和CLIPModel获取图像-文本相似度评分。
>>> from PIL import Image
>>> import requests
>>> from transformers import CLIPProcessor, CLIPModel
>>> model = CLIPModel.from_pretrained("openai/clip-vit-base-patch32")
>>> processor = CLIPProcessor.from_pretrained("openai/clip-vit-base-patch32")
>>> url = "http://images.cocodataset.org/val2017/000000039769.jpg"
>>> image = Image.open(requests.get(url, stream=True).raw)
>>> inputs = processor(text=["a photo of a cat", "a photo of a dog"], images=image, return_tensors="pt", padding=True)
>>> outputs = model(**inputs)
>>> logits_per_image = outputs.logits_per_image # this is the image-text similarity score
>>> probs = logits_per_image.softmax(dim=1) # we can take the softmax to get the label probabilities
结合 CLIP 和 Flash Attention 2
首先,确保安装了 Flash Attention 2 的最新版本。
pip install -U flash-attn --no-build-isolation
请确保您的硬件与 Flash-Attention 2 兼容。有关更多信息,请参阅 flash-attn 仓库的官方文档。还要确保以半精度(例如 torch.float16
)加载您的模型
对于小的批量大小,您可能会在使用 Flash Attention 时注意到模型速度有所下降。请参阅下面的 Flash Attention 和 SDPA 预期加速 部分,并选择一个合适的注意力实现。
要加载并运行使用 Flash Attention 2 的模型,请参阅下面的代码片段
>>> import torch
>>> import requests
>>> from PIL import Image
>>> from transformers import CLIPProcessor, CLIPModel
>>> device = "cuda"
>>> torch_dtype = torch.float16
>>> model = CLIPModel.from_pretrained(
... "openai/clip-vit-base-patch32",
... attn_implementation="flash_attention_2",
... device_map=device,
... torch_dtype=torch_dtype,
... )
>>> processor = CLIPProcessor.from_pretrained("openai/clip-vit-base-patch32")
>>> url = "http://images.cocodataset.org/val2017/000000039769.jpg"
>>> image = Image.open(requests.get(url, stream=True).raw)
>>> inputs = processor(text=["a photo of a cat", "a photo of a dog"], images=image, return_tensors="pt", padding=True)
>>> inputs.to(device)
>>> with torch.no_grad():
... with torch.autocast(device):
... outputs = model(**inputs)
>>> logits_per_image = outputs.logits_per_image # this is the image-text similarity score
>>> probs = logits_per_image.softmax(dim=1) # we can take the softmax to get the label probabilities
>>> print(probs)
tensor([[0.9946, 0.0052]], device='cuda:0', dtype=torch.float16)
使用缩放点积注意力 (SDPA)
PyTorch 将原生的缩放点积注意力(SDPA)操作符作为 torch.nn.functional
的一部分。此函数包含多个实现,具体取决于输入和使用硬件。有关更多信息,请参阅官方文档官方文档或GPU 推理页面。
当可用时,SDPA 默认用于 torch>=2.1.1
,但您也可以在 from_pretrained()
中设置 attn_implementation="sdpa"
以显式请求使用 SDPA。
from transformers import CLIPModel
model = CLIPModel.from_pretrained("openai/clip-vit-base-patch32", torch_dtype=torch.float16, attn_implementation="sdpa")
为了获得最佳的加速效果,我们建议以半精度(例如 torch.float16
或 torch.bfloat16
)加载模型。
Flash Attention 和 SDPA 的预期速度提升
在本地基准测试(NVIDIA A10G,PyTorch 2.3.1+cu121)中,使用 float16
时,我们对 "openai/clip-vit-large-patch14"
检查点(代码)进行了推断速度测试,结果如下:
CLIPTextModel
文本标签数量 | 立即执行(s/iter) | FA2(s/iter) | FA2 速度提升 | SDPA(s/iter) | SDPA 速度提升 |
---|---|---|---|---|---|
4 | 0.009 | 0.012 | 0.737 | 0.007 | 1.269 |
16 | 0.009 | 0.014 | 0.659 | 0.008 | 1.187 |
32 | 0.018 | 0.021 | 0.862 | 0.016 | 1.142 |
64 | 0.034 | 0.034 | 1.001 | 0.03 | 1.163 |
128 | 0.063 | 0.058 | 1.09 | 0.054 | 1.174 |
CLIPVisionModel
图像批次大小 | 立即执行(s/iter) | FA2(s/iter) | FA2 速度提升 | SDPA(s/iter) | SDPA 速度提升 |
---|---|---|---|---|---|
1 | 0.016 | 0.013 | 1.247 | 0.012 | 1.318 |
4 | 0.025 | 0.021 | 1.198 | 0.021 | 1.202 |
16 | 0.093 | 0.075 | 1.234 | 0.075 | 1.24 |
32 | 0.181 | 0.147 | 1.237 | 0.146 | 1.241 |
CLIPModel
图像批次大小 | 文本标签数量 | 立即执行(s/iter) | FA2(s/iter) | FA2 速度提升 | SDPA(s/iter) | SDPA 速度提升 |
---|---|---|---|---|---|---|
1 | 4 | 0.025 | 0.026 | 0.954 | 0.02 | 1.217 |
1 | 16 | 0.026 | 0.028 | 0.918 | 0.02 | 1.287 |
1 | 64 | 0.042 | 0.046 | 0.906 | 0.036 | 1.167 |
4 | 4 | 0.028 | 0.033 | 0.849 | 0.024 | 1.189 |
4 | 16 | 0.034 | 0.035 | 0.955 | 0.029 | 1.169 |
4 | 64 | 0.059 | 0.055 | 1.072 | 0.05 | 1.179 |
16 | 4 | 0.096 | 0.088 | 1.091 | 0.078 | 1.234 |
16 | 16 | 0.102 | 0.09 | 1.129 | 0.083 | 1.224 |
16 | 64 | 0.127 | 0.11 | 1.157 | 0.105 | 1.218 |
32 | 4 | 0.185 | 0.159 | 1.157 | 0.149 | 1.238 |
32 | 16 | 0.19 | 0.162 | 1.177 | 0.154 | 1.233 |
32 | 64 | 0.216 | 0.181 | 1.19 | 0.176 | 1.228 |
资源
官方Hugging Face和社区资源列表(🌎标注),帮助您开始使用CLIP。
- 使用遥感(卫星)图像和标题微调CLIP,一篇关于如何使用RSICD数据集微调CLIP以及由于数据增强引起性能变化的比较。
- 这个示例脚本展示了如何使用COCO数据集和一个预训练的视觉和文本编码器训练类似CLIP的视觉-文本双向编码器模型。
- 一个使用预训练CLIP进行图像标题推断和进行beam search的notebook。🌎
图像检索
- 使用预训练CLIP进行图像检索并计算MRR(平均倒数秩)分数的notebook。🌎
- 一个关于图像检索和显示相似度分数的notebook。🌎
- 使用多语言CLIP将图像和文本映射到相同向量空间的notebook。🌎
- 如何在语义图像搜索中使用Unsplash和TMDB数据集运行CLIP的notebook。🌎
可解释性
- 一个关于如何可视化输入标记与图像段之间相似性的notebook。🌎
如果您想提交资源添加到此处,请随时创建Pull Request,我们将进行审查。理想情况下,该资源应展示新功能,而不是重复现有的资源。
CLIPConfig
class transformers.CLIPConfig
< source >( text_config = None vision_config = None projection_dim = 512 logit_scale_init_value = 2.6592 **kwargs )
参数
- text_config (
dict
, 可选) — 用于初始化 CLIPTextConfig 的配置选项字典。 - vision_config (
dict
, 可选) — 用于初始化 CLIPVisionConfig 的配置选项字典。 - projection_dim (
int
, 可选, 默认为512) — 文本和视觉投影层的维度。 - logit_scale_init_value (
float
, 可选, 默认为2.6592) — logit_scale参数的初始值。默认值根据原始CLIP实现使用。 - kwargs (可选) — 关键字参数字典。
CLIPConfig类是用于存储CLIPModel配置的配置类。它用于根据指定的参数实例化一个CLIP模型,定义文本模型和视觉模型配置。使用默认值实例化配置将产生与openai/clip-vit-base-patch32架构类似的配置。
配置对象继承自PretrainedConfig,可用于控制模型输出。更多详细信息请参阅PretrainedConfig的文档。
示例
>>> from transformers import CLIPConfig, CLIPModel
>>> # Initializing a CLIPConfig with openai/clip-vit-base-patch32 style configuration
>>> configuration = CLIPConfig()
>>> # Initializing a CLIPModel (with random weights) from the openai/clip-vit-base-patch32 style configuration
>>> model = CLIPModel(configuration)
>>> # Accessing the model configuration
>>> configuration = model.config
>>> # We can also initialize a CLIPConfig from a CLIPTextConfig and a CLIPVisionConfig
>>> from transformers import CLIPTextConfig, CLIPVisionConfig
>>> # Initializing a CLIPText and CLIPVision configuration
>>> config_text = CLIPTextConfig()
>>> config_vision = CLIPVisionConfig()
>>> config = CLIPConfig.from_text_vision_configs(config_text, config_vision)
from_text_vision_configs
< 来源 >( text_config: CLIPTextConfig vision_config: CLIPVisionConfig **kwargs ) → CLIPConfig
从clip文本模型配置和clip视觉模型配置实例化一个CLIPConfig(或其派生类)。
CLIPTextConfig
类 transformers.CLIPTextConfig
< 来源 >( vocab_size = 49408 hidden_size = 512 intermediate_size = 2048 projection_dim = 512 num_hidden_layers = 12 num_attention_heads = 8 max_position_embeddings = 77 hidden_act = 'quick_gelu' layer_norm_eps = 1e-05 attention_dropout = 0.0 initializer_range = 0.02 initializer_factor = 1.0 pad_token_id = 1 bos_token_id = 49406 eos_token_id = 49407 **kwargs )
参数
- vocab_size (整数,可选,默认值 49408)— CLIP 文本模型的词汇表大小。定义调用 CLIPModel 时通过
inputs_ids
传递的可以表示的不同标记的数量。 - hidden_size (
int
, 可选,默认为512) — 编码层和池化层的维度。 - intermediate_size (
int
, 可选,默认为2048) — Transformer编码器中“中间”(即前馈)层的维度。 - projection_dim (
int
, 可选,默认为512) — 文本和视觉投影层的维度。 - num_hidden_layers (
int
, 可选,默认为12) — Transformer编码器中的隐藏层数量。 - num_attention_heads (
int
, 可选, 默认为 8) —— Transformer 编码器中每个注意力层的注意力头数量。 - max_position_embeddings (
int
, 可选, 默认为 77) —— 此模型可能应用的最大序列长度。通常设置为较大的值以防万一(例如,512 或 1024 或 2048)。 - hidden_act (
str
或function
, 可选, 默认为"quick_gelu"
) —— 编码器和池器中的非线性激活函数(函数或字符串)。如果字符串,支持"gelu"
、"relu"
、"selu"
和"gelu_new"
、"quick_gelu"
。 - layer_norm_eps (浮点数,可选,默认为 1e-05)— 层归一化层使用的 epsilon。
- attention_dropout (浮点数,可选,默认为 0.0)— 注意力概率的丢弃比率。
- initializer_range (浮点数,可选,默认为 0.02)— 初始化所有权重矩阵的 truncated_normal_initializer 的标准差。
- 初始化因子 (
浮点数
, 可选, 默认为1.0) — 用于初始化所有权重矩阵的因子(应保持为1,用于内部初始化测试)。 - 垫片令牌ID (
整数
, 可选, 默认为1) — 垫片令牌ID。 - 序列开始令牌ID (
整数
, 可选, 默认为49406) — 流的开始令牌ID。 - 序列结束令牌ID (
整数
, 可选, 默认为49407) — 流的结束令牌ID。
这是一个用于存储 CLIPTextModel 配置的配置类。它根据指定的参数实例化一个 CLIP 文本编码器,定义模型架构。使用默认参数实例化配置将产生与 CLIP openai/clip-vit-base-patch32 架构的文本编码器类似配置。
配置对象继承自PretrainedConfig,可用于控制模型输出。更多详细信息请参阅PretrainedConfig的文档。
示例
>>> from transformers import CLIPTextConfig, CLIPTextModel
>>> # Initializing a CLIPTextConfig with openai/clip-vit-base-patch32 style configuration
>>> configuration = CLIPTextConfig()
>>> # Initializing a CLIPTextModel (with random weights) from the openai/clip-vit-base-patch32 style configuration
>>> model = CLIPTextModel(configuration)
>>> # Accessing the model configuration
>>> configuration = model.config
CLIPVisionConfig
class transformers.CLIPVisionConfig
< source >( hidden_size = 768 intermediate_size = 3072 projection_dim = 512 num_hidden_layers = 12 num_attention_heads = 12 num_channels = 3 image_size = 224 patch_size = 32 hidden_act = 'quick_gelu' layer_norm_eps = 1e-05 attention_dropout = 0.0 initializer_range = 0.02 initializer_factor = 1.0 **kwargs )
参数
- hidden_size (
int
,可选,默认为768)— 编码层和池化层的维度。 - intermediate_size (
int
,可选,默认为3072)— 变换编码器中“中间”层(即前馈层)的维度。 - projection_dim (
int
, 可选, 默认为 512) — 文本和视觉投影层的维度。 - num_hidden_layers (
int
, 可选, 默认为 12) — Transformer 编码器中的隐藏层数量。 - num_attention_heads (
int
, 可选, 默认为 12) — Transformer 编码器中每个注意力层的注意力头数量。 - num_channels (
int
, 可选, 默认为 3) — 输入通道的数量。 - image_size (
int
, 可选, 默认为224) — 每个图像的大小(分辨率)。 - patch_size (
int
, 可选, 默认为32) — 每个补丁的大小(分辨率)。 - hidden_act (
str
或function
, 可选, 默认为"quick_gelu"
) — 编码器和解码器中的非线性激活函数(函数或字符串)。如果是字符串,支持"gelu"
、"relu"
、"selu"
和"gelu_new"
、"quick_gelu"
。 - layer_norm_eps (
float
, 可选, 默认为 1e-05) — 层归一化层使用的 epsilon值。 - attention_dropout (
float
, 可选,默认为 0.0) — 注意力概率丢弃率。 - initializer_range (
float
, 可选,默认为 0.02) — 初始化所有权重矩阵的截断正态初始化器的标准差。 - initializer_factor (
float
, 可选,默认为 1.0) — 初始化所有权重矩阵的系数(应保持为 1,用于内部初始化测试)。
这是一个存储CLIPVisionModel
配置的配置类。它用于根据指定的参数实例化一个 CLIP 视觉编码器,定义模型架构。使用默认值实例化配置将产生与 CLIP 的openai/clip-vit-base-patch32架构类似的配置。
配置对象继承自PretrainedConfig,可用于控制模型输出。更多详细信息请参阅PretrainedConfig的文档。
示例
>>> from transformers import CLIPVisionConfig, CLIPVisionModel
>>> # Initializing a CLIPVisionConfig with openai/clip-vit-base-patch32 style configuration
>>> configuration = CLIPVisionConfig()
>>> # Initializing a CLIPVisionModel (with random weights) from the openai/clip-vit-base-patch32 style configuration
>>> model = CLIPVisionModel(configuration)
>>> # Accessing the model configuration
>>> configuration = model.config
CLIPTokenizer
类 transformers.CLIPTokenizer
< source >( vocab_file merges_file errors = 'replace' unk_token = '<|endoftext|>' bos_token = '<|startoftext|>' eos_token = '<|endoftext|>' pad_token = '<|endoftext|>' **kwargs )
参数
- vocab_file (
str
) — 词汇文件路径。 - merges_file (
str
) — 合并文件的路径。 - errors (
str
, 可选, 默认为"replace"
) — 在解码字节到UTF-8时的范式。更多信息请参见bytes.decode。 - unk_token (
str
, 可选, 默认为"<|endoftext|>"
) — 未知令牌。不在词汇表中的令牌不能转换为ID,而是设置为此令牌。 - bos_token (
str
, 可选, 默认为"<|startoftext|>"
) — 序列开始令牌。 - eos_token (
str
, 可选, 默认为"<|endoftext|>"
) — 序列结束标记。 - pad_token (
str
, 可选, 默认为"<|endoftext|>"
) — 用作填充的标记,例如在批处理不同长度的序列时。
构建 CLIP 分词器。基于字级字节对编码。
此分词器继承自 PreTrainedTokenizer,其中包含大部分主要方法。用户应参照这个超类以获取关于这些方法更详细的信息。
build_inputs_with_special_tokens
< source >( token_ids_0: List token_ids_1: Optional = None ) → List[int]
通过连接并添加特殊标记,从序列或序列对构建适用于序列分类任务的模型输入。CLIP序列具有以下格式
- 单个序列:
<|startoftext|> X <|endoftext|>
序列对不是预期的使用案例,但将无分隔符处理它们。
获取特殊标记掩码
< 源 >( token_ids_0: 列表 token_ids_1: 可选 = None already_has_special_tokens: 布尔 = False ) → 列表[int]
检索未添加特殊token的token列表中的序列ID。当使用tokenizer的prepare_for_model
方法添加特殊token时,该方法会被调用。
从序列创建token类型ID
< 来源 >( token_ids_0: List token_ids_1: Optional = None ) → List[int]
基于传入的两个序列创建掩码。CLIP不使用标记类型ID,因此返回为零的列表。
CLIPTokenizerFast
类 transformers.CLIPTokenizerFast
< 源代码 >( vocab_file = None merges_file = None tokenizer_file = None unk_token = '<|endoftext|>' bos_token = '<|startoftext|>' eos_token = '<|endoftext|>' pad_token = '<|endoftext|>' **kwargs )
参数
- vocab_file (
str
, 可选) — 词汇文件路径。 - merges_file (
str
, 可选) — 合并文件路径。 - tokenizer_file (
str
, 可选) — 使用该文件路径代替词汇表文件。 - unk_token (
str
, 可选, 默认为"<|endoftext|>"
) — 未知标记。不在词汇表中的标记无法转换为ID,并将设置为此标记。 - bos_token (
str
, 可选, 默认为"<|startoftext|>"
) — 序列起始标记。 - eos_token (
str
, 可选, 默认为"<|endoftext|>"
) — 序列结束标记。 - pad_token (
str
, 可选, 默认值为"<|endoftext|>"
) — 用于填充的标记,例如在批量处理不同长度的序列时。
构建一个“快速”的CLIP分词器(基于HuggingFace的tokenizers库)。基于字节级别的字面编码。
此分词器继承自PreTrainedTokenizerFast,其中包含大多数主要方法。用户应参考这个超类以了解更多关于这些方法的信息。
build_inputs_with_special_tokens
< source >( token_ids_0: List token_ids_1: Optional = None ) → List[int]
通过连接并添加特殊标记,从序列或序列对构建适用于序列分类任务的模型输入。CLIP序列具有以下格式
- 单个序列:
<|startoftext|> X <|endoftext|>
序列对不是预期的使用案例,但将无分隔符处理它们。
从序列创建token类型ID
< 源 >( token_ids_0: List token_ids_1: Optional = None ) → List[int]
基于传入的两个序列创建掩码。CLIP不使用标记类型ID,因此返回为零的列表。
CLIPImageProcessor
构建一个 CLIP 图像处理器。
preprocess
< 源代码 > ( images: 联合 do_resize: 布尔 = None size: 字典 = None resample: 重采样 = None do_center_crop: 布尔 = None crop_size: 整数 = None do_rescale: 布尔 = None rescale_factor: 浮点数 = None do_normalize: 布尔 = None image_mean: 联合 image_std: 联合 do_convert_rgb: 布尔 = None return_tensors: 联合 data_format: 可选 = <ChannelDimension.FIRST: 'channels_first'> input_data_format: 联合 **kwargs )
参数
- images (
ImageInput
) — 预处理的图像。期望单个或多张像素值介于0到255之间的图像。如果传入像素值介于0到1之间的图像,请设置do_rescale=False
。 - do_resize (
bool
, 可选,默认为self.do_resize
.) — 是否调整图像大小。 - size (
Dict[str, int]
, 可选,默认为self.size
) — 调整大小后图像的尺寸。图像最短边调整为size[“shortest_edge”],最长边调整以保持输入的宽高比。 - resample (
int
,可选,默认为self.resample
) — 如果调整图像大小时使用的重采样滤波器。这可以是PILImageResampling
枚举中的一个。只有当do_resize
设置为True
时才有效。 - do_center_crop (
bool
,可选,默认为self.do_center_crop
) — 是否进行居中裁剪。 - crop_size (
Dict[str, int]
,可选,默认为self.crop_size
) — 居中裁剪的大小。只有当do_center_crop
设置为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
或float列表
, 可选, 默认为self.image_mean
)——用于归一化的图像均值。只有当do_normalize
设置为True
时才有效。 - image_std (
float
或float列表
, 可选, 默认为self.image_std
)——用于归一化的图像标准差。只有当do_normalize
设置为True
时才有效。 - do_convert_rgb (
bool
, 可选,默认为self.do_convert_rgb
) — 是否将图像转换为 RGB。 - return_tensors (
str
或TensorType
,可选) — 返回张量的类型。可以是以下之一:- 未设置:返回一个
np.ndarray
列表。 TensorType.TENSORFLOW
或'tf'
:返回类型为tf.Tensor
的批处理。TensorType.PYTORCH
或'pt'
:返回类型为torch.Tensor
的批处理。TensorType.NUMPY
或'np'
:返回类型为np.ndarray
的批处理。TensorType.JAX
或'jax'
:返回类型为jax.numpy.ndarray
的批处理。
- 未设置:返回一个
- data_format (
ChannelDimension
或str
,可选,默认为ChannelDimension.FIRST
) — 输出图像的通道维度格式。可以是以下之一:"channels_first"
或ChannelDimension.FIRST
:图像格式为 (num_channels, height, width)。"channels_last"
或ChannelDimension.LAST
:图像格式为 (height, width, num_channels)。- 未设置:使用输入图像的通道维度格式。
- input_data_format (
ChannelDimension
或str
, 可选) — 输入图像的通道维度格式。如果未设置,通道维度格式将根据输入图像推断。可以是以下之一:"channels_first"
或ChannelDimension.FIRST
:图像格式为 (num_channels, height, width)。"channels_last"
或ChannelDimension.LAST
:图像格式为 (height, width, num_channels)。"none"
或ChannelDimension.NONE
:图像格式为 (height, width)。
预处理图像或图像批次。
CLIPFeatureExtractor
CLIPProcessor
类 transformers.CLIPProcessor
< 来源 >( image_processor = None tokenizer = None **kwargs )
参数
- image_processor (CLIPImageProcessor, 可选) — 图像处理器是必需输入。
- tokenizer (CLIPTokenizerFast, 可选) — 分词器是必需的输入。
构建了一个包装CLIP图像处理器和CLIP分词器的CLIP处理器。
CLIPProcessor提供了CLIPImageProcessor和CLIPTokenizerFast的所有功能。请参阅__call__()
和decode()获取更多信息。
该方法将所有参数传递给CLIPTokenizerFast的batch_decode()。请参阅该方法的文档字符串获取更多信息。
该方法将所有参数传递给CLIPTokenizerFast的decode()。请参阅该方法的文档字符串获取更多信息。
CLIPModel
类 transformers.CLIPModel
< 源代码 >( config: CLIPConfig )
参数
- config (CLIPConfig) — 包含模型所有参数的模型配置类。使用配置文件初始化不会加载模型相关联的权重,只会加载配置。查看from_pretrained()方法来加载模型权重。
此模型继承自PreTrainedModel。检查超类文档,了解库为所有模型实现的通用方法(例如下载或保存、调整输入嵌入大小、剪枝头部等)。
此模型也是PyTorchtorch.nn.Module的子类。将其作为常规PyTorch模块使用,并参考PyTorch文档了解所有与一般用途和行为相关的内容。
前向操作
< 来源 > ( input_ids: 可选 = None pixel_values: 可选 = None attention_mask: 可选 = None position_ids: 可选 = None return_loss: 可选 = None output_attentions: 可选 = None output_hidden_states: 可选 = None return_dict: 可选 = None ) → transformers.models.clip.modeling_clip.CLIPOutput
或 tuple(torch.FloatTensor)
参数
- input_ids (
torch.LongTensor
形状(batch_size, sequence_length)
) — 在词汇表中的输入序列标记的索引。如果提供填充,则默认忽略填充。 可以通过 AutoTokenizer 获取索引。有关详细信息,请参阅 PreTrainedTokenizer.encode() 和 PreTrainedTokenizer.call()。 输入ID是什么? - attention_mask (形状为
(batch_size, sequence_length)
的torch.Tensor
,可选)— 用于避免在填充标记索引上执行注意力的掩码。掩码值在[0, 1]
范围内选出:- 1 对于 非掩码 标记,
- 0 对于 掩码 标记。
- position_ids (形状为
(batch_size, sequence_length)
的torch.LongTensor
,可选)— 每个输入序列标记在位置嵌入中的位置索引。在[0, config.max_position_embeddings - 1]
范围内选择。 - pixel_values (形状为
(batch_size, num_channels, height, width)
的torch.FloatTensor
)— 像素值。默认情况下,如果提供它,会忽略填充。可以使用 AutoImageProcessor 获取像素值。有关详细信息,请参阅 CLIPImageProcessor.call()。 - return_loss (
bool
, 可选) — 是否返回对比损失。 - output_attentions (
bool
, 可选) — 是否返回所有注意力层张量的注意力。更多信息请见返回张量中的attentions
。 - output_hidden_states (
bool
, 可选) — 是否返回所有层的隐藏状态。更多信息请见返回张量中的hidden_states
。 - return_dict (
bool
, 可选) — 是否返回 ModelOutput 而不是普通的元组。
返回值
transformers.models.clip.modeling_clip.CLIPOutput
或 tuple(torch.FloatTensor)
一个 transformers.models.clip.modeling_clip.CLIPOutput
或者一个由 torch.FloatTensor
组成的元组(如果传递了 return_dict=False
或当 config.return_dict=False
时),根据配置(<class 'transformers.models.clip.configuration_clip.CLIPConfig'>
)和输入包含不同的元素。
- loss(形状为
(1,)
的torch.FloatTensor
,可选,当return_loss
为True
时返回)—— 图像-文本相似性的对比损失。 - logits_per_image:(形状为
(image_batch_size, text_batch_size)
的torch.FloatTensor
)—— 介于image_embeds
和text_embeds
之间的缩放点积分数。这代表了图像-文本相似度分数。 - logits_per_text:(形状为
(text_batch_size, image_batch_size)
的torch.FloatTensor
)—— 介于text_embeds
和image_embeds
之间的缩放点积分数。这代表了文本-图像相似度分数。 - text_embeds(形状为
(batch_size, output_dim
)的torch.FloatTensor
)—— 通过将 CLIPTextModel 的池化输出应用投影层得到的文本嵌入。 - image_embeds(形状为
(batch_size, output_dim
)的torch.FloatTensor
)—— 通过将 CLIPVisionModel 的池化输出应用投影层得到的图像嵌入。 - text_model_output
(BaseModelOutputWithPooling)
: CLIPTextModel 的输出。 - vision_model_output
(BaseModelOutputWithPooling)
: CLIPVisionModel 的输出。
CLIPModel 的前向方法覆盖了特殊方法 __call__
。
尽管前向传递的配方需要在函数中定义,但是在调用 Module
实例之后而不是这个之前,应该调用它,因为前者负责运行预处理和后处理步骤,而后者会静默忽略它们。
示例
>>> from PIL import Image
>>> import requests
>>> from transformers import AutoProcessor, CLIPModel
>>> model = CLIPModel.from_pretrained("openai/clip-vit-base-patch32")
>>> processor = AutoProcessor.from_pretrained("openai/clip-vit-base-patch32")
>>> url = "http://images.cocodataset.org/val2017/000000039769.jpg"
>>> image = Image.open(requests.get(url, stream=True).raw)
>>> inputs = processor(
... text=["a photo of a cat", "a photo of a dog"], images=image, return_tensors="pt", padding=True
... )
>>> outputs = model(**inputs)
>>> logits_per_image = outputs.logits_per_image # this is the image-text similarity score
>>> probs = logits_per_image.softmax(dim=1) # we can take the softmax to get the label probabilities
get_text_features
< source > ( input_ids: 可选 = None attention_mask: 可选 = None position_ids: 可选 = None output_attentions: 可选 = None output_hidden_states: 可选 = None return_dict: 可选 = None ) → text_features (torch.FloatTensor
of shape (batch_size, output_dim)
)
参数
- input_ids (
torch.LongTensor
of shape(batch_size, sequence_length)
) — 输入序列标记的索引。如果在词汇表中提供,则默认忽略填充。可以通过AutoTokenizer获得索引。有关详细信息,请参阅PreTrainedTokenizer.encode()和PreTrainedTokenizer.call()。
- attention_mask (
torch.Tensor
of shape(batch_size, sequence_length)
, 可选) — 避免在填充标记索引上执行注意力掩码。掩码值选择在[0, 1]
:- 1 表示未被掩码的标记,
- 0 表示被掩码的标记。
- position_ids (
torch.LongTensor
of shape(batch_size, sequence_length)
, 可选) — 每个输入序列 token 在位置嵌入中的位置索引。选择范围为[0, config.max_position_embeddings - 1]
。 - output_attentions (
bool
, 可选) — 是否返回所有注意力层的张量。有关更多详细信息,请参阅返回的张量下的attentions
。 - output_hidden_states (
bool
, 可选) — 是否返回所有层的隐藏状态。有关更多详细信息,请参阅返回的张量下的hidden_states
。 - return_dict (
bool
, optional) — 是否返回ModelOutput对象而不是普通元组。
返回值
text_features (torch.FloatTensor
of shape (batch_size, output_dim
)
通过将投影层应用于CLIPTextModel的池化输出而得到的文本嵌入。
CLIPModel 的前向方法覆盖了特殊方法 __call__
。
尽管前向传递的配方需要在函数中定义,但是在调用 Module
实例之后而不是这个之前,应该调用它,因为前者负责运行预处理和后处理步骤,而后者会静默忽略它们。
示例
>>> from transformers import AutoTokenizer, CLIPModel
>>> model = CLIPModel.from_pretrained("openai/clip-vit-base-patch32")
>>> tokenizer = AutoTokenizer.from_pretrained("openai/clip-vit-base-patch32")
>>> inputs = tokenizer(["a photo of a cat", "a photo of a dog"], padding=True, return_tensors="pt")
>>> text_features = model.get_text_features(**inputs)
get_image_features
< source > ( pixel_values: Optional = None output_attentions: Optional = None output_hidden_states: Optional = None return_dict: Optional = None ) → image_features (torch.FloatTensor
of shape (batch_size, output_dim
)
参数
- pixel_values (
torch.FloatTensor
型状的(batch_size, num_channels, height, width)
) — 像素值。如果你提供填充值,则默认忽略填充。可以使用 AutoImageProcessor 获取像素值。有关详细信息,请参阅 CLIPImageProcessor.call()。 - output_attentions (
bool
,可选) — 是否返回所有注意力层的注意力张量。有关更多详细信息,请参阅返回张量的attentions
。 - output_hidden_states (
bool
,可选) — 是否返回所有层的隐藏状态。有关返回张量的hidden_states
的详细信息,请参阅。 - return_dict (
bool
, optional) — 是否返回一个 ModelOutput 而不是普通元组。
返回值
image_features (torch.FloatTensor
of shape (batch_size, output_dim
)
通过将投影层应用于 CLIPVisionModel 的输出池化得到的图像嵌入。
CLIPModel 的前向方法覆盖了特殊方法 __call__
。
尽管前向传递的配方需要在函数中定义,但是在调用 Module
实例之后而不是这个之前,应该调用它,因为前者负责运行预处理和后处理步骤,而后者会静默忽略它们。
示例
>>> from PIL import Image
>>> import requests
>>> from transformers import AutoProcessor, CLIPModel
>>> model = CLIPModel.from_pretrained("openai/clip-vit-base-patch32")
>>> processor = AutoProcessor.from_pretrained("openai/clip-vit-base-patch32")
>>> url = "http://images.cocodataset.org/val2017/000000039769.jpg"
>>> image = Image.open(requests.get(url, stream=True).raw)
>>> inputs = processor(images=image, return_tensors="pt")
>>> image_features = model.get_image_features(**inputs)
CLIPTextModel
类 transformers.CLIPTextModel
< 源代码 >( config: CLIPTextConfig )
参数
- config (CLIPConfig) — 包含模型所有参数的模型配置类。使用配置文件初始化不加载模型相关的权重,只有配置。查看from_pretrained()方法以加载模型权重。
没有顶部任何头或投影的CLIP文本模型。此模型继承自PreTrainedModel。检查超类文档,了解库为其所有模型实现的通用方法(如下载或保存、调整输入嵌入、剪枝头部等)
此模型也是PyTorchtorch.nn.Module的子类。将其作为常规PyTorch模块使用,并参考PyTorch文档了解所有与一般用途和行为相关的内容。
前向操作
< source > ( input_ids: Optional = None attention_mask: Optional = None position_ids: Optional = None output_attentions: Optional = None output_hidden_states: Optional = None return_dict: Optional = None ) → transformers.modeling_outputs.BaseModelOutputWithPooling or tuple(torch.FloatTensor)
参数
- input_ids (
torch.LongTensor
of shape(batch_size, sequence_length)
) — 词汇表中的输入序列标记索引。如果提供了填充,将默认忽略填充。 - attention_mask (
torch.Tensor
of shape(batch_size, sequence_length)
, optional) — 用于避免在填充标记索引上执行注意力的掩码。掩码值选在[0, 1]
范围内: - position_ids (
torch.LongTensor
of shape(batch_size, sequence_length)
, optional) — 每个输入序列标记的位置嵌入中的索引。在[0, config.max_position_embeddings - 1]
范围内选择。
返回值
transformers.modeling_outputs.BaseModelOutputWithPooling或tuple(torch.FloatTensor)
一个transformers.modeling_outputs.BaseModelOutputWithPooling或者一个包含各种元素的元组,这些元素取决于配置(<class 'transformers.models.clip.configuration_clip.CLIPTextConfig'>
)和输入,如果传递了return_dict=False
或者在config.return_dict=False
的情况下(如果return_dict=False
)。
-
last_hidden_state (形状为
(batch_size, sequence_length, hidden_size)
的torch.FloatTensor)— 模型最后一层的隐藏状态序列。 -
pooler_output (形状为
(batch_size, hidden_size)
的torch.FloatTensor
)—— 经过辅助预训练任务的层进一步处理后,序列(分类标记)的第一个标记的最后层隐藏状态。例如,对于 BERT 家族模型,这返回经过线性层和 tanh 激活函数处理过的分类标记。该线性层的权重是在预训练期间的下一个句子预测(分类)目标中训练的。 -
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, sequence_length, sequence_length)
。通过注意力 softmax 后的注意力权重,用于计算自注意力头中的加权平均。
CLIPTextModel 向前方法覆盖了 __call__
特殊方法。
尽管前向传递的配方需要在函数中定义,但是在调用 Module
实例之后而不是这个之前,应该调用它,因为前者负责运行预处理和后处理步骤,而后者会静默忽略它们。
示例
>>> from transformers import AutoTokenizer, CLIPTextModel
>>> model = CLIPTextModel.from_pretrained("openai/clip-vit-base-patch32")
>>> tokenizer = AutoTokenizer.from_pretrained("openai/clip-vit-base-patch32")
>>> inputs = tokenizer(["a photo of a cat", "a photo of a dog"], padding=True, return_tensors="pt")
>>> outputs = model(**inputs)
>>> last_hidden_state = outputs.last_hidden_state
>>> pooled_output = outputs.pooler_output # pooled (EOS token) states
CLIPTextModelWithProjection
class transformers.CLIPTextModelWithProjection
< source >( config: CLIPTextConfig )
参数
- config (CLIPConfig) — 模型配置类,包含所有模型参数。使用配置文件初始化不会加载与模型相关的权重,只有配置。查看 from_pretrained() 方法来加载模型权重。
具有投影层的CLIP文本模型(池化输出之上的线性层)。
此模型继承自PreTrainedModel。检查超类文档,了解库为所有模型实现的通用方法(例如下载或保存、调整输入嵌入大小、剪枝头部等)。
此模型也是PyTorchtorch.nn.Module的子类。将其作为常规PyTorch模块使用,并参考PyTorch文档了解所有与一般用途和行为相关的内容。
前向操作
< 来源 > ( input_ids: 可选 = None attention_mask: 可选 = None position_ids: 可选 = None output_attentions: 可选 = None output_hidden_states: 可选 = None return_dict: 可选 = None ) → transformers.models.clip.modeling_clip.CLIPTextModelOutput
or tuple(torch.FloatTensor)
参数
- input_ids (
torch.LongTensor
的形状为(batch_size, sequence_length)
) — 输入序列的词汇索引。如果提供了填充,默认将忽略填充部分。可以使用 AutoTokenizer 获取索引。有关详细信息,请参阅 PreTrainedTokenizer.encode() 和 PreTrainedTokenizer.call()。
- attention_mask (
torch.Tensor
的形状为(batch_size, sequence_length)
,可选) — 避免在填充标记索引上进行注意力的掩码。掩码值选择在[0, 1]
范围内:- 1 表示 未掩码 的标记
- 0 表示 已掩码 的标记
- position_ids (
torch.LongTensor
的形状为(batch_size, sequence_length)
,可选) — 每个输入序列标记在位置嵌入中的位置索引。选择范围在[0, config.max_position_embeddings - 1]
内。 - output_attentions (
bool
, 可选) — 是否返回所有注意力的张量。请参阅返回张量下方的attentions
获取更多详情。 - output_hidden_states (
bool
, 可选) — 是否返回所有层的隐藏状态。请参阅返回张量下方的hidden_states
获取更多详情。 - return_dict (
bool
, 可选) — 是否返回ModelOutput 而不是普通的元组。
返回值
transformers.models.clip.modeling_clip.CLIPTextModelOutput
或 tuple(torch.FloatTensor)
transformers.models.clip.modeling_clip.CLIPTextModelOutput
或一个由 torch.FloatTensor
组成的元组(如果传递了 return_dict=False
或当 config.return_dict=False
),包含根据配置(<class 'transformers.models.clip.configuration_clip.CLIPTextConfig'>
)和输入的各个元素。
-
text_embeds (当使用
with_projection=True
初始化模型时返回,形状为(batch_size, output_dim)
的torch.FloatTensor
,可选) — 将经过投影层处理后的 pooler_output 获取到的文本嵌入。 -
last_hidden_state (形状为
(batch_size, sequence_length, hidden_size)
的torch.FloatTensor)— 模型最后一层的隐藏状态序列。 -
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, sequence_length, sequence_length)
。通过注意力 softmax 后的注意力权重,用于计算自注意力头中的加权平均。
CLIPTextModelWithProjection 的 forward 方法覆盖了 __call__
特殊方法。
尽管前向传递的配方需要在函数中定义,但是在调用 Module
实例之后而不是这个之前,应该调用它,因为前者负责运行预处理和后处理步骤,而后者会静默忽略它们。
示例
>>> from transformers import AutoTokenizer, CLIPTextModelWithProjection
>>> model = CLIPTextModelWithProjection.from_pretrained("openai/clip-vit-base-patch32")
>>> tokenizer = AutoTokenizer.from_pretrained("openai/clip-vit-base-patch32")
>>> inputs = tokenizer(["a photo of a cat", "a photo of a dog"], padding=True, return_tensors="pt")
>>> outputs = model(**inputs)
>>> text_embeds = outputs.text_embeds
CLIPVisionModelWithProjection
类 transformers.CLIPVisionModelWithProjection
< source >( config: CLIPVisionConfig )
参数
- config (CLIPConfig) — 模型配置类,包含所有模型参数。使用配置文件初始化不加载模型相关的权重,只加载配置。查看 from_pretrained() 方法来加载模型权重。
带有投影层(在池化输出之上的一层线性层)的 CLIP 视觉模型。
此模型继承自PreTrainedModel。检查超类文档,了解库为所有模型实现的通用方法(例如下载或保存、调整输入嵌入大小、剪枝头部等)。
此模型也是PyTorchtorch.nn.Module的子类。将其作为常规PyTorch模块使用,并参考PyTorch文档了解所有与一般用途和行为相关的内容。
前向操作
< source > ( pixel_values: Optional = None output_attentions: Optional = None output_hidden_states: Optional = None return_dict: Optional = None ) → transformers.models.clip.modeling_clip.CLIPVisionModelOutput
or tuple(torch.FloatTensor)
参数
- pixel_values (
torch.FloatTensor
of shape(batch_size, num_channels, height, width)
) — 像素值。若提供,则默认忽略填充。可以使用 AutoImageProcessor 获取像素值。有关详细信息,请参阅 CLIPImageProcessor.call()。 - output_attentions (
bool
, 可选) — 是否返回所有注意力的张量。关于返回张量中的更多信息,请参阅attentions
。 - output_hidden_states (
bool
, 可选) — 是否返回所有层的隐藏状态。有关返回张量中的更多详细信息,请参阅hidden_states
。 - return_dict (
bool
, 可选) — 是否以 ModelOutput 的形式返回,而不是普通元组。
返回值
transformers.models.clip.modeling_clip.CLIPVisionModelOutput
或 tuple(torch.FloatTensor)
transformers.models.clip.modeling_clip.CLIPVisionModelOutput
或 torch.FloatTensor
元组(如果 return_dict=False
被传递或当 config.return_dict=False
时),包含根据配置(<class 'transformers.models.clip.configuration_clip.CLIPVisionConfig'>
)和输入的不同元素。
-
image_embeds (当模型初始化时带有
with_projection=True
返回的torch.FloatTensor
,形状为(batch_size, output_dim)
可选) — 通过对 pooler_output 应用投影层获得图像嵌入。 -
last_hidden_state (形状为
(batch_size, sequence_length, hidden_size)
的torch.FloatTensor)— 模型最后一层的隐藏状态序列。 -
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, sequence_length, sequence_length)
。通过注意力 softmax 后的注意力权重,用于计算自注意力头中的加权平均。
CLIPVisionModelWithProjection 的 forward 方法覆盖了 __call__
特殊方法。
尽管前向传递的配方需要在函数中定义,但是在调用 Module
实例之后而不是这个之前,应该调用它,因为前者负责运行预处理和后处理步骤,而后者会静默忽略它们。
示例
>>> from PIL import Image
>>> import requests
>>> from transformers import AutoProcessor, CLIPVisionModelWithProjection
>>> model = CLIPVisionModelWithProjection.from_pretrained("openai/clip-vit-base-patch32")
>>> processor = AutoProcessor.from_pretrained("openai/clip-vit-base-patch32")
>>> 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)
>>> image_embeds = outputs.image_embeds
CLIPVisionModel
类 transformers.CLIPVisionModel
< source >( config: CLIPVisionConfig )
参数
- config (CLIPConfig) — 包含模型所有参数的模型配置类。使用配置文件初始化不会加载与模型关联的权重,只加载配置。查看 from_pretrained() 方法来加载模型权重。
不带任何头部或投影的CLIP视觉模型。此模型继承自 PreTrainedModel。查看超类文档,了解库为所有模型实现的通用方法(如下载或保存、调整输入嵌入大小、剪枝头部等)
此模型也是PyTorchtorch.nn.Module的子类。将其作为常规PyTorch模块使用,并参考PyTorch文档了解所有与一般用途和行为相关的内容。
前向操作
< 来源 > ( pixel_values: 可选 = None output_attentions: 可选 = None output_hidden_states: 可选 = None return_dict: 可选 = None ) → transformers.modeling_outputs.BaseModelOutputWithPooling 或 tuple(torch.FloatTensor)
参数
- pixel_values (
torch.FloatTensor
of shape(batch_size, num_channels, height, width)
) — 像素值。如果您提供它,默认会忽略填充。可以通过使用 AutoImageProcessor 获取像素值。有关详细信息,请参阅 CLIPImageProcessor.call()。 - output_attentions (
bool
, 可选) — 是否返回所有注意力层的注意力张量。详细信息见返回张量下的attentions
。 - output_hidden_states (
bool
, 可选) — 是否返回所有层的隐藏状态。详细信息见返回张量下的hidden_states
。 - return_dict (
bool
, 可选) — 是否返回一个 ModelOutput 而不是普通的元组。
返回值
transformers.modeling_outputs.BaseModelOutputWithPooling或tuple(torch.FloatTensor)
一个 transformers.modeling_outputs.BaseModelOutputWithPooling 或一个包含根据配置(<class 'transformers.models.clip.configuration_clip.CLIPVisionConfig'>
)和输入决定的各种元素的 torch.FloatTensor
元组(如果传递了 return_dict=False
或当 config.return_dict=False
时)。
-
last_hidden_state (形状为
(batch_size, sequence_length, hidden_size)
的torch.FloatTensor)— 模型最后一层的隐藏状态序列。 -
pooler_output (形状为
(batch_size, hidden_size)
的torch.FloatTensor
)—— 经过辅助预训练任务的层进一步处理后,序列(分类标记)的第一个标记的最后层隐藏状态。例如,对于 BERT 家族模型,这返回经过线性层和 tanh 激活函数处理过的分类标记。该线性层的权重是在预训练期间的下一个句子预测(分类)目标中训练的。 -
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, sequence_length, sequence_length)
。通过注意力 softmax 后的注意力权重,用于计算自注意力头中的加权平均。
CLIPVisionModel 的前向方法,覆盖了特殊方法 __call__
。
尽管前向传递的配方需要在函数中定义,但是在调用 Module
实例之后而不是这个之前,应该调用它,因为前者负责运行预处理和后处理步骤,而后者会静默忽略它们。
示例
>>> from PIL import Image
>>> import requests
>>> from transformers import AutoProcessor, CLIPVisionModel
>>> model = CLIPVisionModel.from_pretrained("openai/clip-vit-base-patch32")
>>> processor = AutoProcessor.from_pretrained("openai/clip-vit-base-patch32")
>>> 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 CLS states
CLIPForImageClassification
类 transformers.CLIPForImageClassification
< 源代码 >( config: CLIPConfig )
参数
- config (CLIPConfig) — 包含模型所有参数的模型配置类。使用配置文件初始化时,不会加载与该模型关联的权重,只有配置。查看 from_pretrained() 方法来加载模型权重。
在顶部具有图像分类头(位于补丁标记池化最终隐藏状态的线性层)的 CLIP 视觉编码器,例如用于 ImageNet。
此模型继承自PreTrainedModel。检查超类文档,了解库为所有模型实现的通用方法(例如下载或保存、调整输入嵌入大小、剪枝头部等)。
此模型也是PyTorchtorch.nn.Module的子类。将其作为常规PyTorch模块使用,并参考PyTorch文档了解所有与一般用途和行为相关的内容。
前向操作
< 来源 > ( pixel_values: 可选 = None labels: 可选 = None output_attentions: 可选 = None output_hidden_states: 可选 = None return_dict: 可选 = None ) → transformers.modeling_outputs.ImageClassifierOutput 或 tuple(torch.FloatTensor)
参数
- input_ids (
torch.LongTensor
of shape(batch_size, sequence_length)
) — 输入序列标记的索引,如果提供padding,则会默认忽略。可以使用 AutoTokenizer 获取索引。有关详细信息,请参见 PreTrainedTokenizer.encode() 和 PreTrainedTokenizer.call()。
- attention_mask (
torch.Tensor
形状为(batch_size, sequence_length)
,可选) — 避免在填充标记索引上执行注意力的掩码。掩码值选择在[0, 1]
范围内:- 1 表示 未掩码 的标记,
- 0 表示 掩码 的标记。
- position_ids (
torch.LongTensor
形状为(batch_size, sequence_length)
,可选) — 输入序列中每个标记位置的索引。在[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
。 - 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)
A transformers.modeling_outputs.ImageClassifierOutput 或一个包含各种元素的 torch.FloatTensor
的元组(如果传递了 return_dict=False
或当 config.return_dict=False
),这些元素取决于配置(CLIPConfig)和输入。
-
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
元组(如果模型有嵌入层,则为嵌入层的输出 + 每个阶段的输出)。每个阶段的输出是模型在每个阶段的隐藏状态(也称为特征图)。 -
attentions (
tuple(torch.FloatTensor)
,可选,在传递output_attentions=True
时返回或当config.output_attentions=True
时返回) — 形状为(batch_size, num_heads, patch_size, sequence_length)
的torch.FloatTensor
元组(每个层有一个)。这是每个层的注意力权重。通过注意力 softmax 后的注意力权重,用于计算自注意力头中的加权平均。
CLIPForImageClassification 的 forward 方法,重写了 __call__
特殊方法。
尽管前向传递的配方需要在函数中定义,但是在调用 Module
实例之后而不是这个之前,应该调用它,因为前者负责运行预处理和后处理步骤,而后者会静默忽略它们。
示例
>>> from transformers import AutoImageProcessor, CLIPForImageClassification
>>> 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("openai/clip-vit-base-patch32")
>>> model = CLIPForImageClassification.from_pretrained("openai/clip-vit-base-patch32")
>>> 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])
LABEL_0
TFCLIPModel
class transformers.TFCLIPModel
< source >( config: CLIPConfig *inputs **kwargs )
参数
- config (CLIPConfig) — 该模型配置类包含所有模型参数。使用配置文件初始化时不需要加载与模型相关联的权重,仅加载配置。可以通过查看 from_pretrained() 方法来加载模型权重。
此模型继承自 TFPreTrainedModel。请查看基类文档了解库实现的所有通用方法(例如下载或保存、调整输入嵌入尺寸、剪枝头部等)。
此模型也是 keras.Model 的子类。使用它作为常规 TF 2.0 Keras 模型,并参考 TF 2.0 文档了解有关一般用途和行为的所有事项。
TensorFlow 模型和层在 transformers
中接受两种输入格式
- 所有输入都作为关键参数(类似于 PyTorch 模型),或者
- 所有输入都在第一个位置参数中作为列表、元组或字典。
支持第二种格式的理由是 Keras 方法在向模型和层传递输入时更喜欢这种格式。由于这项支持,当使用如 model.fit()
这样的方法时,事情应该“理所当然”地为你工作——只需以 model.fit()
支持的任何格式传递您的输入和标签!然而,如果您想在 fit()
和 predict()
等Keras方法之外使用第二种格式,例如创建自己的层或模型时使用 Keras Functional
API,则有三种方法可以收集第一个位置参数中的所有输入张量
- 仅包含
input_ids
的单个张量:model(input_ids)
- 一个长度可变的列表,包含一个或多个输入张量,按照文档字符串中给出的顺序:
model([input_ids, attention_mask])
或model([input_ids, attention_mask, token_type_ids])
- 一个字典,包含一个或多个与文档字符串中给出的输入名称关联的输入张量:
model({"input_ids": input_ids, "token_type_ids": token_type_ids})
注意:当使用子类化创建模型和层时,您不需要担心这些,因为您只可以像传递给任何其他Python函数一样传递输入!
调用
< source > ( input_ids: TFModelInputType | None = None pixel_values: TFModelInputType | None = None attention_mask: np.ndarray | tf.Tensor | None = None position_ids: np.ndarray | tf.Tensor | None = None return_loss: Optional[bool] = None output_attentions: Optional[bool] = None output_hidden_states: Optional[bool] = None return_dict: Optional[bool] = None training: bool = False ) → transformers.models.clip.modeling_tf_clip.TFCLIPOutput
or tuple(tf.Tensor)
参数
- input_ids (
np.ndarray
,tf.Tensor
,List[tf.Tensor]
`Dict[str, tf.Tensor]
或Dict[str, np.ndarray]
,每个示例必须是形状(batch_size, sequence_length)
) — 输入序列词汇表中的标记索引。可以使用 AutoTokenizer 获取索引。请参阅 PreTrainedTokenizer.call() 和 PreTrainedTokenizer.encode() 了解详细信息。
- pixel_values (
np.ndarray
,tf.Tensor
,List[tf.Tensor]
Dict[str, tf.Tensor]
或Dict[str, np.ndarray]
,每个示例必须是形状(batch_size, num_channels, height, width)
) — 像素值。可以使用 AutoImageProcessor 获取像素值。请参阅 CLIPImageProcessor.call() 了解详细信息。 - attention_mask (
np.ndarray
或tf.Tensor
,形状为(batch_size, sequence_length)
,可选) — 避免在填充标记索引上执行注意力的掩码。所选掩码值在[0, 1]
内:- 1 代表 非掩码 标记,
- 0 代表 掩码 标记。
- position_ids (
np.ndarray
或tf.Tensor
形状(batch_size, sequence_length)
,可选) — 每个输入序列标记在位置嵌入中的位置索引。选在范围[0, config.max_position_embeddings - 1]
内。 - return_loss (
bool
,可选) — 是否返回对比损失。 - output_attentions (
bool
,可选) — 是否返回所有注意力层的注意力张量。更多详细信息,请参阅返回张量中的attentions
。此参数只能在 eager 模式下使用,在 graph 模式下将使用配置中的值。 - output_hidden_states (
bool
, 可选) — 是否返回所有层的隐藏状态。更多详情请参阅返回的张量中的hidden_states
。此参数仅在 eager 模式下使用,在 graph 模式下会使用配置中的值。 - return_dict (
bool
, 可选) — 是否返回 ModelOutput 而不是普通的元组。此参数可以在 eager 模式下使用,在 graph 模式下此值始终为 True。 - training (
bool
, 可选, 默认值为 `False`“) — 是否以训练模式使用模型(一些模块如 dropout 模块在训练和评估模式下有不同行为)。
返回值
transformers.models.clip.modeling_tf_clip.TFCLIPOutput
或 tuple(tf.Tensor)
transformers.models.clip.modeling_tf_clip.TFCLIPOutput
或一个 tf.Tensor
的元组(如果传递了 return_dict=False
或当 config.return_dict=False
),具体包含多种元素,这取决于配置(<class 'transformers.models.clip.configuration_clip.CLIPConfig'>
)和输入。
- loss (
tf.Tensor
形状为(1,)
,可选,当return_loss
为真时返回) — 图像-文本相似性的对比损失。 - logits_per_image:(
tf.Tensor
形状为(image_batch_size, text_batch_size)
) — 介于image_embeds
和text_embeds
之间的缩放点积分数。这代表着图像-文本相似度分数。 - logits_per_text:(
tf.Tensor
形状为(text_batch_size, image_batch_size)
) — 表示text_embeds
和image_embeds
之间缩放点积得分。这代表了文本-图像相似度得分。 - text_embeds(
tf.Tensor
形状为(batch_size, output_dim)
) — 通过将 TFCLIPTextModel 的池化输出应用投影层获得文本嵌入。 - image_embeds(
tf.Tensor
形状为(batch_size, output_dim)
) — 通过将 TFCLIPVisionModel 的池化输出应用投影层获得图像嵌入。 - text_model_output(~modeling_tf_utils.TFBaseModelOutputWithPooling):来自 TFCLIPTextModel 的输出。
- vision_model_output(~modeling_tf_utils.TFBaseModelOutputWithPooling):来自 TFCLIPVisionModel 的输出。
TFCLIPModel 的前向方法覆盖了 __call__
特殊方法。
尽管前向传递的配方需要在函数中定义,但是在调用 Module
实例之后而不是这个之前,应该调用它,因为前者负责运行预处理和后处理步骤,而后者会静默忽略它们。
示例
>>> import tensorflow as tf
>>> from PIL import Image
>>> import requests
>>> from transformers import AutoProcessor, TFCLIPModel
>>> model = TFCLIPModel.from_pretrained("openai/clip-vit-base-patch32")
>>> processor = AutoProcessor.from_pretrained("openai/clip-vit-base-patch32")
>>> url = "http://images.cocodataset.org/val2017/000000039769.jpg"
>>> image = Image.open(requests.get(url, stream=True).raw)
>>> inputs = processor(
... text=["a photo of a cat", "a photo of a dog"], images=image, return_tensors="tf", padding=True
... )
>>> outputs = model(**inputs)
>>> logits_per_image = outputs.logits_per_image # this is the image-text similarity score
>>> probs = tf.nn.softmax(logits_per_image, axis=1) # we can take the softmax to get the label probabilities
get_text_features
< source > ( input_ids: TFModelInputType | None = None attention_mask: np.ndarray | tf.Tensor | None = None position_ids: 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 ) → text_features (tf.Tensor
of shape (batch_size, output_dim)
)
参数
- input_ids (
np.ndarray
,tf.Tensor
,List[tf.Tensor]
`Dict[str, tf.Tensor]
或Dict[str, np.ndarray]
,每个示例必须具有形状(batch_size, sequence_length)
) —— 词汇表中的输入序列标记的索引。可以使用 AutoTokenizer 获取索引。有关详细信息,请参阅 PreTrainedTokenizer.call() 和 PreTrainedTokenizer.encode()。
- attention_mask (
np.ndarray
或tf.Tensor
,形状为(batch_size, sequence_length)
,可选) —— 用于避免在填充标记索引上执行注意力的掩码。选取掩码值在[0, 1]
之间:- 对于 未掩码 的标记,值为 1;
- 对于 掩码 的标记,值为 0。
- position_ids (
np.ndarray
或tf.Tensor
,形状为(batch_size, sequence_length)
,可选) —— 每个输入序列标记在位置嵌入中的位置索引。选取范围在[0, config.max_position_embeddings - 1]
之间。 - output_attentions (
bool
, 可选) — 是否返回所有注意力层的注意力张量。有关详细信息,请参阅返回张量下的attentions
。此参数只能在急切模式下使用,在图模式中,将使用配置中的值。 - output_hidden_states (
bool
, 可选) — 是否返回所有层的隐藏状态。有关详细信息,请参阅返回张量下的hidden_states
。此参数只能在急切模式下使用,在图模式中,将使用配置中的值。 - return_dict (
bool
, 可选) — 是否返回ModelOutput 而不是普通的元组。此参数可在急切模式下使用,在图模式中,值将始终设置为 True。 - training (
bool
, 可选, 默认值为 `False“) — 是否使用模型进行训练模式(一些模块如dropout模块在训练和评估之间有不同的行为)。
返回值
text_features (tf.Tensor
形状 (batch_size, output_dim
)
将投影层应用于 TFCLIPTextModel 的输出池化得到的文本嵌入。
TFCLIPModel 的前向方法覆盖了 __call__
特殊方法。
尽管前向传递的配方需要在函数中定义,但是在调用 Module
实例之后而不是这个之前,应该调用它,因为前者负责运行预处理和后处理步骤,而后者会静默忽略它们。
示例
>>> from transformers import AutoTokenizer, TFCLIPModel
>>> model = TFCLIPModel.from_pretrained("openai/clip-vit-base-patch32")
>>> tokenizer = AutoTokenizer.from_pretrained("openai/clip-vit-base-patch32")
>>> inputs = tokenizer(["a photo of a cat", "a photo of a dog"], padding=True, return_tensors="tf")
>>> text_features = model.get_text_features(**inputs)
get_image_features
< source > ( pixel_values: TFModelInputType | None = None output_attentions: Optional[bool] = None output_hidden_states: Optional[bool] = None return_dict: Optional[bool] = None training: bool = False ) → image_features (tf.Tensor
形状 (batch_size, output_dim
)
参数
- pixel_values (
np.ndarray
,tf.Tensor
,List[tf.Tensor]
`Dict[str, tf.Tensor]
或Dict[str, np.ndarray]
,每个示例必须具有形状(batch_size, num_channels, height, width)
) —— 像素值。可以使用 AutoImageProcessor 获取像素值。有关详细信息,请参阅 CLIPImageProcessor.call()。 - output_hidden_states (
bool
, 可选) —— 是否返回所有层的隐藏状态。有关详细信息,请参阅返回张量下的hidden_states
。此参数只能在 eager 模式下使用,在图模式下将使用配置中的值。 - return_dict (
bool
, 可选) —— 是否以 ModelOutput 代替纯元组返回。此参数适用于 eager 模式,在图模式下此值始终将被设置为 True。 - 训练 (
bool
,可选,默认为 `False`) — 是否使用模型进行训练模式(一些模块(如dropout模块)在训练和评估之间有不同行为)。
返回值
image_features (tf.Tensor
,形状为 (batch_size, output_dim)
)
通过将TFCLIPVisionModel的汇总输出应用于投影层而获得的图像嵌入。
TFCLIPModel 的前向方法覆盖了 __call__
特殊方法。
尽管前向传递的配方需要在函数中定义,但是在调用 Module
实例之后而不是这个之前,应该调用它,因为前者负责运行预处理和后处理步骤,而后者会静默忽略它们。
示例
>>> from PIL import Image
>>> import requests
>>> from transformers import AutoProcessor, TFCLIPModel
>>> model = TFCLIPModel.from_pretrained("openai/clip-vit-base-patch32")
>>> processor = AutoProcessor.from_pretrained("openai/clip-vit-base-patch32")
>>> url = "http://images.cocodataset.org/val2017/000000039769.jpg"
>>> image = Image.open(requests.get(url, stream=True).raw)
>>> inputs = processor(images=image, return_tensors="tf")
>>> image_features = model.get_image_features(**inputs)
TFCLIPTextModel
调用
< 来源 > ( input_ids
参数
- input_ids (
np.ndarray
,tf.Tensor
,List[tf.Tensor]
`Dict[str, tf.Tensor]
orDict[str, np.ndarray]
以及每个示例必须有形状(batch_size, sequence_length)
) — 输入序列标记在词汇表中的索引.可以使用 AutoTokenizer 获取索引。有关详细信息,请参阅 PreTrainedTokenizer.call() 和 PreTrainedTokenizer.encode().
- attention_mask (
np.ndarray
或tf.Tensor
的形状为(batch_size, sequence_length)
,可选) — 用于防止在填充标记索引上执行注意力的掩码。[0, 1]
的选择掩码值:- 1 表示未掩码的标记,
- 0 表示掩码的标记。
- position_ids (
np.ndarray
或tf.Tensor
的形状为(batch_size, sequence_length)
,可选) — 每个输入序列标记在位置嵌入中的位置索引。在选择范围[0, config.max_position_embeddings - 1]
中。 - output_attentions (
bool
,可选) — 是否返回所有注意力层的注意力张量。有关返回张量中的attentions
的更多详细信息,请参见。此参数只能在 eager 模式下使用,在 graph 模式下将使用配置中的值。 - output_hidden_states (
bool
, 可选) — 是否返回所有层的隐藏状态。关于返回张量中的详细信息,请参见hidden_states
。此参数只能在动态模式中使用,在图模式下将使用配置中的值。 - return_dict (
bool
, 可选) — 是否返回ModelOutput而不是普通元组。此参数只能在动态模式中使用,在图模式中将始终设置为True。 - training (
bool
, 可选, 默认为 `False`“) — 是否使用模型进行训练模式(某些模块如dropout模块在训练和评估之间有不同的行为)。
返回值
transformers.modeling_tf_outputs.TFBaseModelOutputWithPooling或tuple(tf.Tensor)
A transformers.modeling_tf_outputs.TFBaseModelOutputWithPooling或一个包含多个元素的tf.Tensor
元组(如果传递了return_dict=False
或当config.return_dict=False
),具体取决于配置(<class 'transformers.models.clip.configuration_clip.CLIPTextConfig'>
)和输入。
-
last_hidden_state (
tf.Tensor
形状为(batch_size, sequence_length, hidden_size)
) — 模型最后层输出的隐藏状态序列。 -
pooler_output (
tf.Tensor
形状为(batch_size, hidden_size)
) — 序列(分类标记)的第一个标记的最后一层隐藏状态,经过线性层和 Tanh 激活函数进一步处理。线性层的权重在预训练过程中从下一个句子预测(分类)目标中进行训练。此输出通常 不是 输入的语义内容的好总结,您通常最好对整个输入序列的隐藏状态序列进行平均或池化。
-
hidden_states (
tuple(tf.Tensor)
,可选,当传递output_hidden_states=True
或config.output_hidden_states=True
时返回) — 包含tf.Tensor
的元组(包括嵌入输出的 output 和每层的输出),形状为(batch_size, sequence_length, hidden_size)
。模型的每个层输出的隐藏状态以及初始嵌入输出。
-
attentions (
tuple(tf.Tensor)
,可选,当传递output_attentions=True
或config.output_attentions=True
时返回) — 包含每个层tf.Tensor
的元组(一个用于每个层),形状为(batch_size, num_heads, sequence_length, sequence_length)
。通过注意力 softmax 后的注意力权重,用于计算自注意力头中的加权平均。
TFCLIPTextModel 的前方方法覆盖了 __call__
特殊方法。
尽管前向传递的配方需要在函数中定义,但是在调用 Module
实例之后而不是这个之前,应该调用它,因为前者负责运行预处理和后处理步骤,而后者会静默忽略它们。
示例
>>> from transformers import AutoTokenizer, TFCLIPTextModel
>>> model = TFCLIPTextModel.from_pretrained("openai/clip-vit-base-patch32")
>>> tokenizer = AutoTokenizer.from_pretrained("openai/clip-vit-base-patch32")
>>> inputs = tokenizer(["a photo of a cat", "a photo of a dog"], padding=True, return_tensors="tf")
>>> outputs = model(**inputs)
>>> last_hidden_state = outputs.last_hidden_state
>>> pooled_output = outputs.pooler_output # pooled (EOS token) states
TFCLIPVisionModel
调用
< 来源 > ( pixel_values: TFModelInputType | None = None output_attentions: Optional[bool] = None output_hidden_states: Optional[bool] = None return_dict: Optional[bool] = None training: Optional[bool] = False ) → transformers.modeling_tf_outputs.TFBaseModelOutputWithPooling 或 tuple(tf.Tensor)
参数
- pixel_values (
np.ndarray
,tf.Tensor
,List[tf.Tensor]
`Dict[str, tf.Tensor]
或Dict[str, np.ndarray]
and each example must have the shape(batch_size, num_channels, height, width)
) — 像素值。像素值可以通过 AutoImageProcessor 获取。有关详细信息,请参阅 CLIPImageProcessor.call()。output_attentions (bool
, 可选):是否返回所有注意力层的注意力张量。有关更多详细说明,请参阅返回张量下的attentions
。此参数只能在 eager 模式下使用,在 graph 模式下,将使用配置中的值。 - output_hidden_states (
bool
, 可选) — 是否返回所有层的隐藏状态。有关更多详细信息,请参阅返回张量下的hidden_states
。此参数只能在急切模式下使用,在图模式下将使用配置中的值。 - return_dict (
bool
, 可选) — 是否返回ModelOutput而不是普通元组。此参数可以在急切模式下使用,在图模式下,值始终设置为True。 - training (
bool
, 可选, 默认值 `False`) — 是否以训练模式使用模型(一些模块如dropout模块在训练和评估之间有不同行为)。
返回值
transformers.modeling_tf_outputs.TFBaseModelOutputWithPooling或tuple(tf.Tensor)
一个 transformers.modeling_tf_outputs.TFBaseModelOutputWithPooling 或一个包含代码tf.Tensor
的元组(如果传递了return_dict=False
或当config.return_dict=False
时),它包含根据配置(<class 'transformers.models.clip.configuration_clip.CLIPVisionConfig'>
)和输入的各种元素。
-
last_hidden_state (
tf.Tensor
形状为(batch_size, sequence_length, hidden_size)
) — 模型最后层输出的隐藏状态序列。 -
pooler_output (
tf.Tensor
形状为(batch_size, hidden_size)
) — 序列(分类标记)的第一个标记的最后一层隐藏状态,经过线性层和 Tanh 激活函数进一步处理。线性层的权重在预训练过程中从下一个句子预测(分类)目标中进行训练。此输出通常 不是 输入的语义内容的好总结,您通常最好对整个输入序列的隐藏状态序列进行平均或池化。
-
hidden_states (
tuple(tf.Tensor)
,可选,当传递output_hidden_states=True
或config.output_hidden_states=True
时返回) — 包含tf.Tensor
的元组(包括嵌入输出的 output 和每层的输出),形状为(batch_size, sequence_length, hidden_size)
。模型的每个层输出的隐藏状态以及初始嵌入输出。
-
attentions (
tuple(tf.Tensor)
,可选,当传递output_attentions=True
或config.output_attentions=True
时返回) — 包含每个层tf.Tensor
的元组(一个用于每个层),形状为(batch_size, num_heads, sequence_length, sequence_length)
。通过注意力 softmax 后的注意力权重,用于计算自注意力头中的加权平均。
TFCLIPVisionModel 的 forward 方法覆盖了 __call__
特殊方法。
尽管前向传递的配方需要在函数中定义,但是在调用 Module
实例之后而不是这个之前,应该调用它,因为前者负责运行预处理和后处理步骤,而后者会静默忽略它们。
示例
>>> from PIL import Image
>>> import requests
>>> from transformers import AutoProcessor, TFCLIPVisionModel
>>> model = TFCLIPVisionModel.from_pretrained("openai/clip-vit-base-patch32")
>>> processor = AutoProcessor.from_pretrained("openai/clip-vit-base-patch32")
>>> url = "http://images.cocodataset.org/val2017/000000039769.jpg"
>>> image = Image.open(requests.get(url, stream=True).raw)
>>> inputs = processor(images=image, return_tensors="tf")
>>> outputs = model(**inputs)
>>> last_hidden_state = outputs.last_hidden_state
>>> pooled_output = outputs.pooler_output # pooled CLS states
类 transformers.FlaxCLIPModel
参数
- config (CLIP配置) — 模型配置类,包含所有模型参数。使用配置文件初始化时不会加载与模型相关的权重,只有配置。查看from_pretrained()方法加载模型权重。
- dtype (
jax.numpy.dtype
, 可选, 默认为jax.numpy.float32
) — 计算的数据类型。可以是jax.numpy.float32
、jax.numpy.float16
(在GPU上)和jax.numpy.bfloat16
(在TPU上)。这可以用于启用GPU或TPU上的混合精度训练或半精度推理。如果指定,所有计算将以给定的
dtype
进行。请注意,这仅指定了计算的数据类型,并不影响模型参数的数据类型。
该模型继承自FlaxPreTrainedModel。请参阅超级类文档,了解库为所有模型实施的通用方法(如下载、保存以及从PyTorch模型转换权重)。
该模型也是flax.linen.Module子类。将其用作常规Flax linen模块,并参考Flax文档了解所有与通用使用和行为相关的事项。
最后,该模型支持JAX的固有功能,如
__call__
< 源代码 > ( input_ids pixel_values attention_mask = None position_ids = None params: dict = None dropout_rng: PRNGKey = None train: bool = False output_attentions: Optional = None output_hidden_states: Optional = None return_dict: Optional = None ) → transformers.models.clip.modeling_flax_clip.FlaxCLIPOutput
or tuple(torch.FloatTensor)
参数
- input_ids (
numpy.ndarray
of shape(batch_size, sequence_length)
) — 输入序列令牌在词汇表中的索引。如果提供,则默认忽略填充。可以使用 AutoTokenizer 获取索引。有关详细信息,请参阅 PreTrainedTokenizer.encode() 和 PreTrainedTokenizer.call()。
- attention_mask (形状为
(batch_size, sequence_length)
的numpy.ndarray
,可选) — 避免在填充token的索引上执行注意力操作的掩码。掩码值在[0, 1]
范围内选择:- 1 对应未屏蔽的token,
- 0 对应屏蔽的token。
- position_ids (形状为
(batch_size, sequence_length)
的numpy.ndarray
,可选) — 每个输入序列token在位置嵌入中的位置索引。选择范围在[0, config.max_position_embeddings - 1]
之内。 - pixel_values (形状为
(batch_size, num_channels, height, width)
的numpy.ndarray
) — 像素值。默认情况下会忽略填充。可以使用AutoImageProcessor来获取像素值。有关详细信息,请参阅CLIPImageProcessor.call()。 - output_attentions (
bool
, 可选) —— 是否返回所有注意力层的注意力张量。有关更多详细信息,请参阅返回张量中的attentions
。 - output_hidden_states (
bool
, 可选) —— 是否返回所有层的隐藏状态。有关更多详细信息,请参阅返回张量中的hidden_states
。 - return_dict (
bool
, 可选) —— 是否返回 ModelOutput 而不是普通元组。
返回值
transformers.models.clip.modeling_flax_clip.FlaxCLIPOutput
或 tuple(torch.FloatTensor)
transformers.models.clip.modeling_flax_clip.FlaxCLIPOutput
或一个包含 torch.FloatTensor
的元组(如果传递了 return_dict=False
或者当 config.return_dict=False
),具体取决于配置(<class 'transformers.models.clip.configuration_clip.CLIPConfig'>
)和输入。
- logits_per_image:(形状为
(image_batch_size, text_batch_size)
的jnp.ndarray
)——image_embeds
和text_embeds
之间的缩放点积分数。这代表图像-文本相似度分数。 - logits_per_text:(形状为
(text_batch_size, image_batch_size)
的jnp.ndarray
)——text_embeds
和image_embeds
之间的缩放点积分数。这代表文本-图像相似度分数。 - text_embeds(
jnp.ndarray
的形状为(batch_size, output_dim
) — 通过将投影层应用于 FlaxCLIPTextModel 的池化输出获得的文本嵌入。 - image_embeds(
jnp.ndarray
的形状为(batch_size, output_dim
) — 通过将投影层应用于 FlaxCLIPVisionModel 的池化输出获得的图像嵌入。 - text_model_output(
FlaxBaseModelOutputWithPooling
): FlaxCLIPTextModel 的输出。 - vision_model_output(
FlaxBaseModelOutputWithPooling
): FlaxCLIPVisionModel 的输出。
FlaxCLIPPreTrainedModel
的 forward 方法覆盖了特殊方法 __call__
。
尽管前向传递的配方需要在函数中定义,但是在调用 Module
实例之后而不是这个之前,应该调用它,因为前者负责运行预处理和后处理步骤,而后者会静默忽略它们。
示例
>>> import jax
>>> from PIL import Image
>>> import requests
>>> from transformers import AutoProcessor, FlaxCLIPModel
>>> model = FlaxCLIPModel.from_pretrained("openai/clip-vit-base-patch32")
>>> processor = AutoProcessor.from_pretrained("openai/clip-vit-base-patch32")
>>> url = "http://images.cocodataset.org/val2017/000000039769.jpg"
>>> image = Image.open(requests.get(url, stream=True).raw)
>>> inputs = processor(
... text=["a photo of a cat", "a photo of a dog"], images=image, return_tensors="np", padding=True
... )
>>> outputs = model(**inputs)
>>> logits_per_image = outputs.logits_per_image # this is the image-text similarity score
>>> probs = jax.nn.softmax(logits_per_image, axis=1) # we can take the softmax to get the label probabilities
get_text_features
< 源代码 > ( input_ids attention_mask = None position_ids = None params: dict = None dropout_rng: PRNGKey = None train = False ) → text_features (jnp.ndarray
of shape (batch_size, output_dim
)
参数
返回值
text_features (形状为 batch_size, output_dim
的 jnp.ndarray
)
通过将 FlaxCLIPTextModel 的汇总输出应用于投影层而得到的文本嵌入。
示例
>>> from transformers import AutoTokenizer, FlaxCLIPModel
>>> model = FlaxCLIPModel.from_pretrained("openai/clip-vit-base-patch32")
>>> tokenizer = AutoTokenizer.from_pretrained("openai/clip-vit-base-patch32")
>>> inputs = tokenizer(["a photo of a cat", "a photo of a dog"], padding=True, return_tensors="np")
>>> text_features = model.get_text_features(**inputs)
get_image_features
(
参数
- pixel_values (形状为
numpy.ndarray
的(batch_size, num_channels, height, width)
) - 像素值。如果提供填充,则默认会忽略。可以使用 AutoImageProcessor 来获取像素值。有关详细信息,请参阅 CLIPImageProcessor.call()。
返回值
image_features (形状为 jnp.ndarray
的 (batch_size, output_dim)
)
通过对 FlaxCLIPVisionModel 的池化输出应用投影层获得图像嵌入
示例
>>> from PIL import Image
>>> import requests
>>> from transformers import AutoProcessor, FlaxCLIPModel
>>> model = FlaxCLIPModel.from_pretrained("openai/clip-vit-base-patch32")
>>> processor = AutoProcessor.from_pretrained("openai/clip-vit-base-patch32")
>>> url = "http://images.cocodataset.org/val2017/000000039769.jpg"
>>> image = Image.open(requests.get(url, stream=True).raw)
>>> inputs = processor(images=image, return_tensors="np")
>>> image_features = model.get_image_features(**inputs)
FlaxCLIPTextModel
类 transformers.FlaxCLIPTextModel
< source >( config: CLIPTextConfig input_shape = (1, 1) seed: int = 0 dtype: dtype = <class 'jax.numpy.float32'> _do_init: bool = True **kwargs )
__call__
< source > ( input_ids attention_mask = None position_ids = None params: dict = None dropout_rng: PRNGKey = None train: bool = False output_attentions: Optional = None output_hidden_states: Optional = None return_dict: Optional = None ) → transformers.modeling_flax_outputs.FlaxBaseModelOutputWithPooling or tuple(torch.FloatTensor)
参数
- input_ids (
numpy.ndarray
的形状为(batch_size, sequence_length)
) — 输入序列的标记索引在词汇表中的索引。默认情况下,如果提供填充,则会忽略填充。可以使用 AutoTokenizer 获取索引。有关详细信息,请参阅 PreTrainedTokenizer.encode() 和 PreTrainedTokenizer.call()。
- attention_mask (
numpy.ndarray
的形状为(batch_size, sequence_length)
,可选) — 避免对填充标记索引执行关注的掩码。掩码值选自[0, 1]
:- 1 用于 未掩码 的标记,
- 0 用于 掩码 的标记。
- position_ids (
numpy.ndarray
的形状为(batch_size, sequence_length)
,可选) — 每个输入序列标记在位置嵌入中的位置索引。选择范围[0, config.max_position_embeddings - 1]
。 - output_attentions (
bool
, 可选) — 是否返回所有注意力层的注意力张量。有关更多详情,请参阅返回张量下的attentions
。 - output_hidden_states (
bool
, 可选) — 是否返回所有层的隐藏状态。有关更多详情,请参阅返回张量下的hidden_states
。 - return_dict (
bool
, 可选) — 是否返回 ModelOutput 而不是纯元组。
返回值
transformers.modeling_flax_outputs.FlaxBaseModelOutputWithPooling 或 tuple(torch.FloatTensor)
一个 transformers.modeling_flax_outputs.FlaxBaseModelOutputWithPooling 或一个 torch.FloatTensor
的元组(如果传递了 return_dict=False
或当 config.return_dict=False
)包含根据配置(<class 'transformers.models.clip.configuration_clip.CLIPTextConfig'>
)和输入的不同元素。
-
last_hidden_state (形状为
(batch_size, sequence_length, hidden_size)
的jnp.ndarray
)— 模型最后一层输出的隐藏状态序列。 -
pooler_output (形状为
(batch_size, hidden_size)
的jnp.ndarray
)— 首个序列(分类标记)的最后一层隐藏状态,经过线性层和 Tanh 激活函数进一步处理。线性层的权重在预训练过程中从下一个句子的预测(分类)目标中进行训练。 -
hidden_states (
tuple(jnp.ndarray)
,可选,在传递了output_hidden_states=True
或在config.output_hidden_states=True
时返回)— 一个形状为(batch_size, sequence_length, hidden_size)
的jnp.ndarray
的元组(嵌入输出的一个 + 每个层的输出的一个)。模型的每个层输出的隐藏状态以及初始嵌入输出。
-
attentions (
tuple(jnp.ndarray)
,可选,在传递了output_attentions=True
或在config.output_attentions=True
时返回)— 一个形状为(batch_size, num_heads, sequence_length, sequence_length)
的jnp.ndarray
的元组(每个层的一个)。通过注意力 softmax 后的注意力权重,用于计算自注意力头中的加权平均。
FlaxCLIPTextPreTrainedModel
的 forward 方法,重写了 __call__
特殊方法。
尽管前向传递的配方需要在函数中定义,但是在调用 Module
实例之后而不是这个之前,应该调用它,因为前者负责运行预处理和后处理步骤,而后者会静默忽略它们。
示例
>>> from transformers import AutoTokenizer, FlaxCLIPTextModel
>>> model = FlaxCLIPTextModel.from_pretrained("openai/clip-vit-base-patch32")
>>> tokenizer = AutoTokenizer.from_pretrained("openai/clip-vit-base-patch32")
>>> inputs = tokenizer(["a photo of a cat", "a photo of a dog"], padding=True, return_tensors="np")
>>> outputs = model(**inputs)
>>> last_hidden_state = outputs.last_hidden_state
>>> pooler_output = outputs.pooler_output # pooled (EOS token) states
FlaxCLIPTextModelWithProjection
class transformers.FlaxCLIPTextModelWithProjection
< source >( config: CLIPTextConfig input_shape = (1, 1) seed: int = 0 dtype: dtype = <class 'jax.numpy.float32'> _do_init: bool = True **kwargs )
__call__
< source > ( input_ids 注意_mask = None 位置_ids = None params: dict = None dropout_rng: PRNGKey = None train: bool = False output_attentions: Optional = None output_hidden_states: Optional = None return_dict: Optional = None ) → transformers.models.clip.modeling_flax_clip.FlaxCLIPTextModelOutput
或 (torch.FloatTensor)
参数
- input_ids (
numpy.ndarray
of shape(batch_size, sequence_length)
) — 输入序列在词汇表中的单词索引。如果提供,默认会忽略填充. - attention_mask (维度为
(batch_size, sequence_length)
的numpy.ndarray
,可选)—— 避免在填充token索引上执行注意力机制的掩码。掩码值在[0, 1]
之间选择:- 1 表示 未掩码 的token;
- 0 表示 掩码 的token。
- position_ids (维度为
(batch_size, sequence_length)
的numpy.ndarray
,可选)—— 每个输入sequence token在位置嵌入中的位置索引。在[0, config.max_position_embeddings - 1]
的范围内选择。 - output_attentions (
bool
,可选)—— 是否返回所有注意力层的注意力张量。更多详情请见返回张量中的attentions
。 - output_hidden_states (
bool
, 可选) — 是否返回所有层的隐藏状态。更多详细信息请参阅返回张量下的hidden_states
。 - return_dict (
bool
, 可选) — 是否返回 ModelOutput 而不是普通元组。
返回值
transformers.models.clip.modeling_flax_clip.FlaxCLIPTextModelOutput
或 tuple(torch.FloatTensor)
A transformers.models.clip.modeling_flax_clip.FlaxCLIPTextModelOutput
或一个 torch.FloatTensor
的元组(如果传递了 return_dict=False
或当 config.return_dict=False
时),包含根据配置(<class 'transformers.models.clip.configuration_clip.CLIPTextConfig'>
)和输入确定的各个元素。
-
text_embeds (
jnp.ndarray
形状为(batch_size, output_dim
) — 通过将投影层应用于 FlaxCLIPTextModel 的汇总输出得到的文本嵌入。 -
last_hidden_state (形状为
(batch_size, sequence_length, hidden_size)
的jnp.ndarray
)— 模型最后一层输出的隐藏状态序列。 -
hidden_states (
tuple(jnp.ndarray)
,可选,在传递了output_hidden_states=True
或在config.output_hidden_states=True
时返回)— 一个形状为(batch_size, sequence_length, hidden_size)
的jnp.ndarray
的元组(嵌入输出的一个 + 每个层的输出的一个)。模型的每个层输出的隐藏状态以及初始嵌入输出。
-
attentions (
tuple(jnp.ndarray)
,可选,在传递了output_attentions=True
或在config.output_attentions=True
时返回)— 一个形状为(batch_size, num_heads, sequence_length, sequence_length)
的jnp.ndarray
的元组(每个层的一个)。通过注意力 softmax 后的注意力权重,用于计算自注意力头中的加权平均。
FlaxCLIPTextPreTrainedModel
的 forward 方法,重写了 __call__
特殊方法。
尽管前向传递的配方需要在函数中定义,但是在调用 Module
实例之后而不是这个之前,应该调用它,因为前者负责运行预处理和后处理步骤,而后者会静默忽略它们。
示例
>>> from transformers import AutoTokenizer, FlaxCLIPTextModelWithProjection
>>> model = FlaxCLIPTextModelWithProjection.from_pretrained("openai/clip-vit-base-patch32")
>>> tokenizer = AutoTokenizer.from_pretrained("openai/clip-vit-base-patch32")
>>> inputs = tokenizer(["a photo of a cat", "a photo of a dog"], padding=True, return_tensors="np")
>>> outputs = model(**inputs)
>>> text_embeds = outputs.text_embeds
FlaxCLIPVisionModel
类 transformers.FlaxCLIPVisionModel
< 来源 >( config: CLIPVisionConfig input_shape: Optional = None seed: int = 0 dtype: dtype = <class 'jax.numpy.float32'> _do_init: bool = True **kwargs )
__call__
< 来源 > ( pixel_values params: dict = None dropout_rng: PRNGKey = None train: bool = False output_attentions: Optional = None output_hidden_states: Optional = None return_dict: Optional = None ) → transformers.modeling_flax_outputs.FlaxBaseModelOutputWithPooling or tuple(torch.FloatTensor)
参数
- pixel_values (
numpy.ndarray
of shape(batch_size, num_channels, height, width)
) — 像素值。在默认情况下,如果提供填充,将会忽略它。可以使用 AutoImageProcessor 获取像素值。有关详细信息,请参阅 CLIPImageProcessor.call()。 - output_attentions (
bool
, optional) — 是否返回所有注意力的张量。有关更多详情,请参阅返回张量下的attentions
。 - output_hidden_states (
bool
, 可选) — 是否返回所有层的隐藏状态。有关更多详细信息,请参阅返回张量下的hidden_states
。 - return_dict (
bool
, 可选) — 是否返回 ModelOutput 而不是普通元组。
返回值
transformers.modeling_flax_outputs.FlaxBaseModelOutputWithPooling 或 tuple(torch.FloatTensor)
A transformers.modeling_flax_outputs.FlaxBaseModelOutputWithPooling 或一个由 torch.FloatTensor
组成的元组(如果传递了 return_dict=False
或当 config.return_dict=False
时),包含各种元素,取决于配置(<class 'transformers.models.clip.configuration_clip.CLIPVisionConfig'>
)和输入。
-
last_hidden_state (形状为
(batch_size, sequence_length, hidden_size)
的jnp.ndarray
)— 模型最后一层输出的隐藏状态序列。 -
pooler_output (形状为
(batch_size, hidden_size)
的jnp.ndarray
)— 首个序列(分类标记)的最后一层隐藏状态,经过线性层和 Tanh 激活函数进一步处理。线性层的权重在预训练过程中从下一个句子的预测(分类)目标中进行训练。 -
hidden_states (
tuple(jnp.ndarray)
,可选,在传递了output_hidden_states=True
或在config.output_hidden_states=True
时返回)— 一个形状为(batch_size, sequence_length, hidden_size)
的jnp.ndarray
的元组(嵌入输出的一个 + 每个层的输出的一个)。模型的每个层输出的隐藏状态以及初始嵌入输出。
-
attentions (
tuple(jnp.ndarray)
,可选,在传递了output_attentions=True
或在config.output_attentions=True
时返回)— 一个形状为(batch_size, num_heads, sequence_length, sequence_length)
的jnp.ndarray
的元组(每个层的一个)。通过注意力 softmax 后的注意力权重,用于计算自注意力头中的加权平均。
FlaxCLIPVisionPreTrainedModel
的前向方法,重写了 __call__
特殊方法。
尽管前向传递的配方需要在函数中定义,但是在调用 Module
实例之后而不是这个之前,应该调用它,因为前者负责运行预处理和后处理步骤,而后者会静默忽略它们。
示例
>>> from PIL import Image
>>> import requests
>>> from transformers import AutoProcessor, FlaxCLIPVisionModel
>>> model = FlaxCLIPVisionModel.from_pretrained("openai/clip-vit-base-patch32")
>>> processor = AutoProcessor.from_pretrained("openai/clip-vit-base-patch32")
>>> url = "http://images.cocodataset.org/val2017/000000039769.jpg"
>>> image = Image.open(requests.get(url, stream=True).raw)
>>> inputs = processor(images=image, return_tensors="np")
>>> outputs = model(**inputs)
>>> last_hidden_state = outputs.last_hidden_state
>>> pooler_output = outputs.pooler_output # pooled CLS states