Transformers 文档

DAC

Hugging Face's logo
加入 Hugging Face 社区

并获取增强的文档体验

开始使用

DAC

PyTorch

概述

DAC 模型由 Rithesh Kumar、Prem Seetharaman、Alejandro Luebs、Ishaan Kumar、Kundan Kumar 在 Descript Audio Codec: High-Fidelity Audio Compression with Improved RVQGAN 中提出。

Descript Audio Codec (DAC) 模型是压缩音频数据的强大工具,使其非常高效地进行存储和传输。通过将 44.1 KHz 音频压缩成仅 8kbps 带宽的 tokens,DAC 模型实现了高质量的音频处理,同时显著减少了数据占用空间。这在带宽受限或存储空间珍贵的情况下尤其有用,例如在流媒体应用、远程会议和大型音频数据集存档中。

论文摘要如下:

语言模型已成功用于建模自然信号,例如图像、语音和音乐。这些模型的关键组成部分是高质量的神经压缩模型,可以将高维自然信号压缩为低维离散 tokens。为此,我们引入了一种高保真通用神经音频压缩算法,该算法以仅 8kbps 的带宽将 44.1 KHz 音频压缩约 90 倍。我们通过结合高保真音频生成方面的进步和图像领域中更好的矢量量化技术,以及改进的对抗和重建损失来实现这一点。我们使用单个通用模型压缩所有领域(语音、环境、音乐等),使其广泛适用于所有音频的生成建模。我们与竞争性音频压缩算法进行比较,发现我们的方法明显优于它们。我们为每个设计选择提供详尽的消融研究,以及开源代码和训练好的模型权重。我们希望我们的工作能够为下一代高保真音频建模奠定基础。

此模型由 Kamil Akesbi 贡献。 原始代码可以在这里找到。

模型结构

Descript Audio Codec (DAC) 模型分为三个不同的阶段

  1. 编码器模型:此阶段压缩输入音频,减小其大小,同时保留必要的信息。
  2. 残差矢量量化器 (RVQ) 模型:此模型与编码器协同工作,量化音频的潜在代码,优化压缩并确保高质量的重建。
  3. 解码器模型:最后阶段从压缩形式重建音频,将其恢复到与原始输入非常相似的状态。

使用示例

这是一个关于如何使用此模型编码和解码音频的快速示例

>>> from datasets import load_dataset, Audio
>>> from transformers import DacModel, AutoProcessor
>>> librispeech_dummy = load_dataset("hf-internal-testing/librispeech_asr_dummy", "clean", split="validation")

>>> model = DacModel.from_pretrained("descript/dac_16khz")
>>> processor = AutoProcessor.from_pretrained("descript/dac_16khz")
>>> librispeech_dummy = librispeech_dummy.cast_column("audio", Audio(sampling_rate=processor.sampling_rate))
>>> audio_sample = librispeech_dummy[-1]["audio"]["array"]
>>> inputs = processor(raw_audio=audio_sample, sampling_rate=processor.sampling_rate, return_tensors="pt")

>>> encoder_outputs = model.encode(inputs["input_values"])
>>> # Get the intermediate audio codes
>>> audio_codes = encoder_outputs.audio_codes
>>> # Reconstruct the audio from its quantized representation
>>> audio_values = model.decode(encoder_outputs.quantized_representation)
>>> # or the equivalent with a forward pass
>>> audio_values = model(inputs["input_values"]).audio_values

DacConfig

class transformers.DacConfig

< >

( encoder_hidden_size = 64 downsampling_ratios = [2, 4, 8, 8] decoder_hidden_size = 1536 n_codebooks = 9 codebook_size = 1024 codebook_dim = 8 quantizer_dropout = 0 commitment_loss_weight = 0.25 codebook_loss_weight = 1.0 sampling_rate = 16000 **kwargs )

参数

  • encoder_hidden_size (int, 可选, 默认为 64) — 编码器的中间表示维度。
  • downsampling_ratios (List[int], 可选, 默认为 [2, 4, 8, 8]) — 编码器中下采样的比率。 这些比率以相反的顺序用于解码器中的上采样。
  • decoder_hidden_size (int, 可选, 默认为 1536) — 解码器的中间表示维度。
  • n_codebooks (int, 可选, 默认为 9) — VQVAE 中的代码本数量。
  • codebook_size (int, 可选, 默认为 1024) — 每个代码本中离散代码的数量。
  • codebook_dim (int, 可选, 默认为 8) — 代码本向量的维度。 如果未定义,则使用 encoder_hidden_size
  • quantizer_dropout (bool, 可选, 默认为 0) — 是否对量化器应用 dropout。
  • commitment_loss_weight (float, 可选, 默认为 0.25) — VQVAE 损失函数中 commitment 损失项的权重。
  • codebook_loss_weight (float, 可选, 默认为 1.0) — VQVAE 损失函数中代码本损失项的权重。
  • sampling_rate (int, 可选, 默认为 16000) — 音频波形应数字化的采样率,以赫兹 (Hz) 表示。

