CLIPSeg
概览
CLIPSeg模型由Timo Lüddecke和Alexander Ecker在《Image Segmentation Using Text and Image Prompts》一文中提出,该文发表于arXiv。CLIPSeg在冻结的CLIP模型之上增加了一个最小解码器,以实现零样本和一样本图像分割。
论文摘要如下:
传统的图像分割通常针对一组固定的对象类别进行模型训练。后来加入更多类别或更复杂的查询需要重新在一个包含这些表达式的数据集上重新训练模型,这非常昂贵。在这里,我们提出了一种系统,该系统可以在测试时根据任意提示生成图像分割。提示可以是文本或图像。这种方法使我们能够创建一个统一的模型(仅训练一次)来处理三种常见的分割任务,这些任务具有不同的挑战:指称表达式分割、零样本分割和一样本分割。我们将CLIP模型作为主干,并扩展了基于transformer的解码器,以实现密集预测。在PhraseCut数据集的扩展版本上训练后,我们的系统根据自由文本提示或额外的表达查询的图像生成基于二分的图像分割图。我们详细分析了后者图像提示的不同变体。这种新颖的混合输入不仅允许动态适应上述三种分割任务,还可以适应任何可以通过文本或图像查询公式化的二进制分割任务。最后,我们发现我们的系统可以很好地适应涉及能力或属性的泛化查询。
CLIPSeg概述。摘自原始论文。使用提示
- CLIPSegForImageSegmentation在CLIPSegModel上增加了解码器。后者与CLIPModel相同。
- CLIPSegForImageSegmentation可以在测试时根据任意提示生成图像分割。提示可以是文本(作为模型的
input_ids
提供)或图像(作为模型的conditional_pixel_values
提供)。还可以提供自定义的条件嵌入(作为模型的conditional_embeddings
提供)。
资源
官方 Hugging Face 及社区资源列表(标有 🌎),帮助您开始使用 CLIPSeg。如果您有兴趣提交资源被收录在此处,请随时提出一个问题请求,我们将进行审核!资源最好是展示一些新的内容而不是重复现有的资源。
- 一个展示了如何使用 CLIPSeg 实现零样本图像分割的笔记本 Zero_shot_image_segmentation_with_CLIPSeg.ipynb。
CLIPSegConfig
类 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) — 注意力概率的丢弃比。 - decoder_hidden_act (
str
或function
, 可选, 默认值"quick_gelu"
) — 在编码器和pooler中使用的非线性激活函数(函数或字符串)。如果为字符串,则支持"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
< 源 >( text_config: CLIPSegTextConfig vision_config: CLIPSegVisionConfig **kwargs ) → CLIPSegConfig
从 clipseg 文本模型配置和 clipseg 视觉模型配置中实例化 CLIPSegConfig (或其他派生类)。
CLIPSegTextConfig
类别 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
表示的不同标记的数量。 - 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) — 用于初始化所有权重矩阵的截断正态分布初始化器的标准差。 - initializer_factor (
float
, 可选, 默认值 1.0) — 初始化所有权重矩阵的因子(应保持为 1,用于初始化测试的内部使用)。 - pad_token_id (
int
, 可选, 默认值 1) — 填充标记的 ID。 - bos_token_id (
int
, 可选, 默认为 49406) — 流的开始标记ID。 - eos_token_id (
int
, 可选, 默认为 49407) — 流的结束标记ID。
这是存储CLIPSegModel配置的配置类。它用于根据指定的参数实例化一个CLIPSeg模型,定义模型架构。使用默认值实例化配置将产生与CLIPSeg CLIPSegModel 架构相似的配置。
配置对象继承自 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) — 注意力概率的丢弃率。 - initializer_range (
float
, 可选,默认为 0.02) — 所有权重矩阵初始化时使用的 truncated_normal_initializer 的标准差。 - initializer_factor (
float
, 可选,默认为 1.0) — 初始化所有权重矩阵的因子(应保持为 1,内部用于初始化测试)。
这是存储CLIPSegModel配置的配置类。它用于根据指定的参数实例化一个CLIPSeg模型,定义模型架构。使用默认值实例化配置将产生与CLIPSeg CLIPSegModel 架构相似的配置。
配置对象继承自 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
类 transformers.CLIPSegProcessor
< source >( image_processor = None tokenizer = None **kwargs )
参数
- image_processor (ViTImageProcessor, 可选) — 图像处理器是必需的输入。
- tokenizer (CLIPTokenizerFast, 可选) — 标记化器是必需的输入。
构建一个CLIPSeg处理器,该处理器将CLIPSeg图像处理器和CLIP标记化器包装成一个单独的处理器。
CLIPSegProcessor 提供了 ViTImageProcessor 和 CLIPTokenizerFast 所有的功能。有关更多信息,请参阅 __call__()
和 decode()。
此方法将其所有参数传递到CLIPTokenizerFast的batch_decode()。请参阅此方法的文档字符串以获取更多信息。
此方法将其所有参数传递到CLIPTokenizerFast的decode()。有关更多信息,请参阅此方法的文档字符串。
CLIPSegModel
类 transformers.CLIPSegModel
< source >( config: CLIPSegConfig )
参数
- config (CLIPSegConfig) — 包含模型所有参数的配置类。使用配置文件初始化时不加载模型相关的权重,只加载配置。请查看 from_pretrained() 方法以加载模型权重。
此模型是 PyTorch torch.nn.Module 子类。将其用作普通的 PyTorch 模块,并参考 PyTorch 文档了解所有与通用使用和行为相关的事项。
forward
< source >( input_ids: 可选 = None pixel_values: 可选 = None attention_mask: 可选 = None position_ids: 可选 = None return_loss: 可选 = None output_attentions: 可选 = None output_hidden_states: 可选 = None return_dict: 可选 = None ) → transformers.models.clipseg.modeling_clipseg.CLIPSegOutput
或 tuple(torch.FloatTensor)
参数
- input_ids (
torch.LongTensor
的形状为(batch_size, sequence_length)
) — 输入序列标记在词汇表中的索引。如果提供,默认将忽略填充。索引可以通过 AutoTokenizer 获取。有关详细信息,请参阅 PreTrainedTokenizer.encode() 和 PreTrainedTokenizer.call()。
- attention_mask(格式为
torch.Tensor
形如(batch_size, sequence_length)
的 tensor,可选)—— 避免在填充 token 索引上执行注意力的掩码。在[0, 1]
范围内选择掩码值:- 1 对应 未掩码 的 token,
- 0 对应 掩码 的 token。
- position_ids(格式为
torch.LongTensor
形如(batch_size, sequence_length)
的 tensor,可选)—— 每个输入序列 token 在位置嵌入中的索引。选择范围是[0, config.max_position_embeddings - 1]
。 - pixel_values(格式为
torch.FloatTensor
形如(batch_size, num_channels, height, width)
的 tensor)—— 像素值。如果提供了填充,默认会忽略填充。可以使用 AutoImageProcessor 获取像素值。有关详细信息,请参阅 CLIPImageProcessor.call()。 - return_loss (
bool
, 可选) — 是否返回对比损失。 - output_attentions (
bool
, 可选) — 是否返回所有注意力层的注意力张量。请参见返回张量下的attentions
以获取更多详细信息。 - output_hidden_states (
bool
, 可选) — 是否返回所有层的隐藏状态。请参见返回张量下的hidden_states
以获取更多详细信息。 - return_dict (
bool
, 可选) — 是否返回一个 ModelOutput 而不是普通的元组。
返回
transformers.models.clipseg.modeling_clipseg.CLIPSegOutput
或 tuple(torch.FloatTensor)
A 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:(
shape=(image_batch_size, text_batch_size)
的torch.FloatTensor
) — 图像嵌入和文本嵌入之间的缩放点积分数。这代表了图像-文本相似度分数。 - logits_per_text:(
shape=(text_batch_size, image_batch_size)
的torch.FloatTensor
) — 文本嵌入和图像嵌入之间的缩放点积分数。这代表了文本-图像相似度分数。 - text_embeds(
shape=(batch_size, output_dim)
的torch.FloatTensor
) — 通过将 CLIPSegTextModel 的池化输出应用于投影层得到的文本嵌入。 - image_embeds(
shape=(batch_size, output_dim)
的torch.FloatTensor
) — 通过将 CLIPSegVisionModel 的池化输出应用于投影层得到的图像嵌入。 - text_model_output(
BaseModelOutputWithPooling
): CLIPSegTextModel 的输出。 - vision_model_output(
BaseModelOutputWithPooling
): 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: 可选 = None attention_mask: 可选 = None position_ids: 可选 = None output_attentions: 可选 = None output_hidden_states: 可选 = None return_dict: 可选 = None ) → text_features (torch.FloatTensor
of shape (batch_size, output_dim
)
参数
- input_ids (
torch.LongTensor
of shape(batch_size, sequence_length)
) — 输入序列标记的索引,以词汇表中的标记为依据。如果提供,默认将忽略填充。索引可以通过使用 AutoTokenizer 获取。有关详细信息,请参阅 PreTrainedTokenizer.encode() 和 PreTrainedTokenizer.call()。
- attention_mask (
torch.Tensor
of shape(batch_size, sequence_length)
, 可选) — 用于避免在填充标记索引上进行注意力的掩码。掩码值选择在[0, 1]
范围:- 值1为
未掩码的
标记, - 值0为
已掩码的
标记。
- 值1为
- position_ids (
torch.LongTensor
of shape(batch_size, sequence_length)
, 可选) — 表示输入序列中每个标记位置的索引。选择范围为[0, config.max_position_embeddings - 1]
。 - output_attentions (
bool
, 可选) — 是否返回所有注意力层的注意力张量。有关更多信息,请参阅返回张量下的attentions
。 - output_hidden_states (
bool
, 可选) — 是否返回所有层的隐藏状态。请参阅返回张量下的hidden_states
以获取详细信息。 - return_dict (
bool
, 可选) — 是否返回 ModelOutput 实例而不是普通元组。
返回
text_features (torch.FloatTensor
of shape (batch_size, output_dim
)
将 CLIPSegTextModel 的池化输出应用投影层后得到的文本嵌入。
CLIPSegModel 的 forward 方法重写了 __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: 可选 = None output_attentions: 可选 = None output_hidden_states: 可选 = None return_dict: 可选 = None ) → image_features (torch.FloatTensor
of shape (batch_size, output_dim
)
参数
- pixel_values (
torch.FloatTensor
of shape(batch_size, num_channels, height, width)
) — 像素值。如果提供,将默认忽略填充。可以使用 AutoImageProcessor 获取像素值。有关详情,请参阅 CLIPImageProcessor.call()。 - output_attentions (
bool
, 可选) — 是否返回所有注意力层的注意力张量。有关更多详细信息,请参阅返回张量下的attentions
。 - output_hidden_states (
bool
, 可选) — 是否返回所有层的隐藏状态。有关更多信息,请参阅返回张量下的hidden_states
。 - return_dict (
bool
, 可选) — 是否返回ModelOutput对象,而不是常规元组。
返回
image_features (torch.FloatTensor
形状 (batch_size, output_dim)
)
通过将投影层应用于 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(images=image, return_tensors="pt")
>>> image_features = model.get_image_features(**inputs)
CLIPSegTextModel
forward
< 源代码 >( input_ids: 可选 = None attention_mask: 可选 = None position_ids: 可选 = None output_attentions: 可选 = None output_hidden_states: 可选 = None return_dict: 可选 = None ) → transformers.modeling_outputs.BaseModelOutputWithPooling 或 tuple(torch.FloatTensor)
参数
- input_ids (
torch.LongTensor
形状为(batch_size, sequence_length)
) — 词汇表中的输入序列标记的索引。如果提供填充,则默认忽略填充。可以使用 AutoTokenizer 获取索引。有关详细信息,请参阅 PreTrainedTokenizer.encode() 和 PreTrainedTokenizer.call()。
- attention_mask (
torch.Tensor
形状为(batch_size, sequence_length)
,可选) — 避免对填充标记索引执行注意力的掩码。掩码值选择在[0, 1]
之间:- 1 表示 未掩码 的标记,
- 0 表示 掩码 的标记。
- position_ids (
torch.LongTensor
形状为(batch_size, sequence_length)
,可选) — 每个输入序列标记在位置嵌入中的位置索引。选择范围为[0, config.max_position_embeddings - 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
),包含根据配置(<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)
) — 经过用于辅助预训练任务的每一层进一步处理后,该序列的第一个标记(分类标记)的最后一层隐藏状态。例如,对于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)
。注意力软化为后的注意力权重,用于在自注意力头部计算加权平均。
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: 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
of shape(batch_size, num_channels, height, width)
) — 像素值。如果提供,则默认忽略填充。可以通过使用 AutoImageProcessor 来获取像素值。有关详细信息,请参阅 CLIPImageProcessor.call()。 - 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
时),包含根据配置(<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)
) — 经过用于辅助预训练任务的每一层进一步处理后,该序列的第一个标记(分类标记)的最后一层隐藏状态。例如,对于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)
。注意力软化为后的注意力权重,用于在自注意力头部计算加权平均。
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
类 transformers.CLIPSegForImageSegmentation
< 来源 >( config: CLIPSegConfig )
参数
- config (CLIPSegConfig) — 包含模型所有参数的模型配置类。使用配置文件初始化不会加载与模型相关的权重,只有配置。检查from_pretrained()方法来加载模型权重。
CLIPSeg模型,在上面使用了基于Transformer的解码器,以实现零样本和单样本图像分割。
此模型是 PyTorch torch.nn.Module 子类。将其用作普通的 PyTorch 模块,并参考 PyTorch 文档了解所有与通用使用和行为相关的事项。
forward
< 来源 >( 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)
) — 词汇表中的输入序列标记索引。如果你提供了填充,默认会忽略填充。 使用 AutoTokenizer 可以获取索引。有关详细信息,请参阅 PreTrainedTokenizer.encode() 和 PreTrainedTokenizer.call()。 - attention_mask (
torch.Tensor
形状为(batch_size, sequence_length)
, 可选) — 避免在填充标记索引上执行注意力的掩码。掩码值选择为[0, 1]
:- 1 表示 未掩码 的标记,
- 0 表示 掩码 的标记。
- position_ids (
torch.LongTensor
形状为(batch_size, sequence_length)
, 可选) — 每个 input sequence tokens 在位置嵌入中的索引。选择范围为[0, config.max_position_embeddings - 1]
。 - pixel_values (torch.FloatTensor 形状为
(batch_size, num_channels, height, width)
) — 像素值。如果提供,默认情况下会忽略填充。可以使用AutoImageProcessor获取像素值。有关详细信息,请参阅 CLIPImageProcessor.call()。 - return_loss (bool,可选) — 是否返回对比损失。
- output_attentions (bool,可选) — 是否返回所有注意力层的注意力张量。有关更多详细信息,请参阅返回张量下的
attentions
。 - output_hidden_states (bool,可选)— 是否返回所有层的隐藏状态。详情请见返回张量下的
hidden_states
。 - return_dict (bool,可选)— 是否返回 ModelOutput 实例而不是普通的元组。
- labels (可选择)
torch.LongTensor
形状为(batch_size,)
,用于计算序列分类/回归损失。索引应在[0, ..., config.num_labels - 1]
范围内。如果config.num_labels == 1
,将计算回归损失(均方损失),如果config.num_labels > 1
,将计算分类损失(交叉熵损失)。
返回
transformers.models.clipseg.modeling_clipseg.CLIPSegImageSegmentationOutput
或 tuple(torch.FloatTensor)
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
形状为(1,)
,当return_loss
为True
时返回——对比图像-文本相似度的对比损失。… - vision_model_output (
BaseModelOutputWithPooling
)— 无障碍模型 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])