Transformers 文档

InstructBLIP

Hugging Face's logo
加入 Hugging Face 社区

并获得增强的文档体验

开始使用

InstructBLIP

PyTorch

概述

InstructBLIP 模型由 Wenliang Dai、Junnan Li、Dongxu Li、Anthony Meng Huat Tiong、Junqi Zhao、Weisheng Wang、Boyang Li、Pascale Fung、Steven Hoi 在 InstructBLIP: Towards General-purpose Vision-Language Models with Instruction Tuning 中提出。InstructBLIP 利用 BLIP-2 架构进行视觉指令微调。

论文摘要如下:

在预训练和指令微调管道的驱动下,能够解决各种语言领域任务的通用语言模型已经出现。然而,由于额外视觉输入带来的任务差异性增加,构建通用视觉语言模型仍具挑战性。尽管视觉语言预训练已得到广泛研究,但视觉语言指令微调相对探索较少。在本文中,我们基于预训练的 BLIP-2 模型对视觉语言指令微调进行了系统和全面的研究。我们收集了 26 个公开可用数据集,将其转换为指令微调格式,并将其分为两个集群,用于内部指令微调和外部零样本评估。此外,我们引入了指令感知视觉特征提取,这是一种关键方法,使模型能够提取针对给定指令的有用特征。由此产生的 InstructBLIP 模型在所有 13 个外部数据集上实现了最先进的零样本性能,显著优于 BLIP-2 和更大的 Flamingo。我们的模型在针对单个下游任务(例如,ScienceQA IMG 上的 90.7% 准确率)进行微调时也达到了最先进的性能。此外,我们定性地展示了 InstructBLIP 相对于同期多模态模型的优势。

drawing InstructBLIP 架构。摘自原始论文。

该模型由 nielsr 贡献。原始代码可在 此处 找到。

使用技巧

InstructBLIP 使用与 BLIP-2 相同的架构,但有一个微小但重要的区别:它还将文本提示(指令)输入到 Q-Former。

[!注意] 版本 v4.46 发布后的 BLIP 模型将发出关于添加 processor.num_query_tokens = {{num_query_tokens}} 并扩展模型嵌入层以添加特殊 <image> 标记的警告。强烈建议,如果您拥有模型检查点,请将这些属性添加到处理器中;如果不是您拥有的,请提交 PR。添加这些属性意味着 BLIP 将添加每个图像所需的查询标记数量,并用与查询标记数量一样多的 <image> 占位符扩展文本。通常每个图像大约有 500 个标记,因此请确保文本没有被截断,否则在合并嵌入时将失败。这些属性可以从模型配置中获取,即 model.config.num_query_tokens,模型嵌入扩展可以通过遵循 此链接 来完成。

InstructBlipConfig

transformers.InstructBlipConfig

< >

( vision_config = None qformer_config = None text_config = None num_query_tokens = 32 image_token_index = None **kwargs )

参数

  • vision_config (dict, 可选) — 用于初始化 InstructBlipVisionConfig 的配置选项字典。
  • qformer_config (dict, 可选) — 用于初始化 InstructBlipQFormerConfig 的配置选项字典。
  • text_config (dict, 可选) — 用于初始化任何 PretrainedConfig 的配置选项字典。
  • num_query_tokens (int, 可选, 默认为 32) — 通过 Transformer 的查询 token 数量。
  • image_token_index (int, 可选) — 特殊图像 token 的 token 索引。
  • kwargs (可选) — 关键字参数字典。

InstructBlipConfig 是用于存储 InstructBlipForConditionalGeneration 配置的配置类。它用于根据指定参数实例化 InstructBLIP 模型,定义视觉模型、Q-Former 模型和语言模型配置。使用默认值实例化配置将生成与 InstructBLIP Salesforce/instruct-blip-flan-t5 架构相似的配置。

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

示例

>>> from transformers import (
...     InstructBlipVisionConfig,
...     InstructBlipQFormerConfig,
...     OPTConfig,
...     InstructBlipConfig,
...     InstructBlipForConditionalGeneration,
... )

