Transformers 文件
Pix2Struct
並獲得增強的文件體驗
開始使用
Pix2Struct
概述
Pix2Struct 模型由 Kenton Lee, Mandar Joshi, Iulia Turc, Hexiang Hu, Fangyu Liu, Julian Eisenschlos, Urvashi Khandelwal, Peter Shaw, Ming-Wei Chang, Kristina Toutanova 在 Pix2Struct: Screenshot Parsing as Pretraining for Visual Language Understanding 中提出。
論文摘要如下:
視覺情境語言無處不在——來源包括帶有圖表的教科書、帶有影像和表格的網頁,以及帶有按鈕和表單的移動應用程式。也許是由於這種多樣性,以前的工作通常依賴於領域特定的方法,對底層資料、模型架構和目標共享有限。我們提出了 Pix2Struct,這是一個用於純視覺語言理解的預訓練影像到文字模型,它可以在包含視覺情境語言的任務上進行微調。Pix2Struct 透過學習將網頁的蒙版截圖解析為簡化 HTML 進行預訓練。網路以其豐富的視覺元素清晰地反映在 HTML 結構中,提供了大量的預訓練資料來源,非常適合下游任務的多樣性。直觀地,這個目標包含了常見的預訓練訊號,如 OCR、語言建模、影像標註。除了新穎的預訓練策略,我們還引入了可變解析度輸入表示以及更靈活的語言和視覺輸入整合,其中語言提示(如問題)直接呈現在輸入影像之上。我們首次展示了單個預訓練模型可以在四個領域(文件、插圖、使用者介面和自然影像)的九項任務中,在其中六項任務中達到最先進的水平。
技巧
Pix2Struct 已在各種任務和資料集上進行了微調,包括影像字幕、不同輸入(書籍、圖表、科學圖表)上的視覺問答 (VQA)、UI 元件的字幕等。完整列表可在論文表 1 中找到。因此,我們建議您將這些模型用於它們已微調的任務。例如,如果您想將 Pix2Struct 用於 UI 字幕,您應該使用在 UI 資料集上微調的模型。如果您想將 Pix2Struct 用於影像字幕,您應該使用在自然影像字幕資料集上微調的模型,依此類推。
如果您想使用該模型執行條件文字字幕,請確保使用帶有 `add_special_tokens=False` 的處理器。
資源
Pix2StructConfig
class transformers.Pix2StructConfig
< 源 >( text_config = None vision_config = None initializer_factor = 1.0 initializer_range = 0.02 is_vqa = False tie_word_embeddings = False is_encoder_decoder = True **kwargs )
引數
- text_config (
dict
, 可選) — 用於初始化 Pix2StructTextConfig 的配置選項字典。 - vision_config (
dict
, 可選) — 用於初始化 Pix2StructVisionConfig 的配置選項字典。 - initializer_factor (
float
, 可選, 預設為 1.0) — 初始化範圍的乘法因子。 - initializer_range (
float
, 可選, 預設為 0.02) — 用於初始化所有權重矩陣的 `truncated_normal_initializer` 的標準差。 - is_vqa (
bool
, 可選, 預設為False
) — 模型是否已針對 VQA 任務進行微調。 - kwargs (可選) — 關鍵字引數字典。
Pix2StructConfig 是用於儲存 Pix2StructForConditionalGeneration 配置的配置類。它用於根據指定的引數例項化 Pix2Struct 模型,定義文字模型和視覺模型的配置。使用預設值例項化配置將產生類似於 Pix2Struct-base google/pix2struct-base 架構的配置。
配置物件繼承自 PretrainedConfig,可用於控制模型輸出。有關更多資訊,請參閱 PretrainedConfig 的文件。
示例
>>> from transformers import Pix2StructConfig, Pix2StructForConditionalGeneration
>>> # Initializing a Pix2StructConfig with google/pix2struct-base style configuration
>>> configuration = Pix2StructConfig()
>>> # Initializing a Pix2StructForConditionalGeneration (with random weights) from the google/pix2struct-base style configuration
>>> model = Pix2StructForConditionalGeneration(configuration)
>>> # Accessing the model configuration
>>> configuration = model.config
>>> # We can also initialize a Pix2StructConfig from a Pix2StructTextConfig and a Pix2StructVisionConfig
>>> # Initializing a Pix2Struct text and Pix2Struct vision configuration
>>> config_text = Pix2StructTextConfig()
>>> config_vision = Pix2StructVisionConfig()
>>> config = Pix2StructConfig.from_text_vision_configs(config_text, config_vision)
from_text_vision_configs
< 源 >( text_config: Pix2StructTextConfig vision_config: Pix2StructVisionConfig **kwargs ) → Pix2StructConfig
從 pix2struct 文字模型配置和 pix2struct 視覺模型配置例項化 Pix2StructConfig(或派生類)。
Pix2StructTextConfig
class transformers.Pix2StructTextConfig
< 源 >( vocab_size = 50244 hidden_size = 768 d_kv = 64 d_ff = 2048 num_layers = 12 num_heads = 12 relative_attention_num_buckets = 32 relative_attention_max_distance = 128 dropout_rate = 0.1 layer_norm_epsilon = 1e-06 initializer_factor = 1.0 dense_act_fn = 'gelu_new' decoder_start_token_id = 0 use_cache = False pad_token_id = 0 eos_token_id = 1 tie_word_embeddings = False is_decoder = True **kwargs )
引數
- vocab_size (
int
, 可選, 預設為 50244) —Pix2Struct
文字模型的詞彙表大小。定義了呼叫 Pix2StructTextModel 時傳入的inputs_ids
可以表示的不同標記的數量。 - hidden_size (
int
, 可選, 預設為 768) — 編碼器層和池化層的維度。 - d_kv (
int
, 可選, 預設為 64) — 每個注意力頭中鍵、查詢、值投影的維度。 - d_ff (
int
, 可選, 預設為 2048) — Transformer 編碼器中“中間”(即前饋)層的維度。 - num_layers (
int
, 可選, 預設為 12) — Transformer 編碼器中的隱藏層數量。 - num_heads (
int
, 可選, 預設為 12) — Transformer 編碼器中每個注意力層的注意力頭數量。 - relative_attention_num_buckets (
int
, 可選, 預設為 32) — 每個注意力層使用的桶數量。 - relative_attention_max_distance (
int
, 可選, 預設為 128) — 桶分離中較長序列的最大距離。 - dropout_rate (
float
, 可選, 預設為 0.1) — 嵌入層、編碼器和池化器中所有全連線層的 dropout 機率。 - layer_norm_epsilon (
float
, 可選, 預設為 1e-6) — 層歸一化層使用的 epsilon 值。 - initializer_factor (
float
, 可選, 預設為 1.0) — 初始化所有權重矩陣的因子(應保持為 1,內部用於初始化測試)。 - dense_act_fn (
Union[Callable, str]
, 可選, 預設為"gelu_new"
) — 非線性啟用函式(函式或字串)。 - decoder_start_token_id (
int
, 可選, 預設為 0) —decoder_start_token_id
標記的 id。 - use_cache (
bool
, 可選, 預設為False
) — 模型是否應返回最後一個鍵/值注意力(並非所有模型都使用)。 - pad_token_id (
int
, 可選, 預設為 0) —padding
標記的 id。 - eos_token_id (
int
, 可選, 預設為 1) —end-of-sequence
標記的 id。
這是用於儲存 Pix2StructTextModel 配置的配置類。它用於根據指定的引數例項化 Pix2Struct 文字模型,定義模型架構。使用預設值例項化配置將產生類似於 google/pix2struct-base 架構使用的 Pix2Struct 文字解碼器的配置。
配置物件繼承自 PretrainedConfig,可用於控制模型輸出。有關更多資訊,請參閱 PretrainedConfig 的文件。
示例
>>> from transformers import Pix2StructTextConfig, Pix2StructTextModel
>>> # Initializing a Pix2StructTextConfig with google/pix2struct-base style configuration
>>> configuration = Pix2StructTextConfig()
>>> # Initializing a Pix2StructTextModel (with random weights) from the google/pix2struct-base style configuration
>>> model = Pix2StructTextModel(configuration)
>>> # Accessing the model configuration
>>> configuration = model.config
Pix2StructVisionConfig
class transformers.Pix2StructVisionConfig
< 源 >( hidden_size = 768 patch_embed_hidden_size = 768 d_ff = 2048 d_kv = 64 num_hidden_layers = 12 num_attention_heads = 12 dense_act_fn = 'gelu_new' layer_norm_eps = 1e-06 dropout_rate = 0.0 attention_dropout = 0.0 initializer_range = 1e-10 initializer_factor = 1.0 seq_len = 4096 relative_attention_num_buckets = 32 relative_attention_max_distance = 128 **kwargs )
引數
- hidden_size (
int
, 可選, 預設為 768) — 編碼器層和池化層的維度。 - patch_embed_hidden_size (
int
, 可選, 預設為 768) — Transformer 編碼器中輸入 patch_embedding 層的維度。 - d_ff (
int
, 可選, 預設為 2048) — Transformer 編碼器中“中間”(即前饋)層的維度。 - d_kv (
int
, 可選, 預設為 64) — 每個注意力頭中鍵、查詢、值投影的維度。 - num_hidden_layers (
int
, 可選, 預設為 12) — Transformer 編碼器中的隱藏層數量。 - num_attention_heads (
int
, 可選, 預設為 12) — Transformer 編碼器中每個注意力層的注意力頭數量。 - dense_act_fn (
str
或function
, 可選, 預設為"gelu_new"
) — 編碼器和池化器中的非線性啟用函式(函式或字串)。如果為字串,則支援"gelu"
,"relu"
,"selu"
和"gelu_new"
"gelu"
。 - layer_norm_eps (
float
, 可選, 預設為 1e-06) — 層歸一化層使用的 epsilon。 - dropout_rate (
float
, 可選, 預設為 0.0) — 嵌入層、編碼器和池化器中所有全連線層的 dropout 機率。 - attention_dropout (
float
, 可選, 預設為 0.0) — 注意力機率的 dropout 比率。 - initializer_range (
float
, 可選, 預設為 1e-10) — 用於初始化所有權重矩陣的 truncated_normal_initializer 的標準差。 - initializer_factor (
float
, 可選, 預設為 1.0) — 初始化所有權重矩陣的因子(應保持為 1,內部用於初始化測試)。 - seq_len (
int
, 可選, 預設為 4096) — 模型支援的最大序列長度(此處指補丁數量)。 - relative_attention_num_buckets (
int
, 可選, 預設為 32) — 每個注意力層使用的桶的數量。 - relative_attention_max_distance (
int
, 可選, 預設為 128) — 每個注意力層使用的最大距離(以 token 為單位)。
這是一個配置類,用於儲存 Pix2StructVisionModel 的配置。它用於根據指定引數例項化 Pix2Struct 視覺模型,定義模型架構。例項化預設配置將生成與 Pix2Struct-base google/pix2struct-base 架構相似的配置。
配置物件繼承自 PretrainedConfig,可用於控制模型輸出。有關更多資訊,請參閱 PretrainedConfig 的文件。
示例
>>> from transformers import Pix2StructVisionConfig, Pix2StructVisionModel
>>> # Initializing a Pix2StructVisionConfig with google/pix2struct-base style configuration
>>> configuration = Pix2StructVisionConfig()
>>> # Initializing a Pix2StructVisionModel (with random weights) from the google/pix2struct-base style configuration
>>> model = Pix2StructVisionModel(configuration)
>>> # Accessing the model configuration
>>> configuration = model.config
Pix2StructProcessor
class transformers.Pix2StructProcessor
< source >( image_processor tokenizer )
引數
- image_processor (
Pix2StructImageProcessor
) — Pix2StructImageProcessor 的例項。影像處理器是必需的輸入。 - tokenizer (Union[
T5TokenizerFast
,T5Tokenizer
]) — [‘T5TokenizerFast`] 或 [‘T5Tokenizer`] 的例項。分詞器是必需的輸入。
構建一個 PIX2STRUCT 處理器,它將 BERT 分詞器和 PIX2STRUCT 影像處理器封裝到一個處理器中。
Pix2StructProcessor 提供了 Pix2StructImageProcessor 和 T5TokenizerFast 的所有功能。有關更多資訊,請參閱 __call__()
和 decode() 的文件字串。
此方法將其所有引數轉發給 Pix2StructTokenizerFast 的 batch_decode()。有關更多資訊,請參閱此方法的文件字串。
此方法將其所有引數轉發給 Pix2StructTokenizerFast 的 decode()。有關更多資訊,請參閱此方法的文件字串。
Pix2StructImageProcessor
class transformers.Pix2StructImageProcessor
< source >( do_convert_rgb: bool = True do_normalize: bool = True patch_size: typing.Optional[dict[str, int]] = None max_patches: int = 2048 is_vqa: bool = False **kwargs )
引數
- do_convert_rgb (
bool
, 可選, 預設為True
) — 是否將影像轉換為 RGB。 - do_normalize (
bool
, 可選, 預設為True
) — 是否對影像進行歸一化。可以透過preprocess
方法中的do_normalize
引數覆蓋。根據 Pix2Struct 論文和程式碼,影像使用其自身的均值和標準差進行歸一化。 - patch_size (
dict[str, int]
, 可選, 預設為{"height" -- 16, "width": 16}
):影像使用的補丁大小。根據 Pix2Struct 論文和程式碼,補丁大小為 16x16。 - max_patches (
int
, 可選, 預設為 2048) — 根據 Pix2Struct 論文,從影像中提取的最大補丁數。 - is_vqa (
bool
, 可選, 預設為False
) — 影像處理器是否用於 VQA 任務。如果為True
並且傳入header_text
,則文字將呈現在輸入影像上。
構建 Pix2Struct 影像處理器。
preprocess
< source >( images: typing.Union[ForwardRef('PIL.Image.Image'), numpy.ndarray, ForwardRef('torch.Tensor'), list['PIL.Image.Image'], list[numpy.ndarray], list['torch.Tensor']] header_text: typing.Optional[str] = None do_convert_rgb: typing.Optional[bool] = None do_normalize: typing.Optional[bool] = None max_patches: typing.Optional[int] = None patch_size: typing.Optional[dict[str, int]] = None return_tensors: typing.Union[str, transformers.utils.generic.TensorType, NoneType] = None data_format: ChannelDimension = <ChannelDimension.FIRST: 'channels_first'> input_data_format: typing.Union[str, transformers.image_utils.ChannelDimension, NoneType] = None **kwargs )
引數
- images (
ImageInput
) — 要預處理的影像。支援單張或批次影像。 - header_text (
Union[list[str], str]
, 可選) — 要作為標題呈現的文字。僅當image_processor.is_vqa
為True
時才生效。 - do_convert_rgb (
bool
, 可選, 預設為self.do_convert_rgb
) — 是否將影像轉換為 RGB。 - do_normalize (
bool
, 可選, 預設為self.do_normalize
) — 是否對影像進行歸一化。 - max_patches (
int
, 可選, 預設為self.max_patches
) — 要提取的最大補丁數。 - patch_size (
dict
, 可選, 預設為self.patch_size
) — 包含補丁高度和寬度的字典。 - return_tensors (
str
或TensorType
, 可選) — 要返回的張量型別。可以是以下之一:- 未設定:返回
np.ndarray
列表。 TensorType.TENSORFLOW
或'tf'
:返回tf.Tensor
批次。TensorType.PYTORCH
或'pt'
:返回torch.Tensor
批次。TensorType.NUMPY
或'np'
:返回np.ndarray
批次。TensorType.JAX
或'jax'
:返回jax.numpy.ndarray
批次。
- 未設定:返回
- data_format (
ChannelDimension
或str
, 可選, 預設為ChannelDimension.FIRST
) — 輸出影像的通道維度格式。可以是以下之一:"channels_first"
或ChannelDimension.FIRST
:影像為 (num_channels, height, width) 格式。"channels_last"
或ChannelDimension.LAST
:影像為 (height, width, num_channels) 格式。- 未設定:使用輸入影像的通道維度格式。
- input_data_format (
ChannelDimension
或str
, 可選) — 輸入影像的通道維度格式。如果未設定,則從輸入影像推斷通道維度格式。可以是以下之一:"channels_first"
或ChannelDimension.FIRST
:影像為 (num_channels, height, width) 格式。"channels_last"
或ChannelDimension.LAST
:影像為 (height, width, num_channels) 格式。"none"
或ChannelDimension.NONE
:影像為 (height, width) 格式。
預處理一張或一批影像。處理器首先計算可以從影像中提取的,最大數量的,保持縱橫比的 patch_size
大小補丁。然後用零填充影像,使影像符合 max_patches
的約束。在提取補丁之前,影像根據 per_image_standardization
的 tensorflow 實現進行標準化(https://www.tensorflow.org/api_docs/python/tf/image/per_image_standardization)。
Pix2StructTextModel
class transformers.Pix2StructTextModel
< source >( config )
引數
- config (Pix2StructTextModel) — 模型配置類,包含模型的所有引數。使用配置檔案初始化不載入與模型關聯的權重,僅載入配置。請檢視 from_pretrained() 方法載入模型權重。
Pix2Struct 的獨立文字解碼器
該模型繼承自 PreTrainedModel。請檢視超類文件,瞭解庫為所有模型實現的通用方法(例如下載或儲存、調整輸入嵌入大小、修剪頭部等)。
該模型也是 PyTorch torch.nn.Module 子類。將其作為常規 PyTorch 模組使用,並參考 PyTorch 文件瞭解所有與通用用法和行為相關的事項。
forward
< source >( input_ids: typing.Optional[torch.LongTensor] = None attention_mask: typing.Optional[torch.FloatTensor] = None encoder_hidden_states: typing.Optional[torch.FloatTensor] = None encoder_attention_mask: typing.Optional[torch.FloatTensor] = None inputs_embeds: typing.Optional[torch.LongTensor] = None head_mask: typing.Optional[torch.FloatTensor] = None cross_attn_head_mask: typing.Optional[torch.Tensor] = 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 labels: typing.Optional[torch.LongTensor] = None return_dict: typing.Optional[bool] = None cache_position: typing.Optional[torch.LongTensor] = None **kwargs ) → transformers.modeling_outputs.CausalLMOutputWithCrossAttentions 或 tuple(torch.FloatTensor)
引數
- input_ids (形狀為
(batch_size, sequence_length)
的torch.LongTensor
) — 詞彙表中輸入序列 token 的索引。Pix2StructText 是一個具有相對位置嵌入的模型,因此您應該能夠對輸入進行左右填充。索引可以使用 AutoTokenizer 獲取。有關詳細資訊,請參閱 PreTrainedTokenizer.encode() 和 PreTrainedTokenizer.call()。
要了解如何為預訓練準備
input_ids
,請檢視 Pix2StructText 訓練。 - attention_mask (形狀為
(batch_size, sequence_length)
的torch.FloatTensor
, 可選) — 用於避免對填充 token 索引執行注意力的掩碼。掩碼值選擇在[0, 1]
之間:- 1 表示 token 未被掩碼,
- 0 表示 token 已被掩碼.
- encoder_hidden_states (形狀為
(batch_size, sequence_length, hidden_size)
的torch.FloatTensor
, 可選) — 編碼器最後一層輸出的隱藏狀態序列。如果模型配置為解碼器,則在交叉注意力中使用。 - encoder_attention_mask (形狀為
(batch_size, sequence_length)
的torch.FloatTensor
, 可選) — 用於避免對編碼器輸入中的填充 token 索引執行注意力的掩碼。如果模型配置為解碼器,則在交叉注意力中使用此掩碼。掩碼值選擇在[0, 1]
之間:- 1 表示 token 未被掩碼,
- 0 表示 token 已被掩碼.
- inputs_embeds (形狀為
(batch_size, sequence_length, hidden_size)
的torch.LongTensor
, 可選) — (可選)您可以選擇直接傳入嵌入表示,而不是傳入input_ids
。如果您希望對input_ids
索引如何轉換為關聯向量擁有比模型內部嵌入查詢矩陣更多的控制權,這將非常有用。 - head_mask (形狀為
(num_heads,)
或(num_layers, num_heads)
的torch.FloatTensor
, 可選) — 用於使自注意力模組的選定頭部無效的掩碼。掩碼值選擇在[0, 1]
之間:- 1 表示頭部未被掩碼,
- 0 表示頭部已被掩碼.
- cross_attn_head_mask (形狀為
(num_heads,)
或(num_layers, num_heads)
的torch.Tensor
, 可選) — 用於使解碼器中交叉注意力模組的選定頭部無效的掩碼。掩碼值選擇在[0, 1]
之間:- 1 表示頭部未被掩碼,
- 0 表示頭部已被掩碼.
- past_key_values (
tuple[tuple[torch.FloatTensor]]
, 可選) — 預先計算的隱藏狀態(自注意力塊和交叉注意力塊中的鍵和值),可用於加速順序解碼。這通常包括模型在解碼上一階段返回的past_key_values
,當use_cache=True
或config.use_cache=True
時。允許兩種格式:
- 一個 Cache 例項,請參閱我們的 kv cache 指南;
- 長度為
config.n_layers
的tuple(torch.FloatTensor)
元組,每個元組包含 2 個形狀為(batch_size, num_heads, sequence_length, embed_size_per_head)
的張量。這也被稱為傳統快取格式。
模型將輸出與作為輸入傳入的快取格式相同的快取格式。如果沒有傳入
past_key_values
,將返回傳統快取格式。如果使用
past_key_values
,使用者可以選擇僅輸入最後一個input_ids
(那些沒有將其過去鍵值狀態提供給此模型的)形狀為(batch_size, 1)
,而不是所有input_ids
形狀為(batch_size, sequence_length)
。 - use_cache (
bool
, 可選) — 如果設定為True
,則返回past_key_values
鍵值狀態,可用於加速解碼(請參閱past_key_values
)。 - output_attentions (
bool
, 可選) — 是否返回所有注意力層的注意力張量。有關更多詳細資訊,請參閱返回張量下的attentions
。 - output_hidden_states (
bool
, 可選) — 是否返回所有層的隱藏狀態。有關更多詳細資訊,請參閱返回張量下的hidden_states
。 - labels (形狀為
(batch_size, sequence_length)
的torch.LongTensor
, 可選) — 用於計算掩碼語言建模損失的標籤。索引應在[0, ..., config.vocab_size]
或 -100 之間(請參閱input_ids
文件字串)。索引設定為-100
的 token 將被忽略(掩碼),損失僅針對標籤在[0, ..., config.vocab_size]
之間的 token 進行計算。 - return_dict (
bool
, 可選) — 是否返回 ModelOutput 而不是純元組。 - cache_position (形狀為
(sequence_length)
的torch.LongTensor
, 可選) — 描述輸入序列 token 在序列中位置的索引。與position_ids
不同,此張量不受填充影響。它用於在正確位置更新快取並推斷完整的序列長度。
返回
transformers.modeling_outputs.CausalLMOutputWithCrossAttentions 或 tuple(torch.FloatTensor)
transformers.modeling_outputs.CausalLMOutputWithCrossAttentions 或 torch.FloatTensor
的元組(如果傳入 return_dict=False
或當 config.return_dict=False
時),包含根據配置 (Pix2StructConfig) 和輸入的不同元素。
-
loss (
torch.FloatTensor
形狀為(1,)
,可選,當提供labels
時返回) — 語言建模損失(用於下一個 token 預測)。 -
logits (形狀為
(batch_size, sequence_length, config.vocab_size)
的torch.FloatTensor
) — 語言建模頭部的預測分數(SoftMax 之前的每個詞彙標記的分數)。 -
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 後的注意力權重,用於計算自注意力頭中的加權平均值。
-
cross_attentions (
tuple(torch.FloatTensor)
, 可選, 當傳入output_attentions=True
或當config.output_attentions=True
時返回) —torch.FloatTensor
的元組(每個層一個),形狀為(batch_size, num_heads, sequence_length, sequence_length)
。注意力 softmax 後的交叉注意力權重,用於計算交叉注意力頭中的加權平均。
-
past_key_values (
Cache
, 可選, 當傳入use_cache=True
或當config.use_cache=True
時返回) — 這是一個 Cache 例項。有關更多詳細資訊,請參閱我們的 kv cache 指南。包含預先計算的隱藏狀態(注意力塊中的鍵和值),可用於(參見
past_key_values
輸入)加速順序解碼。
Pix2StructTextModel 的 forward 方法,覆蓋了 __call__
特殊方法。
儘管前向傳播的實現需要在該函式內部定義,但之後應該呼叫 Module
例項,而不是該函式,因為前者負責執行預處理和後處理步驟,而後者會默默地忽略它們。
示例
>>> from transformers import AutoProcessor, Pix2StructTextModel
>>> processor = AutoProcessor.from_pretrained("google/pix2struct-textcaps-base")
>>> model = Pix2StructTextModel.from_pretrained("google/pix2struct-textcaps-base")
>>> inputs = processor(text="Hello, my dog is cute", return_tensors="pt")
>>> outputs = model(**inputs)
>>> loss = outputs.loss
Pix2StructVisionModel
class transformers.Pix2StructVisionModel
< source >( config: Pix2StructConfig )
引數
- config (Pix2StructConfig) — 帶有模型所有引數的模型配置類。用配置檔案初始化不會載入與模型相關的權重,只會載入配置。請檢視 from_pretrained() 方法來載入模型權重。
不帶任何特定頭部的裸 Pix2Struct 模型,直接輸出原始隱藏狀態。
該模型繼承自 PreTrainedModel。請檢視超類文件,瞭解庫為所有模型實現的通用方法(例如下載或儲存、調整輸入嵌入大小、修剪頭部等)。
該模型也是 PyTorch torch.nn.Module 子類。將其作為常規 PyTorch 模組使用,並參考 PyTorch 文件瞭解所有與通用用法和行為相關的事項。
forward
< source >( flattened_patches: typing.Optional[torch.Tensor] = None attention_mask: typing.Optional[torch.Tensor] = None head_mask: typing.Optional[torch.Tensor] = None output_attentions: typing.Optional[bool] = None output_hidden_states: typing.Optional[bool] = None return_dict: typing.Optional[bool] = None ) → transformers.modeling_outputs.BaseModelOutputWithPooling 或 tuple(torch.FloatTensor)
引數
- flattened_patches (形狀為
(batch_size, sequence_length, num_channels x patch_height x patch_width)
的torch.FloatTensor
) — 展平並填充的畫素值。這些值可以使用 AutoImageProcessor 獲得。詳情請參閱Pix2StructVisionImageProcessor.__call__
。更多細節請檢視 原始論文 (圖 5)。 - attention_mask (形狀為
(batch_size, sequence_length)
的torch.Tensor
, 可選) — 用於避免在填充 token 索引上執行注意力操作的掩碼。掩碼值選擇在[0, 1]
之間:- 1 表示 token 未被掩碼,
- 0 表示 token 已被掩碼。
- head_mask (形狀為
(num_heads,)
或(num_layers, num_heads)
的torch.Tensor
, 可選) — 用於使自注意力模組中的選定頭部無效的掩碼。掩碼值選擇在[0, 1]
之間:- 1 表示頭部未被掩碼,
- 0 表示頭部已被掩碼。
- output_attentions (
bool
, 可選) — 是否返回所有注意力層的注意力張量。更多詳細資訊請參閱返回張量下的attentions
。 - output_hidden_states (
bool
, 可選) — 是否返回所有層的隱藏狀態。更多詳細資訊請參閱返回張量下的hidden_states
。 - return_dict (
bool
, 可選) — 是否返回 ModelOutput 而不是普通元組。
返回
transformers.modeling_outputs.BaseModelOutputWithPooling 或 tuple(torch.FloatTensor)
transformers.modeling_outputs.BaseModelOutputWithPooling 或 torch.FloatTensor
的元組 (如果傳入 return_dict=False
或 config.return_dict=False
) ,包含根據配置 (Pix2StructConfig) 和輸入的不同元素。
-
last_hidden_state (
torch.FloatTensor
, 形狀為(batch_size, sequence_length, hidden_size)
) — 模型最後一層輸出的隱藏狀態序列。 -
pooler_output (形狀為
(batch_size, hidden_size)
的torch.FloatTensor
) — 序列第一個 token (分類 token) 在經過輔助預訓練任務所用層處理後的最後一層隱藏狀態。例如,對於 BERT 系列模型,這將返回分類 token 在經過線性層和 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 後的注意力權重,用於計算自注意力頭中的加權平均值。
Pix2StructVisionModel 的 forward 方法,覆蓋了 __call__
特殊方法。
儘管前向傳播的實現需要在該函式內部定義,但之後應該呼叫 Module
例項,而不是該函式,因為前者負責執行預處理和後處理步驟,而後者會默默地忽略它們。
示例
>>> import requests
>>> from PIL import Image
>>> from transformers import AutoProcessor, Pix2StructVisionModel
>>> image_processor = AutoProcessor.from_pretrained("google/pix2struct-textcaps-base")
>>> model = Pix2StructVisionModel.from_pretrained("google/pix2struct-textcaps-base")
>>> url = "https://www.ilankelman.org/stopsigns/australia.jpg"
>>> image = Image.open(requests.get(url, stream=True).raw)
>>> inputs = image_processor(images=image, return_tensors="pt")
>>> with torch.no_grad():
... outputs = model(**inputs)
>>> last_hidden_states = outputs.last_hidden_state
>>> list(last_hidden_states.shape)
[1, 2048, 768]
Pix2StructForConditionalGeneration
class transformers.Pix2StructForConditionalGeneration
< source >( config: Pix2StructConfig )
引數
- config (Pix2StructConfig) — 帶有模型所有引數的模型配置類。用配置檔案初始化不會載入與模型相關的權重,只會載入配置。請檢視 from_pretrained() 方法來載入模型權重。
帶語言建模頭的條件生成模型。可用於序列生成任務。
該模型繼承自 PreTrainedModel。請檢視超類文件,瞭解庫為所有模型實現的通用方法(例如下載或儲存、調整輸入嵌入大小、修剪頭部等)。
該模型也是 PyTorch torch.nn.Module 子類。將其作為常規 PyTorch 模組使用,並參考 PyTorch 文件瞭解所有與通用用法和行為相關的事項。
forward
< source >( flattened_patches: typing.Optional[torch.FloatTensor] = None attention_mask: typing.Optional[torch.FloatTensor] = None decoder_input_ids: typing.Optional[torch.LongTensor] = None decoder_attention_mask: typing.Optional[torch.BoolTensor] = None head_mask: typing.Optional[torch.FloatTensor] = None decoder_head_mask: typing.Optional[torch.FloatTensor] = None cross_attn_head_mask: typing.Optional[torch.Tensor] = None encoder_outputs: typing.Optional[tuple[tuple[torch.FloatTensor]]] = None past_key_values: typing.Optional[tuple[tuple[torch.FloatTensor]]] = None labels: typing.Optional[torch.LongTensor] = None decoder_inputs_embeds: typing.Optional[torch.Tensor] = 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 cache_position: typing.Optional[torch.LongTensor] = None ) → transformers.modeling_outputs.Seq2SeqModelOutput 或 tuple(torch.FloatTensor)
引數
- flattened_patches (形狀為
(batch_size, seq_length, hidden_size)
的torch.FloatTensor
) — 展平的畫素補丁。hidden_size
由以下公式獲得:hidden_size
=num_channels
*patch_size
*patch_size
畫素補丁的展平過程由
Pix2StructProcessor
完成。 - attention_mask (形狀為
(batch_size, sequence_length)
的torch.FloatTensor
, 可選) — 用於避免在填充 token 索引上執行注意力操作的掩碼。掩碼值選擇在[0, 1]
之間:- 1 表示 token 未被掩碼,
- 0 表示 token 已被掩碼。
- decoder_input_ids (形狀為
(batch_size, target_sequence_length)
的torch.LongTensor
, 可選) — 解碼器輸入序列 token 在詞彙表中的索引。索引可以使用 AutoTokenizer 獲得。詳情請參閱 PreTrainedTokenizer.encode() 和 PreTrainedTokenizer.call()。
Pix2StructText 使用
pad_token_id
作為decoder_input_ids
生成的起始 token。如果使用past_key_values
,可選地只輸入最後一個decoder_input_ids
(那些沒有將它們的 past key value 狀態提供給此模型的 token)(請參閱past_key_values
)。要了解更多關於如何為預訓練準備
decoder_input_ids
,請檢視 Pix2StructText 訓練。 - decoder_attention_mask (形狀為
(batch_size, target_sequence_length)
的torch.BoolTensor
, 可選) — 預設行為:生成一個忽略decoder_input_ids
中填充 token 的張量。預設情況下也會使用因果掩碼。 - head_mask (形狀為
(num_heads,)
或(num_layers, num_heads)
的torch.FloatTensor
, 可選) — 用於使自注意力模組中的選定頭部無效的掩碼。掩碼值選擇在[0, 1]
之間:- 1 表示頭部未被掩碼,
- 0 表示頭部已被掩碼。
- decoder_head_mask (形狀為
(num_heads,)
或(num_layers, num_heads)
的torch.FloatTensor
, 可選) — 用於使解碼器中自注意力模組的選定頭部無效的掩碼。掩碼值選擇在[0, 1]
之間:- 1 表示頭部未被掩碼,
- 0 表示頭部已被掩碼。
- cross_attn_head_mask (形狀為
(num_heads,)
或(num_layers, num_heads)
的torch.Tensor
, 可選) — 用於使解碼器中交叉注意力模組的選定頭部無效的掩碼。掩碼值選擇在[0, 1]
之間:- 1 表示頭部未被掩碼,
- 0 表示頭部已被掩碼。
- encoder_outputs (
tuple[tuple[torch.FloatTensor]]
, 可選) — 元組包括 (last_hidden_state
, 可選:hidden_states
, 可選:attentions
) 形狀為(batch_size, sequence_length, hidden_size)
的last_hidden_state
(可選)是編碼器最後一層輸出的隱藏狀態序列。用於解碼器的交叉注意力。 - past_key_values (
tuple[tuple[torch.FloatTensor]]
, 可選) — 預計算的隱藏狀態(自注意力塊和交叉注意力塊中的鍵和值),可用於加速順序解碼。這通常包括模型在解碼前期返回的past_key_values
,當use_cache=True
或config.use_cache=True
時。允許兩種格式:
- 一個 Cache 例項,請參閱我們的 kv 快取指南;
- 一個長度為
config.n_layers
的tuple(torch.FloatTensor)
元組,每個元組包含兩個形狀為(batch_size, num_heads, sequence_length, embed_size_per_head)
的張量。這也被稱為舊版快取格式。
模型將輸出與輸入相同的快取格式。如果未傳入
past_key_values
,將返回舊版快取格式。如果使用
past_key_values
,使用者可以選擇只輸入最後一個input_ids
(那些沒有將其過去鍵值狀態提供給此模型的 token),形狀為(batch_size, 1)
,而不是所有input_ids
,形狀為(batch_size, sequence_length)
。 - labels (形狀為
(batch_size, sequence_length)
的torch.LongTensor
, 可選) — 用於計算解碼器掩碼語言建模損失的標籤。 - decoder_inputs_embeds (形狀為
(batch_size, target_sequence_length, hidden_size)
的torch.Tensor
, 可選) — 可選地,你可以選擇直接傳入嵌入表示,而不是傳入decoder_input_ids
。如果使用past_key_values
,可選地只輸入最後一個decoder_inputs_embeds
(請參閱past_key_values
)。如果你希望對如何將decoder_input_ids
索引轉換為相關向量有更多控制,而不是使用模型的內部嵌入查詢矩陣,這會很有用。如果
decoder_input_ids
和decoder_inputs_embeds
都未設定,則decoder_inputs_embeds
取inputs_embeds
的值。 - use_cache (
bool
, 可選) — 如果設定為True
,將返回past_key_values
鍵值狀態,可用於加速解碼(請參閱past_key_values
)。 - output_attentions (
bool
, 可選) — 是否返回所有注意力層的注意力張量。更多詳細資訊請參閱返回張量下的attentions
。 - output_hidden_states (
bool
, 可選) — 是否返回所有層的隱藏狀態。更多詳細資訊請參閱返回張量下的hidden_states
。 - return_dict (
bool
, 可選) — 是否返回 ModelOutput 而不是普通元組。 - cache_position (形狀為
(sequence_length)
的torch.LongTensor
, 可選) — 描繪輸入序列 token 在序列中位置的索引。與position_ids
不同,此張量不受填充影響。它用於在正確位置更新快取並推斷完整序列長度。
返回
transformers.modeling_outputs.Seq2SeqModelOutput 或 tuple(torch.FloatTensor)
transformers.modeling_outputs.Seq2SeqModelOutput 或 torch.FloatTensor
的元組 (如果傳入 return_dict=False
或 config.return_dict=False
) ,包含根據配置 (Pix2StructConfig) 和輸入的不同元素。
-
last_hidden_state (
torch.FloatTensor
,形狀為(batch_size, sequence_length, hidden_size)
) — 模型解碼器最後一層輸出的隱藏狀態序列。如果使用了
past_key_values
,則只輸出形狀為(batch_size, 1, hidden_size)
的序列的最後一個隱藏狀態。 -
past_key_values (
EncoderDecoderCache
, 可選, 當傳入use_cache=True
或config.use_cache=True
時返回) — 這是一個 EncoderDecoderCache 例項。更多詳細資訊,請參閱我們的 kv 快取指南。包含預先計算的隱藏狀態(自注意力塊和交叉注意力塊中的鍵和值),可用於(參見
past_key_values
輸入)加速順序解碼。 -
decoder_hidden_states (
tuple(torch.FloatTensor)
, 可選, 當傳入output_hidden_states=True
或config.output_hidden_states=True
時返回) —torch.FloatTensor
的元組 (如果模型有嵌入層,則為嵌入輸出之一,加上每層輸出之一),形狀為(batch_size, sequence_length, hidden_size)
。解碼器在每個層輸出的隱藏狀態,加上可選的初始嵌入輸出。
-
decoder_attentions (
tuple(torch.FloatTensor)
, 可選, 當傳入output_attentions=True
或config.output_attentions=True
時返回) —torch.FloatTensor
的元組 (每層一個),形狀為(batch_size, num_heads, sequence_length, sequence_length)
。解碼器的注意力權重,在注意力 softmax 之後,用於計算自注意力頭中的加權平均。
-
cross_attentions (
tuple(torch.FloatTensor)
, 可選, 當傳入output_attentions=True
或當config.output_attentions=True
時返回) —torch.FloatTensor
的元組(每個層一個),形狀為(batch_size, num_heads, sequence_length, sequence_length)
。解碼器交叉注意力層的注意力權重,在注意力 softmax 之後,用於計算交叉注意力頭中的加權平均。
-
encoder_last_hidden_state (
torch.FloatTensor
,形狀為(batch_size, sequence_length, hidden_size)
,可選) — 模型編碼器最後一層輸出的隱藏狀態序列。 -
encoder_hidden_states (
tuple(torch.FloatTensor)
, 可選, 當傳入output_hidden_states=True
或config.output_hidden_states=True
時返回) —torch.FloatTensor
的元組 (如果模型有嵌入層,則為嵌入輸出之一,加上每層輸出之一),形狀為(batch_size, sequence_length, hidden_size)
。編碼器在每個層輸出的隱藏狀態,加上可選的初始嵌入輸出。
-
encoder_attentions (
tuple(torch.FloatTensor)
, 可選, 當傳入output_attentions=True
或config.output_attentions=True
時返回) —torch.FloatTensor
的元組 (每層一個),形狀為(batch_size, num_heads, sequence_length, sequence_length)
。編碼器的注意力權重,在注意力 softmax 之後,用於計算自注意力頭中的加權平均。
Pix2StructForConditionalGeneration 的 forward 方法,覆蓋了 __call__
特殊方法。
儘管前向傳播的實現需要在該函式內部定義,但之後應該呼叫 Module
例項,而不是該函式,因為前者負責執行預處理和後處理步驟,而後者會默默地忽略它們。
示例
推理
>>> from PIL import Image
>>> import requests
>>> from transformers import AutoProcessor, Pix2StructForConditionalGeneration
>>> processor = AutoProcessor.from_pretrained("google/pix2struct-textcaps-base")
>>> model = Pix2StructForConditionalGeneration.from_pretrained("google/pix2struct-textcaps-base")
>>> url = "https://www.ilankelman.org/stopsigns/australia.jpg"
>>> image = Image.open(requests.get(url, stream=True).raw)
>>> inputs = processor(images=image, return_tensors="pt")
>>> # autoregressive generation
>>> generated_ids = model.generate(**inputs, max_new_tokens=50)
>>> generated_text = processor.batch_decode(generated_ids, skip_special_tokens=True)[0]
>>> print(generated_text)
A stop sign is on a street corner.
>>> # conditional generation
>>> text = "A picture of"
>>> inputs = processor(text=text, images=image, return_tensors="pt", add_special_tokens=False)
>>> generated_ids = model.generate(**inputs, max_new_tokens=50)
>>> generated_text = processor.batch_decode(generated_ids, skip_special_tokens=True)[0]
>>> print(generated_text)
A picture of a stop sign with a red stop sign
訓練
>>> from PIL import Image
>>> import requests
>>> from transformers import AutoProcessor, Pix2StructForConditionalGeneration
>>> processor = AutoProcessor.from_pretrained("google/pix2struct-base")
>>> model = Pix2StructForConditionalGeneration.from_pretrained("google/pix2struct-base")
>>> url = "https://www.ilankelman.org/stopsigns/australia.jpg"
>>> image = Image.open(requests.get(url, stream=True).raw)
>>> text = "A stop sign is on the street corner."
>>> inputs = processor(images=image, return_tensors="pt")
>>> labels = processor(text=text, return_tensors="pt").input_ids
>>> # forward pass
>>> outputs = model(**inputs, labels=labels)
>>> loss = outputs.loss
>>> print(f"{loss.item():.5f}")
5.94282