Transformers documentation
DAC
Este modelo se publicó en HF papers el 2023-06-11 y se contribuyó a Hugging Face Transformers el 2024-08-19.
DAC
Resumen
El modelo DAC fue propuesto en Descript Audio Codec: High-Fidelity Audio Compression with Improved RVQGAN por Rithesh Kumar, Prem Seetharaman, Alejandro Luebs, Ishaan Kumar y Kundan Kumar.
El modelo Descript Audio Codec (DAC) es una herramienta potente para comprimir datos de audio, lo que lo hace altamente eficiente para el almacenamiento y la transmisión. Al comprimir audio de 44,1 KHz en tokens con solo 8 kbps de ancho de banda, el modelo DAC permite un procesamiento de audio de alta calidad reduciendo significativamente la huella de datos. Esto resulta especialmente útil en escenarios donde el ancho de banda es limitado o el espacio de almacenamiento es escaso, como en aplicaciones de streaming, conferencias remotas y el archivo de grandes conjuntos de datos de audio.
El resumen del artículo es el siguiente:
Los modelos de lenguaje se han utilizado con éxito para modelar señales naturales, como imágenes, voz y música. Un componente clave de estos modelos es un modelo de compresión neuronal de alta calidad que puede comprimir señales naturales de alta dimensión en tokens discretos de menor dimensión. Con ese fin, presentamos un algoritmo universal de compresión neuronal de audio de alta fidelidad que logra una compresión de ~90x de audio de 44,1 KHz en tokens con solo 8 kbps de ancho de banda. Logramos esto combinando avances en la generación de audio de alta fidelidad con mejores técnicas de cuantización vectorial del dominio de imágenes, junto con pérdidas adversarias y de reconstrucción mejoradas. Comprimimos todos los dominios (voz, entorno, música, etc.) con un único modelo universal, lo que lo hace ampliamente aplicable al modelado generativo de todo tipo de audio. Comparamos con algoritmos de compresión de audio competidores y encontramos que nuestro método los supera significativamente. Proporcionamos abstracciones exhaustivas para cada elección de diseño, así como código de código abierto y pesos de modelos entrenados. Esperamos que nuestro trabajo pueda sentar las bases para la próxima generación de modelado de audio de alta fidelidad.
Este modelo fue aportado por Kamil Akesbi. El código original se puede encontrar aquí.
Estructura del modelo
El modelo Descript Audio Codec (DAC) está estructurado en tres etapas distintas:
- Modelo codificador: esta etapa comprime la entrada de audio, reduciendo su tamaño mientras conserva la información esencial.
- Modelo de cuantizador vectorial residual (RVQ): trabajando en conjunto con el codificador, este modelo cuantiza los códigos latentes del audio, refinando la compresión y garantizando una reconstrucción de alta calidad.
- Modelo decodificador: esta etapa final reconstruye el audio a partir de su forma comprimida, restituyéndolo a un estado que se asemeja estrechamente a la entrada original.
Ejemplo de uso
Aquí hay un ejemplo rápido de cómo codificar y decodificar un audio con 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
clase 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, valor predeterminado64) — Dimensión de las representaciones ocultas. - downsampling_ratios (
list[int], opcional, valor predeterminado[2, 4, 8, 8]) — Proporciones para el downsampling en el codificador. Se utilizan en orden inverso para el upsampling en el decodificador. - decoder_hidden_size (
int, opcional, valor predeterminado1536) — Dimensión de las representaciones ocultas. - n_codebooks (
int, opcional, valor predeterminado9) — El número de libros de códigos paralelos utilizados por el modelo. - codebook_size (
int, opcional, valor predeterminado1024) — El número de libros de códigos paralelos utilizados por el modelo. - codebook_dim (
int, opcional, valor predeterminado8) — Dimensionalidad de cada vector de incrustación del libro de códigos. - quantizer_dropout (
bool, opcional, valor predeterminado 0) — Si se aplica dropout al cuantizador. - commitment_loss_weight (
float, opcional, valor predeterminado 0.25) — Peso del término de pérdida de compromiso en la función de pérdida de VQVAE. - codebook_loss_weight (
float, opcional, valor predeterminado 1.0) — Peso del término de pérdida del codebook en la función de pérdida de VQVAE. - sampling_rate (
int, opcional, valor predeterminado16000) — La tasa de muestreo a la que deben digitalizarse los archivos de audio, expresada en hercios (Hz).
Esta es la clase de configuración para almacenar la configuración de un DacModel. Se utiliza para instanciar un modelo Dac según los argumentos especificados, definiendo la arquitectura del modelo. Instanciar una configuración con los valores predeterminados producirá una configuración similar a la de descript/dac_16khz
Los objetos de configuración heredan de PreTrainedConfig y se pueden usar para controlar las salidas del modelo. Lea la documentación de PreTrainedConfig para obtener más información.
Ejemplo:
>>> 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
clase transformers.DacFeatureExtractor
< source >( feature_size: int = 1sampling_rate: int = 16000padding_value: float = 0.0hop_length: int = 512**kwargs )
Parámetros
- feature_size (
int, opcional, valor predeterminado 1) — La dimensión de las características de las características extraídas. Use 1 para mono y 2 para estéreo. - sampling_rate (
int, opcional, valor predeterminado 16000) — La tasa de muestreo a la que la forma de onda de audio debe digitalizarse, expresada en hercios (Hz). - padding_value (
float, opcional, valor predeterminado 0.0) — El valor que se utiliza para el relleno. - hop_length (
int, opcional, valor predeterminado 512) — Longitud de solapamiento entre las ventanas sucesivas.
Construye un extractor de características Dac.
Este extractor de características hereda de SequenceFeatureExtractor, que contiene la mayoría de los métodos principales. Los usuarios deben consultar esta superclase para obtener más información sobre dichos 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]]) — La secuencia o lote de secuencias a procesar. Cada secuencia puede ser un array de numpy, una lista de valores float, una lista de arrays de numpy o una lista de listas de valores float. El array de numpy debe tener forma(num_samples,)para audio mono (feature_size = 1), o(2, num_samples)para audio estéreo (feature_size = 2). - padding (
bool,stro PaddingStrategy, opcional, por defectoTrue) — Seleccione una estrategia para rellenar las secuencias devueltas (según el lado de relleno y el índice de relleno del modelo) entre:Trueo'longest': Rellena hasta la secuencia más larga del lote (o no aplica relleno si solo se proporciona una secuencia).'max_length': Rellena hasta una longitud máxima especificada con el argumentomax_lengtho hasta la longitud de entrada máxima aceptable para el modelo si no se proporciona dicho argumento.Falseo'do_not_pad'(predeterminado): Sin relleno (es decir, puede generar un lote con secuencias de diferentes longitudes).
- truncation (
bool, opcional, valor predeterminadoFalse) — Activa la truncación para recortar las secuencias de entrada más largas quemax_lengthamax_length. - max_length (
int, opcional) — Longitud máxima de la lista devuelta y, opcionalmente, longitud de relleno (véase arriba). - return_tensors (
stro TensorType, opcional, valor predeterminado ‘pt’) — Si se establece, devolverá tensores en lugar de una lista de enteros de Python. Los valores aceptables son:'pt': Devuelve objetostorch.Tensorde PyTorch.'np': Devuelve objetos Numpynp.ndarray.
- sampling_rate (
int, opcional) — La tasa de muestreo a la que se muestreó la entrada deaudio. Se recomienda encarecidamente pasarsampling_rateen la llamada de forward para evitar errores silenciosos.
Método principal para extraer características y preparar una o varias secuencias para el modelo.
DacModel
clase transformers.DacModel
< source >( config: DacConfig )
Parámetros
- config (DacConfig) — Clase de configuración del modelo con todos los parámetros del modelo. Inicializar con un archivo de configuración no carga los pesos asociados con el modelo, solo la configuración. Consulte el método from_pretrained() para cargar los pesos del modelo.
El modelo DAC (Descript Audio Codec).
Este modelo hereda de PreTrainedModel. Consulta la documentación de la clase superior para los métodos genéricos que la biblioteca implementa para todos sus modelos (como la descarga o el guardado, el redimensionamiento de las incrustaciones de entrada, la poda de cabezas, etc.).
Este modelo también es una subclase de torch.nn.Module de PyTorch. Úsalo como un módulo de PyTorch regular y consulta la documentación de PyTorch para todo lo relacionado con el uso y el comportamiento generales.
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) — Representación continua cuantizada de la entrada. - audio_codes (
torch.Tensorde forma(batch_size, num_codebooks, time_steps), opcional) — Los índices de codebook para cada codebook, que representan la representación discreta cuantizada de la entrada. Este parámetro debe proporcionarse si se desea decodificar directamente desde los códigos de audio (sustituirá a quantized_representation). - return_dict (
bool, opcional, valor predeterminadoTrue) — Si se debe devolver unDacDecoderOutputen lugar de una tupla simple.
Devuelve
DacDecoderOutput o tuple(torch.Tensor)
Un DacDecoderOutput o una tupla de
torch.Tensor (si se pasa return_dict=False o cuando config.return_dict=False) que comprende varios
elementos según la configuración (DacConfig) y las entradas.
- audio_values (
torch.Tensorde forma(batch_size, input_length), opcional) — Valores de audio decodificados, obtenidos mediante la parte decodificadora de 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)`) — Datos de audio de entrada para codificar, - n_quantizers (
int, opcional) — Número de cuantizadores a utilizar. Si es None, se utilizan todos los cuantizadores. El valor predeterminado es None. - return_dict (
bool, opcional) — Indica si se debe devolver un ModelOutput en lugar de una tupla simple.
Devuelve
DacEncoderOutput o tuple(torch.Tensor)
Un DacEncoderOutput o una tupla de
torch.Tensor (si se pasa return_dict=False o cuando config.return_dict=False) que comprende varios
elementos según la configuración (DacConfig) y las entradas.
- loss (
torch.Tensor, opcional) — Pérdida del modelo codificador, que comprende la combinación ponderada de las pérdidas de compromiso y del libro de códigos. - quantized_representation (
torch.Tensorde forma(batch_size, dimension, time_steps), opcional) — Representación continua cuantizada de la entrada. - audio_codes (
torch.Tensorde forma(batch_size, num_codebooks, time_steps), opcional) — Índices de codebook para cada codebook (representación discreta cuantizada de la entrada). - projected_latents (
torch.Tensorde forma(batch_size, num_codebooks * dimension, time_steps), opcional) — Latentes proyectados (representación continua de la entrada antes de la cuantización).
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)) — Datos de audio para codificar. - n_quantizers (
int, opcional) — Número de cuantizadores a utilizar. Si esNone, se utilizan todos los cuantizadores. El valor predeterminado esNone. - return_dict (
bool, opcional) — Indica si se debe devolver un ModelOutput en lugar de una tupla simple.
Devuelve
DacOutput o tuple(torch.Tensor)
Un DacOutput o una tupla de
torch.Tensor (si se pasa return_dict=False o cuando config.return_dict=False) que comprende varios
elementos según la configuración (DacConfig) y las entradas.
El método forward de DacModel sobrescribe el método especial __call__.
Aunque la receta para la pasada hacia adelante debe definirse dentro de esta función, se debe llamar a la instancia de
Moduledespués en lugar de a esta, ya que la primera se encarga de ejecutar los pasos de pre y postprocesamiento, mientras que la segunda los ignora silenciosamente.
- loss (
torch.Tensor, opcional) — Pérdida del modelo codificador, que comprende la combinación ponderada de las pérdidas de compromiso y del libro de códigos. - audio_values (
torch.Tensorde forma(batch_size, input_length)) — Datos de audio reconstruidos. - quantized_representation (
torch.Tensorde forma(batch_size, dimension, time_steps)) — Representación continua cuantizada de la entrada. - audio_codes (
torch.LongTensorde forma(batch_size, num_codebooks, time_steps)) — Índices de codebook para cada codebook (representación discreta cuantizada de la entrada). - projected_latents (
torch.Tensorde forma(batch_size, num_codebooks * dimension, time_steps)) — Latentes proyectados (representación continua de la entrada antes de la cuantización).
Ejemplos:
>>> 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