>>> # Initializing a InstructBlipConfig with Salesforce/instruct-blip-flan-t5 style configuration
>>> configuration = InstructBlipConfig()

>>> # Initializing a InstructBlipForConditionalGeneration (with random weights) from the Salesforce/instruct-blip-flan-t5 style configuration
>>> model = InstructBlipForConditionalGeneration(configuration)

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

>>> # We can also initialize a InstructBlipConfig from a InstructBlipVisionConfig, InstructBlipQFormerConfig and any PretrainedConfig

>>> # Initializing InstructBLIP vision, InstructBLIP Q-Former and language model configurations
>>> vision_config = InstructBlipVisionConfig()
>>> qformer_config = InstructBlipQFormerConfig()
>>> text_config = OPTConfig()

>>> config = InstructBlipConfig.from_text_vision_configs(vision_config, qformer_config, text_config)

from_vision_qformer_text_configs

< >

( vision_config: InstructBlipVisionConfig qformer_config: InstructBlipQFormerConfig text_config: PretrainedConfig **kwargs ) InstructBlipConfig

返回

InstructBlipConfig

一个配置对象的实例

从 InstructBLIP 视觉模型、Q-Former 和语言模型配置实例化 InstructBlipConfig(或派生类)。

InstructBlipVisionConfig

transformers.InstructBlipVisionConfig

< >

( hidden_size = 1408 intermediate_size = 6144 num_hidden_layers = 39 num_attention_heads = 16 image_size = 224 patch_size = 14 hidden_act = 'gelu' layer_norm_eps = 1e-06 attention_dropout = 0.0 initializer_range = 1e-10 qkv_bias = True **kwargs )

参数

  • hidden_size (int, 可选, 默认为 1408) — 编码器层和池化层维度。
  • intermediate_size (int, 可选, 默认为 6144) — Transformer 编码器中“中间”(即,前馈)层的维度。
  • num_hidden_layers (int, 可选, 默认为 39) — Transformer 编码器中的隐藏层数量。
  • num_attention_heads (int, 可选, 默认为 16) — Transformer 编码器中每个注意力层的注意力头数量。
  • image_size (int, 可选, 默认为 224) — 每个图像的大小(分辨率)。
  • patch_size (int, 可选, 默认为 14) — 每个补丁的大小(分辨率)。
  • hidden_act (strfunction, 可选, 默认为 "gelu") — 编码器和池化器中的非线性激活函数(函数或字符串)。如果为字符串,则支持 "gelu""relu""selu""gelu_new" "gelu"。默认为 1e-5):层归一化层使用的 epsilon。
  • layer_norm_eps (float, 可选, 默认为 1e-06) — 层归一化层使用的 epsilon。
  • attention_dropout (float, 可选, 默认为 0.0) — 注意力概率的 dropout 比率。
  • initializer_range (float, 可选, 默认为 1e-10) — 用于初始化所有权重矩阵的截断正态分布初始化器的标准差。
  • qkv_bias (bool, 可选, 默认为 True) — 是否在自注意力层中为查询和值添加偏置。

这是用于存储 InstructBlipVisionModel 配置的配置类。它用于根据指定参数实例化 InstructBLIP 视觉编码器,定义模型架构。实例化默认配置将生成与 InstructBLIP Salesforce/instruct-blip-flan-t5 架构相似的配置。

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

示例

>>> from transformers import InstructBlipVisionConfig, InstructBlipVisionModel

>>> # Initializing a InstructBlipVisionConfig with Salesforce/instruct-blip-flan-t5 style configuration
>>> configuration = InstructBlipVisionConfig()

>>> # Initializing a InstructBlipVisionModel (with random weights) from the Salesforce/instruct-blip-flan-t5 style configuration
>>> model = InstructBlipVisionModel(configuration)

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

InstructBlipQFormerConfig

transformers.InstructBlipQFormerConfig

< >

