CLIPSeg
概述
CLIPSeg 模型由 Timo Lüddecke 和 Alexander Ecker 在 Image Segmentation Using Text and Image Prompts 中提出。CLIPSeg 在冻结的 CLIP 模型之上添加了一个最小的解码器,用于零样本和一次样本图像分割。
该论文的摘要如下:
图像分割通常通过训练模型来处理固定的对象类别集。稍后合并其他类别或更复杂的查询是昂贵的,因为它需要在一个包含这些表达式的数据集上重新训练模型。在这里,我们提出了一个系统,可以在测试时根据任意提示生成图像分割。提示可以是文本或图像。这种方法使我们能够为三个常见的分割任务创建一个统一的模型(一次训练),这些任务带来了独特的挑战:指代表达式分割、零样本分割和一次样本分割。我们以 CLIP 模型为骨干,并使用基于 Transformer 的解码器对其进行扩展,从而实现密集预测。在扩展版本的 PhraseCut 数据集上训练后,我们的系统可以根据自由文本提示或表达查询的附加图像为图像生成二元分割图。我们详细分析了后一种基于图像的提示的不同变体。这种新颖的混合输入不仅可以动态适应上述三个分割任务,还可以动态适应任何可以制定文本或图像查询的二元分割任务。最后,我们发现我们的系统能够很好地适应涉及可供性或属性的广义查询。

