Transformers 文档

BridgeTower

Hugging Face's logo
加入 Hugging Face 社区

并获得增强的文档体验

开始使用

BridgeTower

PyTorch

概述

BridgeTower 模型由 Xiao Xu、Chenfei Wu、Shachar Rosenman、Vasudev Lal、Wanxiang Che 和 Nan Duan 在论文《BridgeTower: Building Bridges Between Encoders in Vision-Language Representative Learning》中提出。该模型的目的是在每个单模态编码器和跨模态编码器之间建立桥梁,以在跨模态编码器的每个层中实现全面而详细的交互,从而在各种下游任务上以几乎可以忽略不计的额外性能和计算成本获得卓越的性能。

这篇论文已被 AAAI’23 会议接受。

论文摘要如下:

近年来,采用双塔架构的视觉语言(VL)模型在视觉语言表示学习中占据主导地位。当前的 VL 模型要么使用轻量级单模态编码器,并在深度跨模态编码器中同时学习提取、对齐和融合两种模态,要么将深度预训练单模态编码器中的最后一层单模态表示馈送到顶部跨模态编码器中。这两种方法都可能限制视觉语言表示学习并限制模型性能。在本文中,我们提出了 BRIDGETOWER,它引入了多个桥接层,在单模态编码器的顶层和跨模态编码器的每个层之间建立连接。这使得跨模态编码器中预训练单模态编码器不同语义级别的视觉和文本表示之间能够进行有效的自下而上的跨模态对齐和融合。BRIDGETOWER 仅使用 400 万张图像进行预训练,就在各种下游视觉语言任务上实现了最先进的性能。特别是在 VQAv2 测试集上,BRIDGETOWER 取得了 78.73% 的准确率,比之前使用相同预训练数据且额外参数和计算成本几乎可以忽略不计的最先进模型 METER 高出 1.09%。值得注意的是,当进一步扩展模型时,BRIDGETOWER 取得了 81.15% 的准确率,超越了在数量级更大的数据集上预训练的模型。

drawing BridgeTower 架构。摘自原始论文。

该模型由 Anahita BhiwandiwallaTiep LeShaoyen Tseng 贡献。原始代码可以在这里找到。

使用技巧和示例

BridgeTower 由一个视觉编码器、一个文本编码器和带有多个轻量级桥接层的跨模态编码器组成。这种方法的目的是在每个单模态编码器和跨模态编码器之间建立桥梁,以在跨模态编码器的每个层中实现全面而详细的交互。原则上,可以在所提出的架构中应用任何视觉、文本或跨模态编码器。

`BridgeTowerProcessor``RobertaTokenizer``BridgeTowerImageProcessor` 封装到单个实例中,分别用于编码文本和准备图像。

以下示例演示如何使用 `BridgeTowerProcessor``BridgeTowerForContrastiveLearning` 运行对比学习。

>>> from transformers import BridgeTowerProcessor, BridgeTowerForContrastiveLearning
>>> import requests
>>> from PIL import Image

>>> url = "http://images.cocodataset.org/val2017/000000039769.jpg"
>>> image = Image.open(requests.get(url, stream=True).raw)
>>> texts = ["An image of two cats chilling on a couch", "A football player scoring a goal"]

>>> processor = BridgeTowerProcessor.from_pretrained("BridgeTower/bridgetower-large-itm-mlm-itc")
>>> model = BridgeTowerForContrastiveLearning.from_pretrained("BridgeTower/bridgetower-large-itm-mlm-itc")

>>> # forward pass
>>> scores = dict()
>>> for text in texts:
...     # prepare inputs
...     encoding = processor(image, text, return_tensors="pt")
...     outputs = model(**encoding)
...     scores[text] = outputs

以下示例演示如何使用 `BridgeTowerProcessor``BridgeTowerForImageAndTextRetrieval` 运行图像-文本检索。

>>> from transformers import BridgeTowerProcessor, BridgeTowerForImageAndTextRetrieval
>>> import requests
>>> from PIL import Image

>>> url = "http://images.cocodataset.org/val2017/000000039769.jpg"
>>> image = Image.open(requests.get(url, stream=True).raw)
>>> texts = ["An image of two cats chilling on a couch", "A football player scoring a goal"]

>>> processor = BridgeTowerProcessor.from_pretrained("BridgeTower/bridgetower-base-itm-mlm")
>>> model = BridgeTowerForImageAndTextRetrieval.from_pretrained("BridgeTower/bridgetower-base-itm-mlm")

>>> # forward pass
>>> scores = dict()
>>> for text in texts:
...     # prepare inputs
...     encoding = processor(image, text, return_tensors="pt")
...     outputs = model(**encoding)
...     scores[text] = outputs.logits[0, 1].item()

以下示例演示如何使用 `BridgeTowerProcessor``BridgeTowerForMaskedLM` 运行掩码语言建模。

>>> from transformers import BridgeTowerProcessor, BridgeTowerForMaskedLM
>>> from PIL import Image
>>> import requests

>>> url = "http://images.cocodataset.org/val2017/000000360943.jpg"
>>> image = Image.open(requests.get(url, stream=True).raw).convert("RGB")
>>> text = "a <mask> looking out of the window"

>>> processor = BridgeTowerProcessor.from_pretrained("BridgeTower/bridgetower-base-itm-mlm")
>>> model = BridgeTowerForMaskedLM.from_pretrained("BridgeTower/bridgetower-base-itm-mlm")

>>> # prepare inputs
>>> encoding = processor(image, text, return_tensors="pt")

>>> # forward pass
>>> outputs = model(**encoding)

>>> results = processor.decode(outputs.logits.argmax(dim=-1).squeeze(0).tolist())

>>> print(results)
.a cat looking out of the window.

技巧

BridgeTowerConfig

class transformers.BridgeTowerConfig

< >

( share_cross_modal_transformer_layers = True hidden_act = 'gelu' hidden_size = 768 initializer_factor = 1 layer_norm_eps = 1e-05 share_link_tower_layers = False link_tower_type = 'add' num_attention_heads = 12 num_hidden_layers = 6 tie_word_embeddings = False init_layernorm_from_vision_encoder = False text_config = None vision_config = None **kwargs )

参数

  • share_cross_modal_transformer_layers (bool, 可选, 默认为 True) — 跨模态 transformer 层是否共享。
  • hidden_act (strfunction, 可选, 默认为 "gelu") — 编码器和池化器中的非线性激活函数(函数或字符串)。
  • hidden_size (int, 可选, 默认为 768) — 编码器层和池化器层的维度。
  • initializer_factor (float, 可选, 默认为 1) — 初始化所有权重矩阵的因子(应保持为 1,内部用于初始化测试)。
  • layer_norm_eps (float, 可选, 默认为 1e-05) — 层归一化层使用的 epsilon 值。
  • share_link_tower_layers (bool, 可选, 默认为 False) — 桥接/链接塔层是否共享。
  • link_tower_type (str, 可选, 默认为 "add") — 桥接/链接层的类型。
  • num_attention_heads (int, 可选, 默认为 12) — Transformer 编码器中每个注意力层的注意力头数量。
  • num_hidden_layers (int, 可选, 默认为 6) — Transformer 编码器中的隐藏层数量。
  • tie_word_embeddings (bool, 可选, 默认为 False) — 是否绑定输入和输出嵌入。
  • init_layernorm_from_vision_encoder (bool, 可选, 默认为 False) — 是否从视觉编码器初始化 LayerNorm。
  • text_config (dict, 可选) — 用于初始化 `BridgeTowerTextConfig` 的配置选项字典。
  • vision_config (dict, 可选) — 用于初始化 `BridgeTowerVisionConfig` 的配置选项字典。

