Transformers 文档

InstructBLIP

Hugging Face's logo
加入 Hugging Face 社区

并获得增强的文档体验

开始使用

InstructBLIP

PyTorch

概述

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

论文摘要如下

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

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

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

使用技巧

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

[!NOTE] 发布 v4.46 之后的 BLIP 模型会引发关于添加 processor.num_query_tokens = {{num_query_tokens}} 并扩展模型嵌入层以添加特殊的 <image> 令牌的警告。强烈建议如果您拥有模型检查点,则将属性添加到处理器,或者如果它不是您拥有的,则打开 PR。添加这些属性意味着 BLIP 将添加每个图像所需的查询令牌数量,并使用与查询令牌数量一样多的 <image> 占位符扩展文本。通常每个图像大约有 500 个令牌,因此请确保文本没有被截断,否则在合并嵌入时会失败。这些属性可以从模型配置中获得,如 model.config.num_query_tokens,模型嵌入扩展可以按照 this link 进行。

InstructBlipConfig

class 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 传递的查询令牌的数量。
  • image_token_index (int, *可选的*) — 特殊图像令牌的令牌索引。
  • 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

class 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, optional, defaults to 1408) — 编码器层和池化器层的维度。
  • intermediate_size (int, optional, defaults to 6144) — Transformer 编码器中“中间层”(即,前馈)的维度。
  • num_hidden_layers (int, optional, defaults to 39) — Transformer 编码器中的隐藏层数。
  • num_attention_heads (int, optional, defaults to 16) — Transformer 编码器中每个注意力层的注意力头数。
  • image_size (int, optional, defaults to 224) — 每张图片的大小(分辨率)。
  • patch_size (int, optional, defaults to 14) — 每个补丁的大小(分辨率)。
  • hidden_act (strfunction, optional, defaults to "gelu") — 编码器和池化器中的非线性激活函数(函数或字符串)。如果是字符串,则支持 "gelu", "relu", "selu""gelu_new" "gelu"。 到 1e-5):层归一化层使用的 epsilon 值。
  • layer_norm_eps (float, optional, defaults to 1e-06) — 层归一化层使用的 epsilon 值。
  • attention_dropout (float, optional, defaults to 0.0) — 注意力概率的 dropout 比率。
  • initializer_range (float, optional, defaults to 1e-10) — 用于初始化所有权重矩阵的 truncated_normal_initializer 的标准差。
  • qkv_bias (bool, optional, defaults to True) — 是否在自注意力层中向 queries 和 values 添加偏置。

这是用于存储 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

class 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, optional, defaults to 30522) — Q-Former 模型的词汇表大小。定义了在调用模型时可以通过 inputs_ids 传递的不同 token 的数量。
  • hidden_size (int, optional, defaults to 768) — 编码器层和池化器层的维度。
  • num_hidden_layers (int, optional, defaults to 12) — Transformer 编码器中的隐藏层数。
  • num_attention_heads (int, optional, defaults to 12) — Transformer 编码器中每个注意力层的注意力头数。
  • intermediate_size (int, optional, defaults to 3072) — Transformer 编码器中“中间层”(通常称为前馈层)的维度。
  • hidden_act (strCallable, optional, defaults to "gelu") — 编码器和池化器中的非线性激活函数(函数或字符串)。如果是字符串,则支持 "gelu", "relu", "silu""gelu_new"
  • hidden_dropout_prob (float, optional, defaults to 0.1) — embeddings、编码器和池化器中所有全连接层的 dropout 概率。
  • attention_probs_dropout_prob (float, optional, defaults to 0.1) — 注意力概率的 dropout 比率。
  • max_position_embeddings (int, optional, defaults to 512) — 此模型可能使用的最大序列长度。通常设置为较大的值以防万一(例如,512 或 1024 或 2048)。
  • initializer_range (float, optional, defaults to 0.02) — 用于初始化所有权重矩阵的截断正态分布初始化器的标准差,默认为 0.02。
  • layer_norm_eps (float, optional, defaults to 1e-12) — layer normalization 层使用的 epsilon 值,默认为 1e-12。
  • pad_token_id (int, optional, defaults to 0) — 用于 padding 序列的 token id,默认为 0。
  • position_embedding_type (str, optional, defaults to "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, optional, defaults to 2) — 将 cross-attention 添加到 Transformer 层的频率,默认为 2。
  • encoder_hidden_size (int, optional, defaults to 1408) — 用于 cross-attention 的隐藏状态的隐藏层大小,默认为 1408。

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

请注意,InstructBlipQFormerModel 与具有交错 cross-attention 的 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`] 的实例。tokenizer 是必需的输入。
  • qformer_tokenizer (AutoTokenizer) — [‘PreTrainedTokenizer`] 的实例。Q-Former tokenizer 是必需的输入。
  • num_query_tokens (int, optional) —” Qformer 用作查询的 token 数量,应与模型配置中的数量相同。

构建一个 InstructBLIP processor,它将 BLIP 图像处理器和 LLaMa/T5 tokenizer 包装成一个单独的 processor。

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.BaseModelOutputWithPoolingtuple(torch.FloatTensor)

