Transformers documentation

PE 音频视频

Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

该模型于 2025-04-17 在 HF papers 上发布,并于 2025-12-16 贡献至 Hugging Face Transformers。 该模型于 2025-04-17 发布,并于 2025-12-16 添加至 Hugging Face Transformers。

PE 音频视频

PE Audio Video 是 Meta 的 Perception Encoder 系列中的音视频联合分支。它通过共享的文本塔对音频和视频流进行联合编码,在单次前向传播中为所有成对组合(音频-文本、视频-文本、音频-视频以及音频+文本-视频)生成对比嵌入。

在内部,模型通过最近邻插值将视频特征序列对齐到音频的时间分辨率,从而确保帧率与采样率不同的片段保持同步。文本编码器的权重在音频分支和视频分支之间共享。

您可以在 perception-encoder-audio-visual 集合中找到所有官方的 PE Audio Video 检查点。

快速入门

import torch
from datasets import load_dataset
from transformers import AutoProcessor, PeAudioVideoModel
from transformers.video_utils import load_video

processor = AutoProcessor.from_pretrained("facebook/pe-av-large")
model = PeAudioVideoModel.from_pretrained(
    "facebook/pe-av-large",
    device_map="auto",
)

ds = load_dataset("hf-internal-testing/librispeech_asr_dummy", "clean", split="validation")
audio = ds[0]["audio"]["array"]
video, _ = load_video("https://huggingface.co/datasets/hf-internal-testing/fixtures_videos/resolve/main/tennis.mp4")
labels = ["a person playing tennis with background crowd", "a dog barking in a park"]

audio_inputs = processor.feature_extractor(audio, sampling_rate=48_000, return_tensors="pt").to(model.device)
video_inputs = processor.video_processor(video, num_frames=16, return_tensors="pt").to(model.device)
text_inputs = processor.tokenizer(labels, padding=True, return_tensors="pt").to(model.device)
inputs = {**audio_inputs, **video_inputs, **text_inputs}

with torch.no_grad():
    outputs = model(**inputs)

print("audio-text:", outputs.logits_audio_text.sigmoid().tolist())
print("video-text:", outputs.logits_video_text.sigmoid().tolist())
print("audio-video:", outputs.logits_audio_video.sigmoid().tolist())

使用技巧与说明

  • PeAudioVideoModel 至少需要 input_ids、input_values、pixel_values_videos 中的两个——如果只提供两个,则会分发到仅音频或仅视频的子模型。同时传入这三个参数将触发联合音频-视频-文本路径,并返回 PeAudioVideoOutput 中的完整 logit 矩阵集合。
  • Audio 使用 padding_mask,而 video 同时使用 padding_mask_videos。它们是相互独立的掩码;请勿将它们与 attention_mask 混淆,后者专用于文本塔。
  • 音视频对齐在 _align_video_hidden_state 中按批次元素逐个执行,因此当批次中音频/视频长度差异较大时,会进行迭代而非向量化处理。为提高吞吐量,请保持批次内各项长度大致均衡。
  • 文本塔的权重通过 _tied_weights_keys 在各分支间共享——请勿尝试为音频和视频部分分别加载独立的文本编码器。

PeAudioVideoConfig

class transformers.PeAudioVideoConfig

< >

( 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 = Noneaudio_video_config: dict | transformers.configuration_utils.PreTrainedConfig | None = Nonetie_word_embeddings: bool = True )

参数

  • text_config (Union[dict, ~configuration_utils.PreTrainedConfig],可选) — 文本骨干网络的配置对象或字典。
  • audio_video_config (dict 或 PreTrainedConfig,可选) — 音视频编码器组件的配置。
  • tie_word_embeddings (bool,可选,默认为 True) — 是否根据模型的 tied_weights_keys 映射来绑定权重嵌入。

这是用于存储 PeAudioVideoModel 配置的类。它根据指定的参数实例化 Pe Audio Video 模型,并定义模型架构。使用默认值实例化配置将得到与 facebook/pe-av-large 类似的配置。

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

>>> from transformers import PeAudioVideoModel, PeAudioVideoConfig

>>> # Initializing a PeAudioVideoModel style configuration
>>> configuration = PeAudioVideoConfig()

>>> # Initializing a model from the pe-av-large style configuration
>>> model = PeAudioModel(configuration)

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

PeAudioVideoEncoderConfig

class transformers.PeAudioVideoEncoderConfig

< >