( vocab_size = 30522 hidden_size = 768 num_hidden_layers = 12 num_attention_heads = 12 intermediate_size = 3072 hidden_act = 'gelu' hidden_dropout_prob = 0.1 attention_probs_dropout_prob = 0.1 max_position_embeddings = 512 initializer_range = 0.02 layer_norm_eps = 1e-12 pad_token_id = 0 position_embedding_type = 'absolute' cross_attention_frequency = 2 encoder_hidden_size = 1408 **kwargs )

参数

  • vocab_size (int, 可选, 默认为 30522) — Q-Former 模型的词汇表大小。定义了调用模型时 inputs_ids 可以表示的不同 token 的数量。
  • hidden_size (int, 可选, 默认为 768) — 编码器层和池化层维度。
  • num_hidden_layers (int, 可选, 默认为 12) — Transformer 编码器中的隐藏层数量。
  • num_attention_heads (int, 可选, 默认为 12) — Transformer 编码器中每个注意力层的注意力头数量。
  • intermediate_size (int, 可选, 默认为 3072) — Transformer 编码器中“中间”(通常称为前馈)层的维度。
  • hidden_act (strCallable, 可选, 默认为 "gelu") — 编码器和池化器中的非线性激活函数(函数或字符串)。如果为字符串,则支持 "gelu""relu""silu""gelu_new"
  • hidden_dropout_prob (float, 可选, 默认为 0.1) — 嵌入、编码器和池化器中所有全连接层的 dropout 概率。
  • attention_probs_dropout_prob (float, 可选, 默认为 0.1) — 注意力概率的 dropout 比率。
  • max_position_embeddings (int, 可选, 默认为 512) — 此模型可能使用的最大序列长度。通常为了以防万一设置为较大值(例如,512、1024 或 2048)。
  • initializer_range (float, 可选, 默认为 0.02) — 用于初始化所有权重矩阵的 `truncated_normal_initializer` 的标准差。
  • layer_norm_eps (float, 可选, 默认为 1e-12) — 层归一化层使用的 epsilon 值。
  • pad_token_id (int, 可选, 默认为 0) — 用于填充序列的标记ID。
  • 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.) 中的 *方法 4*。
  • cross_attention_frequency (int, 可选, 默认为 2) — 将交叉注意力添加到 Transformer 层的频率。
  • encoder_hidden_size (int, 可选, 默认为 1408) — 交叉注意力隐藏状态的隐藏大小。

这是用于存储 InstructBlipQFormerModel 配置的配置类。它用于根据指定的参数实例化一个 InstructBLIP 查询 Transformer (Q-Former) 模型,定义模型架构。使用默认值实例化配置将生成与 InstructBLIP Salesforce/instruct-blip-flan-t5 架构类似的配置。配置对象继承自 PretrainedConfig,可用于控制模型输出。有关更多信息,请阅读 PretrainedConfig 的文档。

请注意,InstructBlipQFormerModel 与带有交错交叉注意力的 BertLMHeadModel 非常相似。

示例

>>> from transformers import InstructBlipQFormerConfig, InstructBlipQFormerModel

>>> # Initializing a InstructBLIP Salesforce/instruct-blip-flan-t5 style configuration
>>> configuration = InstructBlipQFormerConfig()

>>> # Initializing a model (with random weights) from the Salesforce/instruct-blip-flan-t5 style configuration
>>> model = InstructBlipQFormerModel(configuration)
>>> # Accessing the model configuration
>>> configuration = model.config

InstructBlipProcessor

class transformers.InstructBlipProcessor

< >

( image_processor tokenizer qformer_tokenizer num_query_tokens = None **kwargs )

参数

  • image_processor (BlipImageProcessor) — BlipImageProcessor 的实例。图像处理器是必需的输入。
  • tokenizer (AutoTokenizer) — [‘PreTrainedTokenizer`] 的实例。分词器是必需的输入。
  • qformer_tokenizer (AutoTokenizer) — [‘PreTrainedTokenizer`] 的实例。Q-Former 分词器是必需的输入。
  • num_query_tokens (int, 可选) — QFormer 用作查询的标记数,应与模型的配置相同。