参数

  • pixel_values (torch.FloatTensor, 形状为 (batch_size, num_channels, height, width)) — 像素值。像素值可以使用 InstructBlipProcessor 获得。 有关详细信息,请参阅 InstructBlipProcessor.__call__()
  • output_attentions (bool, optional) — 是否返回所有 attention 层的 attention tensors。 有关更多详细信息,请参见返回的 tensors 下的 attentions
  • output_hidden_states (bool, optional) — 是否返回所有层的 hidden states。 有关更多详细信息,请参见返回的 tensors 下的 hidden_states
  • return_dict (bool, optional) — 是否返回 ModelOutput 而不是普通的 tuple。
  • interpolate_pos_encoding (bool, optional, defaults to False) — 是否插值预训练的位置编码,默认为 False

返回

transformers.modeling_outputs.BaseModelOutputWithPoolingtuple(torch.FloatTensor)

一个 transformers.modeling_outputs.BaseModelOutputWithPoolingtorch.FloatTensor 的 tuple (如果传递 return_dict=False 或者当 config.return_dict=False 时),包含各种元素,具体取决于配置 (<class 'transformers.models.instructblip.configuration_instructblip.InstructBlipVisionConfig'>) 和输入。

  • last_hidden_state (torch.FloatTensor, 形状为 (batch_size, sequence_length, hidden_size)) — 模型最后一层的输出处的 hidden-states 序列。

  • pooler_output (torch.FloatTensor, 形状为 (batch_size, hidden_size)) — 序列的第一个 token (classification token) 的最后一层 hidden-state,在通过用于辅助预训练任务的层进行进一步处理之后。 例如,对于 BERT 系列模型,这将返回通过线性层和 tanh 激活函数处理后的 classification token。 线性层权重是从预训练期间的下一句预测 (classification) 目标中训练出来的。

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

    模型在每层输出处的 Hidden-states 以及可选的初始嵌入输出。

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

    attention softmax 之后的 Attention 权重,用于计算 self-attention heads 中的加权平均值。

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

尽管 forward pass 的配方需要在该函数中定义,但应该在之后调用 Module 实例而不是此方法,因为前者负责运行预处理和后处理步骤,而后者会静默地忽略它们。

InstructBlipQFormerModel

class transformers.InstructBlipQFormerModel

< >

( config: InstructBlipQFormerConfig )

InstructBLIP 中使用的查询 Transformer (Q-Former)。 从 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[typing.Tuple[typing.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 (torch.FloatTensor,形状为 (batch_size, sequence_length, hidden_size)可选): 编码器最后一层输出的隐藏状态序列。如果模型配置为解码器,则在交叉注意力机制中使用。 encoder_attention_mask (torch.FloatTensor,形状为 (batch_size, sequence_length)可选): 用于避免对编码器输入的填充标记索引执行注意力的掩码。如果模型配置为解码器,则此掩码在交叉注意力机制中使用。掩码值在 [0, 1] 中选择

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

InstructBlipForConditionalGeneration

class transformers.InstructBlipForConditionalGeneration

< >

( config: InstructBlipConfig )

参数

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

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

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

此模型继承自 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 ) transformers.models.instructblip.modeling_instructblip.InstructBlipForConditionalGenerationModelOutputtuple(torch.FloatTensor)

参数

  • pixel_values (torch.FloatTensor,形状为 (batch_size, num_channels, height, width)) — 像素值。像素值可以使用 InstructBlipProcessor 获得。有关详细信息,请参阅 InstructBlipProcessor.__call__()
  • qformer_input_ids (torch.LongTensor,形状为 (batch_size, sequence_length)可选) — 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.Tensor,形状为 (batch_size, sequence_length)可选) — 用于避免对填充标记索引执行注意力的掩码。掩码值在 [0, 1] 中选择:

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

    什么是注意力掩码?

  • decoder_input_ids (torch.LongTensor,形状为 (batch_size, target_sequence_length)可选) — 解码器输入序列标记在语言模型词汇表中的索引。仅在使用编码器-解码器语言模型(如 T5)时相关。

    索引可以使用 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
  • return_dict (bool可选) — 是否返回 ModelOutput 而不是普通元组。
  • interpolate_pos_encoding (bool可选,默认为 False) — 是否插值预训练的位置编码。
  • use_cache (bool可选) — 如果设置为 True,则返回 past_key_values 键值状态,可用于加速解码(请参阅 past_key_values)。
  • labels (torch.LongTensor,形状为 (batch_size,)可选) — 用于计算语言建模损失的标签。索引应在 [-100, 0, ..., config.vocab_size - 1] 中。所有设置为 -100 的标签都将被忽略(掩盖),损失仅针对 [0, ..., config.vocab_size] 中的标签计算

返回

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

一个 transformers.models.instructblip.modeling_instructblip.InstructBlipForConditionalGenerationModelOutput 或一个 torch.FloatTensor 元组(如果传递了 return_dict=False 或当 config.return_dict=False 时),其中包含各种元素,具体取决于配置 (<class 'transformers.models.instructblip.configuration_instructblip.InstructBlipVisionConfig'>) 和输入。

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

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

尽管 forward pass 的配方需要在该函数中定义,但应该在之后调用 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.

generate

< >

( 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 (list)

参数

  • 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),可选) — 用于避免对填充 token 索引执行注意力的掩码。
  • interpolate_pos_encoding (bool可选,默认为 False) — 是否对图像嵌入的位置编码进行插值。

返回

captions (list)

长度为 batch_size * num_captions 的字符串列表。

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

< > 在 GitHub 上更新