这是用于存储 `BridgeTowerModel` 配置的配置类。它用于根据指定的参数实例化 BridgeTower 模型,定义模型架构。使用默认值实例化配置将产生类似于 bridgetower-base BridgeTower/bridgetower-base 架构的配置。

配置对象继承自 `PretrainedConfig`,可用于控制模型输出。有关更多信息,请阅读 `PretrainedConfig` 的文档。

示例

>>> from transformers import BridgeTowerModel, BridgeTowerConfig

>>> # Initializing a BridgeTower BridgeTower/bridgetower-base style configuration
>>> configuration = BridgeTowerConfig()

>>> # Initializing a model from the BridgeTower/bridgetower-base style configuration
>>> model = BridgeTowerModel(configuration)

>>> # Accessing the model configuration
>>> configuration = model.config

from_text_vision_configs

< >

( text_config: BridgeTowerTextConfig vision_config: BridgeTowerVisionConfig **kwargs )

从 BridgeTower 文本模型配置实例化 `BridgeTowerConfig`(或派生类)。返回:`BridgeTowerConfig`:配置对象的一个实例。

BridgeTowerTextConfig

class transformers.BridgeTowerTextConfig

< >

( vocab_size = 50265 hidden_size = 768 num_hidden_layers = 12 num_attention_heads = 12 initializer_factor = 1 intermediate_size = 3072 hidden_act = 'gelu' hidden_dropout_prob = 0.1 attention_probs_dropout_prob = 0.1 max_position_embeddings = 514 type_vocab_size = 1 layer_norm_eps = 1e-05 pad_token_id = 1 bos_token_id = 0 eos_token_id = 2 position_embedding_type = 'absolute' use_cache = True **kwargs )

参数

  • vocab_size (int, 可选, 默认为 50265) — 模型文本部分的词汇表大小。定义了调用 `BridgeTowerModel` 时可以由 inputs_ids 表示的不同 token 的数量。
  • hidden_size (int, 可选, 默认为 768) — 编码器层和池化器层的维度。
  • num_hidden_layers (int, 可选, 默认为 12) — Transformer 编码器中的隐藏层数量。
  • num_attention_heads (int, 可选, 默认为 12) — Transformer 编码器中每个注意力层的注意力头数量。
  • intermediate_size (int, 可选, 默认为 3072) — Transformer 编码器中“中间”(通常称为前馈)层的维度。
  • hidden_act (strCallable, 可选, 默认为 "gelu") — 编码器和池化器中的非线性激活函数(函数或字符串)。如果为字符串,则支持 "gelu", "relu", "silu""gelu_new"
  • hidden_dropout_prob (float, 可选, 默认为 0.1) — 嵌入层、编码器和池化器中所有全连接层的 dropout 概率。
  • attention_probs_dropout_prob (float, 可选, 默认为 0.1) — 注意力概率的 dropout 比率。
  • max_position_embeddings (int, 可选, 默认为 514) — 此模型可能使用的最大序列长度。通常设置为较大值以防万一(例如,512、1024 或 2048)。
  • type_vocab_size (int, 可选, 默认为 2) — token_type_ids 的词汇表大小。
  • initializer_factor (float, 可选, 默认为 1) — 初始化所有权重矩阵的因子(应保持为 1,内部用于初始化测试)。
  • layer_norm_eps (float, 可选, 默认为 1e-05) — 层归一化层使用的 epsilon 值。
  • position_embedding_type (str, 可选, 默认为 "absolute") — 位置嵌入的类型。选择 "absolute""relative_key""relative_key_query" 之一。对于位置嵌入,使用 "absolute"。有关 "relative_key" 的更多信息,请参阅 Self-Attention with Relative Position Representations (Shaw et al.)。有关 "relative_key_query" 的更多信息,请参阅 Improve Transformer Models with Better Relative Position Embeddings (Huang et al.) 中的 *方法 4*。
  • is_decoder (bool, 可选, 默认为 False) — 模型是否用作解码器。如果为 False,则模型用作编码器。
  • use_cache (bool, 可选, 默认为 True) — 模型是否应返回最后一个键/值注意力(并非所有模型都使用)。仅当 config.is_decoder=True 时相关。

这是用于存储 `BridgeTowerModel` 文本配置的配置类。这里的默认值复制自 RoBERTa。使用默认值实例化配置将产生类似于 bridgetower-base BridgeTower/bridgetower-base 架构的配置。

配置对象继承自 `PretrainedConfig`,可用于控制模型输出。有关更多信息,请阅读 `PretrainedConfig` 的文档。

示例

>>> from transformers import BridgeTowerTextConfig

>>> # Initializing a BridgeTower BridgeTower/bridgetower-base style configuration for the text model
>>> configuration = BridgeTowerTextConfig()

>>> # Accessing the configuration
>>> configuration

BridgeTowerVisionConfig

class transformers.BridgeTowerVisionConfig

< >

( hidden_size = 768 num_hidden_layers = 12 num_channels = 3 patch_size = 16 image_size = 288 initializer_factor = 1 layer_norm_eps = 1e-05 stop_gradient = False share_layernorm = True remove_last_layer = False **kwargs )

参数

  • hidden_size (int, 可选, 默认为 768) — 编码器层和池化层维度。
  • num_hidden_layers (int, 可选, 默认为 12) — 视觉编码器模型中的隐藏层数量。
  • patch_size (int, 可选, 默认为 16) — 每个补丁的大小(分辨率)。
  • image_size (int, 可选, 默认为 288) — 每个图像的大小(分辨率)。
  • initializer_factor (float, 可选, 默认为 1) — 用于初始化所有权重矩阵的因子(应保持为 1,内部用于初始化测试)。
  • layer_norm_eps (float, 可选, 默认为 1e-05) — 层归一化层使用的 epsilon 值。
  • stop_gradient (bool, 可选, 默认为 False) — 是否停止训练梯度。
  • share_layernorm (bool, 可选, 默认为 True) — 层归一化层是否共享。
  • remove_last_layer (bool, 可选, 默认为 False) — 是否从视觉编码器中移除最后一层。

这是用于存储 BridgeTowerModel 的视觉配置的配置类。使用默认值实例化配置将生成与 bridgetower-base BridgeTower/bridgetower-base 架构类似的配置。

配置对象继承自 `PretrainedConfig`,可用于控制模型输出。有关更多信息,请阅读 `PretrainedConfig` 的文档。

示例

>>> from transformers import BridgeTowerVisionConfig

>>> # Initializing a BridgeTower BridgeTower/bridgetower-base style configuration for the vision model
>>> configuration = BridgeTowerVisionConfig()