构建一个 InstructBLIP 处理器,它将 BLIP 图像处理器和 LLaMa/T5 分词器封装到一个处理器中。

InstructBlipProcessor 提供 BlipImageProcessorAutoTokenizer 的所有功能。有关更多信息,请参阅 __call__()decode() 的文档字符串。

batch_decode

< >

( *args **kwargs )

此方法将其所有参数转发给 PreTrainedTokenizer 的 batch_decode()。有关更多信息,请参阅此方法的文档字符串。

decode

< >

( *args **kwargs )

此方法将其所有参数转发给 PreTrainedTokenizer 的 decode()。有关此方法的更多信息,请参阅其文档字符串。

InstructBlipVisionModel

class transformers.InstructBlipVisionModel

< >

( config: InstructBlipVisionConfig )

forward

< >

( pixel_values: typing.Optional[torch.FloatTensor] = None output_attentions: typing.Optional[bool] = None output_hidden_states: typing.Optional[bool] = None return_dict: typing.Optional[bool] = None interpolate_pos_encoding: bool = False ) transformers.modeling_outputs.BaseModelOutputWithPooling or tuple(torch.FloatTensor)

参数

  • pixel_values (形状为 (batch_size, num_channels, image_size, image_size)torch.FloatTensor, 可选) — 对应于输入图像的张量。像素值可以使用 {image_processor_class} 获取。有关详细信息,请参阅 {image_processor_class}.__call__{processor_class} 使用 {image_processor_class} 处理图像)。
  • output_attentions (bool, 可选) — 是否返回所有注意力层的注意力张量。有关更多详细信息,请参阅返回张量下的 attentions
  • output_hidden_states (bool, 可选) — 是否返回所有层的隐藏状态。有关更多详细信息,请参阅返回张量下的 hidden_states
  • return_dict (bool, 可选) — 是否返回 ModelOutput 而不是纯元组。
  • interpolate_pos_encoding (bool, 默认为 False) — 是否对预训练的位置编码进行插值。

返回

transformers.modeling_outputs.BaseModelOutputWithPoolingtuple(torch.FloatTensor)

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

  • last_hidden_state (torch.FloatTensor, 形状为 (batch_size, sequence_length, hidden_size)) — 模型最后一层输出的隐藏状态序列。

  • pooler_output (形状为 (batch_size, hidden_size)torch.FloatTensor) — 序列第一个标记(分类标记)的最后一层隐藏状态,经过辅助预训练任务所用层的进一步处理。例如,对于 BERT 家族模型,这会返回经过线性层和 tanh 激活函数处理后的分类标记。线性层权重在预训练期间通过下一个句子预测(分类)目标进行训练。

  • hidden_states (tuple(torch.FloatTensor), 可选, 当传入 output_hidden_states=Trueconfig.output_hidden_states=True 时返回) — torch.FloatTensor 的元组(一个用于嵌入层输出,如果模型有嵌入层,+ 每个层输出一个)形状为 (batch_size, sequence_length, hidden_size)

    模型在每个层输出的隐藏状态以及可选的初始嵌入输出。

  • attentions (tuple(torch.FloatTensor), 可选, 当传入 output_attentions=Trueconfig.output_attentions=True 时返回) — torch.FloatTensor 的元组(每个层一个)形状为 (batch_size, num_heads, sequence_length, sequence_length)

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

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

尽管前向传播的实现需要在该函数内部定义,但之后应调用 Module 实例而不是该函数,因为前者负责运行预处理和后处理步骤,而后者则默默地忽略它们。

InstructBlipQFormerModel

class transformers.InstructBlipQFormerModel

< >

( config: InstructBlipQFormerConfig )

查询 Transformer (Q-Former),用于 InstructBLIP。与 BLIP-2 略有不同,因为它也将指令作为输入。

forward

< >

