Transformers 4.37 中文文档(九十三)(4)

简介: Transformers 4.37 中文文档(九十三)

Transformers 4.37 中文文档(九十三)(3)https://developer.aliyun.com/article/1564061


SigLIP

原始文本:huggingface.co/docs/transformers/v4.37.2/en/model_doc/siglip

概述

SigLIP 模型是由 Xiaohua Zhai、Basil Mustafa、Alexander Kolesnikov、Lucas Beyer 在用于语言图像预训练的 Sigmoid Loss中提出的。SigLIP 建议用简单的成对 Sigmoid 损失替换 CLIP 中使用的损失函数。这导致在 ImageNet 的零样本分类准确性方面表现更好。

论文摘要如下:

我们提出了一种简单的成对 Sigmoid 损失用于语言-图像预训练(SigLIP)。与标准的具有 softmax  归一化的对比学习不同,Sigmoid 损失仅在图像-文本对上操作,不需要全局查看成对相似性以进行归一化。Sigmoid  损失同时允许进一步扩大批处理大小,同时在较小的批处理大小下表现更好。结合锁定图像调整,仅使用四个 TPUv4 芯片,我们训练了一个在两天内实现了  84.5% ImageNet 零样本准确性的 SigLiT  模型。批处理大小与损失的解耦进一步使我们能够研究示例与对之间的影响以及负到正的比率。最后,我们将批处理大小推到极限,高达一百万,并发现随着批处理大小的增长,好处迅速减少,32k  的更合理的批处理大小已经足够。

使用提示

  • SigLIP 的使用类似于 CLIP。主要区别在于训练损失,它不需要查看批处理中所有图像和文本的成对相似性的全局视图。需要将 sigmoid 激活函数应用于 logits,而不是 softmax。
  • 目前不支持训练。如果你想要微调 SigLIP 或从头开始训练,请参考来自OpenCLIP的损失函数,该函数利用了各种torch.distributed实用程序。
  • 当使用独立的 SiglipTokenizer 或 SiglipProcessor 时,请确保传递padding="max_length",因为模型是这样训练的。

SigLIP 评估结果与 CLIP 进行比较。摘自原始论文

这个模型是由nielsr贡献的。原始代码可以在这里找到。

使用示例

有两种主要方法可以使用 SigLIP:一种是使用管道 API,它为您抽象了所有复杂性,另一种是自己使用SiglipModel类。

Pipeline API

该流程允许在几行代码中使用模型:

>>> from transformers import pipeline
>>> from PIL import Image
>>> import requests
>>> # load pipe
>>> image_classifier = pipeline(task="zero-shot-image-classification", model="google/siglip-base-patch16-224")
>>> # load image
>>> url = 'http://images.cocodataset.org/val2017/000000039769.jpg'
>>> image = Image.open(requests.get(url, stream=True).raw)
>>> # inference
>>> outputs = image_classifier(image, candidate_labels=["2 cats", "a plane", "a remote"])
>>> outputs = [{"score": round(output["score"], 4), "label": output["label"] } for output in outputs]
>>> print(outputs)
[{'score': 0.1979, 'label': '2 cats'}, {'score': 0.0, '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/siglip-base-patch16-224")
>>> processor = AutoProcessor.from_pretrained("google/siglip-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'

SiglipConfig

class transformers.SiglipConfig

< source >

( text_config = None vision_config = None **kwargs )

参数

  • text_configdict可选)—用于初始化 SiglipTextConfig 的配置选项字典。
  • vision_configdict可选)—用于初始化 SiglipVisionConfig 的配置选项字典。
  • kwargs可选)—关键字参数字典。

SiglipConfig 是用于存储 SiglipModel 配置的配置类。根据指定的参数实例化一个 Siglip 模型,定义文本模型和视觉模型配置。使用默认值实例化配置将产生类似于 Siglip google/siglip-base-patch16-224架构的配置。

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

示例:

>>> from transformers import SiglipConfig, SiglipModel
>>> # Initializing a SiglipConfig with google/siglip-base-patch16-224 style configuration
>>> configuration = SiglipConfig()
>>> # Initializing a SiglipModel (with random weights) from the google/siglip-base-patch16-224 style configuration
>>> model = SiglipModel(configuration)
>>> # Accessing the model configuration
>>> configuration = model.config
>>> # We can also initialize a SiglipConfig from a SiglipTextConfig and a SiglipVisionConfig
>>> from transformers import SiglipTextConfig, SiglipVisionConfig
>>> # Initializing a SiglipText and SiglipVision configuration
>>> config_text = SiglipTextConfig()
>>> config_vision = SiglipVisionConfig()
>>> config = SiglipConfig.from_text_vision_configs(config_text, config_vision)
from_text_vision_configs

