Transformers 文件
CLIPSeg
並獲得增強的文件體驗
開始使用
CLIPSeg
概述
CLIPSeg 模型由 Timo Lüddecke 和 Alexander Ecker 在論文 《使用文字和影像提示進行影像分割》 中提出。CLIPSeg 在一個凍結的 CLIP 模型之上添加了一個最小的解碼器,用於零樣本和單樣本影像分割。
論文摘要如下:
影像分割通常透過訓練一個針對一組固定物件類別的模型來解決。之後如果想加入額外的類別或更復雜的查詢,成本會很高,因為它需要在包含這些新表示式的資料集上重新訓練模型。在這裡,我們提出了一個系統,它可以在測試時根據任意提示生成影像分割。提示可以是文字或影像。這種方法使我們能夠為一個統一的模型(只訓練一次)來解決三個常見的分割任務,這些任務各有不同的挑戰:指稱表達分割、零樣本分割和單樣本分割。我們以 CLIP 模型為基礎,併為其擴充套件了一個基於 Transformer 的解碼器,以實現密集預測。在 PhraseCut 資料集的擴充套件版本上進行訓練後,我們的系統可以根據自由文字提示或表達查詢的附加影像,為一張圖片生成二元分割圖。我們詳細分析了後一種基於影像的提示的不同變體。這種新穎的混合輸入不僅可以動態適應上述三個分割任務,還可以適應任何可以表述為文字或影像查詢的二元分割任務。最後,我們發現我們的系統能夠很好地適應涉及功能可見性或屬性的廣義查詢。

