Transformers 4.37 中文文档(八十三)(1)https://developer.aliyun.com/article/1563248
Blip2ForConditionalGeneration
class transformers.Blip2ForConditionalGeneration
( config: Blip2Config )
参数
config
(Blip2Config)— 包含模型所有参数的模型配置类。使用配置文件初始化不会加载与模型相关的权重,只会加载配置。查看 from_pretrained()方法以加载模型权重。
用于根据图像和可选文本提示生成文本的 BLIP-2 模型。该模型由视觉编码器、查询变换器(Q-Former)和语言模型组成。
可以选择将input_ids
传递给模型,作为文本提示,以使语言模型继续提示。否则,语言模型将从[BOS](序列开始)标记开始生成文本。
请注意,Flan-T5 检查点不能转换为 float16。它们是使用 bfloat16 进行预训练的。
此模型继承自 PreTrainedModel。查看超类文档以了解库为所有模型实现的通用方法(如下载或保存、调整输入嵌入、修剪头等)。
此模型还是 PyTorch torch.nn.Module子类。将其用作常规 PyTorch 模块,并参考 PyTorch 文档以获取有关一般用法和行为的所有相关信息。
forward
( pixel_values: FloatTensor input_ids: FloatTensor attention_mask: Optional = None decoder_input_ids: Optional = None decoder_attention_mask: Optional = None output_attentions: Optional = None output_hidden_states: Optional = None labels: Optional = None return_dict: Optional = None ) → export const metadata = 'undefined';transformers.models.blip_2.modeling_blip_2.Blip2ForConditionalGenerationModelOutput or tuple(torch.FloatTensor)
参数
pixel_values
(形状为(batch_size, num_channels, height, width)
的torch.FloatTensor
)- 像素值。可以使用 Blip2Processor 获取像素值。有关详细信息,请参见Blip2Processor.__call__()
。input_ids
(形状为(batch_size, sequence_length)
的torch.LongTensor
,可选)- 语言模型词汇表中输入序列标记的索引。输入标记可以选择作为文本提示提供,语言模型可以继续。
可以使用 Blip2Processor 获取索引。有关详细信息,请参见Blip2Processor.__call__()
。
输入 ID 是什么?attention_mask
(形状为(batch_size, sequence_length)
的torch.Tensor
,可选)- 用于避免在填充标记索引上执行注意力的掩码。选择的掩码值在[0, 1]
中:
- 对于“未屏蔽”的标记,
- 对于“屏蔽”的标记为 0。
- 什么是注意力掩码?
decoder_input_ids
(形状为(batch_size, target_sequence_length)
的torch.LongTensor
,可选)- 解码器输入序列标记在语言模型词汇表中的索引。仅在使用编码器-解码器语言模型(如 T5)时相关。
可以使用 AutoTokenizer 获取索引。有关详细信息,请参见 PreTrainedTokenizer.encode()和 PreTrainedTokenizer.call
()。解码器输入 ID 是什么?decoder_attention_mask
(形状为(batch_size, target_sequence_length)
的torch.BoolTensor
,可选)- 默认行为:生成一个张量,忽略decoder_input_ids
中的填充标记。因果掩码也将默认使用。
仅在使用编码器-解码器语言模型(如 T5)时相关。output_attentions
(bool
,可选)- 是否返回所有注意力层的注意力张量。有关更多详细信息,请参见返回张量下的attentions
。output_hidden_states
(bool
,可选)- 是否返回所有层的隐藏状态。有关更多详细信息,请参见返回张量下的hidden_states
。return_dict
(bool
,可选)- 是否返回 ModelOutput 而不是普通元组。
返回
transformers.models.blip_2.modeling_blip_2.Blip2ForConditionalGenerationModelOutput
或tuple(torch.FloatTensor)
一个transformers.models.blip_2.modeling_blip_2.Blip2ForConditionalGenerationModelOutput
或一个torch.FloatTensor
元组(如果传递了return_dict=False
或config.return_dict=False
时)包含根据配置()和输入的各种元素。
loss
(torch.FloatTensor
,可选,在提供labels
时返回,形状为(1,)
的torch.FloatTensor
)- 语言模型的语言建模损失。logits
(形状为(batch_size, sequence_length, config.vocab_size)
的torch.FloatTensor
)- 语言模型头的预测分数。vision_outputs
(BaseModelOutputWithPooling
)- 视觉编码器的输出。qformer_outputs
(BaseModelOutputWithPoolingAndCrossAttentions
)- Q-Former(Querying Transformer)的输出。language_model_outputs
(CausalLMOutputWithPast
或Seq2SeqLMOutput
)- 语言模型的输出。
Blip2ForConditionalGeneration 的前向方法,覆盖了__call__
特殊方法。
尽管前向传递的配方需要在此函数内定义,但应该在此之后调用Module
实例,而不是这个,因为前者负责运行预处理和后处理步骤,而后者则默默地忽略它们。
示例:
准备处理器、模型和图像输入
>>> from PIL import Image >>> import requests >>> from transformers import Blip2Processor, Blip2ForConditionalGeneration >>> import torch >>> device = "cuda" if torch.cuda.is_available() else "cpu" >>> processor = Blip2Processor.from_pretrained("Salesforce/blip2-opt-2.7b") >>> model = Blip2ForConditionalGeneration.from_pretrained( ... "Salesforce/blip2-opt-2.7b", load_in_8bit=True, device_map={"": 0}, torch_dtype=torch.float16 ... ) # doctest: +IGNORE_RESULT >>> url = "http://images.cocodataset.org/val2017/000000039769.jpg" >>> image = Image.open(requests.get(url, stream=True).raw)
图像字幕(不提供文本提示):
>>> inputs = processor(images=image, return_tensors="pt").to(device, torch.float16) >>> generated_ids = model.generate(**inputs) >>> generated_text = processor.batch_decode(generated_ids, skip_special_tokens=True)[0].strip() >>> print(generated_text) two cats laying on a couch
视觉问答(提示=问题):
>>> prompt = "Question: how many cats are there? Answer:" >>> inputs = processor(images=image, text=prompt, return_tensors="pt").to(device="cuda", dtype=torch.float16) >>> generated_ids = model.generate(**inputs) >>> generated_text = processor.batch_decode(generated_ids, skip_special_tokens=True)[0].strip() >>> print(generated_text) two
请注意,也支持通过bitsandbytes进行 int8 推理。这大大减少了模型使用的内存量,同时保持相同的性能。
>>> model = Blip2ForConditionalGeneration.from_pretrained( ... "Salesforce/blip2-opt-2.7b", load_in_8bit=True, device_map={"": 0}, torch_dtype=torch.bfloat16 ... ) # doctest: +IGNORE_RESULT >>> inputs = processor(images=image, text=prompt, return_tensors="pt").to(device="cuda", dtype=torch.bfloat16) >>> generated_ids = model.generate(**inputs) >>> generated_text = processor.batch_decode(generated_ids, skip_special_tokens=True)[0].strip() >>> print(generated_text) two
generate
( pixel_values: FloatTensor input_ids: Optional = None attention_mask: Optional = None **generate_kwargs ) → export const metadata = 'undefined';captions (list)
参数
pixel_values
(形状为(batch_size, num_channels, height, width)的torch.FloatTensor
)—要处理的输入图像。input_ids
(形状为(batch_size, sequence_length)的torch.LongTensor
,可选)—用作生成提示的序列。attention_mask
(形状为(batch_size, sequence_length)的torch.LongTensor
,可选)—避免在填充标记索引上执行注意力的掩码
返回
字幕(列表)
一个长度为 batch_size * num_captions 的字符串列表。
覆盖generate
函数以能够将模型用作条件生成器。
BridgeTower
原文链接:
huggingface.co/docs/transformers/v4.37.2/en/model_doc/bridgetower
概述
BridgeTower 模型是由 Xiao Xu、Chenfei Wu、Shachar Rosenman、Vasudev Lal、Wanxiang Che、Nan Duan 在《BridgeTower: Building Bridges Between Encoders in Vision-Language Representative Learning》中提出的。该模型的目标是在每个交叉模态编码器的每一层之间建立桥梁,以实现全面和详细的交互,从而在各种下游任务中取得显著的性能,几乎没有额外的性能和计算成本。
本文已被AAAI’23会议接受。
论文摘要如下:
近年来,具有双塔架构的视觉语言(VL)模型在视觉语言表示学习中占据主导地位。当前的 VL 模型要么使用轻量级的单模编码器并学习同时提取、对齐和融合两种模态,要么将深度预训练的单模编码器的最后一层单模表示馈送到顶部交叉模态编码器中。这两种方法都可能限制视觉语言表示学习并限制模型性能。在本文中,我们提出了 BRIDGETOWER,它引入了多个桥接层,建立了单模编码器的顶层与交叉模态编码器的每一层之间的连接。这使得在交叉模态编码器中能够有效地进行自底向上的跨模态对齐和融合,从而实现不同语义级别的预训练单模编码器的视觉和文本表示之间的交叉模态对齐和融合。仅使用 4M 张图像进行预训练,BRIDGETOWER 在各种下游视觉语言任务上实现了最先进的性能。特别是在 VQAv2 测试集上,BRIDGETOWER 实现了 78.73%的准确率,比之前的最先进模型 METER 高出 1.09%,使用相同的预训练数据几乎没有额外的参数和计算成本。值得注意的是,当进一步扩展模型时,BRIDGETOWER 实现了 81.15%的准确率,超过了在数量级更大的数据集上进行预训练的模型。
BridgeTower 架构。摘自原始论文。
该模型由Anahita Bhiwandiwalla、Tiep Le和Shaoyen Tseng贡献。原始代码可以在这里找到。
使用提示和示例
BridgeTower 包括一个视觉编码器、一个文本编码器和一个带有多个轻量级桥接层的交叉模态编码器。该方法的目标是在每个交叉模态编码器的每一层之间建立桥梁,以实现全面和详细的交互。原则上,可以在提出的架构中应用任何视觉、文本或交叉模态编码器。
BridgeTowerProcessor 将 RobertaTokenizer 和 BridgeTowerImageProcessor 封装成一个单一实例,用于同时对文本进行编码和准备图像。
以下示例展示了如何使用 BridgeTowerProcessor 和 BridgeTowerForContrastiveLearning 来运行对比学习。
>>> from transformers import BridgeTowerProcessor, BridgeTowerForContrastiveLearning >>> import requests >>> from PIL import Image >>> url = "http://images.cocodataset.org/val2017/000000039769.jpg" >>> image = Image.open(requests.get(url, stream=True).raw) >>> texts = ["An image of two cats chilling on a couch", "A football player scoring a goal"] >>> processor = BridgeTowerProcessor.from_pretrained("BridgeTower/bridgetower-large-itm-mlm-itc") >>> model = BridgeTowerForContrastiveLearning.from_pretrained("BridgeTower/bridgetower-large-itm-mlm-itc") >>> # forward pass >>> scores = dict() >>> for text in texts: ... # prepare inputs ... encoding = processor(image, text, return_tensors="pt") ... outputs = model(**encoding) ... scores[text] = outputs
以下示例显示如何使用 BridgeTowerProcessor 和 BridgeTowerForImageAndTextRetrieval 运行图像文本检索。
>>> from transformers import BridgeTowerProcessor, BridgeTowerForImageAndTextRetrieval >>> import requests >>> from PIL import Image >>> url = "http://images.cocodataset.org/val2017/000000039769.jpg" >>> image = Image.open(requests.get(url, stream=True).raw) >>> texts = ["An image of two cats chilling on a couch", "A football player scoring a goal"] >>> processor = BridgeTowerProcessor.from_pretrained("BridgeTower/bridgetower-base-itm-mlm") >>> model = BridgeTowerForImageAndTextRetrieval.from_pretrained("BridgeTower/bridgetower-base-itm-mlm") >>> # forward pass >>> scores = dict() >>> for text in texts: ... # prepare inputs ... encoding = processor(image, text, return_tensors="pt") ... outputs = model(**encoding) ... scores[text] = outputs.logits[0, 1].item()
以下示例显示如何使用 BridgeTowerProcessor 和 BridgeTowerForMaskedLM 运行掩码语言建模。
>>> from transformers import BridgeTowerProcessor, BridgeTowerForMaskedLM >>> from PIL import Image >>> import requests >>> url = "http://images.cocodataset.org/val2017/000000360943.jpg" >>> image = Image.open(requests.get(url, stream=True).raw).convert("RGB") >>> text = "a <mask> looking out of the window" >>> processor = BridgeTowerProcessor.from_pretrained("BridgeTower/bridgetower-base-itm-mlm") >>> model = BridgeTowerForMaskedLM.from_pretrained("BridgeTower/bridgetower-base-itm-mlm") >>> # prepare inputs >>> encoding = processor(image, text, return_tensors="pt") >>> # forward pass >>> outputs = model(**encoding) >>> results = processor.decode(outputs.logits.argmax(dim=-1).squeeze(0).tolist()) >>> print(results) .a cat looking out of the window.
提示:
- 此 BridgeTower 的实现使用 RobertaTokenizer 生成文本嵌入,并使用 OpenAI 的 CLIP/ViT 模型计算视觉嵌入。
- 发布了预训练的bridgeTower-base和bridgetower masked language modeling and image text matching的检查点。
- 请参考Table 5了解 BridgeTower 在图像检索和其他下游任务上的性能。
- 此模型的 PyTorch 版本仅在 torch 1.10 及更高版本中可用。
BridgeTowerConfig
class transformers.BridgeTowerConfig
( share_cross_modal_transformer_layers = True hidden_act = 'gelu' hidden_size = 768 initializer_factor = 1 layer_norm_eps = 1e-05 share_link_tower_layers = False link_tower_type = 'add' num_attention_heads = 12 num_hidden_layers = 6 tie_word_embeddings = False init_layernorm_from_vision_encoder = False text_config = None vision_config = None **kwargs )
参数
share_cross_modal_transformer_layers
(bool
, optional, defaults toTrue
) — 是否共享跨模态 transformer 层。hidden_act
(str
orfunction
, optional, defaults to"gelu"
) — 编码器和池化器中的非线性激活函数(函数或字符串)。hidden_size
(int
, optional, defaults to 768) — 编码器层和池化层的维度。initializer_factor
(float
, optional, defaults to 1) — 用于初始化所有权重矩阵的因子(应保持为 1,用于内部初始化测试)。layer_norm_eps
(float
, optional, defaults to 1e-05) — 层归一化层使用的 epsilon。share_link_tower_layers
(bool
, optional, defaults toFalse
) — 是否共享桥/链接塔层。link_tower_type
(str
, optional, defaults to"add"
) — 桥/链接层的类型。num_attention_heads
(int
, optional, defaults to 12) — Transformer 编码器中每个注意力层的注意力头数。num_hidden_layers
(int
, optional, defaults to 6) — Transformer 编码器中的隐藏层数量。tie_word_embeddings
(bool
, optional, defaults toFalse
) — 是否绑定输入和输出嵌入。init_layernorm_from_vision_encoder
(bool
, optional, defaults toFalse
) — 是否从视觉编码器初始化 LayerNorm。text_config
(dict
, optional) — 用于初始化 BridgeTowerTextConfig 的配置选项字典。vision_config
(dict
, optional) — 用于初始化 BridgeTowerVisionConfig 的配置选项字典。
这是用于存储 BridgeTowerModel 配置的配置类。根据指定的参数实例化一个 BridgeTower 模型,定义模型架构。使用默认值实例化配置将产生与 bridgetower-base BridgeTower/bridgetower-base架构类似的配置。
配置对象继承自 PretrainedConfig 并可用于控制模型输出。阅读来自 PretrainedConfig 的文档以获取更多信息。
示例:
>>> from transformers import BridgeTowerModel, BridgeTowerConfig >>> # Initializing a BridgeTower BridgeTower/bridgetower-base style configuration >>> configuration = BridgeTowerConfig() >>> # Initializing a model from the BridgeTower/bridgetower-base style configuration >>> model = BridgeTowerModel(configuration) >>> # Accessing the model configuration >>> configuration = model.config
from_text_vision_configs
( text_config: BridgeTowerTextConfig vision_config: BridgeTowerVisionConfig **kwargs )
从 BridgeTower 文本模型配置中实例化一个 BridgeTowerConfig(或派生类)。返回: BridgeTowerConfig: 配置对象的实例
BridgeTowerTextConfig
class transformers.BridgeTowerTextConfig
( vocab_size = 50265 hidden_size = 768 num_hidden_layers = 12 num_attention_heads = 12 initializer_factor = 1 intermediate_size = 3072 hidden_act = 'gelu' hidden_dropout_prob = 0.1 attention_probs_dropout_prob = 0.1 max_position_embeddings = 514 type_vocab_size = 1 layer_norm_eps = 1e-05 pad_token_id = 1 bos_token_id = 0 eos_token_id = 2 position_embedding_type = 'absolute' use_cache = True **kwargs )
参数
vocab_size
(int
, 可选, 默认为 50265) — 模型文本部分的词汇表大小。定义了在调用 BridgeTowerModel 时可以表示的不同标记数量。hidden_size
(int
, 可选, 默认为 768) — 编码器层和池化器层的维度。num_hidden_layers
(int
, 可选, 默认为 12) — Transformer 编码器中的隐藏层数量。num_attention_heads
(int
, 可选, 默认为 12) — Transformer 编码器中每个注意力层的注意力头数。intermediate_size
(int
, 可选, 默认为 3072) — Transformer 编码器中“中间”(通常称为前馈)层的维度。hidden_act
(str
或Callable
, 可选, 默认为"gelu"
) — 编码器和池化器中的非线性激活函数(函数或字符串)。如果是字符串,支持"gelu"
、"relu"
、"silu"
和"gelu_new"
。hidden_dropout_prob
(float
, 可选, 默认为 0.1) — 嵌入层、编码器和池化器中所有全连接层的丢弃概率。attention_probs_dropout_prob
(float
, 可选, 默认为 0.1) — 注意力概率的丢弃比率。max_position_embeddings
(int
, 可选, 默认为 514) — 此模型可能使用的最大序列长度。通常将其设置为一个较大的值以防万一(例如 512、1024 或 2048)。type_vocab_size
(int
, 可选, 默认为 2) —token_type_ids
的词汇表大小。initializer_factor
(float
, 可选, 默认为 1) — 用于初始化所有权重矩阵的因子(应保持为 1,用于内部初始化测试)。layer_norm_eps
(float
, 可选, 默认为 1e-05) — 层归一化层使用的 epsilon。position_embedding_type
(str
, 可选, 默认为"absolute"
) — 位置嵌入的类型。选择"absolute"
、"relative_key"
、"relative_key_query"
中的一个。对于位置嵌入,请使用"absolute"
。有关"relative_key"
的更多信息,请参考Self-Attention with Relative Position Representations (Shaw et al.)。有关"relative_key_query"
的更多信息,请参考Improve Transformer Models with Better Relative Position Embeddings (Huang et al.) 中的 Method 4。is_decoder
(bool
, 可选, 默认为False
) — 模型是否用作解码器。如果为False
,则模型用作编码器。use_cache
(bool
, 可选, 默认为True
) — 模型是否应返回最后的键/值注意力(并非所有模型都使用)。仅在config.is_decoder=True
时相关。
这是用于存储 BridgeTowerModel 的文本配置的配置类。这里的默认值是从 RoBERTa 复制的。使用默认值实例化配置将产生与 bridgetower-base BridegTower/bridgetower-base架构类似的配置。
配置对象继承自 PretrainedConfig,可用于控制模型输出。阅读 PretrainedConfig 的文档以获取更多信息。
示例:
>>> from transformers import BridgeTowerTextConfig >>> # Initializing a BridgeTower BridgeTower/bridgetower-base style configuration for the text model >>> configuration = BridgeTowerTextConfig() >>> # Accessing the configuration >>> configuration
Transformers 4.37 中文文档(八十三)(3)https://developer.aliyun.com/article/1563250