使用技巧
- CLIPSegForImageSegmentation 在 CLIPSegModel 之上添加了一个解码器。后者与 CLIPModel 相同。
- CLIPSegForImageSegmentation 可以在测试时根据任意提示生成图像分割。提示可以是文本(作为
input_ids
提供给模型)或图像(作为conditional_pixel_values
提供给模型)。也可以提供自定义条件嵌入(作为conditional_embeddings
提供给模型)。
资源
以下是官方 Hugging Face 和社区(标有 🌎)资源的列表,可帮助您开始使用 CLIPSeg。如果您有兴趣提交资源以包含在此处,请随时打开 Pull Request,我们将对其进行审核!该资源最好能展示一些新的东西,而不是重复现有资源。
- 一个笔记本,演示了使用 CLIPSeg 进行零样本图像分割。
CLIPSegConfig
class transformers.CLIPSegConfig
< source >( 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
或function
, 可选, 默认为"quick_gelu"
) — 编码器和池化器中的非线性激活函数(函数或字符串)。如果为字符串,则支持"gelu"
,"relu"
,"selu"
,"gelu_new"
和"quick_gelu"
。 - decoder_intermediate_size (
int
, 可选, 默认为 2048) — Transformer 解码器中“中间”层(即,前馈层)的维度。 - conditional_layer (
int
, 可选, 默认为 0) — 要使用的 Transformer 编码器的层,其激活值将使用 FiLM(特征级线性调制)与条件嵌入相结合。 如果为 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
< source >( text_config: CLIPSegTextConfig vision_config: CLIPSegVisionConfig **kwargs ) → CLIPSegConfig
从 clipseg 文本模型配置和 clipseg 视觉模型配置实例化 CLIPSegConfig(或派生类)。
CLIPSegTextConfig
class transformers.CLIPSegTextConfig
< source >( 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
或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) — Padding token id(填充 token ID)。 - bos_token_id (
int
, 可选, 默认为 49406) — Beginning of stream token id(流开始 token ID)。 - eos_token_id (
int
, 可选, 默认为 49407) — End of stream token id(流结束 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
< source >( 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
, optional, defaults to 768) — 编码器层和池化器层的维度。 - intermediate_size (
int
, optional, defaults to 3072) — Transformer 编码器中“中间层”(即,前馈)的维度。 - num_hidden_layers (
int
, optional, defaults to 12) — Transformer 编码器中隐藏层的数量。 - num_attention_heads (
int
, optional, defaults to 12) — Transformer 编码器中每个注意力层的注意力头的数量。 - num_channels (
int
, optional, defaults to 3) — 输入通道的数量。 - image_size (
int
, optional, defaults to 224) — 每张图片的大小(分辨率)。 - patch_size (
int
, optional, defaults to 32) — 每个patch的大小(分辨率)。 - hidden_act (
str
或function
, optional, defaults to"quick_gelu"
) — 编码器和池化器中的非线性激活函数(函数或字符串)。如果为字符串,则支持"gelu"
,"relu"
,"selu"
,"gelu_new"
和"quick_gelu"
。 - layer_norm_eps (
float
, optional, defaults to 1e-05) — 层归一化层使用的 epsilon 值。 - attention_dropout (
float
, optional, defaults to 0.0) — 注意力概率的 dropout 比率。 - initializer_range (
float
, optional, defaults to 0.02) — 用于初始化所有权重矩阵的 truncated_normal_initializer 的标准差。 - initializer_factor (
float
, optional, defaults to 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
< source >( image_processor = None tokenizer = None **kwargs )
参数
- image_processor (ViTImageProcessor, optional) — 图像处理器是必需的输入。
- tokenizer (CLIPTokenizerFast, optional) — 分词器是必需的输入。
构建一个 CLIPSeg 处理器,它将 CLIPSeg 图像处理器和一个 CLIP 分词器封装到单个处理器中。
CLIPSegProcessor 提供了 ViTImageProcessor 和 CLIPTokenizerFast 的所有功能。 有关更多信息,请参阅 __call__()
和 decode() 。
此方法将其所有参数转发到 CLIPTokenizerFast 的 batch_decode()。 有关更多信息,请参阅此方法的文档字符串。
此方法将其所有参数转发到 CLIPTokenizerFast 的 decode()。 有关更多信息,请参阅此方法的文档字符串。
CLIPSegModel
class transformers.CLIPSegModel
< source >( config: CLIPSegConfig )
参数
- config (CLIPSegConfig) — 包含模型所有参数的模型配置类。 使用配置文件初始化不会加载与模型关联的权重,仅加载配置。 请查看 from_pretrained() 方法来加载模型权重。
此模型是 PyTorch torch.nn.Module 子类。 将其用作常规 PyTorch 模块,并参阅 PyTorch 文档以获取与常规用法和行为相关的所有事项。
forward
< source >( input_ids: Optional = None pixel_values: Optional = None attention_mask: Optional = None position_ids: Optional = None return_loss: Optional = None output_attentions: Optional = None output_hidden_states: Optional = None return_dict: Optional = None ) → transformers.models.clipseg.modeling_clipseg.CLIPSegOutput
or tuple(torch.FloatTensor)
参数
- input_ids (
torch.LongTensor
,形状为(batch_size, sequence_length)
) — 词汇表中输入序列标记的索引。 如果您提供填充,默认情况下将忽略填充。索引可以使用 AutoTokenizer 获得。 有关详细信息,请参见 PreTrainedTokenizer.encode() 和 PreTrainedTokenizer.call()。
- attention_mask (
torch.Tensor
,形状为(batch_size, sequence_length)
, optional) — 掩码,用于避免在填充标记索引上执行注意力机制。 掩码值在[0, 1]
中选择:- 1 代表未被掩盖的标记,
- 0 代表被掩盖的标记。
- position_ids (
torch.LongTensor
,形状为(batch_size, sequence_length)
, optional) — 位置嵌入中每个输入序列标记的位置索引。 在范围[0, config.max_position_embeddings - 1]
中选择。 - pixel_values (
torch.FloatTensor
,形状为(batch_size, num_channels, height, width)
) — 像素值。 如果您提供填充,默认情况下将忽略填充。 像素值可以使用 AutoImageProcessor 获得。 有关详细信息,请参见 CLIPImageProcessor.call()。 - return_loss (
bool
, optional) — 是否返回对比损失。 - output_attentions (
bool
, optional) — 是否返回所有注意力层的注意力张量。 有关更多详细信息,请参见返回张量下的attentions
。 - output_hidden_states (
bool
, optional) — 是否返回所有层的隐藏状态。 详见返回张量下的hidden_states
部分了解更多详情。 - return_dict (
bool
, optional) — 是否返回 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
时),包含各种元素,具体取决于配置 (<class 'transformers.models.clipseg.configuration_clipseg.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 (
BaseModelOutputWithPooling
) — CLIPSegTextModel 的输出。 - vision_model_output (
BaseModelOutputWithPooling
) — CLIPSegVisionModel 的输出。
CLIPSegModel 的前向传播方法,覆盖了 __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
< source >( input_ids: Optional = None attention_mask: Optional = None position_ids: Optional = None output_attentions: Optional = None output_hidden_states: Optional = None return_dict: Optional = None ) → text_features (torch.FloatTensor
,形状为 (batch_size, output_dim
)
参数
- input_ids (
torch.LongTensor
,形状为(batch_size, sequence_length)
) — 词汇表中输入序列 tokens 的索引。 如果您提供 padding,默认情况下将被忽略。索引可以使用 AutoTokenizer 获得。 有关详细信息,请参阅 PreTrainedTokenizer.encode() 和 PreTrainedTokenizer.call()。
- attention_mask (
torch.Tensor
,形状为(batch_size, sequence_length)
,可选) — 用于避免在 padding token 索引上执行 attention 的掩码。 掩码值在[0, 1]
中选择:- 1 表示 未被掩盖 的 tokens,
- 0 表示 被掩盖 的 tokens。
- position_ids (
torch.LongTensor
,形状为(batch_size, sequence_length)
,可选) — 位置嵌入中每个输入序列 token 的位置索引。 在范围[0, config.max_position_embeddings - 1]
中选择。 - output_attentions (
bool
, optional) — 是否返回所有 attention 层的 attentions 张量。 详见返回张量下的attentions
部分了解更多详情。 - output_hidden_states (
bool
, optional) — 是否返回所有层的隐藏状态。 详见返回张量下的hidden_states
部分了解更多详情。 - return_dict (
bool
, optional) — 是否返回 ModelOutput 而不是纯粹的元组。
返回:
text_features (torch.FloatTensor
,形状为 (batch_size, output_dim
)
通过将投影层应用于 CLIPSegTextModel 的池化输出而获得的文本嵌入。
CLIPSegModel 的前向传播方法,覆盖了 __call__
特殊方法。
尽管前向传播的配方需要在该函数中定义,但之后应该调用 Module
实例而不是此函数,因为前者负责运行预处理和后处理步骤,而后者会静默地忽略它们。
示例
>>> 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
< source >( pixel_values: Optional = None output_attentions: Optional = None output_hidden_states: Optional = None return_dict: Optional = None ) → image_features (torch.FloatTensor
,形状为 (batch_size, output_dim
)
参数
- pixel_values (
torch.FloatTensor
,形状为(batch_size, num_channels, height, width)
) — 像素值。 如果您提供 padding,默认情况下将被忽略。 像素值可以使用 AutoImageProcessor 获得。 有关详细信息,请参阅 CLIPImageProcessor.call()。 - output_attentions (
bool
, optional) — 是否返回所有 attention 层的 attentions 张量。 详见返回张量下的attentions
部分了解更多详情。 - output_hidden_states (
bool
, optional) — 是否返回所有层的隐藏状态。 详见返回张量下的hidden_states
部分了解更多详情。 - return_dict (
bool
, optional) — 是否返回 ModelOutput 而不是纯粹的元组。
返回:
image_features (torch.FloatTensor
,形状为 (batch_size, output_dim
)
通过将投影层应用于 CLIPSegVisionModel 的池化输出而获得的图像嵌入。
CLIPSegModel 的前向传播方法,覆盖了 __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(images=image, return_tensors="pt")
>>> image_features = model.get_image_features(**inputs)
CLIPSegTextModel
forward
< source >( input_ids: Optional = None attention_mask: Optional = None position_ids: Optional = None output_attentions: Optional = None output_hidden_states: Optional = None return_dict: Optional = None ) → transformers.modeling_outputs.BaseModelOutputWithPooling 或 tuple(torch.FloatTensor)
参数
- input_ids (
torch.LongTensor
,形状为(batch_size, sequence_length)
) — 词汇表中输入序列 tokens 的索引。 如果您提供 padding,默认情况下将被忽略。索引可以使用 AutoTokenizer 获得。 有关详细信息,请参阅 PreTrainedTokenizer.encode() 和 PreTrainedTokenizer.call()。
- attention_mask (
torch.Tensor
,形状为(batch_size, sequence_length)
,可选) — 用于避免在 padding token 索引上执行 attention 的掩码。 掩码值在[0, 1]
中选择:- 1 表示 未被掩盖 的 tokens,
- 0 表示 被掩盖 的 tokens。
- position_ids (
torch.LongTensor
,形状为(batch_size, sequence_length)
,可选) — 位置嵌入中每个输入序列 token 的位置索引。 在范围[0, config.max_position_embeddings - 1]
中选择。 - output_attentions (
bool
, optional) — 是否返回所有注意力层的注意力张量。 详见返回张量下的attentions
部分了解更多详情。 - output_hidden_states (
bool
, optional) — 是否返回所有层的隐藏状态。 详见返回张量下的hidden_states
部分了解更多详情。 - return_dict (
bool
, optional) — 是否返回 ModelOutput 而不是纯元组。
返回:
transformers.modeling_outputs.BaseModelOutputWithPooling 或 tuple(torch.FloatTensor)
一个 transformers.modeling_outputs.BaseModelOutputWithPooling 或一个 torch.FloatTensor
元组 (如果传递了 return_dict=False
或当 config.return_dict=False
时),其中包含各种元素,具体取决于配置 (<class 'transformers.models.clipseg.configuration_clipseg.CLIPSegTextConfig'>
) 和输入。
-
last_hidden_state (
torch.FloatTensor
,形状为(batch_size, sequence_length, hidden_size)
) — 模型最后一层的输出处的隐藏状态序列。 -
pooler_output (
torch.FloatTensor
,形状为(batch_size, hidden_size)
) — 序列的第一个 token (分类 token) 的最后一层隐藏状态,通过用于辅助预训练任务的层进一步处理后得到。 例如,对于 BERT 系列模型,这返回通过线性层和 tanh 激活函数处理后的分类 token。 线性层权重是通过预训练期间的下一句预测(分类)目标训练的。 -
hidden_states (
tuple(torch.FloatTensor)
, optional, 当传递了output_hidden_states=True
或当config.output_hidden_states=True
时返回) —torch.FloatTensor
的元组(如果模型具有嵌入层,则为嵌入的输出 + 每层的输出一个),形状为(batch_size, sequence_length, hidden_size)
。模型在每一层输出端的隐藏状态,以及可选的初始嵌入输出。
-
attentions (
tuple(torch.FloatTensor)
, optional, 当传递了output_attentions=True
或当config.output_attentions=True
时返回) —torch.FloatTensor
的元组(每层一个),形状为(batch_size, num_heads, sequence_length, sequence_length)
。注意力 softmax 之后的注意力权重,用于计算自注意力头中的加权平均值。
CLIPSegTextModel 的 forward 方法,覆盖了 __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
< source >( pixel_values: Optional = None output_attentions: Optional = None output_hidden_states: Optional = None return_dict: Optional = None ) → transformers.modeling_outputs.BaseModelOutputWithPooling 或 tuple(torch.FloatTensor)
参数
- pixel_values (
torch.FloatTensor
,形状为(batch_size, num_channels, height, width)
) — 像素值。 如果您提供填充,默认情况下会忽略填充。 像素值可以使用 AutoImageProcessor 获得。 有关详细信息,请参阅 CLIPImageProcessor.call()。 - output_attentions (
bool
, optional) — 是否返回所有注意力层的注意力张量。 详见返回张量下的attentions
部分了解更多详情。 - output_hidden_states (
bool
, optional) — 是否返回所有层的隐藏状态。 详见返回张量下的hidden_states
部分了解更多详情。 - return_dict (
bool
, optional) — 是否返回 ModelOutput 而不是纯元组。
返回:
transformers.modeling_outputs.BaseModelOutputWithPooling 或 tuple(torch.FloatTensor)
一个 transformers.modeling_outputs.BaseModelOutputWithPooling 或一个 torch.FloatTensor
元组 (如果传递了 return_dict=False
或当 config.return_dict=False
时),其中包含各种元素,具体取决于配置 (<class 'transformers.models.clipseg.configuration_clipseg.CLIPSegVisionConfig'>
) 和输入。
-
last_hidden_state (
torch.FloatTensor
,形状为(batch_size, sequence_length, hidden_size)
) — 模型最后一层的输出处的隐藏状态序列。 -
pooler_output (
torch.FloatTensor
,形状为(batch_size, hidden_size)
) — 序列的第一个 token (分类 token) 的最后一层隐藏状态,通过用于辅助预训练任务的层进一步处理后得到。 例如,对于 BERT 系列模型,这返回通过线性层和 tanh 激活函数处理后的分类 token。 线性层权重是通过预训练期间的下一句预测(分类)目标训练的。 -
hidden_states (
tuple(torch.FloatTensor)
, optional, 当传递了output_hidden_states=True
或当config.output_hidden_states=True
时返回) —torch.FloatTensor
的元组(如果模型具有嵌入层,则为嵌入的输出 + 每层的输出一个),形状为(batch_size, sequence_length, hidden_size)
。模型在每一层输出端的隐藏状态,以及可选的初始嵌入输出。
-
attentions (
tuple(torch.FloatTensor)
, optional, 当传递了output_attentions=True
或当config.output_attentions=True
时返回) —torch.FloatTensor
的元组(每层一个),形状为(batch_size, num_heads, sequence_length, sequence_length)
。注意力 softmax 之后的注意力权重,用于计算自注意力头中的加权平均值。
The CLIPSegVisionModel forward 方法,覆盖了 __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
< source >( config: CLIPSegConfig )
参数
- config (CLIPSegConfig) — 带有模型所有参数的模型配置类。 使用配置文件初始化不会加载与模型关联的权重,仅加载配置。 请查看 from_pretrained() 方法来加载模型权重。
CLIPSeg 模型,顶部带有基于 Transformer 的解码器,用于零样本和单样本图像分割。
此模型是 PyTorch torch.nn.Module 子类。 将其用作常规 PyTorch 模块,并参阅 PyTorch 文档以获取与常规用法和行为相关的所有事项。
forward
< source >( input_ids: Optional = None pixel_values: Optional = None conditional_pixel_values: Optional = None conditional_embeddings: Optional = None attention_mask: Optional = None position_ids: Optional = None labels: Optional = None output_attentions: Optional = None output_hidden_states: Optional = None return_dict: Optional = None ) → transformers.models.clipseg.modeling_clipseg.CLIPSegImageSegmentationOutput
或 tuple(torch.FloatTensor)
参数
- input_ids (
torch.LongTensor
,形状为(batch_size, sequence_length)
) — 词汇表中输入序列 token 的索引。 如果您提供填充,默认情况下会忽略填充。索引可以使用 AutoTokenizer 获得。 有关详细信息,请参阅 PreTrainedTokenizer.encode() 和 PreTrainedTokenizer.call()。
- attention_mask (
torch.Tensor
,形状为(batch_size, sequence_length)
, optional) — 用于避免在 padding token 索引上执行注意力的掩码。 在[0, 1]
中选择的掩码值:- 1 表示未被掩盖的 token,
- 0 表示被掩盖的 token。
- position_ids (
torch.LongTensor
,形状为(batch_size, sequence_length)
, optional) — 位置嵌入中每个输入序列 token 的位置索引。 在范围[0, config.max_position_embeddings - 1]
中选择。 - pixel_values (
torch.FloatTensor
,形状为(batch_size, num_channels, height, width)
) — 像素值。 如果您提供填充,默认情况下会忽略填充。 像素值可以使用 AutoImageProcessor 获得。 有关详细信息,请参阅 CLIPImageProcessor.call()。 - return_loss (
bool
, optional) — 是否返回对比损失。 - output_attentions (
bool
, optional) — 是否返回所有注意力层的注意力张量。 详见返回张量下的attentions
部分了解更多详情。 - output_hidden_states (
bool
, optional) — 是否返回所有层的隐藏状态。 详情请参阅返回张量下的hidden_states
。 - return_dict (
bool
, optional) — 是否返回 ModelOutput 而不是普通元组。 - labels (
torch.LongTensor
of shape(batch_size,)
, optional) — 用于计算序列分类/回归损失的标签。 索引应在[0, ..., config.num_labels - 1]
中。 如果config.num_labels == 1
,则计算回归损失(均方损失)。 如果config.num_labels > 1
,则计算分类损失(交叉熵损失)。
返回:
transformers.models.clipseg.modeling_clipseg.CLIPSegImageSegmentationOutput
or tuple(torch.FloatTensor)
A transformers.models.clipseg.modeling_clipseg.CLIPSegImageSegmentationOutput
或 torch.FloatTensor
的元组 (如果传递了 return_dict=False
或当 config.return_dict=False
时),包含取决于配置(<class 'transformers.models.clipseg.configuration_clipseg.CLIPSegTextConfig'>
)和输入的各种元素。
- loss (
torch.FloatTensor
of shape(1,)
, optional, returned whenreturn_loss
isTrue
) — 用于图像-文本相似度的对比损失。 … - vision_model_output (
BaseModelOutputWithPooling
) — CLIPSegVisionModel 的输出。
The CLIPSegForImageSegmentation forward 方法,覆盖了 __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])