< source >

( text_config: SiglipTextConfig vision_config: SiglipVisionConfig **kwargs ) → export const metadata = 'undefined';SiglipConfig

返回

SiglipConfig

配置对象的一个实例

从 siglip 文本模型配置和 siglip 视觉模型配置实例化一个 SiglipConfig(或派生类)。

SiglipTextConfig

class transformers.SiglipTextConfig

< 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 **kwargs )

参数

  • vocab_size (int, optional, defaults to 32000) — Siglip 文本模型的词汇表大小。定义在调用 SiglipModel 时可以表示的不同标记数量。
  • hidden_size (int, optional, defaults to 768) — 编码器层和池化器层的维度。
  • intermediate_size (int, optional, defaults to 3072) — Transformer 编码器中“中间”(即前馈)层的维度。
  • num_hidden_layers (int, optional, defaults to 12) — Transformer 编码器中的隐藏层数量。
  • num_attention_heads (int, optional, defaults to 12) — Transformer 编码器中每个注意力层的注意力头数。
  • max_position_embeddings (int, optional, defaults to 64) — 该模型可能使用的最大序列长度。通常将其设置为较大的值以防万一(例如 512、1024 或 2048)。
  • hidden_act (str or function, optional, defaults to "gelu_pytorch_tanh") — 编码器和池化器中的非线性激活函数(函数或字符串)。如果是字符串,支持"gelu", "relu", "selu""gelu_new" "quick_gelu"
  • layer_norm_eps (float, optional, defaults to 1e-06) — 层归一化层使用的 epsilon。
  • attention_dropout (float, optional, defaults to 0.0) — 注意力概率的 dropout 比率。
  • pad_token_id (int, optional, defaults to 1) — 词汇表中填充标记的 id。
  • bos_token_id (int, optional, defaults to 49406) — 词汇表中序列开始标记的 id。
  • eos_token_id (int, optional, defaults to 49407) — 词汇表中序列结束标记的 id。

这是一个配置类,用于存储 SiglipTextModel 的配置。根据指定的参数实例化一个 Siglip 文本编码器,定义模型架构。使用默认值实例化配置将产生类似于 Siglip google/siglip-base-patch16-224架构的文本编码器配置。

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

示例:

>>> from transformers import SiglipTextConfig, SiglipTextModel
>>> # Initializing a SiglipTextConfig with google/siglip-base-patch16-224 style configuration
>>> configuration = SiglipTextConfig()
>>> # Initializing a SiglipTextModel (with random weights) from the google/siglip-base-patch16-224 style configuration
>>> model = SiglipTextModel(configuration)
>>> # Accessing the model configuration
>>> configuration = model.config

SiglipVisionConfig

class transformers.SiglipVisionConfig

< source >

( hidden_size = 768 intermediate_size = 3072 num_hidden_layers = 12 num_attention_heads = 12 num_channels = 3 image_size = 224 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) — 输入图像中的通道数。
  • image_size (int, 可选, 默认为 224) — 每个图像的大小(分辨率)。
  • patch_size (int, 可选, 默认为 16) — 每个补丁的大小(分辨率)。
  • hidden_act (strfunction, 可选, 默认为 "gelu_pytorch_tanh") — 编码器和池化器中的非线性激活函数(函数或字符串)。如果是字符串,支持"gelu""relu""selu""gelu_new""quick_gelu"
  • layer_norm_eps (float, 可选, 默认为 1e-06) — 层归一化层使用的 epsilon。
  • attention_dropout (float, 可选, 默认为 0.0) — 注意力概率的丢弃比率。

这是用于存储 SiglipVisionModel 配置的配置类。根据指定的参数实例化 Siglip 视觉编码器,定义模型架构。使用默认值实例化配置将产生类似于 Siglip google/siglip-base-patch16-224架构的视觉编码器的配置。

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

示例:

>>> from transformers import SiglipVisionConfig, SiglipVisionModel
>>> # Initializing a SiglipVisionConfig with google/siglip-base-patch16-224 style configuration
>>> configuration = SiglipVisionConfig()
>>> # Initializing a SiglipVisionModel (with random weights) from the google/siglip-base-patch16-224 style configuration
>>> model = SiglipVisionModel(configuration)
>>> # Accessing the model configuration
>>> configuration = model.config