( 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 = Noneaudio_config: dict | transformers.configuration_utils.PreTrainedConfig | None = Nonevideo_config: dict | transformers.configuration_utils.PreTrainedConfig | None = Nonehidden_size: int = 1792intermediate_size: int = 4800num_hidden_layers: int = 6num_attention_heads: int = 14num_key_value_heads: int | None = Nonehead_dim: int = 128hidden_act: str = 'silu'max_position_embeddings: int = 10000initializer_range: float = 0.02rms_norm_eps: float = 1e-05rope_parameters: transformers.modeling_rope_utils.RopeParameters | dict | None = Noneattention_bias: bool = Falseattention_dropout: float | int = 0.0 )

参数

  • audio_config (Union[dict, ~configuration_utils.PreTrainedConfig], 可选) — 音频骨干网络的配置对象或字典。
  • video_config (Union[PreTrainedConfig, dict], 可选) — 视频编码器的配置。如果提供的是字典,则用于实例化 PeVideoEncoderConfig。
  • hidden_size (int,可选,默认为 1792) — 隐藏表示的维度。
  • intermediate_size (int,可选,默认为 4800) — MLP 表示的维度。
  • num_hidden_layers (int,可选,默认为 6) — Transformer 解码器中的隐藏层数量。
  • num_attention_heads (int,可选,默认为 14) — Transformer 解码器中每个注意力层的注意力头数量。
  • num_key_value_heads (int, 可选) — 这是用于实现 Grouped Query Attention 的 key_value 头数。如果 num_key_value_heads=num_attention_heads,模型将使用 Multi Head Attention (MHA);如果 num_key_value_heads=1,模型将使用 Multi Query Attention (MQA);否则使用 GQA。在将多头检查点转换为 GQA 检查点时,每个组的 key 和 value 头应通过对该组内所有原始头进行平均池化来构建。更多详情请参阅 这篇论文。如果未指定,则默认为 num_attention_heads。
  • head_dim (int,可选,默认为 128) — 注意力头维度。如果为 None,则默认为 hidden_size // num_attention_heads
  • hidden_act (str,可选,默认为 silu) — 解码器中的非线性激活函数(函数或字符串)。例如,"gelu"、 "relu"、"silu" 等。
  • max_position_embeddings (int,可选,默认为 10000) — 该模型可能使用的最大序列长度。
  • initializer_range (float,可选,默认为 0.02) — 用于初始化所有权重矩阵的 truncated_normal_initializer 的标准差。
  • rms_norm_eps (float,可选,默认为 1e-05) — RMS 归一化层使用的 epsilon 值。
  • rope_parameters (Union[~modeling_rope_utils.RopeParameters, dict], 可选) — 包含 RoPE 嵌入配置参数的字典。该字典应包含 rope_theta 的值,并且如果希望使用 RoPE 处理更长的 max_position_embeddings,则可选地包含用于缩放的参数。
  • attention_bias (bool,可选,默认为 False) — 在自注意力机制中,是否在 query、key、value 和 output 投影层中使用偏置。
  • attention_dropout (Union[float, int],可选,默认为 0.0) — 注意力概率的 dropout 比率。

这是用于存储 PeAudioVideoModel 配置的类。它根据指定的参数实例化 Pe Audio Video 模型,并定义模型架构。使用默认值实例化配置将得到与 facebook/pe-av-large 类似的配置。

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

>>> from transformers import PeAudioVideoEncoder, PeAudioVideoEncoderConfig

>>> # Initializing a PeAudioVideoEncoder style configuration
>>> configuration = PeAudioVideoEncoderConfig()

>>> # Initializing a model from the pe-av-large style configuration
>>> model = PeAudioVideoEncoder(configuration)

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

PeAudioVideoProcessor

class transformers.PeAudioVideoProcessor

< >

( feature_extractor = Nonevideo_processor = Nonetokenizer = None**kwargs )

PeAudioVideoEncoder

class transformers.PeAudioVideoEncoder

< >

( config: PeAudioVideoEncoderConfig )

参数

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

PeAudioVideo Encoder 模型。

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

该模型也是 PyTorch torch.nn.Module 的子类。 请将其作为常规的 PyTorch Module 使用,有关通用用法和行为的所有事项,请参阅 PyTorch 文档。

forward

< >

( input_values: typing.Optional[torch.Tensor] = Nonepixel_values_videos: typing.Optional[torch.Tensor] = Nonepadding_mask: typing.Optional[torch.Tensor] = Nonepadding_mask_videos: typing.Optional[torch.Tensor] = None**kwargs ) → PeAudioVideoEncoderOutput or tuple(torch.Tensor)

