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])