Transformers 文件

GIT

Hugging Face's logo
加入 Hugging Face 社群

並獲得增強的文件體驗

開始使用

GIT

PyTorch

概述

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)。此外,我們提出了一種新的基於生成的影像分類和場景文字識別方案,在標準基準測試中取得了不錯的表現。

drawing GIT 架構。摘自原始論文

該模型由 nielsr 貢獻。原始程式碼可在 此處 找到。

使用技巧

  • GIT 的實現方式與 GPT-2 非常相似,唯一的區別是模型也受 pixel_values 條件限制。

資源

Hugging Face 官方和社群 (🌎 標記) 資源列表,幫助您開始使用 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 (strfunction, 可選, 預設為 "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.BaseModelOutputtuple(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.BaseModelOutputtuple(torch.FloatTensor)

一個 transformers.modeling_outputs.BaseModelOutput 或一個 torch.FloatTensor 元組(如果傳入 return_dict=Falseconfig.return_dict=False),包含根據配置 (GitConfig) 和輸入的不同元素。

  • last_hidden_state (torch.FloatTensor, 形狀為 (batch_size, sequence_length, hidden_size)) — 模型最後一層輸出的隱藏狀態序列。

  • hidden_states (tuple(torch.FloatTensor), 可選, 當傳入 output_hidden_states=Trueconfig.output_hidden_states=True 時返回) — torch.FloatTensor 的元組(一個用於嵌入層的輸出,如果模型有嵌入層,+ 每個層的輸出一個),形狀為 (batch_size, sequence_length, hidden_size)

    模型在每個層輸出的隱藏狀態以及可選的初始嵌入輸出。

  • attentions (tuple(torch.FloatTensor), 可選, 當傳入 output_attentions=Trueconfig.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 (strCallable, 可選, 預設為 "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

< >

( image_processor tokenizer )

引數

構建一個 GIT 處理器,它將 CLIP 影像處理器和 BERT 分詞器封裝到一個處理器中。

GitProcessor 提供了 CLIPImageProcessorBertTokenizerFast 的所有功能。有關更多資訊,請參見 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'], 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 (strTensorType, 可選) — 如果設定,將返回特定框架的張量。可接受的值為:

    • 'tf': 返回 TensorFlow tf.constant 物件。
    • 'pt': 返回 PyTorch torch.Tensor 物件。
    • 'np': 返回 NumPy np.ndarray 物件。
    • 'jax': 返回 JAX jnp.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 時返回。

用於為模型準備一個或多個序列和影像的主要方法。此方法將 textkwargs 引數轉發到 BertTokenizerFast 的 call()(如果 text 不為 None)以編碼文字。為了準備影像,此方法將 imageskwrags 引數轉發到 CLIPImageProcessor 的 call()(如果 images 不為 None)。有關更多資訊,請參閱上述兩種方法的文件字串。

GitModel

class transformers.GitModel

< >

( config )

引數

  • config (GitModel) — 包含模型所有引數的模型配置類。使用配置檔案初始化不會載入與模型相關的權重,只加載配置。請檢視 from_pretrained() 方法載入模型權重。

由 CLIP 影像編碼器和文字解碼器組成的裸 GIT 模型轉換器,輸出原始隱藏狀態

該模型繼承自 PreTrainedModel。有關庫為其所有模型實現的通用方法(如下載或儲存、調整輸入嵌入大小、修剪頭部等)的更多資訊,請檢視超類文件。

該模型也是 PyTorch torch.nn.Module 子類。將其作為常規 PyTorch 模組使用,並參考 PyTorch 文件瞭解所有與通用使用和行為相關的事項。

前向傳播

< >

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

引數

  • input_ids (形狀為 (batch_size, sequence_length)torch.Tensor, 可選) — 詞彙表中輸入序列 token 的索引。預設情況下將忽略填充。

    可以使用 AutoTokenizer 獲取索引。有關詳細資訊,請參見 PreTrainedTokenizer.encode()PreTrainedTokenizer.call()

    什麼是輸入 ID?

  • 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] 範圍內選擇。

    什麼是位置 ID?

  • 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=Trueconfig.use_cache=True 時。

    允許兩種格式:

    • 一個 Cache 例項,請參閱我們的 kv 快取指南
    • 長度為 config.n_layerstuple(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.BaseModelOutputWithPoolingtuple(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=Trueconfig.output_hidden_states=True 時返回) — torch.FloatTensor 的元組(一個用於嵌入層的輸出,如果模型有嵌入層,+ 每個層的輸出一個),形狀為 (batch_size, sequence_length, hidden_size)

    模型在每個層輸出的隱藏狀態以及可選的初始嵌入輸出。

  • attentions (tuple(torch.FloatTensor), 可選, 當傳入 output_attentions=Trueconfig.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

< >

( config )

引數

  • config (GitForCausalLM) — 包含模型所有引數的模型配置類。使用配置檔案初始化不會載入與模型相關的權重,只加載配置。請檢視 from_pretrained() 方法載入模型權重。

帶有一個 語言建模 頭部用於自迴歸語言建模的 GIT 模型。

該模型繼承自 PreTrainedModel。有關庫為其所有模型實現的通用方法(如下載或儲存、調整輸入嵌入大小、修剪頭部等)的更多資訊,請檢視超類文件。

該模型也是 PyTorch torch.nn.Module 子類。將其作為常規 PyTorch 模組使用,並參考 PyTorch 文件瞭解所有與通用使用和行為相關的事項。

前向傳播

< >

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

引數

  • input_ids (形狀為 (batch_size, sequence_length)torch.Tensor, 可選) — 詞彙表中輸入序列 token 的索引。預設情況下將忽略填充。

    可以使用 AutoTokenizer 獲取索引。有關詳細資訊,請參見 PreTrainedTokenizer.encode()PreTrainedTokenizer.call()

    什麼是輸入 ID?

  • 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] 範圍內選擇。

    什麼是位置 ID?

  • 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.CausalLMOutputWithPasttuple(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=Trueconfig.output_hidden_states=True 時返回) — torch.FloatTensor 的元組(一個用於嵌入層的輸出,如果模型有嵌入層,+ 每個層的輸出一個),形狀為 (batch_size, sequence_length, hidden_size)

    模型在每個層輸出的隱藏狀態以及可選的初始嵌入輸出。

  • attentions (tuple(torch.FloatTensor), 可選, 當傳入 output_attentions=Trueconfig.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.']
< > 在 GitHub 上更新

© . This site is unofficial and not affiliated with Hugging Face, Inc.