Transformers documentation
GroupViT
该模型于 2022-02-22 在 HF papers 上发布,并于 2022-06-28 贡献至 Hugging Face Transformers。
GroupViT
概述
GroupViT 模型由 Jiarui Xu、Shalini De Mello、Sifei Liu、Wonmin Byeon、Thomas Breuel、Jan Kautz 和 Xiaolong Wang 在 GroupViT: Semantic Segmentation Emerges from Text Supervision 中提出。 受 CLIP 的启发,GroupViT 是一个视觉-语言模型,能够对任意给定词汇类别执行零样本语义分割。
该论文的摘要如下:
分组与识别是视觉场景理解的重要组成部分,例如用于目标检测和语义分割。在端到端深度学习系统中,图像区域的分组通常通过来自像素级识别标签的自顶向下监督隐式完成。相反,本文提出将分组机制重新引入深度网络,使得仅通过文本监督即可自动涌现出语义分割。我们提出了一种层次化的 Grouping Vision Transformer(GroupViT),它超越了常规的网格结构表示,能够学习将图像区域分组为逐渐增大的任意形状片段。我们在大规模图文数据集上,通过对比损失将 GroupViT 与文本编码器联合训练。仅使用文本监督且无需任何像素级标注,GroupViT 能够学习将语义区域聚合在一起,并以零样本方式成功迁移到语义分割任务中,即无需任何进一步的微调。它在 PASCAL VOC 2012 数据集上取得了 52.3% mIoU 的零样本准确率,在 PASCAL Context 数据集上取得了 22.4% mIoU,并且与需要更高程度监督的最先进迁移学习方法相比具有竞争力。
使用技巧
- 您可以在
GroupViTModel的 forward 中指定output_segmentation=True,以获取输入文本的分割 logits。
资源
以下是官方的 Hugging Face 和社区(以 🌎 标识)资源列表,可帮助您快速上手 GroupViT。
- 快速上手 GroupViT 的方法是查看示例笔记本(其中展示了零样本分割推理)。
- 您也可以查看 HuggingFace Spaces 演示 来体验 GroupViT。
GroupViTConfig
class transformers.GroupViTConfig
< source >( transformers_version: str | None = Nonearchitectures: list[str] | None = Noneoutput_hidden_states: bool | None = Falsereturn_dict: bool | None = Truedtype: str | torch.dtype | None = Nonechunk_size_feed_forward: int = 0is_encoder_decoder: bool = Falseid2label: dict[int, str] | dict[str, str] | None = Nonelabel2id: dict[str, int] | dict[str, str] | None = Noneproblem_type: Literal['regression', 'single_label_classification', 'multi_label_classification'] | None = Nonetext_config: dict | transformers.configuration_utils.PreTrainedConfig | None = Nonevision_config: dict | transformers.configuration_utils.PreTrainedConfig | None = Noneprojection_dim: int = 256projection_intermediate_dim: int = 4096logit_scale_init_value: float = 2.6592initializer_range: float = 0.02initializer_factor: float = 1.0output_segmentation: bool = False )
参数
- text_config (
Union[dict, ~configuration_utils.PreTrainedConfig],可选) — 文本骨干网络的配置对象或字典。 - vision_config (
Union[dict, ~configuration_utils.PreTrainedConfig],可选) — 视觉骨干网络的配置对象或字典。 - projection_dim (
int,可选,默认为256) — 文本和视觉投影层的维度。 - projection_intermediate_dim (
int,可选,默认为 4096) — 文本和视觉投影层中间层的维度。 - logit_scale_init_value (
float,可选,默认为2.6592) — logit_scale 参数的初始值。 - initializer_range (
float,可选,默认为0.02) — 用于初始化所有权重矩阵的 truncated_normal_initializer 的标准差。 - initializer_factor (
float,可选,默认为1.0) — 用于初始化所有权重矩阵的系数(应保持为 1,内部用于初始化测试)。 - output_segmentation (
bool,可选,默认为 False) — 是否返回分割 logits。
这是用于存储 GroupViTModel 配置的类。它根据指定的参数实例化 Groupvit 模型,并定义模型架构。使用默认值实例化配置将生成与 nvidia/groupvit-gcc-yfcc 类似的配置。
配置对象继承自 PreTrainedConfig,可用于控制模型输出。有关更多信息,请参阅 PreTrainedConfig 的文档。
GroupViTTextConfig
class transformers.GroupViTTextConfig
< source >( transformers_version: str | None = Nonearchitectures: list[str] | None = Noneoutput_hidden_states: bool | None = Falsereturn_dict: bool | None = Truedtype: str | torch.dtype | None = Nonechunk_size_feed_forward: int = 0is_encoder_decoder: bool = Falseid2label: dict[int, str] | dict[str, str] | None = Nonelabel2id: dict[str, int] | dict[str, str] | None = Noneproblem_type: Literal['regression', 'single_label_classification', 'multi_label_classification'] | None = Nonevocab_size: int = 49408hidden_size: int = 256intermediate_size: int = 1024num_hidden_layers: int = 12num_attention_heads: int = 4max_position_embeddings: int = 77hidden_act: str = 'quick_gelu'layer_norm_eps: float = 1e-05dropout: float | int = 0.0attention_dropout: float | int = 0.0initializer_range: float = 0.02initializer_factor: float = 1.0pad_token_id: int | None = 1bos_token_id: int | None = 49406eos_token_id: int | list[int] | None = 49407 )
参数
- vocab_size (
int,可选,默认为49408) — 模型的词汇表大小。定义了input_ids可以表示的不同 token 数量。 - hidden_size (
int,可选,默认为256) — 隐藏表示的维度。 - intermediate_size (
int,可选,默认为1024) — MLP 表示的维度。 - num_hidden_layers (
int, 可选, 默认为12) — Transformer 解码器中的隐藏层数量。 - num_attention_heads (
int,可选,默认为4) — Transformer 解码器中每个注意力层的注意力头数量。 - max_position_embeddings (
int,可选,默认为77) — 该模型可能使用的最大序列长度。 - hidden_act (
str,可选,默认为quick_gelu) — 解码器中的非线性激活函数(函数或字符串)。例如,"gelu"、"relu"、"silu"等。 - layer_norm_eps (
float,可选,默认为1e-05) — 层归一化层所使用的 epsilon 值。 - dropout (
Union[float, int],可选,默认为0.0) — 所有 dropout 层的比率。 - attention_dropout (
Union[float, int],可选,默认为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 (
Union[int, list[int]],可选,默认为49407) — 词汇表中用于表示流结束(end-of-stream)的 token id。
这是用于存储 GroupViTModel 配置的类。它根据指定的参数实例化 Groupvit 模型,并定义模型架构。使用默认值实例化配置将生成与 nvidia/groupvit-gcc-yfcc 类似的配置。
配置对象继承自 PreTrainedConfig,可用于控制模型输出。有关更多信息,请参阅 PreTrainedConfig 的文档。
示例:
>>> from transformers import GroupViTTextConfig, GroupViTTextModel
>>> # Initializing a GroupViTTextModel with nvidia/groupvit-gcc-yfcc style configuration
>>> configuration = GroupViTTextConfig()
>>> model = GroupViTTextModel(configuration)
>>> # Accessing the model configuration
>>> configuration = model.configGroupViTVisionConfig
class transformers.GroupViTVisionConfig
< source >( transformers_version: str | None = Nonearchitectures: list[str] | None = Noneoutput_hidden_states: bool | None = Falsereturn_dict: bool | None = Truedtype: str | torch.dtype | None = Nonechunk_size_feed_forward: int = 0is_encoder_decoder: bool = Falseid2label: dict[int, str] | dict[str, str] | None = Nonelabel2id: dict[str, int] | dict[str, str] | None = Noneproblem_type: Literal['regression', 'single_label_classification', 'multi_label_classification'] | None = Nonehidden_size: int = 384intermediate_size: int = 1536num_hidden_layers: int = 12depths: list[int] | tuple[int, ...] = (6, 3, 3)num_group_tokens: list[int] | tuple[int, ...] = (64, 8, 0)num_output_groups: list[int] | tuple[int, ...] = (64, 8, 8)num_attention_heads: int = 6image_size: int | list[int] | tuple[int, int] = 224patch_size: int | list[int] | tuple[int, int] = 16num_channels: int = 3hidden_act: str = 'gelu'layer_norm_eps: float = 1e-05dropout: float | int = 0.0attention_dropout: float | int = 0.0initializer_range: float = 0.02initializer_factor: float = 1.0assign_eps: float = 1.0assign_mlp_ratio: list[float | int] | tuple[float | int, ...] = (0.5, 4) )
参数
- hidden_size (
int,可选,默认为384) — 隐藏表示的维度。 - intermediate_size (
int,可选,默认为1536) — MLP 表示的维度。 - num_hidden_layers (
int, 可选, 默认为12) — Transformer 解码器中的隐藏层数量。 - depths (
list[int],可选,默认为 [6, 3, 3]) — 每个编码器块中的层数。 - num_group_tokens (
list[int],可选,默认值为 [64, 8, 0]) — 每个阶段的 group token 数量。 - num_output_groups (
list[int],可选,默认为 [64, 8, 8]) — 每个阶段的输出组数,0 表示不分组。 - num_attention_heads (
int,可选,默认为6) — Transformer 解码器中每个注意力层的注意力头数量。 - image_size (
Union[int, list[int], tuple[int, int]],可选,默认为224) — 每张图片的尺寸(分辨率)。 - patch_size (
Union[int, list[int], tuple[int, int]],可选,默认为16) — 每个 patch 的大小(分辨率)。 - num_channels (
int,可选,默认为3) — 输入通道的数量。 - hidden_act (
str,可选,默认为gelu) — 解码器中的非线性激活函数(函数或字符串)。例如,"gelu"、"relu"、"silu"等。 - layer_norm_eps (
float,可选,默认为1e-05) — 层归一化层所使用的 epsilon 值。 - dropout (
Union[float, int],可选,默认为0.0) — 所有 dropout 层的比率。 - attention_dropout (
Union[float, int],可选,默认为0.0) — 注意力概率的 dropout 比率。 - initializer_range (
float,可选,默认为0.02) — 用于初始化所有权重矩阵的 truncated_normal_initializer 的标准差。 - initializer_factor (
float,可选,默认为1.0) — 用于初始化所有权重矩阵的系数(应保持为 1,内部用于初始化测试)。 - assign_eps (
float,可选,默认为1.0) — 层归一化中使用的 Epsilon - assign_mlp_ratio (
list[int],可选,默认为[0.5, 4]) — 用于推断 MLP 层隐藏大小的比例。
这是用于存储 GroupViTModel 配置的类。它根据指定的参数实例化 Groupvit 模型,并定义模型架构。使用默认值实例化配置将生成与 nvidia/groupvit-gcc-yfcc 类似的配置。
配置对象继承自 PreTrainedConfig,可用于控制模型输出。有关更多信息,请参阅 PreTrainedConfig 的文档。
示例:
>>> from transformers import GroupViTVisionConfig, GroupViTVisionModel
>>> # Initializing a GroupViTVisionModel with nvidia/groupvit-gcc-yfcc style configuration
>>> configuration = GroupViTVisionConfig()
>>> model = GroupViTVisionModel(configuration)
>>> # Accessing the model configuration
>>> configuration = model.configGroupViTModel
class transformers.GroupViTModel
< source >( config: GroupViTConfig )
参数
- config (GroupViTConfig) — 模型配置类,包含模型的所有参数。使用配置文件进行初始化时,不会加载与模型关联的权重,仅加载配置。请查看 from_pretrained() 方法以加载模型权重。
未添加任何特定头部的裸 Groupvit 模型,直接输出原始隐藏状态。
该模型继承自 PreTrainedModel。请查阅父类文档,了解该库为所有模型实现的通用方法(例如下载或保存、调整输入嵌入大小、剪枝头等)。
该模型也是 PyTorch torch.nn.Module 的子类。 请将其作为常规的 PyTorch Module 使用,有关通用用法和行为的所有事项,请参阅 PyTorch 文档。
forward
< source >( input_ids: typing.Optional[torch.LongTensor] = Nonepixel_values: typing.Optional[torch.FloatTensor] = Noneattention_mask: typing.Optional[torch.Tensor] = Noneposition_ids: typing.Optional[torch.LongTensor] = Nonereturn_loss: bool | None = Noneoutput_attentions: bool | None = Noneoutput_hidden_states: bool | None = Noneoutput_segmentation: bool | None = None**kwargs: *<class 'transformers.utils.generic.TransformersKwargs'> ) → GroupViTModelOutput or tuple(torch.FloatTensor)
参数
- input_ids (
torch.LongTensor形状为(batch_size, sequence_length), ,可选) — 输入序列中各 token 在词汇表中的索引。默认情况下,填充(padding)将被忽略。可以使用 AutoTokenizer 获取索引。有关详细信息,请参阅 PreTrainedTokenizer.encode() 和 PreTrainedTokenizer.call()。
- pixel_values (
torch.FloatTensor,形状为(batch_size, num_channels, image_size, image_size),可选) — 与输入图像对应的张量。可以使用 CLIPImageProcessor 获取像素值。有关详细信息,请参阅 CLIPImageProcessor.call()(CLIPProcessor 使用 CLIPImageProcessor 来处理图像)。 - attention_mask (
torch.Tensor形状为(batch_size, sequence_length), ,可选) — 用于避免对填充 token 索引执行注意力机制的掩码。掩码值取自[0, 1]:- 1 表示未被屏蔽的 token,
- 对于被掩码的 token,值为 0。
- position_ids (
torch.LongTensor形状为(batch_size, sequence_length), 可选) — 输入序列中每个 token 在位置嵌入中的位置索引。取值范围为[0, config.n_positions - 1]. - return_loss (
bool, 可选) — 是否返回对比损失。 - output_attentions (
bool, 可选) — 是否返回所有注意力层的注意力张量。有关详细信息,请参阅返回张量中的attentions。 - output_hidden_states (
bool,可选) — 是否返回所有层的隐藏状态。有关更多详细信息,请参阅返回张量中的hidden_states。 - output_segmentation (
bool, 可选) — 是否返回分割 logits。
返回值
GroupViTModelOutput 或 tuple(torch.FloatTensor)
GroupViTModelOutput 或 torch.FloatTensor 元组(如果传入 return_dict=False 或 config.return_dict=False),其包含的元素取决于配置(GroupViTConfig)和输入。
GroupViTModel 的 forward 方法重写了 __call__ 特殊方法。
尽管前向传播的实现需要在此函数中定义,但之后应调用
Module实例,而不是直接调用此函数,因为前者会负责执行预处理和后处理步骤,而后者则会静默地忽略这些步骤。
loss (
torch.FloatTensor,形状为(1,),可选,当return_loss为True时返回) — 用于图像-文本相似度的对比损失。logits_per_image(形状为
(image_batch_size, text_batch_size)的torch.FloatTensor)—image_embeds与text_embeds之间的缩放点积分数。这表示图像与文本之间的相似度分数。logits_per_text(形状为
(text_batch_size, image_batch_size)的torch.FloatTensor)—text_embeds与image_embeds之间的缩放点积分数。这表示文本与图像之间的相似度分数。segmentation_logits(形状为
(batch_size, config.num_labels, logits_height, logits_width)的torch.FloatTensor)— 每个像素的分类分数。返回的 logits 的大小不一定与作为输入传入的
pixel_values相同。这样做的目的是避免进行两次插值,从而在用户需要作为后处理将 logits 调整回原始图像大小时损失一些质量。您应始终检查 logits 的形状,并根据需要进行调整。text_embeds(形状为
(batch_size, output_dim的torch.FloatTensor)—— 对 GroupViTTextModel 的池化输出应用投影层后得到的文本嵌入。image_embeds (
torch.FloatTensor,形状为(batch_size, output_dim) — 对 GroupViTVisionModel 的池化输出应用投影层后得到的图像嵌入。text_model_output (
~modeling_outputs.BaseModelOutputWithPooling,可选) — GroupViTTextModel 的输出。vision_model_output(
~modeling_outputs.BaseModelOutputWithPooling,可选)— GroupViTVisionModel 的输出。
示例:
>>> from PIL import Image
>>> from huggingface_hub.utils import httpx
>>> from io import BytesIO
>>> from transformers import AutoProcessor, GroupViTModel
>>> model = GroupViTModel.from_pretrained("nvidia/groupvit-gcc-yfcc")
>>> processor = AutoProcessor.from_pretrained("nvidia/groupvit-gcc-yfcc")
>>> url = "http://images.cocodataset.org/val2017/000000039769.jpg"
>>> with httpx.stream("GET", url) as response:
... image = Image.open(BytesIO(response.read()))
>>> 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 probabilitiesget_text_features
< source >( input_ids: Tensorattention_mask: typing.Optional[torch.Tensor] = Noneposition_ids: typing.Optional[torch.Tensor] = None**kwargs: *<class 'transformers.utils.generic.TransformersKwargs'> ) → BaseModelOutputWithPooling or tuple(torch.FloatTensor)
参数
- input_ids (
torch.Tensor形状为(batch_size, sequence_length)) — 输入序列中各 token 在词汇表中的索引。默认情况下,填充(padding)会被忽略。可以使用 AutoTokenizer 获取索引。有关详细信息,请参阅 PreTrainedTokenizer.encode() 和 PreTrainedTokenizer.call()。
- attention_mask (
torch.Tensor形状为(batch_size, sequence_length), ,可选) — 用于避免对填充 token 索引执行注意力机制的掩码。掩码值取自[0, 1]:- 1 表示未被屏蔽的 token,
- 对于被掩码的 token,值为 0。
- position_ids (
torch.Tensor形状为(batch_size, sequence_length), 可选) — 输入序列中每个 token 在位置嵌入中的位置索引。取值范围为[0, config.n_positions - 1].
返回值
BaseModelOutputWithPooling 或 tuple(torch.FloatTensor)
一个 BaseModelOutputWithPooling 或 torch.FloatTensor 元组(如果传入了 return_dict=False 或 config.return_dict=False),其包含的元素取决于配置(GroupViTConfig)和输入。
last_hidden_state(形状为
(batch_size, sequence_length, hidden_size)的torch.FloatTensor)— 模型最后一层输出的隐藏状态序列。pooler_output (
torch.FloatTensor,形状为(batch_size, hidden_size)) — 序列中第一个 token(分类 token)的最后一层隐藏状态,经过用于辅助预训练任务的层进一步处理后的结果。例如,对于 BERT 系列模型,这返回的是分类 token 经过线性层和 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 之后的权重,用于在自注意力头中计算加权平均值。
示例:
>>> import torch
>>> from transformers import CLIPTokenizer, GroupViTModel
>>> model = GroupViTModel.from_pretrained("nvidia/groupvit-gcc-yfcc")
>>> tokenizer = CLIPTokenizer.from_pretrained("nvidia/groupvit-gcc-yfcc")
>>> inputs = tokenizer(["a photo of a cat", "a photo of a dog"], padding=True, return_tensors="pt")
>>> with torch.inference_mode():
... text_features = model.get_text_features(**inputs)get_image_features
< source >( pixel_values: Tensor**kwargs: *<class 'transformers.utils.generic.TransformersKwargs'> ) → BaseModelOutputWithPooling or tuple(torch.FloatTensor)
参数
- pixel_values (
torch.Tensor,形状为(batch_size, num_channels, image_size, image_size)) — 对应输入图像的张量。可以使用 CLIPImageProcessor 获取像素值。有关详细信息,请参阅 CLIPImageProcessor.call()(CLIPProcessor 使用 CLIPImageProcessor 来处理图像)。
返回值
BaseModelOutputWithPooling 或 tuple(torch.FloatTensor)
一个 BaseModelOutputWithPooling 或 torch.FloatTensor 元组(如果传入了 return_dict=False 或 config.return_dict=False),其包含的元素取决于配置(GroupViTConfig)和输入。
last_hidden_state(形状为
(batch_size, sequence_length, hidden_size)的torch.FloatTensor)— 模型最后一层输出的隐藏状态序列。pooler_output (
torch.FloatTensor,形状为(batch_size, hidden_size)) — 序列中第一个 token(分类 token)的最后一层隐藏状态,经过用于辅助预训练任务的层进一步处理后的结果。例如,对于 BERT 系列模型,这返回的是分类 token 经过线性层和 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 之后的权重,用于在自注意力头中计算加权平均值。
示例:
>>> import torch
>>> from transformers import AutoProcessor, GroupViTModel
>>> from transformers.image_utils import load_image
>>> model = GroupViTModel.from_pretrained("nvidia/groupvit-gcc-yfcc")
>>> processor = AutoProcessor.from_pretrained("nvidia/groupvit-gcc-yfcc")
>>> url = "http://images.cocodataset.org/val2017/000000039769.jpg"
>>> image = load_image(url)
>>> inputs = processor(images=image, return_tensors="pt")
>>> with torch.inference_mode():
... image_features = model.get_image_features(**inputs)GroupViTTextModel
forward
< source >( input_ids: typing.Optional[torch.Tensor] = Noneattention_mask: typing.Optional[torch.Tensor] = Noneposition_ids: typing.Optional[torch.Tensor] = None**kwargs: *<class 'transformers.utils.generic.TransformersKwargs'> ) → BaseModelOutputWithPooling or tuple(torch.FloatTensor)
参数
- input_ids (
torch.Tensor形状为(batch_size, sequence_length), 可选) — 输入序列中各 token 在词表中的索引。默认情况下,填充(padding)将被忽略。可以使用 AutoTokenizer 获取索引。有关详细信息,请参阅 PreTrainedTokenizer.encode() 和 PreTrainedTokenizer.call()。
- attention_mask (
torch.Tensor形状为(batch_size, sequence_length), ,可选) — 用于避免对填充 token 索引执行注意力机制的掩码。掩码值取自[0, 1]:- 1 表示未被屏蔽的 token,
- 对于被掩码的 token,值为 0。
- position_ids (
torch.Tensor形状为(batch_size, sequence_length), 可选) — 输入序列中每个 token 在位置嵌入中的位置索引。取值范围为[0, config.n_positions - 1].
返回值
BaseModelOutputWithPooling 或 tuple(torch.FloatTensor)
一个 BaseModelOutputWithPooling 或 torch.FloatTensor 元组(如果传入了 return_dict=False 或 config.return_dict=False),其包含的元素取决于配置(GroupViTConfig)和输入。
GroupViTTextModel 的 forward 方法重写了 __call__ 特殊方法。
尽管前向传播的实现需要在此函数中定义,但之后应调用
Module实例,而不是直接调用此函数,因为前者会负责执行预处理和后处理步骤,而后者则会静默地忽略这些步骤。
last_hidden_state(形状为
(batch_size, sequence_length, hidden_size)的torch.FloatTensor)— 模型最后一层输出的隐藏状态序列。pooler_output (
torch.FloatTensor,形状为(batch_size, hidden_size)) — 序列中第一个 token(分类 token)的最后一层隐藏状态,经过用于辅助预训练任务的层进一步处理后的结果。例如,对于 BERT 系列模型,这返回的是分类 token 经过线性层和 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 之后的权重,用于在自注意力头中计算加权平均值。
示例:
>>> from transformers import CLIPTokenizer, GroupViTTextModel
>>> tokenizer = CLIPTokenizer.from_pretrained("nvidia/groupvit-gcc-yfcc")
>>> model = GroupViTTextModel.from_pretrained("nvidia/groupvit-gcc-yfcc")
>>> 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) statesGroupViTVisionModel
forward
< source >( pixel_values: typing.Optional[torch.FloatTensor] = Noneoutput_attentions: bool | None = Noneoutput_hidden_states: bool | None = Nonereturn_dict: bool | None = None**kwargs ) → BaseModelOutputWithPooling or tuple(torch.FloatTensor)
参数
- pixel_values (
torch.FloatTensor,形状为(batch_size, num_channels, image_size, image_size),可选) — 与输入图像对应的张量。可以使用 CLIPImageProcessor 获取像素值。有关详细信息,请参阅 CLIPImageProcessor.call()(CLIPProcessor 使用 CLIPImageProcessor 来处理图像)。 - output_attentions (
bool, 可选) — 是否返回所有注意力层的注意力张量。有关详细信息,请参阅返回张量中的attentions。 - output_hidden_states (
bool,可选) — 是否返回所有层的隐藏状态。有关更多详细信息,请参阅返回张量中的hidden_states。 - return_dict (
bool, 可选) — 是否返回 ModelOutput 而不是普通元组。
返回值
BaseModelOutputWithPooling 或 tuple(torch.FloatTensor)
一个 BaseModelOutputWithPooling 或 torch.FloatTensor 元组(如果传入了 return_dict=False 或 config.return_dict=False),其包含的元素取决于配置(GroupViTConfig)和输入。
GroupViTVisionModel 的 forward 方法重写了 __call__ 特殊方法。
尽管前向传播的实现需要在此函数中定义,但之后应调用
Module实例,而不是直接调用此函数,因为前者会负责执行预处理和后处理步骤,而后者则会静默地忽略这些步骤。
last_hidden_state(形状为
(batch_size, sequence_length, hidden_size)的torch.FloatTensor)— 模型最后一层输出的隐藏状态序列。pooler_output (
torch.FloatTensor,形状为(batch_size, hidden_size)) — 序列中第一个 token(分类 token)的最后一层隐藏状态,经过用于辅助预训练任务的层进一步处理后的结果。例如,对于 BERT 系列模型,这返回的是分类 token 经过线性层和 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 之后的权重,用于在自注意力头中计算加权平均值。
示例:
>>> from PIL import Image
>>> from huggingface_hub.utils import httpx
>>> from io import BytesIO
>>> from transformers import AutoProcessor, GroupViTVisionModel
>>> processor = AutoProcessor.from_pretrained("nvidia/groupvit-gcc-yfcc")
>>> model = GroupViTVisionModel.from_pretrained("nvidia/groupvit-gcc-yfcc")
>>> url = "http://images.cocodataset.org/val2017/000000039769.jpg"
>>> with httpx.stream("GET", url) as response:
... image = Image.open(BytesIO(response.read()))
>>> 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