Transformers documentation
DAC
Este modelo foi publicado no HF papers em 2023-06-11 e contribuído para o Hugging Face Transformers em 2024-08-19.
DAC
Visão geral
O modelo DAC foi proposto em Descript Audio Codec: High-Fidelity Audio Compression with Improved RVQGAN por Rithesh Kumar, Prem Seetharaman, Alejandro Luebs, Ishaan Kumar, Kundan Kumar.
O modelo Descript Audio Codec (DAC) é uma ferramenta poderosa para compressão de dados de áudio, tornando-o altamente eficiente para armazenamento e transmissão. Ao comprimir áudio de 44,1 KHz em tokens com apenas 8 kbps de largura de banda, o modelo DAC permite o processamento de áudio de alta qualidade, reduzindo significativamente a pegada de dados. Isso é particularmente útil em cenários em que a largura de banda é limitada ou o espaço de armazenamento é escasso, como em aplicações de streaming, conferências remotas e arquivamento de grandes conjuntos de dados de áudio.
O resumo do artigo é o seguinte:
Os modelos de linguagem têm sido utilizados com sucesso para modelar sinais naturais, como imagens, fala e música. Um componente-chave desses modelos é um modelo de compressão neural de alta qualidade, capaz de comprimir sinais naturais de alta dimensão em tokens discretos de dimensão inferior. Para isso, apresentamos um algoritmo universal de compressão neural de áudio de alta fidelidade que atinge uma compressão de ~90x de áudio de 44,1 KHz em tokens com apenas 8 kbps de largura de banda. Alcançamos isso combinando avanços na geração de áudio de alta fidelidade com técnicas aprimoradas de quantização vetorial do domínio de imagens, juntamente com perdas adversariais e de reconstrução melhoradas. Comprimimos todos os domínios (fala, ambiente, música, etc.) com um único modelo universal, tornando-o amplamente aplicável à modelagem generativa de todo o áudio. Comparamos com algoritmos concorrentes de compressão de áudio e constatamos que nosso método os supera significativamente. Fornecemos ablações detalhadas para cada escolha de design, bem como código open-source e pesos de modelos treinados. Esperamos que nosso trabalho possa estabelecer a base para a próxima geração de modelagem de áudio de alta fidelidade.
Este modelo foi contribuído por Kamil Akesbi. O código original pode ser encontrado aqui.
Estrutura do modelo
O modelo Descript Audio Codec (DAC) é estruturado em três estágios distintos:
- Modelo de codificador: Esta etapa comprime o áudio de entrada, reduzindo seu tamanho enquanto retém as informações essenciais.
- Modelo de Quantizador Vetorial Residual (RVQ): trabalhando em conjunto com o codificador, este modelo quantiza os códigos latentes do áudio, refinando a compressão e garantindo uma reconstrução de alta qualidade.
- Modelo Decodificador: Esta etapa final reconstrói o áudio a partir de sua forma comprimida, restaurando-o a um estado que se assemelha de perto à entrada original.
Exemplo de uso
Aqui está um exemplo rápido de como codificar e decodificar um áudio usando este modelo:
from datasets import Audio, load_dataset
from transformers import AutoProcessor, DacModel
librispeech_dummy = load_dataset("hf-internal-testing/librispeech_asr_dummy", "clean", split="validation")
model = DacModel.from_pretrained("descript/dac_16khz", device_map="auto")
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").to(model.device)
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_valuesDacConfig
classe transformers.DacConfig
< source >( 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 = Noneencoder_hidden_size: int = 64downsampling_ratios: list[int] | tuple[int, ...] = (2, 4, 8, 8)decoder_hidden_size: int = 1536n_codebooks: int = 9codebook_size: int = 1024codebook_dim: int = 8quantizer_dropout: float | int = 0.0commitment_loss_weight: float = 0.25codebook_loss_weight: float = 1.0sampling_rate: int = 16000 )
Parâmetros
- encoder_hidden_size (
int, opcional, padrão64) — Dimensão das representações ocultas. - downsampling_ratios (
list[int], opcional, padrão[2, 4, 8, 8]) — Razões para o downsampling no encoder. Elas são usadas em ordem reversa para o upsampling no decoder. - decoder_hidden_size (
int, opcional, padrão1536) — Dimensão das representações ocultas. - n_codebooks (
int, opcional, padrão9) — O número de codebooks paralelos usados pelo modelo. - codebook_size (
int, opcional, padrão1024) — O número de codebooks paralelos usados pelo modelo. - codebook_dim (
int, opcional, padrão8) — Dimensão de cada vetor de incorporação do codebook. - quantizer_dropout (
bool, opcional, padrão 0) — Se deve aplicar dropout ao quantizador. - commitment_loss_weight (
float, opcional, padrão 0.25) — Peso do termo de perda de compromisso na função de perda do VQVAE. - codebook_loss_weight (
float, opcional, padrão 1.0) — Peso do termo de perda do codebook na função de perda do VQVAE. - sampling_rate (
int, opcional, padrão16000) — A taxa de amostragem na qual os arquivos de áudio devem ser digitalizados, expressa em hertz (Hz).
Esta é a classe de configuração para armazenar a configuração de um DacModel. Ela é usada para instanciar um modelo Dac de acordo com os argumentos especificados, definindo a arquitetura do modelo. Instanciar uma configuração com os padrões resultará em uma configuração semelhante à do descript/dac_16khz
Os objetos de configuração herdam de PreTrainedConfig e podem ser usados para controlar as saídas do modelo. Consulte a documentação de PreTrainedConfig para mais informações.
Exemplo:
>>> 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.configDacFeatureExtractor
classe transformers.DacFeatureExtractor
< source >( feature_size: int = 1sampling_rate: int = 16000padding_value: float = 0.0hop_length: int = 512**kwargs )
Parâmetros
- feature_size (
int, opcional, padrão 1) — A dimensão dos recursos dos recursos extraídos. Use 1 para mono e 2 para estéreo. - sampling_rate (
int, opcional, padrão 16000) — A taxa de amostragem na qual a forma de onda de áudio deve ser digitalizada, expressa em hertz (Hz). - padding_value (
float, opcional, padrão 0.0) — O valor utilizado para preenchimento. - hop_length (
int, opcional, padrão 512) — Comprimento de sobreposição entre janelas sucessivas.
Constrói um extrator de recursos Dac.
Este extrator de características herda de SequenceFeatureExtractor, que contém a maioria dos métodos principais. Os usuários devem consultar essa superclasse para obter mais informações sobre esses métodos.
__call__
< source >( raw_audio: numpy.ndarray | list[float] | list[numpy.ndarray] | list[list[float]]padding: bool | str | transformers.utils.generic.PaddingStrategy | None = Nonetruncation: bool | None = Falsemax_length: int | None = Nonereturn_tensors: str | transformers.utils.generic.TensorType | None = Nonesampling_rate: int | None = None )
Parâmetros
- raw_audio (
np.ndarray,list[float],list[np.ndarray],list[list[float]]) — A sequência ou lote de sequências a serem processadas. Cada sequência pode ser um array numpy, uma lista de valores float, uma lista de arrays numpy ou uma lista de listas de valores float. O array numpy deve ter a forma(num_samples,)para áudio mono (feature_size = 1), ou(2, num_samples)para áudio estéreo (feature_size = 2). - padding (
bool,strou PaddingStrategy, opcional, padrão éTrue) — Selecione uma estratégia para aplicar padding às sequências retornadas (de acordo com o lado de padding e o índice de padding do modelo) entre:Trueou'longest': Preenche até a sequência mais longa do lote (ou não aplica preenchimento se apenas uma sequência for fornecida).'max_length': Preenche até o comprimento máximo especificado com o argumentomax_lengthou até o comprimento máximo aceitável de entrada para o modelo, caso esse argumento não seja fornecido.Falseou'do_not_pad'(padrão): Sem padding (ou seja, pode gerar um lote com sequências de comprimentos diferentes).
- truncation (
bool, opcional, padrãoFalse) — Ativa a truncagem para cortar sequências de entrada com comprimento maior quemax_lengthparamax_length. - max_length (
int, opcional) — Comprimento máximo da lista retornada e, opcionalmente, o comprimento do padding (veja acima). - return_tensors (
strou TensorType, opcional, padrão 'pt') — Se definido, retornará tensors em vez de uma lista de inteiros do Python. Os valores aceitos são:'pt': Retorna objetostorch.Tensordo PyTorch.'np': Retorna objetosnp.ndarraydo Numpy.
- sampling_rate (
int, opcional) — A taxa de amostragem na qual a entrada deaudiofoi amostrada. É fortemente recomendável passarsampling_ratena chamada de forward para evitar erros silenciosos.
Método principal para criar recursos e preparar uma ou várias sequências para o modelo.
DacModel
classe transformers.DacModel
< source >( config: DacConfig )
Parâmetros
- config (DacConfig) — Classe de configuração do modelo com todos os parâmetros do modelo. A inicialização com um arquivo de configuração não carrega os pesos associados ao modelo, apenas a configuração. Consulte o método from_pretrained() para carregar os pesos do modelo.
O modelo DAC (Descript Audio Codec).
Este modelo herda de PreTrainedModel. Consulte a documentação da classe pai para os métodos genéricos que a biblioteca implementa para todos os seus modelos (como download ou salvamento, redimensionamento dos embeddings de entrada, poda de cabeças, etc.)
Este modelo também é uma subclasse de torch.nn.Module do PyTorch. Use-o como um Módulo PyTorch regular e consulte a documentação do PyTorch para todos os assuntos relacionados ao uso geral e ao comportamento.
decode
< source >( quantized_representation: typing.Optional[torch.Tensor] = Noneaudio_codes: typing.Optional[torch.Tensor] = Nonereturn_dict: bool | None = None ) → DacDecoderOutput or tuple(torch.Tensor)
Parâmetros
- quantized_representation (
torch.Tensorde forma(batch_size, dimension, time_steps), opcional) — Representação contínua quantizada da entrada. - audio_codes (
torch.Tensorde forma(batch_size, num_codebooks, time_steps), opcional) — Os índices de codebook para cada codebook, representando a representação discreta quantizada da entrada. Este parâmetro deve ser fornecido se você deseja decodificar diretamente a partir dos códigos de áudio (ele sobrescreverá quantized_representation). - return_dict (
bool, opcional, padrãoTrue) — Se deve retornar umDacDecoderOutputem vez de uma tupla simples.
Retorna
DacDecoderOutput ou tuple(torch.Tensor)
Um DacDecoderOutput ou uma tupla de
torch.Tensor (se return_dict=False for passado ou quando config.return_dict=False) contendo vários
elementos, dependendo da configuração (DacConfig) e das entradas.
- audio_values (
torch.Tensorde forma(batch_size, input_length), opcional) — Valores de áudio decodificados, obtidos usando a parte decodificadora do Dac.
encode
< source >( input_values: Tensorn_quantizers: int | None = Nonereturn_dict: bool | None = None ) → DacEncoderOutput or tuple(torch.Tensor)
Parâmetros
- input_values (
torch.Tensor of shape(batch_size, 1, time_steps)`) — Dados de áudio de entrada para codificar, - n_quantizers (
int, opcional) — Número de quantizadores a serem usados. Se for None, todos os quantizadores são usados. O padrão é None. - return_dict (
bool, opcional) — Indica se deve retornar um ModelOutput em vez de uma tupla simples.
Retorna
DacEncoderOutput ou tuple(torch.Tensor)
Um DacEncoderOutput ou uma tupla de
torch.Tensor (se return_dict=False for passado ou quando config.return_dict=False) contendo vários
elementos dependendo da configuração (DacConfig) e das entradas.
- loss (
torch.Tensor, opcional) — Perda do modelo codificador, composta pela combinação ponderada das perdas de compromisso e do livro de códigos. - quantized_representation (
torch.Tensorde forma(batch_size, dimension, time_steps), opcional) — Representação contínua quantizada da entrada. - audio_codes (
torch.Tensorde forma(batch_size, num_codebooks, time_steps), opcional) — Índices de codebook para cada codebook (representação discreta quantizada da entrada). - projected_latents (
torch.Tensorde forma(batch_size, num_codebooks * dimension, time_steps), opcional) — Latentes projetados (representação contínua da entrada antes da quantização).
forward
< source >( input_values: Tensorn_quantizers: int | None = Nonereturn_dict: bool | None = None ) → DacOutput or tuple(torch.Tensor)
Parâmetros
- input_values (
torch.Tensorde forma(batch_size, 1, time_steps)) — Dados de áudio a serem codificados. - n_quantizers (
int, opcional) — Número de quantizadores a serem usados. SeNone, todos os quantizadores são usados. O padrão éNone. - return_dict (
bool, opcional) — Indica se deve retornar um ModelOutput em vez de uma tupla simples.
Retorna
DacOutput ou tuple(torch.Tensor)
Um DacOutput ou uma tupla de
torch.Tensor (se return_dict=False for passado ou quando config.return_dict=False) contendo vários
elementos dependendo da configuração (DacConfig) e das entradas.
O método forward do DacModel sobrescreve o método especial __call__.
Embora a receita para a passagem direta precise ser definida dentro desta função, deve-se chamar a instância de
Moduleem seguida, em vez desta, pois a primeira cuida da execução das etapas de pré e pós-processamento, enquanto a segunda as ignora silenciosamente.
- loss (
torch.Tensor, opcional) — Perda do modelo codificador, composta pela combinação ponderada das perdas de compromisso e do livro de códigos. - audio_values (
torch.Tensorde forma(batch_size, input_length)) — Dados de áudio reconstruídos. - quantized_representation (
torch.Tensorde forma(batch_size, dimension, time_steps)) — Representação contínua quantizada da entrada. - audio_codes (
torch.LongTensorde forma(batch_size, num_codebooks, time_steps)) — Índices de codebook para cada codebook (representação discreta quantizada da entrada). - projected_latents (
torch.Tensorde forma(batch_size, num_codebooks * dimension, time_steps)) — Latentes projetados (representação contínua da entrada antes da quantização).
Exemplos:
>>> 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