Transformers 文件
Fuyu
並獲得增強的文件體驗
開始使用
Fuyu
概述
Fuyu 模型由 ADEPT 建立,作者為 Rohan Bavishi、Erich Elsen、Curtis Hawthorne、Maxwell Nye、Augustus Odena、Arushi Somani、Sağnak Taşırlar。
作者們推出了 Fuyu-8B,這是一個基於經典 Transformer 架構的僅解碼器多模態模型,帶有查詢和鍵歸一化。模型增加了一個線性編碼器,用於從影像輸入建立多模態嵌入。
透過將影像詞元(token)視為文字詞元,並使用特殊的影像換行符,模型可以知道影像行的結束位置。影像位置嵌入被移除。這避免了針對不同影像解析度需要不同訓練階段的問題。Fuyu-8B 擁有 80 億引數,並採用 CC-BY-NC 許可證,其能夠處理文字和影像、擁有 16K 的驚人上下文大小以及整體效能出色,因此備受矚目。
Fuyu
模型使用 bfloat16
進行訓練,但原始推理使用 float16
。Hub 上上傳的檢查點使用 torch_dtype = 'float16'
,AutoModel
API 將用其把檢查點從 torch.float32
轉換為 torch.float16
。
線上權重的 `dtype` 基本上是無關緊要的,除非你在使用 `model = AutoModelForCausalLM.from_pretrained("path", torch_dtype = "auto")` 初始化模型時使用了 `torch_dtype="auto"`。原因是模型會首先被下載(使用線上檢查點的 `dtype`),然後它會被轉換為 `torch` 的預設 `dtype`(變為 `torch.float32`)。使用者應該指定他們想要的 `torch_dtype`,如果他們不指定,則預設為 `torch.float32`。
不建議在 `float16` 模式下微調模型,已知這會產生 `nan`,因此模型應在 `bfloat16` 模式下進行微調。
技巧
- 要轉換模型,你需要使用 `git clone https://github.com/persimmon-ai-labs/adept-inference` 克隆原始倉庫,然後獲取檢查點
git clone https://github.com/persimmon-ai-labs/adept-inference
wget path/to/fuyu-8b-model-weights.tar
tar -xvf fuyu-8b-model-weights.tar
python src/transformers/models/fuyu/convert_fuyu_weights_to_hf.py --input_dir /path/to/downloaded/fuyu/weights/ --output_dir /output/path \
--pt_model_path /path/to/fuyu_8b_release/iter_0001251/mp_rank_00/model_optim_rng.pt
--ada_lib_path /path/to/adept-inference
對於聊天模型
wget https://axtkn4xl5cip.objectstorage.us-phoenix-1.oci.customer-oci.com/n/axtkn4xl5cip/b/adept-public-data/o/8b_chat_model_release.tar tar -xvf 8b_base_model_release.tar
然後,模型可以透過以下方式載入
from transformers import FuyuConfig, FuyuForCausalLM
model_config = FuyuConfig()
model = FuyuForCausalLM(model_config).from_pretrained('/output/path')
輸入需要透過一個特定的處理器進行處理,以獲得正確的格式。處理器需要一個影像處理器和一個分詞器。因此,輸入可以透過以下方式載入
from PIL import Image
from transformers import AutoTokenizer
from transformers.models.fuyu.processing_fuyu import FuyuProcessor
from transformers.models.fuyu.image_processing_fuyu import FuyuImageProcessor
tokenizer = AutoTokenizer.from_pretrained('adept-hf-collab/fuyu-8b')
image_processor = FuyuImageProcessor()
processor = FuyuProcessor(image_processor=image_processor, tokenizer=tokenizer)
text_prompt = "Generate a coco-style caption.\\n"
bus_image_url = "https://huggingface.co/datasets/hf-internal-testing/fixtures-captioning/resolve/main/bus.png"
bus_image_pil = Image.open(io.BytesIO(requests.get(bus_image_url).content))
inputs_to_model = processor(images=bus_image_pil, text=text_prompt)
Fuyu 使用基於 `sentencepiece` 的分詞器,模型為 `Unigram`。它支援位元組回退,這僅在 `tokenizers==0.14.0` 的快速分詞器中可用。由於 `LlamaTokenizer` 是 sentencepiece 的標準包裝器,因此被使用。
作者建議使用以下提示進行影像描述:`f"生成一個 coco 風格的描述。\\n"`
FuyuConfig
class transformers.FuyuConfig
< 來源 >( vocab_size = 262144 hidden_size = 4096 intermediate_size = 16384 num_hidden_layers = 36 num_attention_heads = 64 hidden_act = 'relu2' max_position_embeddings = 16384 image_size = 300 patch_size = 30 num_channels = 3 initializer_range = 0.02 layer_norm_eps = 1e-05 use_cache = True tie_word_embeddings = False rope_theta = 25000.0 rope_scaling = None qk_layernorm = True hidden_dropout = 0.0 attention_dropout = 0.0 partial_rotary_factor = 0.5 pad_token_id = None bos_token_id = 1 eos_token_id = 2 image_token_id = 71011 text_config = None **kwargs )
引數
- vocab_size (
int
, 可選, 預設為 262144) — Fuyu 模型的詞彙表大小。定義了在呼叫 FuyuForCausalLM 時傳入的 `inputs_ids` 可以表示的不同詞元的數量。 - hidden_size (
int
, 可選, 預設為 4096) — 隱藏表示的維度。 - intermediate_size (
int
, 可選, 預設為 16384) — MLP 表示的維度。 - num_hidden_layers (
int
, 可選, 預設為 36) — Transformer 編碼器中的隱藏層數量。 - num_attention_heads (
int
, 可選, 預設為 64) — Transformer 編碼器中每個注意力層的注意力頭數量。 - hidden_act (
str
或function
, 可選, 預設為"relu2"
) — 解碼器中的非線性啟用函式(函式或字串)。 - max_position_embeddings (
int
, 可選, 預設為 16384) — 該模型可能使用的最大序列長度。 - image_size (
int
, 可選, 預設為 300) — 輸入影像的大小。 - patch_size (
int
, 可選, 預設為 30) — 輸入視覺 Transformer 編碼的補丁大小。 - num_channels (
int
, 可選, 預設為 3) — 輸入影像的通道數。 - initializer_range (
float
, 可選, 預設為 0.02) — 用於初始化所有權重矩陣的截斷正態分佈初始化器的標準差。 - layer_norm_eps (
float
, 可選, 預設為 1e-05) — RMS 歸一化層使用的 epsilon 值。 - use_cache (
bool
, 可選, 預設為 `True`) — 模型是否應返回最後一個鍵/值注意力(並非所有模型都使用)。僅在 `config.is_decoder=True` 時相關。是否繫結權重嵌入 - tie_word_embeddings (
bool
, 可選, 預設為 `False`) — 是否繫結輸入和輸出嵌入。 - rope_theta (
float
, 可選, 預設為 25000.0) — RoPE 嵌入的基週期。 - rope_scaling (
Dict
, 可選) — 包含 RoPE 嵌入縮放配置的字典。目前支援兩種縮放策略:線性和動態。它們的縮放因子必須是大於 1 的浮點數。預期格式為 `{"type": 策略名稱, "factor": 縮放因子}`。使用此標誌時,不要將 `max_position_embeddings` 更新為預期的新最大值。有關這些縮放策略行為的更多資訊,請參閱以下帖子:https://www.reddit.com/r/LocalFuyu/comments/14mrgpr/dynamically_scaled_rope_further_increases/。這是一個實驗性功能,可能會在未來版本中發生破壞性 API 更改。 - qk_layernorm (
bool
, 可選, 預設為 `True`) — 是否在投影隱藏狀態後對查詢(Queries)和鍵(Keys)進行歸一化 - hidden_dropout (
float
, 可選, 預設為 0.0) — 在將 MLP 應用於隱藏狀態後的 dropout 比率。 - attention_dropout (
float
, 可選, 預設為 0.0) — 計算注意力分數後的 dropout 比率。 - partial_rotary_factor (
float
, 可選, 預設為 0.5) — 將具有旋轉嵌入的查詢和鍵的百分比。 - pad_token_id (
int
, 可選) — 填充 詞元的 ID。 - bos_token_id (
int
, 可選, 預設為 1) — 序列開始 詞元的 ID。 - eos_token_id (
Union[int, list[int]]
, 可選, 預設為 2) — 序列結束 詞元的 ID。可選地,可以使用一個列表來設定多個 序列結束 詞元。 - image_token_id (
int
, 可選, 預設為 71011) — 影像佔位符詞元的 ID。 - text_config (
dict
, 可選) — 用於初始化 `language```Aut` 的配置選項字典。
這是用於儲存 FuyuForCausalLM 配置的配置類。它用於根據指定的引數例項化一個 Fuyu 模型,定義模型架構。使用預設值例項化一個配置將產生與 adept/fuyu-8b 類似的配置。
配置物件繼承自 PretrainedConfig,可用於控制模型輸出。請閱讀 PretrainedConfig 的文件以獲取更多資訊。
FuyuModel
class transformers.FuyuModel
< 來源 >( config: FuyuConfig )
引數
- config (FuyuConfig) — 模型配置類,包含模型的所有引數。使用配置檔案進行初始化不會載入與模型相關的權重,只會載入配置。請檢視 from_pretrained() 方法來載入模型權重。
Fuyu 模型由視覺主幹和語言模型組成,不帶語言模型頭。
該模型繼承自 PreTrainedModel。請查閱超類文件,瞭解庫為所有模型實現的通用方法(例如下載或儲存、調整輸入嵌入大小、修剪頭部等)。
該模型也是 PyTorch torch.nn.Module 的子類。可以像常規 PyTorch 模組一樣使用它,並參考 PyTorch 文件瞭解所有與常規用法和行為相關的事項。
forward
< source >( input_ids: LongTensor = None image_patches: Tensor = None image_patches_indices: Tensor = None attention_mask: typing.Optional[torch.Tensor] = None position_ids: typing.Optional[torch.LongTensor] = None past_key_values: typing.Optional[list[torch.FloatTensor]] = None inputs_embeds: typing.Optional[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 **kwargs ) → transformers.modeling_outputs.CausalLMOutputWithPast 或 tuple(torch.FloatTensor)
引數
- input_ids (
torch.LongTensor
,形狀為(batch_size, sequence_length)
) — 詞彙表中輸入序列標記的索引。預設情況下,填充將被忽略。可以使用 AutoTokenizer 獲取索引。有關詳細資訊,請參閱 PreTrainedTokenizer.encode() 和 PreTrainedTokenizer.call()。
- image_patches (
torch.FloatTensor
,形狀為(batch_size, num_total_patches, patch_size_ x patch_size x num_channels)
, 可選) — 用作連續嵌入的影像塊。影像塊被展平,然後投影到模型的隱藏大小。 - image_patches_indices (
torch.LongTensor
,形狀為(batch_size, sequence_length)
, 可選) — input_ids 張量中影像塊的索引張量。 - attention_mask (
torch.Tensor
,形狀為(batch_size, sequence_length)
, 可選) — 用於避免對填充標記索引執行注意力的掩碼。掩碼值選自[0, 1]
:- 1 表示標記未被掩碼,
- 0 表示標記被掩碼。
- position_ids (
torch.LongTensor
,形狀為(batch_size, sequence_length)
, 可選) — 每個輸入序列標記在位置嵌入中的位置索引。選自範圍[0, config.n_positions - 1]
。 - past_key_values (
list[torch.FloatTensor]
, 可選) — 預計算的隱藏狀態(自注意力和交叉注意力塊中的鍵和值),可用於加速序列解碼。這通常包括模型在先前解碼階段返回的past_key_values
,當use_cache=True
或config.use_cache=True
時。允許兩種格式:
- Cache 例項,請參閱我們的 kv 快取指南;
- 長度為
config.n_layers
的tuple(torch.FloatTensor)
元組,每個元組包含 2 個形狀為(batch_size, num_heads, sequence_length, embed_size_per_head)
的張量。這也稱為舊版快取格式。
模型將輸出與輸入相同的快取格式。如果未傳遞
past_key_values
,將返回舊版快取格式。如果使用
past_key_values
,使用者可以選擇只輸入最後一個形狀為(batch_size, 1)
的input_ids
(那些沒有為其提供過去鍵值狀態的標記),而不是所有形狀為(batch_size, sequence_length)
的input_ids
。 - inputs_embeds (
torch.FloatTensor
,形狀為(batch_size, sequence_length, hidden_size)
, 可選) — 可選地,您可以選擇直接傳遞嵌入表示,而不是傳遞input_ids
。如果您希望比模型的內部嵌入查詢矩陣更好地控制如何將input_ids
索引轉換為關聯向量,這將非常有用。 - use_cache (
bool
, 可選) — 如果設定為True
,將返回past_key_values
鍵值狀態,可用於加速解碼(請參閱past_key_values
)。 - output_attentions (
bool
, 可選) — 是否返回所有注意力層的注意力張量。有關更多詳細資訊,請參閱返回張量下的attentions
。 - output_hidden_states (
bool
, 可選) — 是否返回所有層的隱藏狀態。有關更多詳細資訊,請參閱返回張量下的hidden_states
。 - return_dict (
bool
, 可選) — 是否返回 ModelOutput 而不是普通的元組。
返回
transformers.modeling_outputs.CausalLMOutputWithPast 或 tuple(torch.FloatTensor)
一個 transformers.modeling_outputs.CausalLMOutputWithPast 或一個 `torch.FloatTensor` 元組(如果傳遞了 `return_dict=False` 或當 `config.return_dict=False` 時),根據配置(FuyuConfig)和輸入,包含各種元素。
-
loss (
torch.FloatTensor
形狀為(1,)
,可選,當提供labels
時返回) — 語言建模損失(用於下一個 token 預測)。 -
logits (形狀為
(batch_size, sequence_length, config.vocab_size)
的torch.FloatTensor
) — 語言建模頭部的預測分數(SoftMax 之前的每個詞彙標記的分數)。 -
past_key_values (
Cache
, 可選, 當傳遞use_cache=True
或當config.use_cache=True
時返回) — 這是一個 Cache 例項。有關更多詳細資訊,請參閱我們的 kv 快取指南。包含預計算的隱藏狀態(自注意力塊中的鍵和值),可用於(參見
past_key_values
輸入)加速順序解碼。 -
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 後的注意力權重,用於計算自注意力頭中的加權平均值。
FuyuModel 的前向方法,覆蓋了 `__call__` 特殊方法。
儘管前向傳遞的配方需要在此函式內定義,但之後應呼叫 `Module` 例項而不是此函式,因為前者負責執行前處理和後處理步驟,而後者會默默地忽略它們。
gather_continuous_embeddings
< source >( word_embeddings: Tensor continuous_embeddings: list image_patch_input_indices: Tensor )
引數
- word_embeddings (
torch.FloatTensor
,形狀為(batch_size, sequence_length, hidden_size)
) — 詞嵌入張量。 - continuous_embeddings (
torch.FloatTensor
,形狀為(batch_size, num_patches, hidden_size)
) — 連續嵌入張量。列表的長度是批次大小。每個條目的形狀為 [num_image_embeddings, hidden],並且 num_image_embeddings 需要與該批次元素的 image_patch_input_indices 中的非負索引數匹配。 - image_patch_input_indices (
torch.LongTensor
,形狀為(batch_size, sequence_length)
) — input_ids 張量中影像塊的索引張量。
此函式將 continuous_embeddings 放置到 image_patch_input_indices 指示的位置的 word_embeddings 中。不同的批次元素可以有不同數量的連續嵌入。
get_image_features
< source >( pixel_values: FloatTensor **kwargs )
將影像編碼為可以轉發到語言模型的連續嵌入。
FuyuForCausalLM
class transformers.FuyuForCausalLM
< source >( config: FuyuConfig )
引數
- config (FuyuConfig) — 包含模型所有引數的模型配置類。使用配置檔案初始化不會載入與模型關聯的權重,只會載入配置。請檢視 from_pretrained() 方法來載入模型權重。
Fuyu 模型,頂部帶有一個語言建模頭,用於在影像塊和文字上進行條件因果語言建模。
該模型繼承自 PreTrainedModel。請查閱超類文件,瞭解庫為所有模型實現的通用方法(例如下載或儲存、調整輸入嵌入大小、修剪頭部等)。
該模型也是 PyTorch torch.nn.Module 的子類。可以像常規 PyTorch 模組一樣使用它,並參考 PyTorch 文件瞭解所有與常規用法和行為相關的事項。
forward
< source >( input_ids: LongTensor = None image_patches: Tensor = None image_patches_indices: Tensor = None attention_mask: typing.Optional[torch.Tensor] = None position_ids: typing.Optional[torch.LongTensor] = None past_key_values: typing.Optional[list[torch.FloatTensor]] = None inputs_embeds: typing.Optional[torch.FloatTensor] = None use_cache: typing.Optional[bool] = None labels: typing.Optional[torch.Tensor] = None output_attentions: typing.Optional[bool] = None output_hidden_states: typing.Optional[bool] = None return_dict: typing.Optional[bool] = None logits_to_keep: typing.Optional[int] = 0 **kwargs ) → transformers.modeling_outputs.CausalLMOutputWithPast 或 tuple(torch.FloatTensor)
引數
- input_ids (
torch.LongTensor
,形狀為(batch_size, sequence_length)
) — 詞彙表中輸入序列標記的索引。預設情況下,填充將被忽略。可以使用 AutoTokenizer 獲取索引。有關詳細資訊,請參閱 PreTrainedTokenizer.encode() 和 PreTrainedTokenizer.call()。
- image_patches (
torch.FloatTensor
,形狀為(batch_size, num_total_patches, patch_size_ x patch_size x num_channels)
, 可選) — 用作連續嵌入的影像塊。影像塊被展平,然後投影到模型的隱藏大小。 - image_patches_indices (
torch.LongTensor
,形狀為(batch_size, sequence_length)
, 可選) — input_ids 張量中影像塊的索引張量。 - attention_mask (
torch.Tensor
,形狀為(batch_size, sequence_length)
, 可選) — 用於避免對填充標記索引執行注意力的掩碼。掩碼值選自[0, 1]
:- 1 表示標記未被掩碼,
- 0 表示標記被掩碼。
- position_ids (
torch.LongTensor
,形狀為(batch_size, sequence_length)
, 可選) — 每個輸入序列標記在位置嵌入中的位置索引。選自範圍[0, config.n_positions - 1]
。 - past_key_values (
list[torch.FloatTensor]
, 可選) — 預計算的隱藏狀態(自注意力和交叉注意力塊中的鍵和值),可用於加速序列解碼。這通常包括模型在先前解碼階段返回的past_key_values
,當use_cache=True
或config.use_cache=True
時。允許兩種格式:
- Cache 例項,請參閱我們的 kv 快取指南;
- 長度為
config.n_layers
的tuple(torch.FloatTensor)
元組,每個元組包含 2 個形狀為(batch_size, num_heads, sequence_length, embed_size_per_head)
的張量。這也稱為舊版快取格式。
模型將輸出與輸入相同的快取格式。如果未傳遞
past_key_values
,將返回舊版快取格式。如果使用
past_key_values
,使用者可以選擇只輸入最後一個形狀為(batch_size, 1)
的input_ids
(那些沒有為其提供過去鍵值狀態的標記),而不是所有形狀為(batch_size, sequence_length)
的input_ids
。 - inputs_embeds (
torch.FloatTensor
,形狀為(batch_size, sequence_length, hidden_size)
, 可選) — 可選地,您可以選擇直接傳遞嵌入表示,而不是傳遞input_ids
。如果您希望比模型的內部嵌入查詢矩陣更好地控制如何將input_ids
索引轉換為關聯向量,這將非常有用。 - use_cache (
bool
, 可選) — 如果設定為True
,將返回past_key_values
鍵值狀態,可用於加速解碼(請參閱past_key_values
)。 - labels (
torch.LongTensor
,形狀為(batch_size, sequence_length)
, 可選) — 用於計算掩碼語言建模損失的標籤。索引應在[0, ..., config.text_config.vocab_size]
或 -100 之間(請參閱input_ids
文件)。索引設定為-100
的標記將被忽略(掩碼),損失僅針對標籤在[0, ..., config.text_config.vocab_size]
中的標記計算。 - output_attentions (
bool
, 可選) — 是否返回所有注意力層的注意力張量。有關更多詳細資訊,請參閱返回張量下的attentions
。 - output_hidden_states (
bool
, 可選) — 是否返回所有層的隱藏狀態。有關更多詳細資訊,請參閱返回張量下的hidden_states
。 - return_dict (
bool
, 可選) — 是否返回 ModelOutput 而不是普通的元組。 - logits_to_keep (
int
, 可選, 預設為0
) — 如果是int
,則計算最後logits_to_keep
個標記的 logits。如果為0
,則計算所有input_ids
的 logits(特殊情況)。生成時只需要最後一個標記的 logits,僅為該標記計算它們可以節省記憶體,這對於長序列或大詞彙量來說非常重要。如果是torch.Tensor
,則必須是一維的,對應於序列長度維度中要保留的索引。這在使用打包張量格式(批次和序列長度使用單一維度)時非常有用。
返回
transformers.modeling_outputs.CausalLMOutputWithPast 或 tuple(torch.FloatTensor)
一個 transformers.modeling_outputs.CausalLMOutputWithPast 或一個 `torch.FloatTensor` 元組(如果傳遞了 `return_dict=False` 或當 `config.return_dict=False` 時),根據配置(FuyuConfig)和輸入,包含各種元素。
-
loss (
torch.FloatTensor
形狀為(1,)
,可選,當提供labels
時返回) — 語言建模損失(用於下一個 token 預測)。 -
logits (形狀為
(batch_size, sequence_length, config.vocab_size)
的torch.FloatTensor
) — 語言建模頭部的預測分數(SoftMax 之前的每個詞彙標記的分數)。 -
past_key_values (
Cache
, 可選, 當傳遞use_cache=True
或當config.use_cache=True
時返回) — 這是一個 Cache 例項。有關更多詳細資訊,請參閱我們的 kv 快取指南。包含預計算的隱藏狀態(自注意力塊中的鍵和值),可用於(參見
past_key_values
輸入)加速順序解碼。 -
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 後的注意力權重,用於計算自注意力頭中的加權平均值。
FuyuForCausalLM 的前向方法,覆蓋了 `__call__` 特殊方法。
儘管前向傳遞的配方需要在此函式內定義,但之後應呼叫 `Module` 例項而不是此函式,因為前者負責執行前處理和後處理步驟,而後者會默默地忽略它們。
示例
>>> from transformers import FuyuProcessor, FuyuForCausalLM
>>> from PIL import Image
>>> import requests
>>> processor = FuyuProcessor.from_pretrained("adept/fuyu-8b")
>>> model = FuyuForCausalLM.from_pretrained("adept/fuyu-8b")
>>> url = "https://huggingface.co/datasets/hf-internal-testing/fixtures-captioning/resolve/main/bus.png"
>>> image = Image.open(requests.get(url, stream=True).raw)
>>> prompt = "Generate a coco-style caption.\n"
>>> inputs = processor(images=image, text=prompt, return_tensors="pt")
>>> outputs = model(**inputs)
>>> generated_ids = model.generate(**inputs, max_new_tokens=7)
>>> generation_text = processor.batch_decode(generated_ids[:, -7:], skip_special_tokens=True)
>>> print(generation_text[0])
A blue bus parked on the side of a road.
FuyuImageProcessor
class transformers.FuyuImageProcessor
< source >( do_resize: bool = True size: typing.Optional[dict[str, int]] = None resample: Resampling = <Resampling.BILINEAR: 2> do_pad: bool = True padding_value: float = 1.0 padding_mode: str = 'constant' do_normalize: bool = True image_mean: typing.Union[float, list[float]] = 0.5 image_std: typing.Union[float, list[float]] = 0.5 do_rescale: bool = True rescale_factor: float = 0.00392156862745098 patch_size: typing.Optional[dict[str, int]] = None **kwargs )
引數
- do_resize (
bool
, 可選, 預設為True
) — 是否將影像大小調整為size
。 - size (
dict[str, int]
, 可選, 預設為{"height" -- 1080, "width": 1920}
): 格式為{"height": int, "width": int}
的字典,用於指定輸出影像的大小。 - resample (
PILImageResampling
, 可選, 預設為Resampling.BILINEAR
) — 調整影像大小時使用的PILImageResampling
濾波器,例如PILImageResampling.BILINEAR
。 - do_pad (
bool
, 可選, 預設為True
) — 是否將影像填充到size
。 - padding_value (
float
, 可選, 預設為 1.0) — 用於填充影像的值。 - padding_mode (
str
, 可選, 預設為"constant"
) — 填充影像時使用的填充模式。 - do_normalize (
bool
, optional, defaults toTrue
) — 是否對影像進行歸一化。 - image_mean (
float
, optional, defaults to 0.5) — 歸一化影像時使用的均值。 - image_std (
float
, optional, defaults to 0.5) — 歸一化影像時使用的標準差。 - do_rescale (
bool
, optional, defaults toTrue
) — 是否對影像進行縮放。 - rescale_factor (
float
, optional, defaults to1 / 255
) — 縮放影像時使用的因子。 - patch_size (
dict[str, int]
, optional, defaults to{"height" -- 30, "width": 30}
): 格式為{"height": int, "width": int}
的字典,用於指定影像塊的大小。
此類應處理 FuyuForCausalLM 主模型之前的影像處理部分。具體來說,它應處理:
處理影像:以一批影像作為輸入。如果影像大小可變,它會根據所需的影像塊尺寸調整它們的大小。影像輸出的 img_h 和 img_w 始終為 (1080, 1920)。
然後,它使用 patchify_image 函式將這些影像分塊。
建立影像輸入 ID:為每個影像塊分配一個佔位符 ID,以標識這些影像塊在詞元序列中的位置。對於可變大小的影像,每行影像塊都以一個換行符 ID 結尾。
影像塊索引:對於每個影像塊,程式碼會維護一個索引,指示這些影像塊應插入到詞元流中的位置。
預處理單張或批次影像。
FuyuProcessor
class transformers.FuyuProcessor
< 原始碼 >( image_processor tokenizer **kwargs )
引數
- image_processor (FuyuImageProcessor) — 影像處理器是必需的輸入。
- tokenizer (LlamaTokenizerFast) — 分詞器是必需的輸入。
構建一個 Fuyu 處理器,它將 Fuyu 影像處理器和 Llama 分詞器包裝成一個單一的處理器。
FuyuProcessor 提供了 FuyuImageProcessor 和 LlamaTokenizerFast 的所有功能。更多資訊請參閱 call() 和 decode()
方法。
__call__
< 原始碼 >( images: typing.Union[ForwardRef('PIL.Image.Image'), numpy.ndarray, ForwardRef('torch.Tensor'), list['PIL.Image.Image'], list[numpy.ndarray], list['torch.Tensor']] = None text: typing.Union[str, list[str], NoneType] = None audio = None videos = None **kwargs: typing_extensions.Unpack[transformers.models.fuyu.processing_fuyu.FuyuProcessorKwargs] ) → FuyuBatchEncoding
引數
- images (
PIL.Image.Image
,list[PIL.Image.Image]
) — 要準備的影像或一批影像。每個影像可以是 PIL 影像、NumPy 陣列或 PyTorch 張量。支援通道優先(channels-first)和通道置後(channels-last)格式。 - text (
str
,list[str]
) — 要編碼的序列或一批序列。每個序列可以是一個字串或一個字串列表(預分詞的字串)。如果序列以字串列表的形式提供(預分詞),則必須設定is_split_into_words=True
(以消除與一批序列的歧義)。
返回
FuyuBatchEncoding
一個具有以下欄位的 `FuyuBatchEncoding`:
- input_ids — 要饋送給模型的詞元 ID 張量。當 `text` 不為 `None` 時返回。
- image_patches — 影像塊張量的列表。當 `images` 不為 `None` 時返回。
- image_patches_indices — 模型需要插入影像塊嵌入位置的索引張量。
- attention_mask — 當 `return_attention_mask=True` 時,指定模型應關注哪些詞元的索引列表。
為模型準備一個或多個序列和影像的主要方法。如果 `text` 不為 `None`,此方法會將 `text` 和 `kwargs` 引數轉發給 LlamaTokenizerFast 的 call() 方法以編碼文字。如果 `images` 不為 `None`,此方法會為準備影像將 `images` 和 `kwargs` 引數轉發給 FuyuImageProcessor 的 call() 方法。請參閱上述兩個方法的文件字串以獲取更多資訊。