参数

  • input_values (torch.Tensor,形状为 (batch_size, sequence_length),可选) — 输入原始语音波形的浮点值。可以通过将 .flac 或 .wav 音频文件加载为 list[float]、numpy.ndarray 或 torch.Tensor 类型的数组来获取这些值,例如 使用 torchcodec 库(pip install torchcodec)或 soundfile 库(pip install soundfile)。要将该数组准备为 input_values,应使用 AutoProcessor 进行填充并转换为 torch.Tensor 类型的张量。有关详细信息,请参阅 PeAudioVideoProcessor.call()。
  • pixel_values_videos(形状为 (batch_size, num_frames, num_channels, frame_size, frame_size) 的 torch.Tensor,可选) — 对应输入视频的张量。可以使用 PeVideoVideoProcessor 获取视频的像素值。有关详细信息,请参阅 PeVideoVideoProcessor.call()(PeAudioVideoProcessor 使用 PeVideoVideoProcessor 来处理视频)。
  • padding_mask (torch.Tensor 形状为 (batch_size, sequence_length), ,可选) — 用于避免对 input_values. 中的掩码值,取值范围为 [0, 1]:
    • 1 对于未被掩码的样本,
    • 对于被掩码的样本,值为 0。
  • padding_mask_videos (torch.Tensor 形状为 (batch_size, num_frames), ,可选) — 用于避免对填充视频帧执行注意力机制的掩码。掩码值在 [0, 1]:
    • 1 对于未被掩码的帧,
    • 对于被掩码的帧,值为 0。

返回值

PeAudioVideoEncoderOutput 或 tuple(torch.Tensor)

PeAudioVideoEncoderOutput 或 torch.Tensor 元组(当传入 return_dict=False 或 config.return_dict=False 时),其包含的元素取决于配置(PeAudioVideoConfig)和输入。

PeAudioVideoEncoder 的 forward 方法重写了 __call__ 特殊方法。

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

  • last_hidden_state(形状为 (batch_size, sequence_length, hidden_size) 的 torch.Tensor)— 模型最后一层输出的隐藏状态序列。

  • pooler_output (torch.Tensor,形状为 (batch_size, hidden_size)) — 序列中第一个 token(分类 token)的最后一层隐藏状态,经过用于辅助预训练任务的层进一步处理后得到。例如,对于 BERT 系列模型,这返回的是分类 token 经过线性层和 tanh 激活函数处理后的结果。线性层的权重在预训练期间通过下一句预测(分类)目标进行训练。

  • hidden_states (tuple(torch.Tensor),可选,当传入 output_hidden_states=True 或 config.output_hidden_states=True 时返回) — 一个 torch.Tensor 元组(如果模型具有嵌入层,则包含嵌入层的输出,以及每一层的输出),形状为 (batch_size, sequence_length, hidden_size)。

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

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

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

  • audio_model_output (BaseModelOutputWithPooling,可选) — 音频编码器的输出,包含最后一个隐藏状态、池化输出以及可选的隐藏状态和注意力。详情请参见 BaseModelOutputWithPooling。

  • video_model_output(BaseModelOutputWithPooling,可选)— 视频编码器的输出,包含最后一个隐藏状态、池化输出以及可选的隐藏状态和注意力。详情请参见 BaseModelOutputWithPooling。

PeAudioVideoModel

class transformers.PeAudioVideoModel

< >

( config: PeAudioVideoConfig )

forward

< >

( input_ids: typing.Optional[torch.Tensor] = Nonepixel_values_videos: typing.Optional[torch.Tensor] = Noneinput_values: typing.Optional[torch.Tensor] = Noneattention_mask: typing.Optional[torch.Tensor] = Nonepadding_mask_videos: typing.Optional[torch.Tensor] = Nonepadding_mask: typing.Optional[torch.Tensor] = Nonereturn_loss = False**kwargs ) → PeAudioVideoOutput or tuple(torch.Tensor)

参数

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

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

    什么是输入 ID?

  • pixel_values_videos(形状为 (batch_size, num_frames, num_channels, frame_size, frame_size) 的 torch.Tensor,可选) — 对应输入视频的张量。可以使用 PeVideoVideoProcessor 获取视频的像素值。有关详细信息,请参阅 PeVideoVideoProcessor.call()(PeAudioVideoProcessor 使用 PeVideoVideoProcessor 来处理视频)。
  • input_values (torch.Tensor,形状为 (batch_size, sequence_length),可选) — 输入原始语音波形的浮点值。可以通过将 .flac 或 .wav 音频文件加载为 list[float]、numpy.ndarray 或 torch.Tensor 类型的数组来获取这些值,例如 使用 torchcodec 库(pip install torchcodec)或 soundfile 库(pip install soundfile)。要将该数组准备为 input_values,应使用 AutoProcessor 进行填充并转换为 torch.Tensor 类型的张量。有关详细信息,请参阅 PeAudioVideoProcessor.call()。
  • attention_mask (torch.Tensor 形状为 (batch_size, sequence_length), ,可选) — 用于避免对填充 token 索引执行注意力机制的掩码。掩码值取自 [0, 1]:
    • 1 表示未被屏蔽的 token,
    • 对于被掩码的 token,值为 0。

    什么是注意力掩码?

  • padding_mask_videos (torch.Tensor 形状为 (batch_size, num_frames), ,可选) — 用于避免对填充视频帧执行注意力机制的掩码。掩码值在 [0, 1]:
    • 1 对于未被掩码的帧,
    • 对于被掩码的帧,值为 0。
  • padding_mask (torch.Tensor 形状为 (batch_size, sequence_length), ,可选) — 用于避免对 input_values. 中的掩码值,取值范围为 [0, 1]:
    • 1 对于未被掩码的样本,
    • 对于被掩码的样本,值为 0。
  • return_loss (bool, 可选) — 是否返回损失值。

