Transformers documentation

DAC

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v5.22.1).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

Эта модель была опубликована в HF papers 11.06.2023 и добавлена в Hugging Face Transformers 19.08.2024.

DAC

Обзор

Модель DAC была предложена в статье Descript Audio Codec: High-Fidelity Audio Compression with Improved RVQGAN авторами Rithesh Kumar, Prem Seetharaman, Alejandro Luebs, Ishaan Kumar, Kundan Kumar.

Модель Descript Audio Codec (DAC) — это мощный инструмент для сжатия аудиоданных, обеспечивающий высокую эффективность при хранении и передаче. Сжимая аудио с частотой 44,1 КГц в токены при пропускной способности всего 8 кбит/с, модель DAC позволяет обрабатывать аудио высокого качества, значительно уменьшая объём данных. Это особенно полезно в сценариях с ограниченной пропускной способностью или дефицитом места для хранения, например, в стриминговых приложениях, дистанционных конференциях и при архивировании больших аудиодатасетов.

Аннотация из статьи следующая:

Языковые модели успешно применяются для моделирования естественных сигналов, таких как изображения, речь и музыка. Ключевым компонентом таких моделей является высококачественная нейросетевая модель сжатия, способная сжимать высокоразмерные естественные сигналы в дискретные токены меньшей размерности. В этой работе мы предлагаем универсальный алгоритм нейросетевого сжатия аудио с высокой точностью, обеспечивающий сжатие аудио с частотой дискретизации 44,1 КГц примерно в 90 раз до токенов при пропускной способности всего 8 кбит/с. Мы достигаем этого, сочетая достижения в области генерации аудио высокого качества с улучшенными методами векторного квантования из области обработки изображений, а также с доработанными потерями на основе антагонистической и реконструктивной оптимизации. Мы сжимаем все типы данных (речь, окружающие звуки, музыка и т. д.) с помощью одной универсальной модели, что делает её широко применимой для генеративного моделирования любого аудио. Мы сравниваем наш подход с конкурирующими алгоритмами сжатия аудио и обнаруживаем, что он значительно превосходит их. Мы приводим подробные абляции для каждого проектного решения, а также предоставляем исходный код и веса обученной модели в открытом доступе. Мы надеемся, что наша работа заложит основу для следующего поколения моделей аудио высокого качества.

Эта модель была предоставлена Kamil Akesbi. Исходный код можно найти здесь.

Структура модели

Модель Descript Audio Codec (DAC) структурирована в три отдельных этапа:

  1. Модель-кодировщик: на этом этапе входной аудиосигнал сжимается, что уменьшает его размер при сохранении ключевой информации.
  2. Модель Residual Vector Quantizer (RVQ): работая в связке с энкодером, эта модель квантует латентные коды аудио, уточняя сжатие и обеспечивая высококачественную реконструкцию.
  3. Модель декодера: на этом финальном этапе аудио восстанавливается из сжатой формы, возвращаясь в состояние, максимально близкое к исходному входу.

Пример использования

Вот краткий пример того, как закодировать и декодировать аудио с помощью этой модели:

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_values

DacConfig

класс transformers.DacConfig

< >

( 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 )

Параметры

  • encoder_hidden_size (int, необязательный, по умолчанию 64) — Размерность скрытых представлений.
  • downsampling_ratios (list[int], необязательный, по умолчанию [2, 4, 8, 8]) — Коэффициенты уменьшения разрешения в энкодере. В декодере они используются в обратном порядке для увеличения разрешения.
  • decoder_hidden_size (int, необязательный, по умолчанию 1536) — Размерность скрытых представлений.
  • n_codebooks (int, необязательный, по умолчанию 9) — Количество параллельных кодовых книг, используемых моделью.
  • codebook_size (int, необязательный, по умолчанию 1024) — Количество параллельных кодовых книг, используемых моделью.
  • codebook_dim (int, необязательный, по умолчанию 8) — Размерность каждого вектора встраивания кодовой книги.
  • quantizer_dropout (bool, необязательный, по умолчанию 0) — Указывает, следует ли применять dropout к квантизатору.
  • commitment_loss_weight (float, необязательный, по умолчанию 0.25) — Вес слагаемого commitment loss в функции потерь VQVAE.
  • codebook_loss_weight (float, необязательный, по умолчанию 1.0) — Вес слагаемого codebook loss в функции потерь VQVAE.
  • sampling_rate (int, необязательный, по умолчанию 16000) — Частота дискретизации, с которой аудиофайлы должны быть оцифрованы, выраженная в герцах (Гц).

Это класс конфигурации для хранения конфигурации модели 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

класс transformers.DacFeatureExtractor

< >

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

Параметры

  • feature_size (int, необязательный, по умолчанию 1) — Размерность признаков извлечённых признаков. Используйте 1 для моно, 2 для стерео.
  • sampling_rate (int, необязательный, по умолчанию 16000) — Частота дискретизации, с которой аудиосигнал должен быть оцифрован, выраженная в герцах (Гц).
  • padding_value (float, необязательный, по умолчанию 0.0) — Значение, используемое для дополнения (padding).
  • hop_length (int, необязательный, по умолчанию 512) — Длина перекрытия между последовательными окнами.

Создаёт экстрактор признаков Dac.

Этот экстрактор признаков наследуется от SequenceFeatureExtractor, который содержит большинство основных методов. За дополнительной информацией о них следует обращаться к этому суперклассу.

__call__

< >

( 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 )

