Transformers documentation
DAC
Эта модель была опубликована в 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) структурирована в три отдельных этапа:
- Модель-кодировщик: на этом этапе входной аудиосигнал сжимается, что уменьшает его размер при сохранении ключевой информации.
- Модель Residual Vector Quantizer (RVQ): работая в связке с энкодером, эта модель квантует латентные коды аудио, уточняя сжатие и обеспечивая высококачественную реконструкцию.
- Модель декодера: на этом финальном этапе аудио восстанавливается из сжатой формы, возвращаясь в состояние, максимально близкое к исходному входу.
Пример использования
Вот краткий пример того, как закодировать и декодировать аудио с помощью этой модели:
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
класс 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 )
Параметры
- 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.configDacFeatureExtractor
класс transformers.DacFeatureExtractor
< source >( 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__
< 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 )
Параметры
- 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.TensorPyTorch.'np': возвращает объекты Numpynp.ndarray.
- sampling_rate (
int, необязательный) — Частота дискретизации, с которой была оцифрована входнаяaudio. Настоятельно рекомендуется передаватьsampling_rateпри вызове forward, чтобы избежать скрытых ошибок.
Основной метод для создания признаков и подготовки одной или нескольких последовательностей для модели.
DacModel
класс transformers.DacModel
< source >( config: DacConfig )
Параметры
- config (DacConfig) — Класс конфигурации модели, содержащий все параметры модели. Инициализация с помощью файла конфигурации не загружает веса, связанные с моделью, а только конфигурацию. Используйте метод from_pretrained() для загрузки весов модели.
Модель DAC (Descript Audio Codec).
Эта модель наследуется от PreTrainedModel. См. документацию родительского класса для общих методов, которые библиотека реализует для всех своих моделей (например, загрузка или сохранение, изменение размера входных эмбеддингов, обрезка голов и т. д.)
Эта модель также является подклассом torch.nn.Module в PyTorch. Используйте её как обычный модуль PyTorch и обращайтесь к документации PyTorch по всем вопросам, связанным с общим использованием и поведением.
decode
< source >( 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
< source >( 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
< source >( 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