( input_ids: LongTensor attention_mask: typing.Optional[torch.FloatTensor] = None position_ids: typing.Optional[torch.LongTensor] = None query_embeds: typing.Optional[torch.Tensor] = None head_mask: typing.Optional[torch.FloatTensor] = None encoder_hidden_states: typing.Optional[torch.FloatTensor] = None encoder_attention_mask: typing.Optional[torch.FloatTensor] = None past_key_values: typing.Optional[tuple[tuple[torch.FloatTensor]]] = None use_cache: typing.Optional[bool] = None output_attentions: typing.Optional[bool] = None output_hidden_states: typing.Optional[bool] = None return_dict: typing.Optional[bool] = None )

encoder_hidden_states (形状为 (batch_size, sequence_length, hidden_size)torch.FloatTensor, 可选):编码器最后一层输出的隐藏状态序列。如果模型配置为解码器,则用于交叉注意力。encoder_attention_mask (形状为 (batch_size, sequence_length)torch.FloatTensor, 可选):用于避免在编码器输入的填充标记索引上执行注意力的掩码。如果模型配置为解码器,则此掩码用于交叉注意力。掩码值选择在 [0, 1]

  • 1 表示 未被掩盖 的标记,
  • 0 表示被 **掩码** 的标记。past_key_values (长度为 config.n_layerstuple(tuple(torch.FloatTensor)),每个元组有 4 个张量,形状为 (batch_size, num_heads, sequence_length - 1, embed_size_per_head)):包含注意力块的预计算键值隐藏状态。可用于加速解码。如果使用 past_key_values,用户可以选择仅输入形状为 (batch_size, 1) 的最后 decoder_input_ids(那些没有将其过去键值状态提供给此模型的)而不是形状为 (batch_size, sequence_length) 的所有 decoder_input_ids。use_cache (bool, 可选):如果设置为 True,则返回 past_key_values 键值状态,可用于加速解码(参见 past_key_values)。

InstructBlipModel

class transformers.InstructBlipModel

< >

( config: InstructBlipConfig )

参数

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

InstructBLIP 基础模型,由语言模型、qformer 和视觉编码器组成。

此模型继承自 PreTrainedModel。请查看超类文档,了解库为其所有模型实现的通用方法(例如下载或保存、调整输入嵌入大小、修剪头部等)。

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

forward

< >

( pixel_values: FloatTensor qformer_input_ids: FloatTensor qformer_attention_mask: typing.Optional[torch.LongTensor] = None input_ids: typing.Optional[torch.FloatTensor] = None attention_mask: typing.Optional[torch.LongTensor] = None decoder_input_ids: typing.Optional[torch.LongTensor] = None decoder_attention_mask: typing.Optional[torch.LongTensor] = None output_attentions: typing.Optional[bool] = None output_hidden_states: typing.Optional[bool] = None return_dict: typing.Optional[bool] = None interpolate_pos_encoding: bool = False use_cache: typing.Optional[bool] = None **kwargs: typing_extensions.Unpack[transformers.modeling_flash_attention_utils.FlashAttentionKwargs] ) transformers.models.instructblip.modeling_instructblip.InstructBlipForConditionalGenerationModelOutput or tuple(torch.FloatTensor)

