Transformers 文档

DAC

Hugging Face's logo
加入 Hugging Face 社区

并获得增强的文档体验

开始使用

DAC

PyTorch

概述

DAC 模型由 Rithesh Kumar、Prem Seetharaman、Alejandro Luebs、Ishaan Kumar 和 Kundan Kumar 在论文 《Descript Audio Codec:使用改进的 RVQGAN 实现高保真音频压缩》 中提出。

Descript Audio Codec (DAC) 模型是一种用于压缩音频数据的强大工具,使其在存储和传输方面非常高效。通过将 44.1 KHz 的音频压缩成带宽仅为 8kbps 的标记(token),DAC 模型实现了高质量的音频处理,同时显著减少了数据量。这在带宽有限或存储空间宝贵的场景中特别有用,例如流媒体应用、远程会议和大型音频数据集的存档。

论文摘要如下:

语言模型已成功用于建模自然信号,例如图像、语音和音乐。这些模型的一个关键组成部分是高质量的神经压缩模型,它可以将高维自然信号压缩为低维离散标记(token)。为此,我们引入了一种高保真通用神经音频压缩算法,该算法可将 44.1 KHz 的音频压缩为带宽仅为 8kbps 的标记(token),压缩率约为 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 损失函数中承诺损失项的权重。
  • 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, 可选, 默认为 1) — 提取特征的特征维度。单声道使用 1,立体声使用 2。
  • sampling_rate (int, 可选, 默认为 16000) — 音频波形数字化的采样率,以赫兹 (Hz) 表示。
  • padding_value (float, 可选, 默认为 0.0) — 用于填充的值。
  • hop_length (int, 可选, 默认为 512) — 连续窗口之间的重叠长度。

构造一个 Dac 特征提取器。

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

__call__

< >

( raw_audio: typing.Union[numpy.ndarray, list[float], list[numpy.ndarray], list[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, 可选, 默认为 True) — 在以下策略中选择一种来填充返回的序列(根据模型的填充方向和填充索引):

    • True'longest':填充到批次中最长的序列(如果只提供单个序列则不填充)。
    • 'max_length':填充到由 `max_length` 参数指定的最大长度,如果未提供该参数,则填充到模型的最大可接受输入长度。
    • False'do_not_pad'(默认):不填充(即可以输出具有不同长度序列的批次)。
  • truncation (bool, 可选, 默认为 False) — 激活截断,将长于 `max_length` 的输入序列截断到 `max_length`。
  • max_length (int, 可选) — 返回列表的最大长度,并可选地作为填充长度(见上文)。
  • return_tensors (strTensorType, 可选, 默认为 ‘pt’) — 如果设置,将返回张量而不是 Python 整数列表。可接受的值有:

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

对一个或多个序列进行特征化并为模型准备的主方法。

DacModel

class transformers.DacModel

< >

( config: DacConfig )

参数

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

DAC (Descript Audio Codec) 模型。

该模型继承自 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 )

参数

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

编码

< >

( input_values: Tensor n_quantizers: typing.Optional[int] = None return_dict: typing.Optional[bool] = None )

参数

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

forward

< >

( input_values: Tensor n_quantizers: typing.Optional[int] = None return_dict: typing.Optional[bool] = None )

参数

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

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 上更新