返回值

PeAudioVideoOutput 或 tuple(torch.Tensor)

PeAudioVideoOutput 或 torch.Tensor 元组(当传入 return_dict=False 或 config.return_dict=False 时),其包含的元素取决于配置(PeAudioVideoConfig)和输入。

PeAudioVideoModel 的 forward 方法重写了 __call__ 特殊方法。

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

  • audio_embeds (torch.Tensor,可选) — 音频模态嵌入。形状为 (batch_size, sequence_length, hidden_size)。
  • video_embeds (torch.Tensor,可选) — 视频模态嵌入。形状为 (batch_size, sequence_length, hidden_size)。
  • audio_video_embeds (torch.Tensor, 可选) — 由融合模块生成的联合音视频嵌入。形状为 (batch_size, sequence_length, hidden_size)。
  • text_audio_embeds (torch.Tensor, 可选) — 联合文本-音频嵌入。形状为 (batch_size, sequence_length, hidden_size)。
  • text_video_embeds (torch.Tensor, 可选) — 联合文本-视频嵌入。形状为 (batch_size, sequence_length, hidden_size)。
  • text_audio_video_embeds (torch.Tensor, 可选) — 结合文本、音频和视频三种模态的联合嵌入。形状为 (batch_size, sequence_length, hidden_size)。
  • audio_plus_text_embeds (torch.Tensor, 可选) — 音频和文本的组合嵌入(例如,拼接或加性融合)。形状为 (batch_size, sequence_length, hidden_size)。
  • video_plus_text_embeds (torch.Tensor, 可选) — 视频和文本的组合嵌入。形状为 (batch_size, sequence_length, hidden_size)。
  • text_outputs (MaskedLMOutput,可选) — 文本编码器的模型输出。包含隐藏状态、注意力,以及可选的损失。
  • audio_outputs (BaseModelOutputWithPooling,可选) — 音频编码器的模型输出,包括最后一个隐藏状态和池化输出。
  • video_outputs (BaseModelOutputWithPooling,可选) — 视频编码器的模型输出,包括最后一个隐藏状态和池化输出。
  • audio_video_outputs(BaseModelOutputWithPooling,可选)— 联合音视频编码器的模型输出。
  • logits_audio_text (torch.Tensor, 可选) — 音频嵌入与文本嵌入之间的相似度 logits。形状为 (batch_size, batch_size)。
  • logits_video_text (torch.Tensor, 可选) — 视频嵌入与文本嵌入之间的相似度 logits。形状为 (batch_size, batch_size)。
  • logits_audio_video (torch.Tensor, 可选) — 音频嵌入与视频嵌入之间的相似度 logits。形状为 (batch_size, batch_size)。
  • logits_audio_video_text (torch.Tensor, 可选) — 音频、视频和文本模态之间的相似度 logits。
  • logits_audio_plus_text_video (torch.Tensor, 可选) — 融合(音频 + 文本)嵌入与视频嵌入之间的相似度 logits。
  • logits_video_plus_text_audio (torch.Tensor, 可选) — 融合(视频 + 文本)嵌入与音频嵌入之间的相似度 logits。
  • audio_text_loss (torch.Tensor, 可选) — 在音频和文本表示之间计算的对比损失。
  • video_text_loss (torch.Tensor, 可选) — 在视频和文本表示之间计算得到的对比损失。
  • audio_video_loss (torch.Tensor, 可选) — 在音频和视频表示之间计算得到的对比损失。
  • audio_video_text_loss (torch.Tensor, 可选) — 音频、视频和文本模态的联合损失。
  • audio_plus_text_video_loss (torch.Tensor, 可选) — 融合(音频 + 文本)表示与视频之间的损失。
  • video_plus_text_audio_loss (torch.Tensor, 可选) — 融合(视频 + 文本)表示与音频之间的损失。
  • loss (torch.Tensor, 可选) — 所有模态损失的组合损失。
Update on GitHub