Параметры

  • raw_audio (np.ndarray, list[float], list[np.ndarray], list[list[float]]) — Последовательность или батч последовательностей для обработки. Каждая последовательность может быть массивом numpy, списком значений float, списком массивов numpy или списком списков значений float. Массив numpy должен иметь форму (num_samples,) для моноаудио (feature_size = 1) или (2, num_samples) для стереоаудио (feature_size = 2).
  • 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. Допустимые значения:
    • 'pt': возвращает объекты torch.Tensor PyTorch.
    • 'np': возвращает объекты Numpy np.ndarray.
  • sampling_rate (int, необязательный) — Частота дискретизации, с которой была оцифрована входная audio. Настоятельно рекомендуется передавать sampling_rate при вызове forward, чтобы избежать скрытых ошибок.

Основной метод для создания признаков и подготовки одной или нескольких последовательностей для модели.

DacModel

класс transformers.DacModel

< >

( config: DacConfig )

Параметры

  • config (DacConfig) — Класс конфигурации модели, содержащий все параметры модели. Инициализация с помощью файла конфигурации не загружает веса, связанные с моделью, а только конфигурацию. Используйте метод from_pretrained() для загрузки весов модели.

Модель DAC (Descript Audio Codec).

Эта модель наследуется от PreTrainedModel. См. документацию родительского класса для общих методов, которые библиотека реализует для всех своих моделей (например, загрузка или сохранение, изменение размера входных эмбеддингов, обрезка голов и т. д.)

Эта модель также является подклассом torch.nn.Module в PyTorch. Используйте её как обычный модуль PyTorch и обращайтесь к документации PyTorch по всем вопросам, связанным с общим использованием и поведением.

decode

< >

( quantized_representation: typing.Optional[torch.Tensor] = Noneaudio_codes: typing.Optional[torch.Tensor] = Nonereturn_dict: bool | None = None ) → DacDecoderOutput or tuple(torch.Tensor)

Параметры

  • quantized_representation (torch.Tensor формы (batch_size, dimension, time_steps), необязательный) — Квантованное непрерывное представление входных данных.
  • audio_codes (torch.Tensor формы (batch_size, num_codebooks, time_steps), необязательный) — Индексы кодовых книг для каждой кодовой книги, представляющие квантованное дискретное представление входных данных. Этот параметр следует указать, если вы хотите декодировать напрямую из аудиокодов (он перезапишет quantized_representation).
  • return_dict (bool, необязательный, по умолчанию True) — Определяет, возвращать ли DacDecoderOutput вместо обычного кортежа.

Возвращает

DacDecoderOutput или tuple(torch.Tensor)

DacDecoderOutput или кортеж из torch.Tensor (если передано return_dict=False или если config.return_dict=False), содержащий различные элементы в зависимости от конфигурации (DacConfig) и входных данных.

  • audio_values (torch.Tensor формы (batch_size, input_length), необязательный) — Декодированные значения аудио, полученные с помощью декодерной части Dac.

encode

< >

( input_values: Tensorn_quantizers: int | None = Nonereturn_dict: bool | None = None ) → DacEncoderOutput or tuple(torch.Tensor)

Параметры

  • input_values (torch.Tensor of shape (batch_size, 1, time_steps)`) — Входные аудиоданные для кодирования,
  • n_quantizers (int, необязательный) — Количество квантизаторов для использования. Если значение равно None, используются все квантизаторы. По умолчанию — None.
  • return_dict (bool, необязательный) — Указывает, следует ли возвращать ModelOutput вместо обычного кортежа.

Возвращает

DacEncoderOutput или tuple(torch.Tensor)

DacEncoderOutput или кортеж из torch.Tensor (если передано return_dict=False или если config.return_dict=False), содержащий различные элементы в зависимости от конфигурации (DacConfig) и входных данных.

  • loss (torch.Tensor, optional) — Потери от модели-кодировщика, представляющие собой взвешенную комбинацию потерь commitment и codebook.
  • quantized_representation (torch.Tensor формы (batch_size, dimension, time_steps), необязательный) — Квантованное непрерывное представление входных данных.
  • audio_codes (torch.Tensor формы (batch_size, num_codebooks, time_steps), необязательный) — Индексы кодовых книг для каждой кодовой книги (квантованное дискретное представление входных данных).
  • projected_latents (torch.Tensor формы (batch_size, num_codebooks * dimension, time_steps), необязательный) — Спроецированные латенты (непрерывное представление входных данных до квантования).

forward

< >

( input_values: Tensorn_quantizers: int | None = Nonereturn_dict: bool | None = None ) → DacOutput or tuple(torch.Tensor)

Параметры

  • input_values (torch.Tensor формы (batch_size, 1, time_steps)) — Аудиоданные для кодирования.
  • n_quantizers (int, необязательный) — Количество квантизаторов для использования. Если None, используются все квантизаторы. По умолчанию None.
  • return_dict (bool, необязательный) — Указывает, следует ли возвращать ModelOutput вместо обычного кортежа.

Возвращает

DacOutput или tuple(torch.Tensor)

DacOutput или кортеж из torch.Tensor (если передано return_dict=False или если config.return_dict=False), содержащий различные элементы в зависимости от конфигурации (DacConfig) и входных данных.

Метод forward модели DacModel переопределяет специальный метод __call__.

Хотя рецепт для прямого прохода должен быть определён внутри этой функции, после этого следует вызывать экземпляр Module, а не эту функцию, поскольку первый вариант обеспечивает выполнение шагов предварительной и последующей обработки, тогда как второй молча их игнорирует.

  • loss (torch.Tensor, optional) — Потери от модели-кодировщика, представляющие собой взвешенную комбинацию потерь commitment и codebook.
  • 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)) — Спроецированные латенты (непрерывное представление входных данных до квантования).

Примеры:

>>> 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
Update on GitHub