>>> # Accessing the configuration
>>> configuration

BridgeTowerImageProcessor

class transformers.BridgeTowerImageProcessor

< >

( do_resize: bool = True size: typing.Optional[dict[str, int]] = None size_divisor: int = 32 resample: Resampling = <Resampling.BICUBIC: 3> do_rescale: bool = True rescale_factor: typing.Union[int, float] = 0.00392156862745098 do_normalize: bool = True image_mean: typing.Union[float, list[float], NoneType] = None image_std: typing.Union[float, list[float], NoneType] = None do_center_crop: bool = True crop_size: typing.Optional[dict[str, int]] = None do_pad: bool = True **kwargs )

参数

  • do_resize (bool, 可选, 默认为 True) — 是否将图像的高度和宽度尺寸调整为指定大小。可以通过preprocess方法中的do_resize参数覆盖。
  • size (dict[str, int] 可选, 默认为 {'shortest_edge' -- 288}):将输入的最短边调整为size["shortest_edge"]。在保持宽高比的同时,较长边将被限制在int((1333 / 800) * size["shortest_edge"])以下。仅当do_resize设置为True时有效。可以通过preprocess方法中的size参数覆盖。
  • size_divisor (int, 可选, 默认为 32) — 确保高度和宽度都可以被此值整除的大小。仅当do_resize设置为True时有效。可以通过preprocess方法中的size_divisor参数覆盖。
  • resample (PILImageResampling, 可选, 默认为 Resampling.BICUBIC) — 如果调整图像大小,则使用的重采样过滤器。仅当do_resize设置为True时有效。可以通过preprocess方法中的resample参数覆盖。
  • do_rescale (bool, 可选, 默认为 True) — 是否按指定的rescale_factor缩放图像。可以通过preprocess方法中的do_rescale参数覆盖。
  • rescale_factor (intfloat, 可选, 默认为 1/255) — 如果缩放图像,则使用的缩放因子。仅当do_rescale设置为True时有效。可以通过preprocess方法中的rescale_factor参数覆盖。
  • do_normalize (bool, 可选, 默认为 True) — 是否归一化图像。可以通过preprocess方法中的do_normalize参数覆盖。
  • image_mean (floatlist[float], 可选, 默认为 IMAGENET_STANDARD_MEAN) — 如果归一化图像,则使用的均值。这是一个浮点数或浮点数列表,长度与图像中的通道数相同。可以通过preprocess方法中的image_mean参数覆盖。
  • image_std (floatlist[float], 可选, 默认为 IMAGENET_STANDARD_STD) — 如果归一化图像,则使用的标准差。这是一个浮点数或浮点数列表,长度与图像中的通道数相同。可以通过preprocess方法中的image_std参数覆盖。
  • do_center_crop (bool, 可选, 默认为 True) — 是否中心裁剪图像。可以通过preprocess方法中的do_center_crop参数覆盖。
  • crop_size (dict[str, int], 可选) — 应用中心裁剪时所需的输出大小。仅当do_center_crop设置为True时有效。可以通过preprocess方法中的crop_size参数覆盖。如果未设置,则默认为size
  • do_pad (bool, 可选, 默认为 True) — 是否将图像填充到批次中图像的 (max_height, max_width)。可以通过preprocess方法中的do_pad参数覆盖。

构建 BridgeTower 图像处理器。

preprocess

< >

( images: typing.Union[ForwardRef('PIL.Image.Image'), numpy.ndarray, ForwardRef('torch.Tensor'), list['PIL.Image.Image'], list[numpy.ndarray], list['torch.Tensor']] do_resize: typing.Optional[bool] = None size: typing.Optional[dict[str, int]] = None size_divisor: typing.Optional[int] = None resample: Resampling = None do_rescale: typing.Optional[bool] = None rescale_factor: typing.Optional[float] = None do_normalize: typing.Optional[bool] = None image_mean: typing.Union[float, list[float], NoneType] = None image_std: typing.Union[float, list[float], NoneType] = None do_pad: typing.Optional[bool] = None do_center_crop: typing.Optional[bool] = None crop_size: typing.Optional[dict[str, int]] = None return_tensors: typing.Union[str, transformers.utils.generic.TensorType, NoneType] = None data_format: ChannelDimension = <ChannelDimension.FIRST: 'channels_first'> input_data_format: typing.Union[str, transformers.image_utils.ChannelDimension, NoneType] = None )

参数

  • images (ImageInput) — 要预处理的图像。期望像素值范围为0到255的单张或批量图像。如果传入像素值在0到1之间的图像,请设置do_rescale=False
  • do_resize (bool, 可选, 默认为 self.do_resize) — 是否调整图像大小。
  • size (dict[str, int], 可选, 默认为 self.size) — 控制resize后图像的大小。图像的最短边被调整为size["shortest_edge"],同时保持宽高比。如果此调整大小后的图像的最长边大于int(size["shortest_edge"] * (1333 / 800)),则图像将再次调整大小,使最长边等于int(size["shortest_edge"] * (1333 / 800))
  • size_divisor (int, 可选, 默认为 self.size_divisor) — 图像被调整为该值的倍数。
  • resample (PILImageResampling, 可选, 默认为 self.resample) — 如果调整图像大小,则使用的重采样过滤器。仅当do_resize设置为True时有效。
  • do_rescale (bool, 可选, 默认为 self.do_rescale) — 是否将图像值缩放到 [0 - 1] 之间。
  • rescale_factor (float, 可选, 默认为 self.rescale_factor) — 如果do_rescale设置为True,则用于缩放图像的缩放因子。
  • do_normalize (bool, 可选, 默认为 self.do_normalize) — 是否归一化图像。
  • image_mean (floatlist[float], 可选, 默认为 self.image_mean) — 如果do_normalize设置为True,则用于归一化图像的图像均值。
  • image_std (floatlist[float], 可选, 默认为 self.image_std) — 如果do_normalize设置为True,则用于归一化图像的图像标准差。
  • do_pad (bool, 可选, 默认为 self.do_pad) — 是否将图像填充到批次中的(max_height, max_width)。如果为True,还会创建并返回一个像素掩码。
  • do_center_crop (bool, 可选, 默认为 self.do_center_crop) — 是否中心裁剪图像。如果输入大小沿任何边小于crop_size,则图像将用0填充,然后进行中心裁剪。
  • crop_size (dict[str, int], 可选, 默认为 self.crop_size) — 中心裁剪后图像的大小。如果图像的某个边小于crop_size,它将用零填充然后裁剪。
  • return_tensors (strTensorType, 可选) — 要返回的张量类型。可以是以下之一:
    • 未设置:返回 np.ndarray 列表。
    • TensorType.TENSORFLOW'tf':返回 tf.Tensor 类型的批处理。
    • TensorType.PYTORCH'pt':返回 torch.Tensor 类型的批处理。
    • TensorType.NUMPY'np':返回 np.ndarray 类型的批处理。
    • TensorType.JAX'jax':返回 jax.numpy.ndarray 类型的批处理。
  • data_format (ChannelDimensionstr, 可选, 默认为 ChannelDimension.FIRST) — 输出图像的通道维度格式。可以是以下之一:
    • "channels_first"ChannelDimension.FIRST:图像格式为 (num_channels, height, width)。
    • "channels_last"ChannelDimension.LAST:图像格式为 (height, width, num_channels)。
    • 未设置:使用输入图像的通道维度格式。
  • input_data_format (ChannelDimensionstr, 可选) — 输入图像的通道维度格式。如果未设置,通道维度格式将从输入图像推断。可以是以下之一:
    • "channels_first"ChannelDimension.FIRST:图像格式为 (num_channels, height, width)。
    • "channels_last"ChannelDimension.LAST:图像格式为 (height, width, num_channels)。
    • "none"ChannelDimension.NONE:图像格式为 (height, width)。