参数

  • pixel_values (形状为 (batch_size, num_channels, image_size, image_size)torch.FloatTensor) — 对应于输入图像的张量。像素值可以使用 {image_processor_class} 获取。有关详细信息,请参阅 {image_processor_class}.__call__{processor_class} 使用 {image_processor_class} 处理图像)。
  • qformer_input_ids (形状为 (batch_size, sequence_length)torch.LongTensor, 可选) — Q-Former 词汇表中输入序列标记的索引。可以可选地提供输入标记作为文本提示,Q-Former 模型将对其进行编码。

    索引可以使用 InstructBlipProcessor 获取。有关详细信息,请参阅 InstructBlipProcessor.__call__()

    什么是输入 ID?

  • qformer_attention_mask (形状为 (batch_size, sequence_length)torch.Tensor, 可选) — 用于避免在填充标记索引上执行注意力的掩码。掩码值选择在 [0, 1]

    • 1 表示 **未掩码** 的标记,
    • 0 表示 **已掩码** 的标记。

    什么是注意力掩码?

  • input_ids (形状为 (batch_size, sequence_length)torch.LongTensor, 可选) — 语言模型词汇表中输入序列标记的索引。可以可选地提供输入标记作为文本提示,语言模型可以继续生成。

    索引可以使用 InstructBlipProcessor 获取。有关详细信息,请参阅 InstructBlipProcessor.__call__()

    什么是输入 ID?

  • attention_mask (形状为 (batch_size, sequence_length)torch.LongTensor, 可选) — 用于避免在填充标记索引上执行注意力的掩码。掩码值选择在 [0, 1]

    • 1 表示 **未掩码** 的标记,
    • 0 表示 **已掩码** 的标记。

    什么是注意力掩码?

  • decoder_input_ids (形状为 (batch_size, target_sequence_length)torch.LongTensor, 可选) — 解码器输入序列标记在词汇表中的索引。

    索引可以使用 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 而不是纯元组。
  • interpolate_pos_encoding (bool, 默认为 False) — 是否对预训练的位置编码进行插值。
  • use_cache (bool, 可选) — 如果设置为 True,则返回 past_key_values 键值状态,可用于加速解码(参见 past_key_values)。

返回

transformers.models.instructblip.modeling_instructblip.InstructBlipForConditionalGenerationModelOutputtuple(torch.FloatTensor)

一个 transformers.models.instructblip.modeling_instructblip.InstructBlipForConditionalGenerationModelOutput 或一个 torch.FloatTensor 元组(如果传入 return_dict=Falseconfig.return_dict=False)包含各种元素,具体取决于配置 (InstructBlipConfig) 和输入。

  • loss (torch.FloatTensor, 可选, 当提供 labels 时返回, 形状为 (1,)torch.FloatTensor) — 语言模型的语言建模损失。
  • logits (形状为 (batch_size, sequence_length, config.vocab_size)torch.FloatTensor) — 语言模型的语言建模头部预测分数。
  • vision_outputs (torch.FloatTensor, 可选, 默认为 None) — 视觉编码器的输出。
  • qformer_outputs (tuple[torch.FloatTensor], 可选, 默认为 None) — Q-Former(查询 Transformer)的输出。
  • language_model_outputs (CausalLMOutputWithPastSeq2SeqLMOutput) — 语言模型的输出。

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

尽管前向传播的实现需要在该函数内部定义,但之后应调用 Module 实例而不是该函数,因为前者负责运行预处理和后处理步骤,而后者则默默地忽略它们。

InstructBlipForConditionalGeneration

class transformers.InstructBlipForConditionalGeneration

< >

( config: InstructBlipConfig )

参数

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

InstructBLIP 模型,用于根据图像和可选的文本提示生成文本。该模型由视觉编码器、查询 Transformer (Q-Former) 和语言模型组成。

可以选择向模型传递 input_ids 作为文本提示,以便语言模型继续提示。否则,语言模型将从 [BOS] (序列开始) token 开始生成文本。

此模型继承自 PreTrainedModel。请查看超类文档,了解库为其所有模型实现的通用方法(例如下载或保存、调整输入嵌入大小、修剪头部等)。

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

forward

< >

( pixel_values: FloatTensor qformer_input_ids: FloatTensor qformer_attention_mask: typing.Optional[torch.LongTensor] = None input_ids: typing.Optional[torch.FloatTensor] = None attention_mask: typing.Optional[torch.LongTensor] = None decoder_input_ids: typing.Optional[torch.LongTensor] = None decoder_attention_mask: typing.Optional[torch.LongTensor] = None output_attentions: typing.Optional[bool] = None output_hidden_states: typing.Optional[bool] = None labels: typing.Optional[torch.LongTensor] = None return_dict: typing.Optional[bool] = None interpolate_pos_encoding: bool = False use_cache: typing.Optional[bool] = None **kwargs: typing_extensions.Unpack[transformers.models.instructblip.modeling_instructblip.KwargsForCausalLM] ) transformers.models.instructblip.modeling_instructblip.InstructBlipForConditionalGenerationModelOutputtuple(torch.FloatTensor)