使用技巧
- CLIPSegForImageSegmentation 在 CLIPSegModel 之上添加了一個解碼器。後者與 CLIPModel 相同。
- CLIPSegForImageSegmentation 可以在測試時根據任意提示生成影像分割。提示可以是文字(作為 `input_ids` 提供給模型)或影像(作為 `conditional_pixel_values` 提供給模型)。也可以提供自定義的條件嵌入(作為 `conditional_embeddings` 提供給模型)。
資源
一份官方 Hugging Face 和社群(由 🌎 標誌)資源列表,幫助你開始使用 CLIPSeg。如果你有興趣提交資源以包含在此處,請隨時發起拉取請求,我們將進行稽核!資源最好能展示一些新東西,而不是重複現有資源。
- 一個演示使用 CLIPSeg 進行零樣本影像分割的 notebook。
CLIPSegConfig
class transformers.CLIPSegConfig
< 原始碼 >( text_config = None vision_config = None projection_dim = 512 logit_scale_init_value = 2.6592 extract_layers = [3, 6, 9] reduce_dim = 64 decoder_num_attention_heads = 4 decoder_attention_dropout = 0.0 decoder_hidden_act = 'quick_gelu' decoder_intermediate_size = 2048 conditional_layer = 0 use_complex_transposed_convolution = False **kwargs )
引數
- text_config (`dict`, *可選*) — 用於初始化 CLIPSegTextConfig 的配置選項字典。
- vision_config (`dict`, *可選*) — 用於初始化 CLIPSegVisionConfig 的配置選項字典。
- projection_dim (`int`, *可選*, 預設為 512) — 文字和視覺投影層的維度。
- logit_scale_init_value (`float`, *可選*, 預設為 2.6592) — *logit_scale* 引數的初始值。預設值根據原始 CLIPSeg 實現使用。
- extract_layers (`list[int]`, *可選*, 預設為 `[3, 6, 9]`) — 在透過 CLIP 的凍結視覺主幹網路前向傳播查詢影像時要提取的層。
- reduce_dim (`int`, *可選*, 預設為 64) — 用於降低 CLIP 視覺嵌入維度的維度。
- decoder_num_attention_heads (`int`, *可選*, 預設為 4) — CLIPSeg 解碼器中的注意力頭數量。
- decoder_attention_dropout (`float`, *可選*, 預設為 0.0) — 注意力機率的 dropout 比率。
- decoder_hidden_act (`str` or `function`, *可選*, 預設為 `"quick_gelu"`) — 編碼器和池化層中的非線性啟用函式(函式或字串)。如果為字串,支援 `"gelu"`、`"relu"`、`"selu"` 和 `"gelu_new"`、`"quick_gelu"`。
- decoder_intermediate_size (`int`, *可選*, 預設為 2048) — Transformer 解碼器中“中間”(即前饋)層的維度。
- conditional_layer (`int`, *可選*, 預設為 0) — Transformer 編碼器中要使用的層,其啟用將與條件嵌入使用 FiLM (Feature-wise Linear Modulation) 進行組合。如果為 0,則使用最後一層。
- use_complex_transposed_convolution (`bool`, *可選*, 預設為 `False`) — 是否在解碼器中使用更復雜的轉置卷積,以實現更精細的分割。
- kwargs (*可選*) — 關鍵字引數字典。
CLIPSegConfig 是用於儲存 CLIPSegModel 配置的配置類。它用於根據指定的引數例項化一個 CLIPSeg 模型,定義了文字模型和視覺模型的配置。使用預設值例項化配置將產生與 CLIPSeg CIDAS/clipseg-rd64 架構類似的配置。
配置物件繼承自 PretrainedConfig,可用於控制模型輸出。有關更多資訊,請閱讀 PretrainedConfig 的文件。
示例
>>> from transformers import CLIPSegConfig, CLIPSegModel
>>> # Initializing a CLIPSegConfig with CIDAS/clipseg-rd64 style configuration
>>> configuration = CLIPSegConfig()
>>> # Initializing a CLIPSegModel (with random weights) from the CIDAS/clipseg-rd64 style configuration
>>> model = CLIPSegModel(configuration)
>>> # Accessing the model configuration
>>> configuration = model.config
>>> # We can also initialize a CLIPSegConfig from a CLIPSegTextConfig and a CLIPSegVisionConfig
>>> # Initializing a CLIPSegText and CLIPSegVision configuration
>>> config_text = CLIPSegTextConfig()
>>> config_vision = CLIPSegVisionConfig()
>>> config = CLIPSegConfig.from_text_vision_configs(config_text, config_vision)
from_text_vision_configs
< 原始碼 >( text_config: CLIPSegTextConfig vision_config: CLIPSegVisionConfig **kwargs ) → CLIPSegConfig
從 clipseg 文字模型配置和 clipseg 視覺模型配置中例項化一個 CLIPSegConfig(或其派生類)。
CLIPSegTextConfig
class transformers.CLIPSegTextConfig
< 原始碼 >( vocab_size = 49408 hidden_size = 512 intermediate_size = 2048 num_hidden_layers = 12 num_attention_heads = 8 max_position_embeddings = 77 hidden_act = 'quick_gelu' layer_norm_eps = 1e-05 attention_dropout = 0.0 initializer_range = 0.02 initializer_factor = 1.0 pad_token_id = 1 bos_token_id = 49406 eos_token_id = 49407 **kwargs )
引數
- vocab_size (`int`, *可選*, 預設為 49408) — CLIPSeg 文字模型的詞彙表大小。定義了在呼叫 CLIPSegModel 時傳入的 `inputs_ids` 可以表示的不同 token 的數量。
- hidden_size (`int`, *可選*, 預設為 512) — 編碼器層和池化層的維度。
- intermediate_size (`int`, *可選*, 預設為 2048) — Transformer 編碼器中“中間”(即前饋)層的維度。
- num_hidden_layers (`int`, *可選*, 預設為 12) — Transformer 編碼器中的隱藏層數量。
- num_attention_heads (`int`, *可選*, 預設為 8) — Transformer 編碼器中每個注意力層的注意力頭數量。
- max_position_embeddings (`int`, *可選*, 預設為 77) — 該模型可能使用的最大序列長度。通常將其設定為較大的值以備不時之需(例如,512、1024 或 2048)。
- hidden_act (`str` or `function`, *可選*, 預設為 `"quick_gelu"`) — 編碼器和池化層中的非線性啟用函式(函式或字串)。如果為字串,支援 `"gelu"`、`"relu"`、`"selu"` 和 `"gelu_new"`、`"quick_gelu"`。
- layer_norm_eps (`float`, *可選*, 預設為 1e-05) — 層歸一化層使用的 epsilon 值。
- attention_dropout (`float`, *可選*, 預設為 0.0) — 注意力機率的 dropout 比率。
- initializer_range (`float`, *可選*, 預設為 0.02) — 用於初始化所有權重矩陣的 truncated_normal_initializer 的標準差。
- initializer_factor (`float`, *可選*, 預設為 1.0) — 用於初始化所有權重矩陣的因子(應保持為 1,內部用於初始化測試)。
- pad_token_id (`int`, *可選*, 預設為 1) — 填充 token 的 ID。
- bos_token_id (`int`, *可選*, 預設為 49406) — 序列開始 token 的 ID。
- eos_token_id (`int`, *可選*, 預設為 49407) — 序列結束 token 的 ID。
這是用於儲存 CLIPSegModel 配置的配置類。它用於根據指定的引數例項化一個 CLIPSeg 模型,定義了模型架構。使用預設值例項化配置將產生與 CLIPSeg CIDAS/clipseg-rd64 架構類似的配置。
配置物件繼承自 PretrainedConfig,可用於控制模型輸出。有關更多資訊,請閱讀 PretrainedConfig 的文件。
示例
>>> from transformers import CLIPSegTextConfig, CLIPSegTextModel
>>> # Initializing a CLIPSegTextConfig with CIDAS/clipseg-rd64 style configuration
>>> configuration = CLIPSegTextConfig()
>>> # Initializing a CLIPSegTextModel (with random weights) from the CIDAS/clipseg-rd64 style configuration
>>> model = CLIPSegTextModel(configuration)
>>> # Accessing the model configuration
>>> configuration = model.config
CLIPSegVisionConfig
class transformers.CLIPSegVisionConfig
< 來源 >( hidden_size = 768 intermediate_size = 3072 num_hidden_layers = 12 num_attention_heads = 12 num_channels = 3 image_size = 224 patch_size = 32 hidden_act = 'quick_gelu' layer_norm_eps = 1e-05 attention_dropout = 0.0 initializer_range = 0.02 initializer_factor = 1.0 **kwargs )
引數
- hidden_size (
int
,可選,預設為 768) — 編碼器層和池化層的維度。 - intermediate_size (
int
,可選,預設為 3072) — Transformer 編碼器中“中間”層(即前饋層)的維度。 - num_hidden_layers (
int
,可選,預設為 12) — Transformer 編碼器中的隱藏層數量。 - num_attention_heads (
int
,可選,預設為 12) — Transformer 編碼器中每個注意力層的注意力頭數量。 - num_channels (
int
,可選,預設為 3) — 輸入通道的數量。 - image_size (
int
,可選,預設為 224) — 每張影像的尺寸(解析度)。 - patch_size (
int
,可選,預設為 32) — 每個圖塊的尺寸(解析度)。 - hidden_act (
str
或function
,可選,預設為"quick_gelu"
) — 編碼器和池化層中的非線性啟用函式(函式或字串)。如果為字串,支援"gelu"
、"relu"
、"selu"
、"gelu_new"
和"quick_gelu"
。 - layer_norm_eps (
float
,可選,預設為 1e-05) — 層歸一化層使用的 epsilon 值。 - attention_dropout (
float
,可選,預設為 0.0) — 注意力機率的 dropout 比率。 - initializer_range (
float
,可選,預設為 0.02) — 用於初始化所有權重矩陣的 truncated_normal_initializer 的標準差。 - initializer_factor (
float
,可選,預設為 1.0) — 初始化所有權重矩陣的因子(應保持為 1,內部用於初始化測試)。
這是用於儲存 CLIPSegModel 配置的配置類。它用於根據指定的引數例項化一個 CLIPSeg 模型,定義了模型架構。使用預設值例項化配置將產生與 CLIPSeg CIDAS/clipseg-rd64 架構類似的配置。
配置物件繼承自 PretrainedConfig,可用於控制模型輸出。有關更多資訊,請閱讀 PretrainedConfig 的文件。
示例
>>> from transformers import CLIPSegVisionConfig, CLIPSegVisionModel
>>> # Initializing a CLIPSegVisionConfig with CIDAS/clipseg-rd64 style configuration
>>> configuration = CLIPSegVisionConfig()
>>> # Initializing a CLIPSegVisionModel (with random weights) from the CIDAS/clipseg-rd64 style configuration
>>> model = CLIPSegVisionModel(configuration)
>>> # Accessing the model configuration
>>> configuration = model.config
CLIPSegProcessor
class transformers.CLIPSegProcessor
< 來源 >( image_processor = None tokenizer = None **kwargs )
引數
- image_processor (ViTImageProcessor, 可選) — 影像處理器是必需的輸入。
- tokenizer (CLIPTokenizerFast, 可選) — 分詞器是必需的輸入。
構建一個 CLIPSeg 處理器,它將 CLIPSeg 影像處理器和 CLIP 分詞器包裝成一個單一的處理器。
CLIPSegProcessor 提供了 ViTImageProcessor 和 CLIPTokenizerFast 的所有功能。更多資訊請參見 `__call__()` 和 decode() 方法。
此方法將其所有引數轉發給 CLIPTokenizerFast 的 `batch_decode()`。請參閱該方法的文件字串以獲取更多資訊。
CLIPSegModel
class transformers.CLIPSegModel
< 來源 >( config: CLIPSegConfig )
引數
- config (CLIPSegConfig) — 包含模型所有引數的模型配置類。使用配置檔案初始化不會載入與模型相關的權重,只會載入配置。要載入模型權重,請檢視 `from_pretrained()` 方法。
基礎的 Clipseg 模型,輸出原始的隱藏狀態,頂部沒有任何特定的頭。
該模型繼承自 PreTrainedModel。請查閱超類文件以瞭解該庫為所有模型實現的通用方法(例如下載或儲存、調整輸入嵌入大小、修剪頭等)。
該模型也是 PyTorch torch.nn.Module 的子類。可以像常規 PyTorch 模組一樣使用它,並參考 PyTorch 文件瞭解與一般用法和行為相關的所有事宜。
forward
< 來源 >( input_ids: typing.Optional[torch.LongTensor] = None pixel_values: typing.Optional[torch.FloatTensor] = None attention_mask: typing.Optional[torch.Tensor] = None position_ids: typing.Optional[torch.LongTensor] = None return_loss: typing.Optional[bool] = None output_attentions: typing.Optional[bool] = None output_hidden_states: typing.Optional[bool] = None interpolate_pos_encoding: bool = True return_dict: typing.Optional[bool] = None ) → transformers.models.clipseg.modeling_clipseg.CLIPSegOutput
或 tuple(torch.FloatTensor)
引數
- input_ids (
torch.LongTensor
,形狀為(batch_size, sequence_length)
,可選) — 詞彙表中輸入序列標記的索引。預設情況下會忽略填充。可以使用 AutoTokenizer 獲取索引。有關詳細資訊,請參閱 PreTrainedTokenizer.encode() 和 PreTrainedTokenizer.call()。
- pixel_values (
torch.FloatTensor
,形狀為(batch_size, num_channels, image_size, image_size)
,可選) — 對應於輸入影像的張量。畫素值可以使用 `{image_processor_class}` 獲取。詳情請參閱 `{image_processor_class}.__call__` (`{processor_class}` 使用 `{image_processor_class}` 來處理影像)。 - 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]`。 - return_loss (
bool
,可選) — 是否返回對比損失。 - output_attentions (
bool
,可選) — 是否返回所有注意力層的注意力張量。有關更多詳細資訊,請參閱返回的張量下的 `attentions`。 - output_hidden_states (
bool
,可選) — 是否返回所有層的隱藏狀態。有關更多詳細資訊,請參閱返回的張量下的 `hidden_states`。 - interpolate_pos_encoding (
bool
,預設為True
) — 是否對預訓練的位置編碼進行插值。 - return_dict (
bool
,可選) — 是否返回一個 ModelOutput 而不是一個普通的元組。
返回
transformers.models.clipseg.modeling_clipseg.CLIPSegOutput
或 tuple(torch.FloatTensor)
一個 `transformers.models.clipseg.modeling_clipseg.CLIPSegOutput` 或一個 `torch.FloatTensor` 的元組(如果傳遞 `return_dict=False` 或 `config.return_dict=False`),根據配置 (CLIPSegConfig) 和輸入包含不同的元素。
- loss (
torch.FloatTensor
,形狀為(1,)
, 可選, 當return_loss
為True
時返回) — 影像-文字相似度的對比損失。 - logits_per_image (
torch.FloatTensor
,形狀為(image_batch_size, text_batch_size)
) — `image_embeds` 和 `text_embeds` 之間的縮放點積得分。這表示影像-文字相似性得分。 - logits_per_text (
torch.FloatTensor
,形狀為(text_batch_size, image_batch_size)
) — `text_embeds` 和 `image_embeds` 之間的縮放點積得分。這表示文字-影像相似性得分。 - text_embeds (
torch.FloatTensor
,形狀為(batch_size, output_dim)
) — 透過將投影層應用於 CLIPSegTextModel 的池化輸出得到的文字嵌入。 - image_embeds (
torch.FloatTensor
,形狀為(batch_size, output_dim)
) — 透過將投影層應用於 CLIPSegVisionModel 的池化輸出得到的影像嵌入。 - text_model_output (`<class '~modeling_outputs.BaseModelOutputWithPooling'>.text_model_output`, 預設為 `None`) — CLIPSegTextModel 的輸出。
- vision_model_output (`<class '~modeling_outputs.BaseModelOutputWithPooling'>.vision_model_output`, 預設為 `None`) — CLIPSegVisionModel 的輸出。
CLIPSegModel 的 forward 方法覆蓋了 `__call__` 特殊方法。
儘管前向傳播的流程需要在此函式中定義,但之後應該呼叫 `Module` 例項而不是此函式,因為前者會處理預處理和後處理步驟,而後者會靜默地忽略它們。
示例
>>> from PIL import Image
>>> import requests
>>> from transformers import AutoProcessor, CLIPSegModel
>>> processor = AutoProcessor.from_pretrained("CIDAS/clipseg-rd64-refined")
>>> model = CLIPSegModel.from_pretrained("CIDAS/clipseg-rd64-refined")
>>> url = "http://images.cocodataset.org/val2017/000000039769.jpg"
>>> image = Image.open(requests.get(url, stream=True).raw)
>>> inputs = processor(
... text=["a photo of a cat", "a photo of a dog"], images=image, return_tensors="pt", padding=True
... )
>>> outputs = model(**inputs)
>>> logits_per_image = outputs.logits_per_image # this is the image-text similarity score
>>> probs = logits_per_image.softmax(dim=1) # we can take the softmax to get the label probabilities
get_text_features
< 來源 >( input_ids: typing.Optional[torch.Tensor] = None attention_mask: typing.Optional[torch.Tensor] = None position_ids: typing.Optional[torch.Tensor] = None output_attentions: typing.Optional[bool] = None output_hidden_states: typing.Optional[bool] = None return_dict: typing.Optional[bool] = None ) → text_features (torch.FloatTensor
,形狀為 (batch_size, output_dim)
)
引數
- input_ids (
torch.Tensor
,形狀為(batch_size, sequence_length)
,可選) — 詞彙表中輸入序列標記的索引。預設情況下會忽略填充。可以使用 AutoTokenizer 獲取索引。有關詳細資訊,請參閱 PreTrainedTokenizer.encode() 和 PreTrainedTokenizer.call()。
- attention_mask (
torch.Tensor
,形狀為(batch_size, sequence_length)
,可選) — 掩碼,用於避免在填充標記索引上執行注意力。掩碼值選自 `[0, 1]`:- 1 表示標記未被遮蓋,
- 0 表示標記被遮蓋。
- position_ids (
torch.Tensor
,形狀為(batch_size, sequence_length)
,可選) — 位置嵌入中每個輸入序列標記的位置索引。選擇範圍在 `[0, config.n_positions - 1]`。 - output_attentions (
bool
,可選) — 是否返回所有注意力層的注意力張量。有關更多詳細資訊,請參閱返回的張量下的 `attentions`。 - output_hidden_states (
bool
,可選) — 是否返回所有層的隱藏狀態。有關更多詳細資訊,請參閱返回的張量下的 `hidden_states`。 - return_dict (
bool
,可選) — 是否返回一個 ModelOutput 而不是一個普通的元組。
返回
text_features (torch.FloatTensor
, 形狀為 (batch_size, output_dim
)
透過將投影層應用於 CLIPSegTextModel 的池化輸出得到的文字嵌入。
示例
>>> from transformers import AutoTokenizer, CLIPSegModel
>>> tokenizer = AutoTokenizer.from_pretrained("CIDAS/clipseg-rd64-refined")
>>> model = CLIPSegModel.from_pretrained("CIDAS/clipseg-rd64-refined")
>>> inputs = tokenizer(["a photo of a cat", "a photo of a dog"], padding=True, return_tensors="pt")
>>> text_features = model.get_text_features(**inputs)
get_image_features
< 來源 >( pixel_values: typing.Optional[torch.FloatTensor] = None output_attentions: typing.Optional[bool] = None output_hidden_states: typing.Optional[bool] = None interpolate_pos_encoding: bool = True return_dict: typing.Optional[bool] = None ) → image_features (torch.FloatTensor
,形狀為 (batch_size, output_dim)
)
引數
- 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
,預設為True
) — 是否對預訓練的位置編碼進行插值。 - return_dict (
bool
,可選) — 是否返回一個 ModelOutput 而不是一個普通的元組。
返回
image_features (torch.FloatTensor
, 形狀為 (batch_size, output_dim
)
透過將投影層應用於 CLIPSegVisionModel 的池化輸出得到的影像嵌入。
示例
>>> from PIL import Image
>>> import requests
>>> from transformers import AutoProcessor, CLIPSegModel
>>> processor = AutoProcessor.from_pretrained("CIDAS/clipseg-rd64-refined")
>>> model = CLIPSegModel.from_pretrained("CIDAS/clipseg-rd64-refined")
>>> url = "http://images.cocodataset.org/val2017/000000039769.jpg"
>>> image = Image.open(requests.get(url, stream=True).raw)
>>> inputs = processor(images=image, return_tensors="pt")
>>> image_features = model.get_image_features(**inputs)
CLIPSegTextModel
forward
< 來源 >( input_ids: typing.Optional[torch.Tensor] = None attention_mask: typing.Optional[torch.Tensor] = None position_ids: 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)
引數
- input_ids (
torch.Tensor
,形狀為(batch_size, sequence_length)
,可選) — 詞彙表中輸入序列標記的索引。預設情況下會忽略填充。可以使用 AutoTokenizer 獲取索引。有關詳細資訊,請參閱 PreTrainedTokenizer.encode() 和 PreTrainedTokenizer.call()。
- attention_mask (
torch.Tensor
,形狀為(batch_size, sequence_length)
,可選) — 掩碼,用於避免在填充標記索引上執行注意力。掩碼值選自 `[0, 1]`:- 1 表示標記未被遮蓋,
- 0 表示標記被遮蓋。
- position_ids (
torch.Tensor
,形狀為(batch_size, sequence_length)
,可選) — 每個輸入序列詞元在位置嵌入中的位置索引。取值範圍為[0, config.n_positions - 1]
。 - 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
),包含根據配置(CLIPSegConfig)和輸入而不同的各種元素。
-
last_hidden_state (
torch.FloatTensor
, 形狀為(batch_size, sequence_length, hidden_size)
) — 模型最後一層輸出的隱藏狀態序列。 -
pooler_output (
torch.FloatTensor
,形狀為(batch_size, hidden_size)
) — 序列的第一個詞元(分類詞元)的最後一層隱藏狀態,經過用於輔助預訓練任務的層進一步處理。例如,對於 BERT 系列模型,這會返回經過線性層和 tanh 啟用函式處理後的分類詞元。線性層的權重是在預訓練期間從下一句預測(分類)目標中訓練得到的。 -
hidden_states (
tuple(torch.FloatTensor)
,可選,當傳遞output_hidden_states=True
或config.output_hidden_states=True
時返回) —torch.FloatTensor
的元組(一個用於嵌入層的輸出(如果模型有嵌入層),另一個用於每個層的輸出),形狀為(batch_size, sequence_length, hidden_size)
。模型在每個層輸出的隱藏狀態以及可選的初始嵌入輸出。
-
attentions (
tuple(torch.FloatTensor)
,可選,當傳遞output_attentions=True
或config.output_attentions=True
時返回) —torch.FloatTensor
的元組(每層一個),形狀為(batch_size, num_heads, sequence_length, sequence_length)
。注意力 softmax 後的注意力權重,用於計算自注意力頭中的加權平均值。
CLIPSegTextModel 的前向方法,重寫了 __call__
特殊方法。
儘管前向傳播的流程需要在此函式中定義,但之後應該呼叫 `Module` 例項而不是此函式,因為前者會處理預處理和後處理步驟,而後者會靜默地忽略它們。
示例
>>> from transformers import AutoTokenizer, CLIPSegTextModel
>>> tokenizer = AutoTokenizer.from_pretrained("CIDAS/clipseg-rd64-refined")
>>> model = CLIPSegTextModel.from_pretrained("CIDAS/clipseg-rd64-refined")
>>> inputs = tokenizer(["a photo of a cat", "a photo of a dog"], padding=True, return_tensors="pt")
>>> outputs = model(**inputs)
>>> last_hidden_state = outputs.last_hidden_state
>>> pooled_output = outputs.pooler_output # pooled (EOS token) states
CLIPSegVisionModel
forward
< 原始碼 >( pixel_values: typing.Optional[torch.FloatTensor] = None output_attentions: typing.Optional[bool] = None output_hidden_states: typing.Optional[bool] = None interpolate_pos_encoding: typing.Optional[bool] = True return_dict: typing.Optional[bool] = None ) → transformers.modeling_outputs.BaseModelOutputWithPooling 或 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
,可選,預設為True
) — 是否對預訓練的位置編碼進行插值。 - return_dict (
bool
,可選) — 是返回一個 ModelOutput 而不是一個普通的元組。
返回
transformers.modeling_outputs.BaseModelOutputWithPooling 或 tuple(torch.FloatTensor)
一個 transformers.modeling_outputs.BaseModelOutputWithPooling 或一個 torch.FloatTensor
的元組(如果傳遞了 return_dict=False
或 config.return_dict=False
),包含根據配置(CLIPSegConfig)和輸入而不同的各種元素。
-
last_hidden_state (
torch.FloatTensor
, 形狀為(batch_size, sequence_length, hidden_size)
) — 模型最後一層輸出的隱藏狀態序列。 -
pooler_output (
torch.FloatTensor
,形狀為(batch_size, hidden_size)
) — 序列的第一個詞元(分類詞元)的最後一層隱藏狀態,經過用於輔助預訓練任務的層進一步處理。例如,對於 BERT 系列模型,這會返回經過線性層和 tanh 啟用函式處理後的分類詞元。線性層的權重是在預訓練期間從下一句預測(分類)目標中訓練得到的。 -
hidden_states (
tuple(torch.FloatTensor)
,可選,當傳遞output_hidden_states=True
或config.output_hidden_states=True
時返回) —torch.FloatTensor
的元組(一個用於嵌入層的輸出(如果模型有嵌入層),另一個用於每個層的輸出),形狀為(batch_size, sequence_length, hidden_size)
。模型在每個層輸出的隱藏狀態以及可選的初始嵌入輸出。
-
attentions (
tuple(torch.FloatTensor)
,可選,當傳遞output_attentions=True
或config.output_attentions=True
時返回) —torch.FloatTensor
的元組(每層一個),形狀為(batch_size, num_heads, sequence_length, sequence_length)
。注意力 softmax 後的注意力權重,用於計算自注意力頭中的加權平均值。
CLIPSegVisionModel 的前向方法,重寫了 __call__
特殊方法。
儘管前向傳播的流程需要在此函式中定義,但之後應該呼叫 `Module` 例項而不是此函式,因為前者會處理預處理和後處理步驟,而後者會靜默地忽略它們。
示例
>>> from PIL import Image
>>> import requests
>>> from transformers import AutoProcessor, CLIPSegVisionModel
>>> processor = AutoProcessor.from_pretrained("CIDAS/clipseg-rd64-refined")
>>> model = CLIPSegVisionModel.from_pretrained("CIDAS/clipseg-rd64-refined")
>>> 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
>>> pooled_output = outputs.pooler_output # pooled CLS states
CLIPSegForImageSegmentation
class transformers.CLIPSegForImageSegmentation
< 原始碼 >( config: CLIPSegConfig )
引數
- config (CLIPSegConfig) — 包含模型所有引數的模型配置類。使用配置檔案初始化不會載入與模型相關的權重,只會載入配置。請檢視 from_pretrained() 方法來載入模型權重。
CLIPSeg 模型,頂部帶有一個基於 Transformer 的解碼器,用於零樣本和單樣本影像分割。
該模型繼承自 PreTrainedModel。請查閱超類文件以瞭解該庫為所有模型實現的通用方法(例如下載或儲存、調整輸入嵌入大小、修剪頭等)。
該模型也是 PyTorch torch.nn.Module 的子類。可以像常規 PyTorch 模組一樣使用它,並參考 PyTorch 文件瞭解與一般用法和行為相關的所有事宜。
forward
< 原始碼 >( input_ids: typing.Optional[torch.FloatTensor] = None pixel_values: typing.Optional[torch.FloatTensor] = None conditional_pixel_values: typing.Optional[torch.FloatTensor] = None conditional_embeddings: typing.Optional[torch.FloatTensor] = None attention_mask: typing.Optional[torch.Tensor] = None position_ids: typing.Optional[torch.LongTensor] = None labels: typing.Optional[torch.LongTensor] = None output_attentions: typing.Optional[bool] = None output_hidden_states: typing.Optional[bool] = None interpolate_pos_encoding: bool = True return_dict: typing.Optional[bool] = None ) → transformers.models.clipseg.modeling_clipseg.CLIPSegOutput
或 tuple(torch.FloatTensor)
引數
- input_ids (
torch.FloatTensor
,形狀為(batch_size, sequence_length)
,可選) — 詞彙表中輸入序列詞元的索引。預設情況下會忽略填充。可以使用 AutoTokenizer 獲取索引。有關詳細資訊,請參閱 PreTrainedTokenizer.encode() 和 PreTrainedTokenizer.call()。
- pixel_values (
torch.FloatTensor
,形狀為(batch_size, num_channels, image_size, image_size)
,可選) — 與輸入影像對應的張量。可以使用{image_processor_class}
獲取畫素值。有關詳細資訊,請參閱{image_processor_class}.__call__
({processor_class}
使用{image_processor_class}
處理影像)。 - conditional_pixel_values (
torch.FloatTensor
,可選) — 條件影像的畫素值。 - conditional_embeddings (
torch.FloatTensor
,形狀為(batch_size, config.projection_dim)
,可選) — 查詢影像的條件嵌入。如果提供,模型將使用此嵌入,而不是從 conditional_pixel_values 中計算嵌入。 - 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]
。 - labels (
torch.LongTensor
,形狀為(batch_size,)
,可選) — 用於計算序列分類/迴歸損失的標籤。索引應在[0, ..., config.num_labels - 1]
範圍內。如果config.num_labels == 1
,則計算迴歸損失(均方損失)。如果config.num_labels > 1
,則計算分類損失(交叉熵)。 - output_attentions (
bool
,可選) — 是否返回所有注意力層的注意力張量。更多細節請參閱返回張量下的attentions
。 - output_hidden_states (
bool
,可選) — 是否返回所有層的隱藏狀態。更多細節請參閱返回張量下的hidden_states
。 - interpolate_pos_encoding (
bool
,預設為True
) — 是否對預訓練的位置編碼進行插值。 - return_dict (
bool
,可選) — 是返回一個 ModelOutput 而不是一個普通的元組。
返回
transformers.models.clipseg.modeling_clipseg.CLIPSegOutput
或 tuple(torch.FloatTensor)
一個 `transformers.models.clipseg.modeling_clipseg.CLIPSegOutput` 或一個 `torch.FloatTensor` 的元組(如果傳遞 `return_dict=False` 或 `config.return_dict=False`),根據配置 (CLIPSegConfig) 和輸入包含不同的元素。
- loss (
torch.FloatTensor
,形狀為(1,)
, 可選, 當return_loss
為True
時返回) — 影像-文字相似度的對比損失。 - logits_per_image (
torch.FloatTensor
,形狀為(image_batch_size, text_batch_size)
) — `image_embeds` 和 `text_embeds` 之間的縮放點積得分。這表示影像-文字相似性得分。 - logits_per_text (
torch.FloatTensor
,形狀為(text_batch_size, image_batch_size)
) — `text_embeds` 和 `image_embeds` 之間的縮放點積得分。這表示文字-影像相似性得分。 - text_embeds (
torch.FloatTensor
,形狀為(batch_size, output_dim)
) — 透過將投影層應用於 CLIPSegTextModel 的池化輸出得到的文字嵌入。 - image_embeds (
torch.FloatTensor
,形狀為(batch_size, output_dim)
) — 透過將投影層應用於 CLIPSegVisionModel 的池化輸出得到的影像嵌入。 - text_model_output (`<class '~modeling_outputs.BaseModelOutputWithPooling'>.text_model_output`, 預設為 `None`) — CLIPSegTextModel 的輸出。
- vision_model_output (`<class '~modeling_outputs.BaseModelOutputWithPooling'>.vision_model_output`, 預設為 `None`) — CLIPSegVisionModel 的輸出。
CLIPSegForImageSegmentation 的前向方法,重寫了 __call__
特殊方法。
儘管前向傳播的流程需要在此函式中定義,但之後應該呼叫 `Module` 例項而不是此函式,因為前者會處理預處理和後處理步驟,而後者會靜默地忽略它們。
示例
>>> from transformers import AutoProcessor, CLIPSegForImageSegmentation
>>> from PIL import Image
>>> import requests
>>> processor = AutoProcessor.from_pretrained("CIDAS/clipseg-rd64-refined")
>>> model = CLIPSegForImageSegmentation.from_pretrained("CIDAS/clipseg-rd64-refined")
>>> url = "http://images.cocodataset.org/val2017/000000039769.jpg"
>>> image = Image.open(requests.get(url, stream=True).raw)
>>> texts = ["a cat", "a remote", "a blanket"]
>>> inputs = processor(text=texts, images=[image] * len(texts), padding=True, return_tensors="pt")
>>> outputs = model(**inputs)
>>> logits = outputs.logits
>>> print(logits.shape)
torch.Size([3, 352, 352])