Transformers 文件
InstructBLIP
並獲得增強的文件體驗
開始使用
InstructBLIP
概述
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 相對於同期多模態模型的優勢。

使用技巧
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
從 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 (
str
或function
, 可選, 預設為"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 (
str
或Callable
, 可選, 預設為"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
< source >( 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 提供 BlipImageProcessor 和 AutoTokenizer 的所有功能。有關更多資訊,請參閱 __call__()
和 decode() 的文件字串。
此方法將其所有引數轉發給 PreTrainedTokenizer 的 batch_decode()。有關更多資訊,請參閱此方法的文件字串。
此方法將其所有引數轉發給 PreTrainedTokenizer 的 decode()。有關此方法的更多資訊,請參閱其文件字串。
InstructBlipVisionModel
forward
< source >( 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.BaseModelOutputWithPooling 或 tuple(torch.FloatTensor)
一個 transformers.modeling_outputs.BaseModelOutputWithPooling 或一個 torch.FloatTensor
元組(如果傳入 return_dict=False
或 config.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=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 後的注意力權重,用於計算自注意力頭中的加權平均值。
InstructBlipVisionModel 的 forward 方法,覆蓋了 __call__
特殊方法。
儘管前向傳播的實現需要在該函式內部定義,但之後應呼叫 Module
例項而不是該函式,因為前者負責執行預處理和後處理步驟,而後者則默默地忽略它們。
InstructBlipQFormerModel
查詢 Transformer (Q-Former),用於 InstructBLIP。與 BLIP-2 略有不同,因為它也將指令作為輸入。
forward
< source >( 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_layers
的tuple(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
< source >( config: InstructBlipConfig )
引數
- config (InstructBlipConfig) — 包含模型所有引數的模型配置類。使用配置檔案初始化不會載入與模型相關的權重,僅載入配置。請檢視 from_pretrained() 方法以載入模型權重。
InstructBLIP 基礎模型,由語言模型、qformer 和視覺編碼器組成。
此模型繼承自 PreTrainedModel。請檢視超類文件,瞭解庫為其所有模型實現的通用方法(例如下載或儲存、調整輸入嵌入大小、修剪頭部等)。
此模型也是 PyTorch torch.nn.Module 的子類。將其用作常規 PyTorch 模組,並參閱 PyTorch 文件以瞭解與一般用法和行為相關的所有事項。
forward
< source >( 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__()
。 - qformer_attention_mask (形狀為
(batch_size, sequence_length)
的torch.Tensor
, 可選) — 用於避免在填充標記索引上執行注意力的掩碼。掩碼值選擇在[0, 1]
:- 1 表示 **未掩碼** 的標記,
- 0 表示 **已掩碼** 的標記。
- input_ids (形狀為
(batch_size, sequence_length)
的torch.LongTensor
, 可選) — 語言模型詞彙表中輸入序列標記的索引。可以可選地提供輸入標記作為文字提示,語言模型可以繼續生成。索引可以使用 InstructBlipProcessor 獲取。有關詳細資訊,請參閱
InstructBlipProcessor.__call__()
。 - 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()。
- 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.InstructBlipForConditionalGenerationModelOutput
或 tuple(torch.FloatTensor)
一個 transformers.models.instructblip.modeling_instructblip.InstructBlipForConditionalGenerationModelOutput
或一個 torch.FloatTensor
元組(如果傳入 return_dict=False
或 config.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 (
CausalLMOutputWithPast
或Seq2SeqLMOutput
) — 語言模型的輸出。
InstructBlipModel 的 forward 方法,覆蓋了 __call__
特殊方法。
儘管前向傳播的實現需要在該函式內部定義,但之後應呼叫 Module
例項而不是該函式,因為前者負責執行預處理和後處理步驟,而後者則默默地忽略它們。
InstructBlipForConditionalGeneration
class transformers.InstructBlipForConditionalGeneration
< source >( config: InstructBlipConfig )
引數
- config (InstructBlipConfig) — 包含模型所有引數的模型配置類。使用配置檔案初始化不會載入與模型相關的權重,僅載入配置。請檢視 from_pretrained() 方法以載入模型權重。
InstructBLIP 模型,用於根據影像和可選的文字提示生成文字。該模型由視覺編碼器、查詢 Transformer (Q-Former) 和語言模型組成。
可以選擇向模型傳遞 input_ids
作為文字提示,以便語言模型繼續提示。否則,語言模型將從 [BOS] (序列開始) token 開始生成文字。
此模型繼承自 PreTrainedModel。請檢視超類文件,瞭解庫為其所有模型實現的通用方法(例如下載或儲存、調整輸入嵌入大小、修剪頭部等)。
此模型也是 PyTorch torch.nn.Module 的子類。將其用作常規 PyTorch 模組,並參閱 PyTorch 文件以瞭解與一般用法和行為相關的所有事項。
forward
< source >( 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.InstructBlipForConditionalGenerationModelOutput
或 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__()
。 - qformer_attention_mask (
torch.Tensor
,形狀為(batch_size, sequence_length)
,可選) — 用於避免對填充標記索引執行注意力操作的掩碼。掩碼值選擇範圍為[0, 1]
:- 1 表示**未被掩碼**的標記,
- 0 表示**被掩碼**的標記。
- input_ids (
torch.LongTensor
,形狀為(batch_size, sequence_length)
,可選) — 語言模型詞彙表中輸入序列標記的索引。可以可選地提供輸入標記作為文字提示,語言模型可以繼續生成。索引可以使用 InstructBlipProcessor 獲取。有關詳細資訊,請參閱
InstructBlipProcessor.__call__()
。 - 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()。
- 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.InstructBlipForConditionalGenerationModelOutput
或 tuple(torch.FloatTensor)
一個 transformers.models.instructblip.modeling_instructblip.InstructBlipForConditionalGenerationModelOutput
或一個 torch.FloatTensor
元組(如果傳入 return_dict=False
或 config.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 (
CausalLMOutputWithPast
或Seq2SeqLMOutput
) — 語言模型的輸出。
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
函式,以便能夠將模型用作條件生成器。