参数

  • pixel_values (形状为 (batch_size, num_channels, image_size, image_size)torch.FloatTensor) — 对应于输入图像的张量。像素值可以使用 {image_processor_class} 获取。有关详细信息,请参阅 {image_processor_class}.__call__{processor_class} 使用 {image_processor_class} 处理图像)。
  • qformer_input_ids (形状为 (batch_size, sequence_length)torch.LongTensor, 可选) — Q-Former 词汇表中输入序列标记的索引。可以可选地提供输入标记作为文本提示,Q-Former 模型将对其进行编码。

    索引可以使用 InstructBlipProcessor 获取。有关详细信息,请参阅 InstructBlipProcessor.__call__()

    什么是输入 ID?

  • qformer_attention_mask (torch.Tensor,形状为 (batch_size, sequence_length)可选) — 用于避免对填充标记索引执行注意力操作的掩码。掩码值选择范围为 [0, 1]

    • 1 表示**未被掩码**的标记,
    • 0 表示**被掩码**的标记。

    什么是注意力掩码?

  • input_ids (torch.LongTensor,形状为 (batch_size, sequence_length)可选) — 语言模型词汇表中输入序列标记的索引。可以可选地提供输入标记作为文本提示,语言模型可以继续生成。

    索引可以使用 InstructBlipProcessor 获取。有关详细信息,请参阅 InstructBlipProcessor.__call__()

    什么是输入 ID?

  • attention_mask (torch.LongTensor,形状为 (batch_size, sequence_length)可选) — 用于避免对填充标记索引执行注意力操作的掩码。掩码值选择范围为 [0, 1]

    • 1 表示**未被掩码**的标记,
    • 0 表示**被掩码**的标记。

    什么是注意力掩码?

  • decoder_input_ids (torch.LongTensor,形状为 (batch_size, target_sequence_length)可选) — 解码器输入序列标记在词汇表中的索引。

    索引可以使用 AutoTokenizer 获取。有关详细信息,请参阅 PreTrainedTokenizer.encode()PreTrainedTokenizer.call()

    什么是解码器输入 ID?

  • decoder_attention_mask (torch.BoolTensor,形状为 (batch_size, target_sequence_length)可选) — 默认行为:生成一个忽略 decoder_input_ids 中填充标记的张量。默认情况下也会使用因果掩码。

    仅当使用编码器-解码器语言模型(如 T5)时才相关。

  • output_attentions (bool, 可选) — 是否返回所有注意力层的注意力张量。有关更多详细信息,请参阅返回张量下的 attentions
  • output_hidden_states (bool, 可选) — 是否返回所有层的隐藏状态。有关更多详细信息,请参阅返回张量下的 hidden_states
  • labels (torch.LongTensor,形状为 (batch_size,)可选) — 用于计算语言建模损失的标签。索引应在 [-100, 0, ..., config.vocab_size - 1] 范围内。所有设置为 -100 的标签将被忽略(掩码),损失仅针对 [0, ..., config.vocab_size] 范围内的标签计算。
  • return_dict (bool, 可选) — 是否返回 ModelOutput 而不是普通元组。
  • interpolate_pos_encoding (bool, 默认为 False) — 是否插值预训练的位置编码。
  • use_cache (bool, 可选) — 如果设置为 True,则返回 past_key_values 键值状态,可用于加速解码(请参阅 past_key_values)。

返回

transformers.models.instructblip.modeling_instructblip.InstructBlipForConditionalGenerationModelOutputtuple(torch.FloatTensor)