这是用于存储 DacModel 配置的配置类。 它用于根据指定的参数实例化 Dac 模型,从而定义模型架构。 使用默认值实例化配置将产生与 descript/dac_16khz 架构类似的配置。

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

示例

>>> from transformers import DacModel, DacConfig

>>> # Initializing a "descript/dac_16khz" style configuration
>>> configuration = DacConfig()

>>> # Initializing a model (with random weights) from the "descript/dac_16khz" style configuration
>>> model = DacModel(configuration)

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

DacFeatureExtractor

class transformers.DacFeatureExtractor

< >

( feature_size: int = 1 sampling_rate: int = 16000 padding_value: float = 0.0 hop_length: int = 512 **kwargs )

参数

  • feature_size (int, optional, defaults to 1) — 特征维度,用于提取的特征。单声道使用 1,立体声使用 2。
  • sampling_rate (int, optional, defaults to 16000) — 采样率,音频波形应数字化的采样率,以赫兹 (Hz) 表示。
  • padding_value (float, optional, defaults to 0.0) — 填充值。
  • hop_length (int, optional, defaults to 512) — 连续窗口之间的重叠长度。

构建一个 Dac 特征提取器。

此特征提取器继承自 SequenceFeatureExtractor,其中包含大多数主要方法。用户应参考此超类以获取有关这些方法的更多信息。

__call__

< >

( raw_audio: typing.Union[numpy.ndarray, typing.List[float], typing.List[numpy.ndarray], typing.List[typing.List[float]]] padding: typing.Union[bool, str, transformers.utils.generic.PaddingStrategy, NoneType] = None truncation: typing.Optional[bool] = False max_length: typing.Optional[int] = None return_tensors: typing.Union[str, transformers.utils.generic.TensorType, NoneType] = None sampling_rate: typing.Optional[int] = None )

参数

  • raw_audio (np.ndarray, List[float], List[np.ndarray], List[List[float]]) — 要处理的序列或序列批次。每个序列可以是 numpy 数组、浮点数值列表、numpy 数组列表或浮点数值列表的列表。对于单声道音频 (feature_size = 1),numpy 数组的形状必须为 (num_samples,),对于立体声音频 (feature_size = 2),则为 (2, num_samples)
  • padding (bool, strPaddingStrategy, optional, defaults to True) — 选择一种策略来填充返回的序列(根据模型的填充侧和填充索引):

    • True'longest':填充到批次中最长的序列(如果仅提供单个序列,则不填充)。
    • 'max_length':填充到通过参数 max_length 指定的最大长度,或者如果未提供该参数,则填充到模型可接受的最大输入长度。
    • False'do_not_pad' (默认):不填充(即,可以输出具有不同长度序列的批次)。
  • truncation (bool, optional, defaults to False) — 激活截断,以将长于 max_length 的输入序列裁剪为 max_length
  • max_length (int, optional) — 返回列表的最大长度,以及可选的填充长度(见上文)。
  • return_tensors (strTensorType, optional, default to ‘pt’) — 如果设置,将返回 tensors 而不是 python 整数列表。可接受的值为:

    • 'tf':返回 TensorFlow tf.constant 对象。
    • 'pt':返回 PyTorch torch.Tensor 对象。
    • 'np':返回 Numpy np.ndarray 对象。
  • sampling_rate (int, optional) — audio 输入被采样的采样率。强烈建议在前向调用中传递 sampling_rate 以防止静默错误。

用于提取特征并为模型准备一个或多个序列的主要方法。

DacModel

class transformers.DacModel

< >

( config: DacConfig )

参数

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

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

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

decode

< >

( quantized_representation: typing.Optional[torch.Tensor] = None audio_codes: typing.Optional[torch.Tensor] = None return_dict: typing.Optional[bool] = None ) transformers.models.dac.modeling_dac.DacDecoderOutputtuple(torch.FloatTensor)

参数

  • quantized_representation (形状为 (batch_size, dimension, time_steps) 的 torch.Tensor, optional) — 输入的量化连续表示。
  • audio_codes (形状为 (batch_size, num_codebooks, time_steps)torch.Tensor, optional) — 每个码本的码本索引,表示输入的量化离散表示。如果您想直接从音频代码解码,则应提供此参数(它将覆盖 quantized_representation)。
  • return_dict (bool, optional) — 是否返回 ModelOutput 而不是普通元组。

返回

transformers.models.dac.modeling_dac.DacDecoderOutputtuple(torch.FloatTensor)

