Transformers 文件
GIT
並獲得增強的文件體驗
開始使用
GIT
概述
GIT 模型由 Jianfeng Wang、Zhengyuan Yang、Xiaowei Hu、Linjie Li、Kevin Lin、Zhe Gan、Zicheng Liu、Ce Liu、Lijuan Wang 在 GIT: 影像到文字生成式 Transformer 用於視覺與語言 中提出。GIT 是一個僅解碼器 Transformer,它利用 CLIP 的視覺編碼器在文字之外對模型進行視覺輸入條件處理。該模型在影像字幕和視覺問答基準測試中取得了最先進的結果。
論文摘要如下:
在本文中,我們設計並訓練了一個生成式影像到文字 Transformer (GIT),以統一影像/影片字幕和問答等視覺-語言任務。雖然生成模型在預訓練和微調之間提供了統一的網路架構,但現有工作通常包含複雜的結構(單/多模態編碼器/解碼器),並且依賴於外部模組,如目標檢測器/標記器和光學字元識別 (OCR)。在 GIT 中,我們將架構簡化為一個影像編碼器和一個文字解碼器,僅處理一個語言建模任務。我們還擴大了預訓練資料和模型大小,以提升模型效能。在沒有額外花哨功能的情況下,我們的 GIT 在 12 個具有挑戰性的基準測試中大幅重新整理了最先進水平。例如,我們的模型首次在 TextCaps 上超越了人類表現(CIDEr 分數分別為 138.2 和 125.5)。此外,我們提出了一種新的基於生成的影像分類和場景文字識別方案,在標準基準測試中取得了不錯的表現。