预处理一张或一批图像。

BridgeTowerImageProcessorFast

class transformers.BridgeTowerImageProcessorFast

< >

( **kwargs: typing_extensions.Unpack[transformers.models.bridgetower.image_processing_bridgetower_fast.BridgeTowerFastImageProcessorKwargs] )

构建一个快速 BridgeTower 图像处理器。

preprocess

< >

( images: typing.Union[ForwardRef('PIL.Image.Image'), numpy.ndarray, ForwardRef('torch.Tensor'), list['PIL.Image.Image'], list[numpy.ndarray], list['torch.Tensor']] **kwargs: typing_extensions.Unpack[transformers.models.bridgetower.image_processing_bridgetower_fast.BridgeTowerFastImageProcessorKwargs] ) <class 'transformers.image_processing_base.BatchFeature'>

参数

  • images (Union[PIL.Image.Image, numpy.ndarray, torch.Tensor, list['PIL.Image.Image'], list[numpy.ndarray], list['torch.Tensor']]) — 要预处理的图像。期望像素值范围为0到255的单张或批量图像。如果传入像素值在0到1之间的图像,请设置do_rescale=False
  • do_resize (bool, 可选) — 是否调整图像大小。
  • size (dict[str, int], 可选) — 描述模型的最大输入维度。
  • default_to_square (bool, 可选) — 当调整大小(如果大小为整数)时,是否默认为正方形图像。
  • resample (Union[PILImageResampling, F.InterpolationMode, NoneType]) — 如果调整图像大小,则使用的重采样滤波器。这可以是枚举 PILImageResampling 之一。仅当 do_resize 设置为 True 时才有效。
  • do_center_crop (bool, optional) — 是否对图像进行中心裁剪。
  • crop_size (dict[str, int], optional) — 应用 center_crop 后输出图像的大小。
  • do_rescale (bool, optional) — 是否对图像进行重新缩放。
  • rescale_factor (Union[int, float, NoneType]) — 如果 do_rescale 设置为 True,则用于重新缩放图像的缩放因子。
  • do_normalize (bool, optional) — 是否对图像进行归一化。
  • image_mean (Union[float, list[float], NoneType]) — 用于归一化的图像平均值。仅当 do_normalize 设置为 True 时才有效。
  • image_std (Union[float, list[float], NoneType]) — 用于归一化的图像标准差。仅当 do_normalize 设置为 True 时才有效。
  • do_convert_rgb (bool, optional) — 是否将图像转换为RGB。
  • return_tensors (Union[str, ~utils.generic.TensorType, NoneType]) — 如果设置为 `pt`,则返回堆叠张量,否则返回张量列表。
  • data_format (~image_utils.ChannelDimension, optional) — 仅支持 ChannelDimension.FIRST。为与慢速处理器兼容而添加。
  • input_data_format (Union[str, ~image_utils.ChannelDimension, NoneType]) — 输入图像的通道维度格式。如果未设置,则从输入图像推断通道维度格式。可以是以下之一:
    • "channels_first"ChannelDimension.FIRST:图像为 (num_channels, height, width) 格式。
    • "channels_last"ChannelDimension.LAST:图像为 (height, width, num_channels) 格式。
    • "none"ChannelDimension.NONE:图像为 (height, width) 格式。
  • device (torch.device, optional) — 处理图像的设备。如果未设置,则从输入图像推断设备。
  • disable_grouping (bool, optional) — 是否禁用按大小对图像进行分组以单独处理而不是批处理。如果为 None,则如果图像在 CPU 上,则设置为 True,否则设置为 False。此选择基于经验观察,详情请见:https://github.com/huggingface/transformers/pull/38157
  • size_divisor (int, optional, defaults to 32) — 确保高度和宽度都可以被其整除的大小。仅当 do_resize 设置为 True 时才有效。可以通过 preprocess 方法中的 size_divisor 参数覆盖。
  • do_pad (bool, optional, defaults to True) — 是否将图像填充到批处理图像的 (max_height, max_width)。可以通过 preprocess 方法中的 do_pad 参数覆盖。

返回

<class 'transformers.image_processing_base.BatchFeature'>

  • data (dict) — 由 call 方法返回的列表/数组/张量字典(“pixel_values”等)。
  • tensor_type (Union[None, str, TensorType], 可选) — 您可以在此处提供一个`tensor_type`,以便在初始化时将整数列表转换为PyTorch/TensorFlow/Numpy张量。

BridgeTowerProcessor

class transformers.BridgeTowerProcessor

< >

( image_processor tokenizer )

