Transformers 文件
DAC
並獲得增強的文件體驗
開始使用
DAC
概述
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) 模型的結構分為三個不同階段:
- 編碼器模型:此階段壓縮輸入音訊,減小其大小,同時保留基本資訊。
- 殘差向量量化器 (RVQ) 模型:該模型與編碼器協同工作,對音訊的潛在編碼進行量化,最佳化壓縮並確保高質量的重建。
- 解碼器模型:此最終階段從其壓縮形式重建音訊,將其恢復到與原始輸入非常接近的狀態。
用法示例
以下是一個如何使用此模型進行音訊編碼和解碼的快速示例
>>> 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 )
構造一個 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
,str
或 PaddingStrategy, 可選, 預設為True
) — 在以下策略中選擇一種來填充返回的序列(根據模型的填充方向和填充索引):True
或'longest'
:填充到批次中最長的序列(如果只提供單個序列則不填充)。'max_length'
:填充到由 `max_length` 引數指定的最大長度,如果未提供該引數,則填充到模型的最大可接受輸入長度。False
或'do_not_pad'
(預設):不填充(即可以輸出具有不同長度序列的批次)。
- truncation (
bool
, 可選, 預設為False
) — 啟用截斷,將長於 `max_length` 的輸入序列截斷到 `max_length`。 - max_length (
int
, 可選) — 返回列表的最大長度,並可選地作為填充長度(見上文)。 - return_tensors (
str
或 TensorType, 可選, 預設為 ‘pt’) — 如果設定,將返回張量而不是 Python 整數列表。可接受的值有:'tf'
:返回 TensorFlowtf.constant
物件。'pt'
:返回 PyTorchtorch.Tensor
物件。'np'
:返回 Numpynp.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