使用技巧
- GIT 的實現方式與 GPT-2 非常相似,唯一的區別是模型也受
pixel_values
條件限制。
資源
Hugging Face 官方和社群 (🌎 標記) 資源列表,幫助您開始使用 GIT。
- 關於在自定義資料上進行 GIT 推理 + 微調的演示筆記本可在 此處 找到。
- 另請參閱:因果語言建模任務指南
如果您有興趣提交資源以供此處收錄,請隨時發起拉取請求,我們將對其進行審查。理想情況下,資源應展示新內容,而非重複現有資源。
GitVisionConfig
class transformers.GitVisionConfig
< 原始檔 >( hidden_size = 768 intermediate_size = 3072 num_hidden_layers = 12 num_attention_heads = 12 num_channels = 3 image_size = 224 patch_size = 16 hidden_act = 'quick_gelu' layer_norm_eps = 1e-05 attention_dropout = 0.0 initializer_range = 0.02 **kwargs )
引數
- hidden_size (
int
, 可選, 預設為 768) — 編碼器層和池化層的維度。 - intermediate_size (
int
, 可選, 預設為 3072) — Transformer 編碼器中“中間” (即,前饋) 層的維度。 - num_hidden_layers (
int
, 可選, 預設為 12) — Transformer 編碼器中隱藏層的數量。 - num_attention_heads (
int
, 可選, 預設為 12) — Transformer 編碼器中每個注意力層的注意力頭數量。 - image_size (
int
, 可選, 預設為 224) — 每張影像的大小 (解析度)。 - patch_size (
int
, 可選, 預設為 16) — 每個 patch 的大小 (解析度)。 - hidden_act (
str
或function
, 可選, 預設為"quick_gelu"
) — 編碼器和池化器中的非線性啟用函式(函式或字串)。如果是字串,則支援"gelu"
,"relu"
,"selu"
和"gelu_new"
"quick_gelu"
。 - layer_norm_eps (
float
, 可選, 預設為 1e-5) — 層歸一化層使用的 epsilon 值。 - attention_dropout (
float
, 可選, 預設為 0.0) — 注意力機率的 dropout 率。 - initializer_range (
float
, 可選, 預設為 0.02) — 用於初始化所有權重矩陣的截斷正態初始化器的標準差。
這是一個配置類,用於儲存 GitVisionModel 的配置。它用於根據指定的引數例項化一個 GIT 視覺編碼器,定義模型架構。使用預設值例項化配置將生成與 GIT microsoft/git-base 架構的視覺編碼器類似的配置。
配置物件繼承自 PretrainedConfig,可用於控制模型輸出。有關更多資訊,請參閱 PretrainedConfig 的文件。
示例
>>> from transformers import GitVisionConfig, GitVisionModel
>>> # Initializing a GitVisionConfig with microsoft/git-base style configuration
>>> configuration = GitVisionConfig()
>>> # Initializing a GitVisionModel (with random weights) from the microsoft/git-base style configuration
>>> model = GitVisionModel(configuration)
>>> # Accessing the model configuration
>>> configuration = model.config
GitVisionModel
class transformers.GitVisionModel
< 原始檔 >( config: GitVisionConfig )
引數
- config (GitVisionConfig) — 包含模型所有引數的模型配置類。使用配置檔案初始化並不會載入與模型相關的權重,只會載入配置。要載入模型權重,請檢視 from_pretrained() 方法。
CLIP 中使用的 GIT 視覺模型,沒有任何頭部或投影層。
該模型繼承自 PreTrainedModel。有關庫為其所有模型實現的通用方法(如下載或儲存、調整輸入嵌入大小、修剪頭部等)的更多資訊,請檢視超類文件。
該模型也是 PyTorch torch.nn.Module 子類。將其作為常規 PyTorch 模組使用,並參考 PyTorch 文件瞭解所有與通用使用和行為相關的事項。
前向傳播
< 原始檔 >( pixel_values: typing.Optional[torch.FloatTensor] = None output_attentions: typing.Optional[bool] = None output_hidden_states: typing.Optional[bool] = None interpolate_pos_encoding: bool = False return_dict: typing.Optional[bool] = None ) → transformers.modeling_outputs.BaseModelOutput 或 tuple(torch.FloatTensor)
引數
- pixel_values (
torch.FloatTensor
,形狀為(batch_size, num_channels, image_size, image_size)
,可選) — 對應於輸入影像的張量。畫素值可以使用{image_processor_class}
獲取。有關詳細資訊,請參閱{image_processor_class}.__call__
({processor_class}
使用{image_processor_class}
處理影像)。 - output_attentions (
bool
, 可選) — 是否返回所有注意力層的注意力張量。更多詳情請參閱返回張量下的attentions
。 - output_hidden_states (
bool
, 可選) — 是否返回所有層的隱藏狀態。更多詳情請參閱返回張量下的hidden_states
。 - interpolate_pos_encoding (
bool
, 預設為False
) — 是否插值預訓練的位置編碼。 - return_dict (
bool
, 可選) — 是否返回 ModelOutput 而不是純元組。
返回
transformers.modeling_outputs.BaseModelOutput 或 tuple(torch.FloatTensor)
一個 transformers.modeling_outputs.BaseModelOutput 或一個 torch.FloatTensor
元組(如果傳入 return_dict=False
或 config.return_dict=False
),包含根據配置 (GitConfig) 和輸入的不同元素。
-
last_hidden_state (
torch.FloatTensor
, 形狀為(batch_size, sequence_length, hidden_size)
) — 模型最後一層輸出的隱藏狀態序列。 -
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 後的注意力權重,用於計算自注意力頭中的加權平均值。
GitVisionModel 前向傳播方法,覆蓋了 __call__
特殊方法。
儘管前向傳播的配方需要在此函式中定義,但在此之後應該呼叫 Module
例項而不是此函式,因為前者負責執行預處理和後處理步驟,而後者則靜默忽略它們。
示例
>>> from PIL import Image
>>> import requests
>>> from transformers import AutoProcessor, GitVisionModel
>>> processor = AutoProcessor.from_pretrained("microsoft/git-base")
>>> model = GitVisionModel.from_pretrained("microsoft/git-base")
>>> url = "http://images.cocodataset.org/val2017/000000039769.jpg"
>>> image = Image.open(requests.get(url, stream=True).raw)
>>> inputs = processor(images=image, return_tensors="pt")
>>> outputs = model(**inputs)
>>> last_hidden_state = outputs.last_hidden_state
GitConfig
class transformers.GitConfig
< 原始檔 >( vision_config = None vocab_size = 30522 hidden_size = 768 num_hidden_layers = 6 num_attention_heads = 12 intermediate_size = 3072 hidden_act = 'gelu' hidden_dropout_prob = 0.1 attention_probs_dropout_prob = 0.1 max_position_embeddings = 1024 initializer_range = 0.02 layer_norm_eps = 1e-12 pad_token_id = 0 position_embedding_type = 'absolute' use_cache = True tie_word_embeddings = False bos_token_id = 101 eos_token_id = 102 num_image_with_embedding = None **kwargs )
引數
- vision_config (
dict
, 可選) — 用於初始化 GitVisionConfig 的配置選項字典。 - vocab_size (
int
, 可選, 預設為 30522) — GIT 模型的詞彙表大小。定義了呼叫 GitModel 時傳入的inputs_ids
可以表示的不同 token 的數量。 - hidden_size (
int
, 可選, 預設為 768) — 編碼器層和池化層的維度。 - num_hidden_layers (
int
, 可選, 預設為 6) — 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
, 可選, 預設為 1024) — 此模型可能使用的最大序列長度。通常設定為較大值以防萬一(例如,512 或 1024 或 2048)。 - initializer_range (
float
, 可選, 預設為 0.02) — 用於初始化所有權重矩陣的 truncated_normal_initializer 的標準差。 - layer_norm_eps (
float
, 可選, 預設為 1e-12) — 層歸一化層使用的 epsilon 值。 - position_embedding_type (
str
, 可選, 預設為"absolute"
) — 位置嵌入的型別。選擇"absolute"
、"relative_key"
、"relative_key_query"
之一。對於位置嵌入,使用"absolute"
。有關"relative_key"
的更多資訊,請參閱 《帶有相對位置表示的自注意力》(Self-Attention with Relative Position Representations)(Shaw 等人)。有關"relative_key_query"
的更多資訊,請參閱 《透過更好的相對位置嵌入改進 Transformer 模型》(Improve Transformer Models with Better Relative Position Embeddings)(Huang 等人)中的“方法 4”。 - use_cache (
bool
, 可選, 預設為True
) — 模型是否應返回最後的鍵/值注意力(並非所有模型都使用)。 - num_image_with_embedding (
int
, 可選) — 要新增的時間嵌入的數量,以防模型用於影片字幕/VQA。
這是配置類,用於儲存 GitModel 的配置。它用於根據指定的引數例項化 GIT 模型,定義模型架構。使用預設值例項化配置將生成與 GIT microsoft/git-base 架構類似的配置。
配置物件繼承自 PretrainedConfig,可用於控制模型輸出。有關更多資訊,請參閱 PretrainedConfig 的文件。
示例
>>> from transformers import GitConfig, GitModel
>>> # Initializing a GIT microsoft/git-base style configuration
>>> configuration = GitConfig()
>>> # Initializing a model (with random weights) from the microsoft/git-base style configuration
>>> model = GitModel(configuration)
>>> # Accessing the model configuration
>>> configuration = model.config
GitProcessor
class transformers.GitProcessor
< source >( image_processor tokenizer )
引數
- image_processor (AutoImageProcessor) — 影像處理器是必需輸入。
- tokenizer (AutoTokenizer) — 分詞器是必需輸入。
構建一個 GIT 處理器,它將 CLIP 影像處理器和 BERT 分詞器封裝到一個處理器中。
GitProcessor 提供了 CLIPImageProcessor 和 BertTokenizerFast 的所有功能。有關更多資訊,請參見 call() 和 decode()
。
__call__
< source >( images: typing.Union[ForwardRef('PIL.Image.Image'), numpy.ndarray, ForwardRef('torch.Tensor'), list['PIL.Image.Image'], list[numpy.ndarray], list['torch.Tensor'], NoneType] = None text: typing.Union[str, list[str], list[list[str]], NoneType] = None audio = None videos = None **kwargs: typing_extensions.Unpack[transformers.models.git.processing_git.GitProcessorKwargs] ) → BatchFeature
引數
- images (
PIL.Image.Image
,np.ndarray
,torch.Tensor
,list[PIL.Image.Image]
,list[np.ndarray]
,list[torch.Tensor]
) — 要準備的影像或影像批次。每張影像可以是 PIL 影像、NumPy 陣列或 PyTorch 張量。支援通道優先和通道在後的格式。 - text (
TextInput
,PreTokenizedInput
,list[TextInput]
,list[PreTokenizedInput]
, 可選) — 要編碼的序列或序列批次。每個序列可以是字串或字串列表(預分詞字串)。如果序列以字串列表(預分詞)形式提供,則必須設定is_split_into_words=True
(以消除與序列批次的歧義)。 - return_tensors (
str
或 TensorType, 可選) — 如果設定,將返回特定框架的張量。可接受的值為:'tf'
: 返回 TensorFlowtf.constant
物件。'pt'
: 返回 PyTorchtorch.Tensor
物件。'np'
: 返回 NumPynp.ndarray
物件。'jax'
: 返回 JAXjnp.ndarray
物件。
返回
一個具有以下欄位的 BatchFeature
- input_ids — 要輸入到模型的 token ID 列表。當
text
不為None
時返回。 - attention_mask — 指定模型應關注哪些 token 的索引列表(當
return_attention_mask=True
或當 “attention_mask” 在self.model_input_names
中且text
不為None
時)。 - pixel_values — 要輸入到模型的畫素值。當
images
不為None
時返回。
用於為模型準備一個或多個序列和影像的主要方法。此方法將 text
和 kwargs
引數轉發到 BertTokenizerFast 的 call()(如果 text
不為 None
)以編碼文字。為了準備影像,此方法將 images
和 kwrags
引數轉發到 CLIPImageProcessor 的 call()(如果 images
不為 None
)。有關更多資訊,請參閱上述兩種方法的文件字串。
GitModel
class transformers.GitModel
< source >( config )
引數
- config (GitModel) — 包含模型所有引數的模型配置類。使用配置檔案初始化不會載入與模型相關的權重,只加載配置。請檢視 from_pretrained() 方法載入模型權重。
由 CLIP 影像編碼器和文字解碼器組成的裸 GIT 模型轉換器,輸出原始隱藏狀態
該模型繼承自 PreTrainedModel。有關庫為其所有模型實現的通用方法(如下載或儲存、調整輸入嵌入大小、修剪頭部等)的更多資訊,請檢視超類文件。
該模型也是 PyTorch torch.nn.Module 子類。將其作為常規 PyTorch 模組使用,並參考 PyTorch 文件瞭解所有與通用使用和行為相關的事項。
前向傳播
< source >( input_ids: typing.Optional[torch.Tensor] = None attention_mask: typing.Optional[torch.Tensor] = None position_ids: typing.Optional[torch.Tensor] = None pixel_values: typing.Optional[torch.Tensor] = None head_mask: typing.Optional[torch.Tensor] = None inputs_embeds: typing.Optional[torch.Tensor] = None past_key_values: typing.Union[transformers.cache_utils.Cache, list[torch.FloatTensor], NoneType] = None use_cache: typing.Optional[bool] = None output_attentions: typing.Optional[bool] = None output_hidden_states: typing.Optional[bool] = None interpolate_pos_encoding: bool = False return_dict: typing.Optional[bool] = None ) → transformers.modeling_outputs.BaseModelOutputWithPooling 或 tuple(torch.FloatTensor)
引數
- input_ids (形狀為
(batch_size, sequence_length)
的torch.Tensor
, 可選) — 詞彙表中輸入序列 token 的索引。預設情況下將忽略填充。可以使用 AutoTokenizer 獲取索引。有關詳細資訊,請參見 PreTrainedTokenizer.encode() 和 PreTrainedTokenizer.call()。
- attention_mask (形狀為
(batch_size, sequence_length)
的torch.Tensor
, 可選) — 用於避免在填充 token 索引上執行注意力的掩碼。掩碼值在[0, 1]
中選擇:- 1 表示 token 未被掩碼,
- 0 表示 token 被掩碼。
- position_ids (形狀為
(batch_size, sequence_length)
的torch.Tensor
, 可選) — 每個輸入序列 token 在位置嵌入中的位置索引。在[0, config.n_positions - 1]
範圍內選擇。 - pixel_values (形狀為
(batch_size, num_channels, image_size, image_size)
的torch.Tensor
, 可選) — 對應於輸入影像的張量。畫素值可以使用{image_processor_class}
獲取。有關詳細資訊,請參見{image_processor_class}.__call__
({processor_class}
使用{image_processor_class}
處理影像)。 - head_mask (形狀為
(num_heads,)
或(num_layers, num_heads)
的torch.Tensor
, 可選) — 用於使自注意力模組的選定頭部無效的掩碼。掩碼值在[0, 1]
中選擇:- 1 表示頭部未被掩碼,
- 0 表示頭部被掩碼。
- inputs_embeds (形狀為
(batch_size, sequence_length, hidden_size)
的torch.Tensor
, 可選) — 可選地,您可以選擇直接傳遞嵌入表示,而不是傳遞input_ids
。如果您希望對input_ids
索引如何轉換為相關向量有比模型內部嵌入查詢矩陣更多的控制,這會很有用。 - past_key_values (
Union[~cache_utils.Cache, list[torch.FloatTensor], NoneType]
) — 預計算的隱藏狀態(自注意力塊和交叉注意力塊中的鍵和值),可用於加速順序解碼。這通常包括模型在解碼前一階段返回的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
(那些沒有將過去鍵值狀態提供給此模型的 token),而不是形狀為(batch_size, sequence_length)
的所有input_ids
。 - use_cache (
bool
, 可選) — 如果設定為True
,將返回past_key_values
鍵值狀態,可用於加速解碼(請參閱past_key_values
)。 - output_attentions (
bool
, 可選) — 是否返回所有注意力層的注意力張量。有關更多詳細資訊,請參見返回張量下的attentions
。 - output_hidden_states (
bool
, 可選) — 是否返回所有層的隱藏狀態。有關更多詳細資訊,請參見返回張量下的hidden_states
。 - interpolate_pos_encoding (
bool
, 預設為False
) — 是否插值預訓練的位置編碼。 - return_dict (
bool
, 可選) — 是否返回 ModelOutput 而不是普通元組。
返回
transformers.modeling_outputs.BaseModelOutputWithPooling 或 tuple(torch.FloatTensor)
一個 transformers.modeling_outputs.BaseModelOutputWithPooling 或一個 torch.FloatTensor
元組(如果傳遞 return_dict=False
或當 config.return_dict=False
時),包含取決於配置 (GitConfig) 和輸入的各種元素。
-
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 後的注意力權重,用於計算自注意力頭中的加權平均值。
GitModel 的前向方法,覆蓋了 __call__
特殊方法。
儘管前向傳播的配方需要在此函式中定義,但在此之後應該呼叫 Module
例項而不是此函式,因為前者負責執行預處理和後處理步驟,而後者則靜默忽略它們。
示例
>>> from transformers import AutoProcessor, AutoModel
>>> import requests
>>> from PIL import Image
>>> processor = AutoProcessor.from_pretrained("microsoft/git-base")
>>> model = AutoModel.from_pretrained("microsoft/git-base")
>>> url = "http://images.cocodataset.org/val2017/000000039769.jpg"
>>> image = Image.open(requests.get(url, stream=True).raw)
>>> text = "this is an image of two cats"
>>> inputs = processor(images=image, text=text, return_tensors="pt")
>>> outputs = model(**inputs)
>>> last_hidden_state = outputs.last_hidden_state
GitForCausalLM
class transformers.GitForCausalLM
< source >( config )
引數
- config (GitForCausalLM) — 包含模型所有引數的模型配置類。使用配置檔案初始化不會載入與模型相關的權重,只加載配置。請檢視 from_pretrained() 方法載入模型權重。
帶有一個 語言建模
頭部用於自迴歸語言建模的 GIT 模型。
該模型繼承自 PreTrainedModel。有關庫為其所有模型實現的通用方法(如下載或儲存、調整輸入嵌入大小、修剪頭部等)的更多資訊,請檢視超類文件。
該模型也是 PyTorch torch.nn.Module 子類。將其作為常規 PyTorch 模組使用,並參考 PyTorch 文件瞭解所有與通用使用和行為相關的事項。
前向傳播
< source >( input_ids: typing.Optional[torch.Tensor] = None attention_mask: typing.Optional[torch.Tensor] = None position_ids: typing.Optional[torch.Tensor] = None pixel_values: typing.Optional[torch.Tensor] = None head_mask: typing.Optional[torch.Tensor] = None inputs_embeds: typing.Optional[torch.Tensor] = None labels: typing.Optional[torch.Tensor] = None past_key_values: typing.Union[transformers.cache_utils.Cache, list[torch.Tensor], NoneType] = None use_cache: typing.Optional[bool] = None output_attentions: typing.Optional[bool] = None output_hidden_states: typing.Optional[bool] = None interpolate_pos_encoding: bool = False return_dict: typing.Optional[bool] = None **kwargs ) → transformers.modeling_outputs.CausalLMOutputWithPast 或 tuple(torch.FloatTensor)
引數
- input_ids (形狀為
(batch_size, sequence_length)
的torch.Tensor
, 可選) — 詞彙表中輸入序列 token 的索引。預設情況下將忽略填充。可以使用 AutoTokenizer 獲取索引。有關詳細資訊,請參見 PreTrainedTokenizer.encode() 和 PreTrainedTokenizer.call()。
- attention_mask (形狀為
(batch_size, sequence_length)
的torch.Tensor
, 可選) — 用於避免在填充 token 索引上執行注意力的掩碼。掩碼值在[0, 1]
中選擇:- 1 表示 token 未被掩碼,
- 0 表示 token 被掩碼。
- position_ids (形狀為
(batch_size, sequence_length)
的torch.Tensor
, 可選) — 每個輸入序列 token 在位置嵌入中的位置索引。在[0, config.n_positions - 1]
範圍內選擇。 - pixel_values (形狀為
(batch_size, num_channels, image_size, image_size)
的torch.Tensor
, 可選) — 對應於輸入影像的張量。畫素值可以使用{image_processor_class}
獲取。有關詳細資訊,請參見{image_processor_class}.__call__
({processor_class}
使用{image_processor_class}
處理影像)。 - head_mask (形狀為
(num_heads,)
或(num_layers, num_heads)
的torch.Tensor
, 可選) — 用於使自注意力模組的選定頭部無效的掩碼。掩碼值在[0, 1]
中選擇:- 1 表示頭部未被掩碼,
- 0 表示頭部被掩碼。
- inputs_embeds (形狀為
(batch_size, sequence_length, hidden_size)
的torch.Tensor
, 可選) — 可選地,您可以選擇直接傳遞嵌入表示,而不是傳遞input_ids
。如果您希望對input_ids
索引如何轉換為相關向量有比模型內部嵌入查詢矩陣更多的控制,這會很有用。 - labels (形狀為
(batch_size, sequence_length)
的torch.LongTensor
, 可選) — 用於計算從左到右語言建模損失(下一個詞預測)的標籤。索引應在[-100, 0, ..., config.vocab_size]
範圍內(請參閱input_ids
文件字串)。索引設定為-100
的 token 將被忽略(掩碼),損失僅針對標籤在[0, ..., config.vocab_size]
中的 token 計算。 - past_key_values (
Union[~cache_utils.Cache, list[torch.Tensor], NoneType]
) — 預先計算的隱藏狀態(自注意力塊和交叉注意力塊中的鍵和值),可用於加速順序解碼。這通常包括模型在解碼前期返回的 `past_key_values`,當 `use_cache=True` 或 `config.use_cache=True` 時。允許兩種格式:
- 一個 Cache 例項,參見我們的 kv cache 指南;
- 長度為 `config.n_layers` 的 `tuple(torch.FloatTensor)` 元組,每個元組包含兩個形狀為 `(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`。
- use_cache (
bool
, 可選) — 如果設定為 `True`,將返回 `past_key_values` 鍵值狀態,可用於加速解碼(參見 `past_key_values`)。 - output_attentions (
bool
, 可選) — 是否返回所有注意力層的注意力張量。更多詳細資訊請參見返回張量中的 `attentions`。 - output_hidden_states (
bool
, 可選) — 是否返回所有層的隱藏狀態。更多詳細資訊請參見返回張量中的 `hidden_states`。 - interpolate_pos_encoding (
bool
, 預設為 `False`) — 是否對預訓練的位置編碼進行插值。 - return_dict (
bool
, 可選) — 是否返回 ModelOutput 而不是普通元組。
返回
transformers.modeling_outputs.CausalLMOutputWithPast 或 tuple(torch.FloatTensor)
一個 transformers.modeling_outputs.CausalLMOutputWithPast 或一個 `torch.FloatTensor` 元組(如果傳入 `return_dict=False` 或 `config.return_dict=False`),其中包含根據配置 (GitConfig) 和輸入的不同元素。
-
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 後的注意力權重,用於計算自注意力頭中的加權平均值。
GitForCausalLM 的前向方法,重寫了 `__call__` 特殊方法。
儘管前向傳播的配方需要在此函式中定義,但在此之後應該呼叫 Module
例項而不是此函式,因為前者負責執行預處理和後處理步驟,而後者則靜默忽略它們。
示例
影像字幕示例
>>> from transformers import AutoProcessor, AutoModelForCausalLM
>>> import requests
>>> from PIL import Image
>>> processor = AutoProcessor.from_pretrained("microsoft/git-base-coco")
>>> model = AutoModelForCausalLM.from_pretrained("microsoft/git-base-coco")
>>> url = "http://images.cocodataset.org/val2017/000000039769.jpg"
>>> image = Image.open(requests.get(url, stream=True).raw)
>>> pixel_values = processor(images=image, return_tensors="pt").pixel_values
>>> generated_ids = model.generate(pixel_values=pixel_values, max_length=50)
>>> generated_caption = processor.batch_decode(generated_ids, skip_special_tokens=True)[0]
>>> print(generated_caption)
two cats sleeping on a pink blanket next to remotes.
視覺問答 (VQA) 示例
>>> from transformers import AutoProcessor, AutoModelForCausalLM
>>> from huggingface_hub import hf_hub_download
>>> from PIL import Image
>>> processor = AutoProcessor.from_pretrained("microsoft/git-base-textvqa")
>>> model = AutoModelForCausalLM.from_pretrained("microsoft/git-base-textvqa")
>>> file_path = hf_hub_download(repo_id="nielsr/textvqa-sample", filename="bus.png", repo_type="dataset")
>>> image = Image.open(file_path).convert("RGB")
>>> pixel_values = processor(images=image, return_tensors="pt").pixel_values
>>> question = "what does the front of the bus say at the top?"
>>> input_ids = processor(text=question, add_special_tokens=False).input_ids
>>> input_ids = [processor.tokenizer.cls_token_id] + input_ids
>>> input_ids = torch.tensor(input_ids).unsqueeze(0)
>>> generated_ids = model.generate(pixel_values=pixel_values, input_ids=input_ids, max_length=50)
>>> print(processor.batch_decode(generated_ids, skip_special_tokens=True))
['what does the front of the bus say at the top? special']
影片字幕示例
>>> import av
>>> import numpy as np
>>> from PIL import Image
>>> from huggingface_hub import hf_hub_download
>>> from transformers import AutoProcessor, AutoModelForCausalLM
>>> processor = AutoProcessor.from_pretrained("microsoft/git-base-vatex")
>>> model = AutoModelForCausalLM.from_pretrained("microsoft/git-base-vatex")
>>> # set seed for reproducibility
>>> np.random.seed(45)
>>> def read_video_pyav(container, indices):
... '''
... Decode the video with PyAV decoder.
... Args:
... container (`av.container.input.InputContainer`): PyAV container.
... indices (`list[int]`): List of frame indices to decode.
... Returns:
... result (np.ndarray): np array of decoded frames of shape (num_frames, height, width, 3).
... '''
... frames = []
... container.seek(0)
... start_index = indices[0]
... end_index = indices[-1]
... for i, frame in enumerate(container.decode(video=0)):
... if i > end_index:
... break
... if i >= start_index and i in indices:
... frames.append(frame)
... return np.stack([x.to_ndarray(format="rgb24") for x in frames])
>>> def sample_frame_indices(clip_len, frame_sample_rate, seg_len):
... '''
... Sample a given number of frame indices from the video.
... Args:
... clip_len (`int`): Total number of frames to sample.
... frame_sample_rate (`int`): Sample every n-th frame.
... seg_len (`int`): Maximum allowed index of sample's last frame.
... Returns:
... indices (`list[int]`): List of sampled frame indices
... '''
... converted_len = int(clip_len * frame_sample_rate)
... end_idx = np.random.randint(converted_len, seg_len)
... start_idx = end_idx - converted_len
... indices = np.linspace(start_idx, end_idx, num=clip_len)
... indices = np.clip(indices, start_idx, end_idx - 1).astype(np.int64)
... return indices
>>> # load video
>>> file_path = hf_hub_download(
... repo_id="nielsr/video-demo", filename="eating_spaghetti.mp4", repo_type="dataset"
... )
>>> container = av.open(file_path)
>>> # sample frames
>>> num_frames = model.config.num_image_with_embedding
>>> indices = sample_frame_indices(
... clip_len=num_frames, frame_sample_rate=4, seg_len=container.streams.video[0].frames
... )
>>> frames = read_video_pyav(container, indices)
>>> pixel_values = processor(images=list(frames), return_tensors="pt").pixel_values
>>> generated_ids = model.generate(pixel_values=pixel_values, max_length=50)
>>> print("Generated caption:", processor.batch_decode(generated_ids, skip_special_tokens=True))
Generated caption: ['a woman is sitting at a table and she is talking about the food she is holding.']