参数

  • image_processor (BridgeTowerImageProcessor) — BridgeTowerImageProcessor 的实例。图像处理器是必需输入。
  • tokenizer (RobertaTokenizerFast) — [‘RobertaTokenizerFast`] 的实例。分词器是必需输入。

构建一个 BridgeTower 处理器,它将 Roberta 分词器和 BridgeTower 图像处理器封装到一个处理器中。

BridgeTowerProcessor 提供 BridgeTowerImageProcessorRobertaTokenizerFast 的所有功能。有关更多信息,请参阅 call()decode() 的文档字符串。

__call__

< >

( images text: typing.Union[str, list[str], list[list[str]]] = None audio = None videos = None **kwargs: typing_extensions.Unpack[transformers.models.bridgetower.processing_bridgetower.BridgeTowerProcessorKwargs] )

此方法使用 BridgeTowerImageProcessor.call() 方法准备模型图像,并使用 RobertaTokenizerFast.call() 准备模型文本。

有关更多信息,请参阅上述两种方法的文档字符串。

BridgeTowerModel

class transformers.BridgeTowerModel

< >

( config )

参数

  • config (BridgeTowerModel) — 包含模型所有参数的模型配置类。用配置文件初始化不会加载与模型相关的权重,只加载配置。请查看 from_pretrained() 方法来加载模型权重。

不带任何特定头部的裸 BridgeTower 模型 transformer,输出 BridgeTowerModelOutput 对象

此模型继承自 PreTrainedModel。请查看超类文档,了解库为其所有模型实现的通用方法(例如下载或保存、调整输入嵌入大小、修剪头部等)。

此模型也是 PyTorch torch.nn.Module 子类。将其用作常规 PyTorch 模块,并参考 PyTorch 文档中所有与通用用法和行为相关的事项。

forward

< >

( input_ids: typing.Optional[torch.LongTensor] = None attention_mask: typing.Optional[torch.FloatTensor] = None token_type_ids: typing.Optional[torch.LongTensor] = None pixel_values: typing.Optional[torch.FloatTensor] = None pixel_mask: typing.Optional[torch.LongTensor] = None head_mask: typing.Optional[torch.FloatTensor] = None inputs_embeds: typing.Optional[torch.FloatTensor] = None image_embeds: typing.Optional[torch.FloatTensor] = None image_token_type_idx: typing.Optional[int] = None output_attentions: typing.Optional[bool] = None output_hidden_states: typing.Optional[bool] = None return_dict: typing.Optional[bool] = None labels: typing.Optional[torch.LongTensor] = None interpolate_pos_encoding: bool = False ) transformers.models.bridgetower.modeling_bridgetower.BridgeTowerModelOutput or tuple(torch.FloatTensor)

参数

  • input_ids (torch.LongTensor, 形状为 (batch_size, sequence_length), 可选) — 词汇表中输入序列 token 的索引。默认情况下,填充将被忽略。

    可以使用 AutoTokenizer 获取索引。有关详细信息,请参阅 PreTrainedTokenizer.encode()PreTrainedTokenizer.call()

    什么是输入 ID?

  • attention_mask (torch.FloatTensor, 形状为 (batch_size, sequence_length), 可选) — 用于避免对填充 token 索引执行注意力的掩码。掩码值在 [0, 1] 中选择:

    • 1 表示 未被遮盖 的 token,
    • 0 表示 被遮盖 的 token。

    什么是注意力掩码?

  • token_type_ids (torch.LongTensor, 形状为 (batch_size, sequence_length), 可选) — 表示输入第一部分和第二部分的段 token 索引。索引在 [0, 1] 中选择:

    • 0 对应于 句子 A token,
    • 1 对应于 句子 B token。

    什么是 token 类型 ID?

  • pixel_values (torch.FloatTensor, 形状为 (batch_size, num_channels, image_size, image_size), 可选) — 对应于输入图像的张量。像素值可以使用 {image_processor_class} 获取。有关详细信息,请参阅 {image_processor_class}.__call__{processor_class} 使用 {image_processor_class} 处理图像)。
  • pixel_mask (torch.LongTensor, 形状为 (batch_size, height, width), 可选) — 用于避免对填充像素值执行注意力的掩码。掩码值在 [0, 1] 中选择:

    • 1 表示真实像素(即 未被遮盖),
    • 0 表示填充像素(即 被遮盖)。

    什么是注意力掩码?

  • head_mask (torch.FloatTensor, 形状为 (num_heads,)(num_layers, num_heads), 可选) — 用于使自注意力模块的选定头部无效的掩码。掩码值在 [0, 1] 中选择:

    • 1 表示头部 未被遮盖
    • 0 表示头部 被遮盖
  • inputs_embeds (torch.FloatTensor, 形状为 (batch_size, sequence_length, hidden_size), 可选) — (可选)不传递 input_ids,您可以选择直接传递嵌入表示。如果您希望对如何将 input_ids 索引转换为关联向量(而不是模型的内部嵌入查找矩阵)有更多控制,这很有用。
  • image_embeds (torch.FloatTensor, 形状为 (batch_size, num_patches, hidden_size), 可选) — (可选)不传递 pixel_values,您可以选择直接传递嵌入表示。如果您希望对如何将 pixel_values 转换为补丁嵌入有更多控制,这很有用。
  • image_token_type_idx (int, 可选) —

    • 图像的 token 类型 ID。
  • output_attentions (bool, 可选) — 是否返回所有注意力层的注意力张量。有关更多详细信息,请参阅返回张量下的 attentions
  • output_hidden_states (bool, 可选) — 如果设置为 True,隐藏状态将作为包含文本、图像和跨模态组件隐藏状态的列表返回。即 (hidden_states_text, hidden_states_image, hidden_states_cross_modal),其中每个元素是相应模态隐藏状态的列表。hidden_states_txt/img 是单模态隐藏状态张量列表,hidden_states_cross_modal 是包含每个桥接层 cross_modal_text_hidden_statescross_modal_image_hidden_states 的元组列表。
  • return_dict (bool, 可选) — 是否返回 ModelOutput 而不是纯元组。
  • labels (torch.LongTensor, 形状为 (batch_size,), 可选) — 目前不支持标签。
  • interpolate_pos_encoding (bool, 默认为 False) — 是否对预训练位置编码进行插值。

返回

transformers.models.bridgetower.modeling_bridgetower.BridgeTowerModelOutputtuple(torch.FloatTensor)

transformers.models.bridgetower.modeling_bridgetower.BridgeTowerModelOutputtorch.FloatTensor 的元组(如果传递了 return_dict=False 或当 config.return_dict=False 时),根据配置(BridgeTowerConfig)和输入包含各种元素。

  • text_features (torch.FloatTensor, 形状为 (batch_size, text_sequence_length, hidden_size)) — 模型最后一层文本输出处的隐藏状态序列。

  • image_features (torch.FloatTensor, 形状为 (batch_size, image_sequence_length, hidden_size)) — 模型最后一层图像输出处的隐藏状态序列。

  • pooler_output (torch.FloatTensor, 形状为 (batch_size, hidden_size x 2)) — 在通过用于辅助预训练任务的层进一步处理后,文本和图像序列的第一个 token 的最后一层隐藏状态的拼接(分类 token)。

  • 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 后的注意力权重,用于计算自注意力头中的加权平均值。

BridgeTowerModel 的 forward 方法,重写了 __call__ 特殊方法。

尽管前向传播的配方需要在此函数中定义,但在此之后应该调用 Module 实例,而不是直接调用此函数,因为前者负责运行预处理和后处理步骤,而后者会默默地忽略它们。

示例

>>> from transformers import BridgeTowerProcessor, BridgeTowerModel
>>> from PIL import Image
>>> import requests

>>> # prepare image and text
>>> url = "http://images.cocodataset.org/val2017/000000039769.jpg"
>>> image = Image.open(requests.get(url, stream=True).raw)
>>> text = "hello world"
>>> processor = BridgeTowerProcessor.from_pretrained("BridgeTower/bridgetower-base")
>>> model = BridgeTowerModel.from_pretrained("BridgeTower/bridgetower-base")

>>> inputs = processor(image, text, return_tensors="pt")
>>> outputs = model(**inputs)
>>> outputs.keys()
odict_keys(['text_features', 'image_features', 'pooler_output'])

BridgeTowerForContrastiveLearning

class transformers.BridgeTowerForContrastiveLearning

< >

( config )

参数

BridgeTower 模型顶部带有一个图像-文本对比头部,计算图像-文本对比损失。

此模型继承自 PreTrainedModel。请查看超类文档,了解库为其所有模型实现的通用方法(例如下载或保存、调整输入嵌入大小、修剪头部等)。

此模型也是 PyTorch torch.nn.Module 子类。将其用作常规 PyTorch 模块,并参考 PyTorch 文档中所有与通用用法和行为相关的事项。

forward

< >

( input_ids: typing.Optional[torch.LongTensor] = None attention_mask: typing.Optional[torch.FloatTensor] = None token_type_ids: typing.Optional[torch.LongTensor] = None pixel_values: typing.Optional[torch.FloatTensor] = None pixel_mask: typing.Optional[torch.LongTensor] = None head_mask: typing.Optional[torch.FloatTensor] = None inputs_embeds: typing.Optional[torch.FloatTensor] = None image_embeds: typing.Optional[torch.FloatTensor] = None output_attentions: typing.Optional[bool] = None output_hidden_states: typing.Optional[bool] = True return_dict: typing.Optional[bool] = None return_loss: typing.Optional[bool] = None ) transformers.models.bridgetower.modeling_bridgetower.BridgeTowerContrastiveOutputtuple(torch.FloatTensor)

参数

  • input_ids (torch.LongTensor, 形状为 (batch_size, sequence_length), 可选) — 词汇表中输入序列 token 的索引。默认情况下,填充将被忽略。

    可以使用 AutoTokenizer 获取索引。有关详细信息,请参阅 PreTrainedTokenizer.encode()PreTrainedTokenizer.call()

    什么是输入 ID?

  • attention_mask (torch.FloatTensor, 形状为 (batch_size, sequence_length), 可选) — 用于避免对填充 token 索引执行注意力的掩码。掩码值在 [0, 1] 中选择:

    • 1 表示 未被遮盖 的 token,
    • 0 表示 被遮盖 的 token。

    什么是注意力掩码?

  • token_type_ids (torch.LongTensor, 形状为 (batch_size, sequence_length), 可选) — 表示输入第一部分和第二部分的段 token 索引。索引在 [0, 1] 中选择:

    • 0 对应于 句子 A token,
    • 1 对应于 句子 B token。

    什么是 token 类型 ID?

  • pixel_values (torch.FloatTensor, 形状为 (batch_size, num_channels, image_size, image_size), 可选) — 对应于输入图像的张量。像素值可以使用 {image_processor_class} 获取。有关详细信息,请参阅 {image_processor_class}.__call__{processor_class} 使用 {image_processor_class} 处理图像)。
  • pixel_mask (torch.LongTensor, 形状为 (batch_size, height, width), 可选) — 用于避免对填充像素值执行注意力的掩码。掩码值在 [0, 1] 中选择:

    • 1 表示真实像素(即 未被遮盖),
    • 0 表示填充像素(即 被遮盖)。

    什么是注意力掩码?

  • head_mask (torch.FloatTensor, 形状为 (num_heads,)(num_layers, num_heads), 可选) — 用于使自注意力模块的选定头部无效的掩码。掩码值在 [0, 1] 中选择:

    • 1 表示头部 未被遮盖
    • 0 表示头部 被遮盖
  • inputs_embeds (torch.FloatTensor,形状为 (batch_size, sequence_length, hidden_size)可选) — 可选参数,可以直接传入嵌入表示,而不是传入 input_ids。当您想要比模型内部嵌入查找矩阵更好地控制如何将 input_ids 索引转换为关联向量时,此参数非常有用。
  • image_embeds (torch.FloatTensor,形状为 (batch_size, num_patches, hidden_size)可选) — 可选参数,可以直接传入嵌入表示,而不是传入 pixel_values。当您想要更好地控制如何将 pixel_values 转换为补丁嵌入时,此参数非常有用。
  • output_attentions (bool, 可选) — 是否返回所有注意力层的注意力张量。更多详情请参见返回张量下的 attentions
  • output_hidden_states (bool, 可选, 默认为 True) — 是否返回所有层的隐藏状态。更多详情请参见返回张量下的 hidden_states
  • return_dict (bool, 可选) — 是否返回 ModelOutput 而不是普通元组。
  • return_loss (bool, 可选) — 是否返回对比损失。

返回

transformers.models.bridgetower.modeling_bridgetower.BridgeTowerContrastiveOutputtuple(torch.FloatTensor)

一个 transformers.models.bridgetower.modeling_bridgetower.BridgeTowerContrastiveOutput 或一个 torch.FloatTensor 元组(如果传入 return_dict=False 或当 config.return_dict=False 时),包含根据配置(BridgeTowerConfig)和输入而异的各种元素。

  • loss (torch.FloatTensor,形状为 (1,)可选,当 return_lossTrue 时返回) — 图像-文本对比损失。

  • logits (形状为 (batch_size, sequence_length, config.vocab_size)torch.FloatTensor) — 语言建模头部的预测分数(SoftMax 之前的每个词汇标记的分数)。

  • text_embeds (torch.FloatTensor)可选,当模型使用 with_projection=True 初始化时返回) — 通过对 pooler_output 应用投影层获得的文本嵌入。

  • image_embeds (torch.FloatTensor)可选,当模型使用 with_projection=True 初始化时返回) — 通过对 pooler_output 应用投影层获得的图像嵌入。

  • cross_embeds (torch.FloatTensor)可选,当模型使用 with_projection=True 初始化时返回) — 通过对 pooler_output 应用投影层获得的文本-图像跨模态嵌入。

  • 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=Trueconfig.output_attentions=True 传入时返回) — torch.FloatTensor 元组 (每层一个),形状为 (batch_size, num_heads, sequence_length, sequence_length)

BridgeTowerForContrastiveLearning 的 forward 方法,覆盖了 __call__ 特殊方法。

尽管前向传播的配方需要在此函数中定义,但在此之后应该调用 Module 实例,而不是直接调用此函数,因为前者负责运行预处理和后处理步骤,而后者会默默地忽略它们。

示例

>>> from transformers import BridgeTowerProcessor, BridgeTowerForContrastiveLearning
>>> import requests
>>> from PIL import Image
>>> import torch

>>> image_urls = [
...     "https://farm4.staticflickr.com/3395/3428278415_81c3e27f15_z.jpg",
...     "http://images.cocodataset.org/val2017/000000039769.jpg",
... ]
>>> texts = ["two dogs in a car", "two cats sleeping on a couch"]
>>> images = [Image.open(requests.get(url, stream=True).raw) for url in image_urls]

>>> processor = BridgeTowerProcessor.from_pretrained("BridgeTower/bridgetower-large-itm-mlm-itc")
>>> model = BridgeTowerForContrastiveLearning.from_pretrained("BridgeTower/bridgetower-large-itm-mlm-itc")

>>> inputs = processor(images, texts, padding=True, return_tensors="pt")
>>> loss = model(**inputs, return_loss=True).loss

>>> inputs = processor(images, texts[::-1], padding=True, return_tensors="pt")
>>> loss_swapped = model(**inputs, return_loss=True).loss

>>> print("Loss", round(loss.item(), 4))
Loss 0.0019

>>> print("Loss with swapped images", round(loss_swapped.item(), 4))
Loss with swapped images 2.126

BridgeTowerForMaskedLM

class transformers.BridgeTowerForMaskedLM

< >

( config )

参数

  • config (BridgeTowerForMaskedLM) — 模型配置类,包含模型的所有参数。使用配置文件初始化并不会加载与模型相关的权重,只加载配置。请查看 from_pretrained() 方法以加载模型权重。

BridgeTower 模型,在预训练期间在顶部添加了一个语言建模头。

此模型继承自 PreTrainedModel。请查看超类文档,了解库为其所有模型实现的通用方法(例如下载或保存、调整输入嵌入大小、修剪头部等)。

此模型也是 PyTorch torch.nn.Module 子类。将其用作常规 PyTorch 模块,并参考 PyTorch 文档中所有与通用用法和行为相关的事项。

forward

< >

( input_ids: typing.Optional[torch.LongTensor] = None attention_mask: typing.Optional[torch.FloatTensor] = None token_type_ids: typing.Optional[torch.LongTensor] = None pixel_values: typing.Optional[torch.FloatTensor] = None pixel_mask: typing.Optional[torch.LongTensor] = None head_mask: typing.Optional[torch.FloatTensor] = None inputs_embeds: typing.Optional[torch.FloatTensor] = None image_embeds: typing.Optional[torch.FloatTensor] = None output_attentions: typing.Optional[bool] = None output_hidden_states: typing.Optional[bool] = None return_dict: typing.Optional[bool] = None labels: typing.Optional[torch.LongTensor] = None ) transformers.modeling_outputs.MaskedLMOutputtuple(torch.FloatTensor)

参数

  • input_ids (torch.LongTensor,形状为 (batch_size, sequence_length)可选) — 词汇表中输入序列标记的索引。默认情况下会忽略填充。

    可以使用 AutoTokenizer 获取索引。有关详细信息,请参见 PreTrainedTokenizer.encode()PreTrainedTokenizer.call()

    什么是输入 ID?

  • attention_mask (torch.FloatTensor,形状为 (batch_size, sequence_length)可选) — 掩码,用于避免对填充标记索引执行注意力操作。掩码值选择在 [0, 1] 之间:

    • 1 表示未掩码的标记,
    • 0 表示已掩码的标记。

    什么是注意力掩码?

  • token_type_ids (torch.LongTensor,形状为 (batch_size, sequence_length)可选) — 分段标记索引,用于指示输入的第一个和第二个部分。索引选择在 [0, 1] 之间:

    • 0 对应于句子 A 标记,
    • 1 对应于句子 B 标记。

    什么是标记类型 ID?

  • pixel_values (torch.FloatTensor,形状为 (batch_size, num_channels, image_size, image_size)可选) — 对应于输入图像的张量。像素值可以使用 {image_processor_class} 获得。有关详细信息,请参见 {image_processor_class}.__call__{processor_class} 使用 {image_processor_class} 进行图像处理)。
  • pixel_mask (torch.LongTensor,形状为 (batch_size, height, width)可选) — 掩码,用于避免对填充像素值执行注意力操作。掩码值选择在 [0, 1] 之间:

    • 1 表示真实像素(即未掩码),
    • 0 表示填充像素(即已掩码)。

    什么是注意力掩码?

  • head_mask (torch.FloatTensor,形状为 (num_heads,)(num_layers, num_heads)可选) — 掩码,用于使自注意力模块的选定头失效。掩码值选择在 [0, 1] 之间:

    • 1 表示头部未掩码
    • 0 表示头部已掩码
  • inputs_embeds (torch.FloatTensor,形状为 (batch_size, sequence_length, hidden_size)可选) — 可选参数,可以直接传入嵌入表示,而不是传入 input_ids。当您想要比模型内部嵌入查找矩阵更好地控制如何将 input_ids 索引转换为关联向量时,此参数非常有用。
  • image_embeds (torch.FloatTensor,形状为 (batch_size, num_patches, hidden_size)可选) — 可选参数,可以直接传入嵌入表示,而不是传入 pixel_values。当您想要更好地控制如何将 pixel_values 转换为补丁嵌入时,此参数非常有用。
  • output_attentions (bool, 可选) — 是否返回所有注意力层的注意力张量。更多详情请参见返回张量下的 attentions
  • output_hidden_states (bool, 可选) — 是否返回所有层的隐藏状态。更多详情请参见返回张量下的 hidden_states
  • return_dict (bool, 可选) — 是否返回 ModelOutput 而不是普通元组。
  • labels (torch.LongTensor,形状为 (batch_size, sequence_length)可选) — 用于计算掩码语言模型损失的标签。索引应在 [-100, 0, ..., config.vocab_size] 之间(参见 input_ids 文档字符串)。索引设置为 -100 的标记将被忽略(掩码),损失仅针对标签在 [0, ..., config.vocab_size] 范围内的标记进行计算。

返回

transformers.modeling_outputs.MaskedLMOutputtuple(torch.FloatTensor)

一个 transformers.modeling_outputs.MaskedLMOutput 或一个 torch.FloatTensor 元组(如果传入 return_dict=False 或当 config.return_dict=False 时),包含根据配置(BridgeTowerConfig)和输入而异的各种元素。

  • loss (形状为 (1,)torch.FloatTensor可选,当提供 labels 时返回) — 掩码语言建模 (MLM) 损失。

  • logits (形状为 (batch_size, sequence_length, config.vocab_size)torch.FloatTensor) — 语言建模头部的预测分数(SoftMax 之前的每个词汇标记的分数)。

  • hidden_states (tuple(torch.FloatTensor), 可选, 当 output_hidden_states=Trueconfig.output_hidden_states=True 传入时返回) — torch.FloatTensor 元组(一个用于嵌入层输出(如果模型有嵌入层),加上每个层的一个输出),形状为 (batch_size, sequence_length, hidden_size)

    模型在每个层输出的隐藏状态以及可选的初始嵌入输出。

  • attentions (tuple(torch.FloatTensor), 可选, 当 output_attentions=Trueconfig.output_attentions=True 传入时返回) — torch.FloatTensor 元组 (每层一个),形状为 (batch_size, num_heads, sequence_length, sequence_length)

    注意力 softmax 后的注意力权重,用于计算自注意力头中的加权平均值。

BridgeTowerForMaskedLM 的 forward 方法,覆盖了 __call__ 特殊方法。

尽管前向传播的配方需要在此函数中定义,但在此之后应该调用 Module 实例,而不是直接调用此函数,因为前者负责运行预处理和后处理步骤,而后者会默默地忽略它们。

示例

>>> from transformers import BridgeTowerProcessor, BridgeTowerForMaskedLM
>>> from PIL import Image
>>> import requests

>>> url = "http://images.cocodataset.org/val2017/000000360943.jpg"
>>> image = Image.open(requests.get(url, stream=True).raw).convert("RGB")
>>> text = "a <mask> looking out of the window"

>>> processor = BridgeTowerProcessor.from_pretrained("BridgeTower/bridgetower-base-itm-mlm")
>>> model = BridgeTowerForMaskedLM.from_pretrained("BridgeTower/bridgetower-base-itm-mlm")

>>> # prepare inputs
>>> encoding = processor(image, text, return_tensors="pt")

>>> # forward pass
>>> outputs = model(**encoding)

>>> results = processor.decode(outputs.logits.argmax(dim=-1).squeeze(0).tolist())

>>> print(results)
.a cat looking out of the window.

BridgeTowerForImageAndTextRetrieval

class transformers.BridgeTowerForImageAndTextRetrieval

< >

( config )

参数

BridgeTower 模型 transformer,顶部带有一个分类器头([CLS] token 最终隐藏状态顶部的线性层),用于图像到文本的匹配。

此模型继承自 PreTrainedModel。请查看超类文档,了解库为其所有模型实现的通用方法(例如下载或保存、调整输入嵌入大小、修剪头部等)。

此模型也是 PyTorch torch.nn.Module 子类。将其用作常规 PyTorch 模块,并参考 PyTorch 文档中所有与通用用法和行为相关的事项。

forward

< >

( input_ids: typing.Optional[torch.LongTensor] = None attention_mask: typing.Optional[torch.FloatTensor] = None token_type_ids: typing.Optional[torch.LongTensor] = None pixel_values: typing.Optional[torch.FloatTensor] = None pixel_mask: typing.Optional[torch.LongTensor] = None head_mask: typing.Optional[torch.FloatTensor] = None inputs_embeds: typing.Optional[torch.FloatTensor] = None image_embeds: typing.Optional[torch.FloatTensor] = None output_attentions: typing.Optional[bool] = None output_hidden_states: typing.Optional[bool] = None return_dict: typing.Optional[bool] = None labels: typing.Optional[torch.LongTensor] = None ) transformers.modeling_outputs.SequenceClassifierOutputtuple(torch.FloatTensor)

参数

  • input_ids (torch.LongTensor,形状为 (batch_size, sequence_length)可选) — 词汇表中输入序列标记的索引。默认情况下会忽略填充。

    可以使用 AutoTokenizer 获取索引。有关详细信息,请参见 PreTrainedTokenizer.encode()PreTrainedTokenizer.call()

    什么是输入 ID?

  • attention_mask (torch.FloatTensor,形状为 (batch_size, sequence_length)可选) — 掩码,用于避免对填充标记索引执行注意力操作。掩码值选择在 [0, 1] 之间:

    • 1 表示未掩码的标记,
    • 0 表示已掩码的标记。

    什么是注意力掩码?

  • token_type_ids (torch.LongTensor,形状为 (batch_size, sequence_length)可选) — 分段标记索引,用于指示输入的第一个和第二个部分。索引选择在 [0, 1] 之间:

    • 0 对应于句子 A 标记,
    • 1 对应于句子 B 标记。

    什么是标记类型 ID?

  • pixel_values (torch.FloatTensor,形状为 (batch_size, num_channels, image_size, image_size)可选) — 对应于输入图像的张量。像素值可以使用 {image_processor_class} 获得。有关详细信息,请参见 {image_processor_class}.__call__{processor_class} 使用 {image_processor_class} 进行图像处理)。
  • pixel_mask (torch.LongTensor,形状为 (batch_size, height, width)可选) — 掩码,用于避免对填充像素值执行注意力操作。掩码值选择在 [0, 1] 之间:

    • 1 表示真实像素(即未掩码),
    • 0 表示填充像素(即已掩码)。

    什么是注意力掩码?

  • head_mask (torch.FloatTensor,形状为 (num_heads,)(num_layers, num_heads)可选) — 掩码,用于使自注意力模块的选定头失效。掩码值选择在 [0, 1] 之间:

    • 1 表示头部未掩码
    • 0 表示头部已掩码
  • inputs_embeds (torch.FloatTensor,形状为 (batch_size, sequence_length, hidden_size)可选) — 可选参数,可以直接传入嵌入表示,而不是传入 input_ids。当您想要比模型内部嵌入查找矩阵更好地控制如何将 input_ids 索引转换为关联向量时,此参数非常有用。
  • image_embeds (torch.FloatTensor,形状为 (batch_size, num_patches, hidden_size)可选) — 可选参数,可以直接传入嵌入表示,而不是传入 pixel_values。当您想要更好地控制如何将 pixel_values 转换为补丁嵌入时,此参数非常有用。
  • output_attentions (bool, 可选) — 是否返回所有注意力层的注意力张量。更多详情请参见返回张量下的 attentions
  • output_hidden_states (bool, 可选) — 是否返回所有层的隐藏状态。更多详情请参见返回张量下的 hidden_states
  • return_dict (bool, 可选) — 是否返回 ModelOutput 而不是普通元组。
  • labels (torch.LongTensor,形状为 (batch_size, 1)可选) — 用于计算图像-文本匹配损失的标签。0 表示配对不匹配,1 表示匹配。标签为 0 的配对将被跳过计算。

返回

transformers.modeling_outputs.SequenceClassifierOutputtuple(torch.FloatTensor)

一个 transformers.modeling_outputs.SequenceClassifierOutput 或一个 torch.FloatTensor 元组(如果传入 return_dict=False 或当 config.return_dict=False 时),包含根据配置(BridgeTowerConfig)和输入而异的各种元素。

  • loss (形状为 (1,)torch.FloatTensor可选,当提供 labels 时返回) — 分类损失(如果 config.num_labels==1,则为回归损失)。

  • logits (形状为 (batch_size, config.num_labels)torch.FloatTensor) — 分类(如果 config.num_labels==1,则为回归)分数(SoftMax 之前)。

  • hidden_states (tuple(torch.FloatTensor), 可选, 当 output_hidden_states=Trueconfig.output_hidden_states=True 传入时返回) — torch.FloatTensor 元组(一个用于嵌入层输出(如果模型有嵌入层),加上每个层的一个输出),形状为 (batch_size, sequence_length, hidden_size)

    模型在每个层输出的隐藏状态以及可选的初始嵌入输出。

  • attentions (tuple(torch.FloatTensor), 可选, 当 output_attentions=Trueconfig.output_attentions=True 传入时返回) — torch.FloatTensor 元组 (每层一个),形状为 (batch_size, num_heads, sequence_length, sequence_length)

    注意力 softmax 后的注意力权重,用于计算自注意力头中的加权平均值。

BridgeTowerForImageAndTextRetrieval 的 forward 方法,覆盖了 __call__ 特殊方法。

尽管前向传播的配方需要在此函数中定义,但在此之后应该调用 Module 实例,而不是直接调用此函数,因为前者负责运行预处理和后处理步骤,而后者会默默地忽略它们。

示例

>>> from transformers import BridgeTowerProcessor, BridgeTowerForImageAndTextRetrieval
>>> import requests
>>> from PIL import Image

>>> url = "http://images.cocodataset.org/val2017/000000039769.jpg"
>>> image = Image.open(requests.get(url, stream=True).raw)
>>> texts = ["An image of two cats chilling on a couch", "A football player scoring a goal"]

>>> processor = BridgeTowerProcessor.from_pretrained("BridgeTower/bridgetower-base-itm-mlm")
>>> model = BridgeTowerForImageAndTextRetrieval.from_pretrained("BridgeTower/bridgetower-base-itm-mlm")

>>> # forward pass
>>> scores = dict()
>>> for text in texts:
...     # prepare inputs
...     encoding = processor(image, text, return_tensors="pt")
...     outputs = model(**encoding)
...     scores[text] = outputs.logits[0, 1].item()
< > 在 GitHub 上更新