SiglipTokenizer

class transformers.SiglipTokenizer

< source >

( vocab_file eos_token = '</s>' unk_token = '<unk>' pad_token = '</s>' additional_special_tokens = None sp_model_kwargs: Optional = None model_max_length = 64 do_lower_case = True **kwargs )

参数

  • vocab_file (str) — 包含实例化分词器所需词汇的SentencePiece文件(通常具有*.spm*扩展名)。
  • eos_token (str, 可选, 默认为 "") — 序列结束标记。
  • unk_token (str, 可选, 默认为 "") — 未知标记。词汇表中不存在的标记无法转换为 ID,而是设置为此标记。
  • pad_token (str, 可选, 默认为 "") — 用于填充的标记,例如在批处理不同长度的序列时使用。
  • additional_special_tokens (List[str], 可选) — 分词器使用的额外特殊标记。
  • sp_model_kwargs (dict, 可选) — 将传递给SentencePieceProcessor.__init__()方法。SentencePiece 的 Python 包装器可用于设置:
  • enable_sampling: 启用子词正则化。
  • nbest_size: 对 unigram 的采样参数。对于 BPE-Dropout 无效。
  • nbest_size = {0,1}: 不执行采样。
  • nbest_size > 1:从 nbest_size 结果中采样。
  • nbest_size < 0:假设 nbest_size 为无限,并使用前向过滤和后向采样算法从所有假设(格)中采样。
  • alpha:unigram 采样的平滑参数,以及 BPE-dropout 合并操作的丢弃概率。
  • model_max_length (int, optional, 默认为 64) — 模型输入的最大长度(标记数)。
  • do_lower_case (bool, optional, 默认为 True) — 在标记化时是否将输入转换为小写。

构建一个 Siglip 分词器。基于 SentencePiece

此分词器继承自 PreTrainedTokenizer,其中包含大多数主要方法。用户应参考此超类以获取有关这些方法的更多信息。

build_inputs_with_special_tokens

< source >

( token_ids_0: List token_ids_1: Optional = None ) → export const metadata = 'undefined';List[int]

参数

  • token_ids_0 (List[int]) — 将添加特殊标记的 ID 列表。
  • token_ids_1 (List[int], optional) — 序列对的可选第二个 ID 列表。

返回

List[int]

具有适当特殊标记的输入 ID 列表。

通过连接和添加特殊标记,从序列或序列对构建用于序列分类任务的模型输入。序列的格式如下:

  • 单个序列:X
  • 序列对:A  B
get_special_tokens_mask

< source >

( token_ids_0: List token_ids_1: Optional = None already_has_special_tokens: bool = False ) → export const metadata = 'undefined';List[int]

参数

  • token_ids_0 (List[int]) — ID 列表。
  • token_ids_1 (List[int], optional) — 序列对的可选第二个 ID 列表。
  • already_has_special_tokens (bool, optional, 默认为 False) — 标记列表是否已经为模型格式化了特殊标记。

返回

List[int]

一个整数列表,范围为 [0, 1]:1 表示特殊标记,0 表示序列标记。

从没有添加特殊标记的标记列表中检索序列 id。在使用分词器的 prepare_for_model 方法添加特殊标记时调用此方法。

create_token_type_ids_from_sequences

< source >

( token_ids_0: List token_ids_1: Optional = None ) → export const metadata = 'undefined';List[int]

参数

  • token_ids_0 (List[int]) — ID 列表。
  • token_ids_1 (List[int], optional) — 序列对的可选第二个 ID 列表。

返回

List[int]

零列表。

从传递的两个序列创建一个用于序列对分类任务的掩码。T5 不使用标记类型 id,因此返回一个零列表。

save_vocabulary

< source >

( save_directory: str filename_prefix: Optional = None )


Transformers 4.37 中文文档(九十三)(5)https://developer.aliyun.com/article/1564063