一个 transformers.models.instructblip.modeling_instructblip.InstructBlipForConditionalGenerationModelOutput 或一个 torch.FloatTensor 元组(如果传入 return_dict=Falseconfig.return_dict=False)包含各种元素,具体取决于配置 (InstructBlipConfig) 和输入。

  • loss (torch.FloatTensor, 可选, 当提供 labels 时返回, 形状为 (1,)torch.FloatTensor) — 语言模型的语言建模损失。
  • logits (形状为 (batch_size, sequence_length, config.vocab_size)torch.FloatTensor) — 语言模型的语言建模头部预测分数。
  • vision_outputs (torch.FloatTensor, 可选, 默认为 None) — 视觉编码器的输出。
  • qformer_outputs (tuple[torch.FloatTensor], 可选, 默认为 None) — Q-Former(查询 Transformer)的输出。
  • language_model_outputs (CausalLMOutputWithPastSeq2SeqLMOutput) — 语言模型的输出。

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

尽管前向传播的实现需要在该函数内部定义,但之后应调用 Module 实例而不是该函数,因为前者负责运行预处理和后处理步骤,而后者则默默地忽略它们。

示例

>>> from transformers import InstructBlipProcessor, InstructBlipForConditionalGeneration
>>> import torch
>>> from PIL import Image
>>> import requests

>>> model = InstructBlipForConditionalGeneration.from_pretrained("Salesforce/instructblip-vicuna-7b")
>>> processor = InstructBlipProcessor.from_pretrained("Salesforce/instructblip-vicuna-7b")

>>> device = "cuda" if torch.cuda.is_available() else "cpu"
>>> model.to(device)
>>> url = "https://raw.githubusercontent.com/salesforce/LAVIS/main/docs/_static/Confusing-Pictures.jpg"
>>> image = Image.open(requests.get(url, stream=True).raw).convert("RGB")
>>> prompt = "What is unusual about this image?"
>>> inputs = processor(images=image, text=prompt, return_tensors="pt").to(device)

>>> outputs = model.generate(
...     **inputs,
...     do_sample=False,
...     num_beams=5,
...     max_length=256,
...     min_length=1,
...     top_p=0.9,
...     repetition_penalty=1.5,
...     length_penalty=1.0,
...     temperature=1,
... )
>>> generated_text = processor.batch_decode(outputs, skip_special_tokens=True)[0].strip()
>>> print(generated_text)
The unusual aspect of this image is that a man is ironing clothes on the back of a yellow SUV, which is parked in the middle of a busy city street. This is an unconventional approach to ironing clothes, as it requires the man to balance himself and his ironing equipment on top of the vehicle while navigating through traffic. Additionally, the presence of taxis and other vehicles in the scene further emphasizes the unusual nature of this situation.

生成

< >

( pixel_values: FloatTensor qformer_input_ids: typing.Optional[torch.LongTensor] = None qformer_attention_mask: typing.Optional[torch.LongTensor] = None input_ids: typing.Optional[torch.LongTensor] = None attention_mask: typing.Optional[torch.LongTensor] = None interpolate_pos_encoding: bool = False **generate_kwargs ) captions (列表)

参数

  • pixel_values (torch.FloatTensor,形状为 (batch_size, num_channels, height, width)) — 待处理的输入图像。
  • qformer_input_ids (torch.LongTensor,形状为 (batch_size, sequence_length),可选) — 用作提示序列以馈送给 Q-Former 模块的序列。
  • qformer_attention_mask (torch.LongTensor,形状为 (batch_size, sequence_length),可选) — 用于避免对填充标记索引执行注意力操作的掩码。
  • input_ids (torch.LongTensor,形状为 (batch_size, sequence_length),可选) — 用作生成提示的序列。
  • attention_mask (torch.LongTensor,形状为 (batch_size, sequence_length),可选) — 用于避免对填充标记索引执行注意力操作的掩码。
  • interpolate_pos_encoding (bool, 可选, 默认为 False) — 是否插值图像嵌入的位置编码。

返回

captions (列表)

一个字符串列表,长度为 batch_size * num_captions。

覆盖 generate 函数,以便能够将模型用作条件生成器。

< > 在 GitHub 上更新