一个 transformers.models.dac.modeling_dac.DacDecoderOutput 或一个 torch.FloatTensor 元组(如果传递了 return_dict=False 或当 config.return_dict=False 时),其中包含各种元素,具体取决于配置 (DacConfig) 和输入。

  • audio_values (形状为 (batch_size, input_length)torch.FloatTensor, optional) — 解码后的音频值,使用 Dac 的解码器部分获得。

解码给定的潜在代码并返回音频数据

encode

< >

( input_values: Tensor n_quantizers: int = None return_dict: typing.Optional[bool] = None ) transformers.models.dac.modeling_dac.DacEncoderOutputtuple(torch.FloatTensor)

参数

  • input_values (形状为 (batch_size, 1, time_steps)torch.Tensor) — 要编码的输入音频数据,
  • n_quantizers (int, optional) — 要使用的量化器数量。如果为 None,则使用所有量化器。默认为 None。
  • return_dict (bool, optional) — 是否返回 ModelOutput 而不是普通元组。

返回

transformers.models.dac.modeling_dac.DacEncoderOutputtuple(torch.FloatTensor)

一个 transformers.models.dac.modeling_dac.DacEncoderOutput 或一个 torch.FloatTensor 元组(如果传递了 return_dict=False 或当 config.return_dict=False 时),其中包含各种元素,具体取决于配置 (DacConfig) 和输入。

  • loss (torch.Tensor) — 来自编码器模型的损失,包括承诺损失和码本损失的加权组合。
  • quantized_representation (形状为 (batch_size, dimension, time_steps)torch.Tensor, optional) — 输入的量化连续表示。
  • audio_codes (形状为 (batch_size, num_codebooks, time_steps)torch.Tensor, optional) — 每个码本的码本索引(输入的量化离散表示)。
  • projected_latents (形状为 (batch_size, num_codebooks * dimension, time_steps)torch.Tensor, optional) — 投影潜在变量(量化前输入的连续表示)。

编码给定的音频数据并返回量化潜在代码

forward

< >

( input_values: Tensor n_quantizers: int = None return_dict: typing.Optional[bool] = None ) transformers.models.dac.modeling_dac.DacOutputtuple(torch.FloatTensor)

参数

  • input_values (torch.Tensor,形状为 (batch_size, 1, time_steps))。— 要编码的音频数据,
  • n_quantizers (int可选) — 要使用的量化器数量。如果为 None,则使用所有量化器。默认为 None
  • return_dict (bool可选) — 是否返回 ModelOutput 而不是纯元组。

返回

transformers.models.dac.modeling_dac.DacOutputtuple(torch.FloatTensor)

一个 transformers.models.dac.modeling_dac.DacOutput 或一个 torch.FloatTensor 元组 (如果传递了 return_dict=False 或当 config.return_dict=False 时),其中包含各种元素,具体取决于配置 (DacConfig) 和输入。

  • loss (torch.Tensor) — 来自编码器模型的损失,包括承诺损失和码本损失的加权组合。
  • audio_values (torch.Tensor,形状为 (batch_size, input_length)) — 重建的音频数据。
  • quantized_representation (torch.Tensor,形状为 (batch_size, dimension, time_steps)) — 输入的量化连续表示。
  • audio_codes (torch.LongTensor,形状为 (batch_size, num_codebooks, time_steps)) — 每个码本的码本索引 (输入的量化离散表示)。
  • projected_latents (torch.Tensor,形状为 (batch_size, num_codebooks * dimension, time_steps)) — 投影潜在变量 (量化前输入的连续表示)。

DacModel 前向方法,覆盖了 __call__ 特殊方法。

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

示例

>>> from datasets import load_dataset, Audio
>>> from transformers import DacModel, AutoProcessor
>>> librispeech_dummy = load_dataset("hf-internal-testing/librispeech_asr_dummy", "clean", split="validation")

>>> model = DacModel.from_pretrained("descript/dac_16khz")
>>> processor = AutoProcessor.from_pretrained("descript/dac_16khz")
>>> librispeech_dummy = librispeech_dummy.cast_column("audio", Audio(sampling_rate=processor.sampling_rate))
>>> audio_sample = librispeech_dummy[-1]["audio"]["array"]
>>> inputs = processor(raw_audio=audio_sample, sampling_rate=processor.sampling_rate, return_tensors="pt")

>>> encoder_outputs = model.encode(inputs["input_values"])
>>> # Get the intermediate audio codes
>>> audio_codes = encoder_outputs.audio_codes
>>> # Reconstruct the audio from its quantized representation
>>> audio_values = model.decode(encoder_outputs.quantized_representation)
>>> # or the equivalent with a forward pass
>>> audio_values = model(inputs["input_values"]).audio_values
< > 在 GitHub 上更新