相关文章
|
机器学习/深度学习 人工智能 编解码
AIMv2:苹果开源多模态视觉模型,自回归预训练革新图像理解
AIMv2 是苹果公司开源的多模态自回归预训练视觉模型,通过图像和文本的深度融合提升视觉模型的性能,适用于多种视觉和多模态任务。
633 5
AIMv2:苹果开源多模态视觉模型,自回归预训练革新图像理解
|
机器学习/深度学习 人工智能 自然语言处理
一文搞懂【知识蒸馏】【Knowledge Distillation】算法原理
一文搞懂【知识蒸馏】【Knowledge Distillation】算法原理
一文搞懂【知识蒸馏】【Knowledge Distillation】算法原理
|
人工智能 并行计算 PyTorch
【PyTorch&TensorBoard实战】GPU与CPU的计算速度对比(附代码)
【PyTorch&TensorBoard实战】GPU与CPU的计算速度对比(附代码)
1319 0
|
机器学习/深度学习 编解码 自然语言处理
SigLIP 2:多语言语义理解、定位和密集特征的视觉语言编码器
SigLIP 2 是一种改进的多语言视觉-语言编码器系列,通过字幕预训练、自监督学习和在线数据管理优化性能。它在零样本分类、图像-文本检索及视觉表示提取中表现卓越,支持多分辨率处理并保持图像纵横比。模型提供 ViT-B 至 g 四种规格,采用 WebLI 数据集训练,结合 Sigmoid 损失与自蒸馏等技术提升效果。实验表明,SigLIP 2 在密集预测、定位任务及多模态应用中显著优于前代和其他基线模型。
1437 9
SigLIP 2:多语言语义理解、定位和密集特征的视觉语言编码器
|
机器学习/深度学习 人工智能 自然语言处理
多模态AI核心技术:CLIP与SigLIP技术原理与应用进展
近年来,多模态表示学习在人工智能领域取得显著进展,CLIP和SigLIP成为里程碑式模型。CLIP由OpenAI提出,通过对比学习对齐图像与文本嵌入空间,具备强大零样本学习能力;SigLIP由Google开发,采用sigmoid损失函数优化训练效率与可扩展性。两者推动了多模态大型语言模型(MLLMs)的发展,如LLaVA、BLIP-2和Flamingo等,实现了视觉问答、图像描述生成等复杂任务。这些模型不仅拓展了理论边界,还为医疗、教育等领域释放技术潜力,标志着多模态智能系统的重要进步。
2435 13
多模态AI核心技术:CLIP与SigLIP技术原理与应用进展
|
自然语言处理 监控 安全
SmolLM2:多阶段训练策略优化和高质量数据集,小型语言模型同样可以实现卓越的性能表现
SmolLM2 通过创新的多阶段训练策略、高质量数据集的构建与优化,以及精细的模型后训练调优,在 1.7B 参数规模下实现了卓越的性能表现,并在多个基准测试中超越了同等规模甚至更大规模的语言模型。
771 73
SmolLM2:多阶段训练策略优化和高质量数据集,小型语言模型同样可以实现卓越的性能表现
|
11月前
|
开发者
(在线CAD控件)网页CAD实现粗糙度标注的方法
本文介绍了通过MxCAD二次开发实现机械制图中表面粗糙度符号的标注功能。表面粗糙度符号用于表示零件表面微观不平度,基本形式为三角形,可结合不同修饰(如加横线、小圆等)表达具体加工要求。文章解析了符号含义,并基于McDbCustomEntity类创建自定义实体,实现符号绘制、数据持久化、夹点设置等功能。此外,还提供了用户交互式标注方法,支持根据直线、圆弧或指定角度生成粗糙度标注。最后展示了效果演示及扩展开发示例,便于开发者进一步定制功能。
|
搜索推荐 物联网 PyTorch
Qwen2.5-7B-Instruct Lora 微调
本教程介绍如何基于Transformers和PEFT框架对Qwen2.5-7B-Instruct模型进行LoRA微调。
14017 34
Qwen2.5-7B-Instruct Lora 微调
|
PyTorch 算法框架/工具 索引
Transformers 4.37 中文文档(九十三)(5)
Transformers 4.37 中文文档(九十三)
612 1
|
机器学习/深度学习 自然语言处理 搜索推荐
构建智能搜索应用:Elasticsearch与自然语言处理的融合
【8月更文第28天】随着大数据和人工智能技术的发展,用户对搜索应用的需求已经从简单的关键词匹配转向了更加智能化、人性化的交互方式。本文将探讨如何利用Elasticsearch和自然语言处理(NLP)技术构建一个能够理解用户意图并提供精准搜索结果的智能搜索系统。
1290 0

热门文章

最新文章

下一篇
开通oss服务