Transformers documentation

UnivNet

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

and get access to the augmented documentation experience

to get started

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

UnivNet

Обзор

The UnivNet model was proposed in UnivNet: A Neural Vocoder with Multi-Resolution Spectrogram Discriminators for High-Fidelity Waveform Generation by Won Jang, Dan Lim, Jaesam Yoon, Bongwan Kin, and Juntae Kim. The UnivNet model is a generative adversarial network (GAN) trained to synthesize high fidelity speech waveforms. The UnivNet model shared in transformers is the generator, which maps a conditioning log-mel spectrogram and optional noise sequence to a speech waveform (e.g. a vocoder). Only the generator is required for inference. The discriminator used to train the generator is not implemented.

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

Большинство нейронных вокодеров используют ограниченные по полосе частот мел-спектрограммы для генерации волновых форм. Если в качестве входных данных используются спектральные характеристики полного диапазона частот, вокодер получает максимально возможное количество акустической информации. Однако в некоторых моделях, использующих мел-спектрограммы полного диапазона, возникает проблема чрезмерного сглаживания, в результате которой генерируются нечёткие спектрограммы. Для решения этой проблемы мы предлагаем UnivNet — нейронный вокодер, синтезирующий волновые формы высокого качества в реальном времени. Вдохновлённые работами в области обнаружения активности речи, мы добавили дискриминатор спектрограмм с многоуровневым разрешением, который использует несколько линейных спектрограмм по амплитуде, вычисленных с различными наборами параметров. Используя мел-спектрограммы полного диапазона в качестве входных данных, мы ожидаем генерировать сигналы высокого разрешения, добавляя дискриминатор, который в качестве входных данных использует спектрограммы с различными уровнями разрешения. В ходе оценки на наборе данных, содержащем информацию о сотнях говорящих, UnivNet показал лучшие объективные и субъективные результаты среди конкурирующих моделей как для известных, так и для неизвестных говорящих. Эти результаты, включая лучший субъективный показатель для синтеза речи из текста, демонстрируют потенциал быстрой адаптации к новым говорящим без необходимости обучения с нуля.

Советы:

  • Аргумент noise_sequence для UnivNetModel.forward() должен представлять собой стандартный гауссов шум (например, полученный с помощью torch.randn) с формой ([batch_size], noise_length, model.config.model_in_channels), где noise_length должен совпадать с размером измерения (измерение 1) аргумента input_features. Если аргумент не передан, шум будет сгенерирован случайно; для воспроизводимости прямого прохода можно передать torch.Generator в аргумент generator. (Обратите внимание, что UnivNetFeatureExtractor по умолчанию возвращает сгенерированный шум, поэтому вручную генерировать noise_sequence не нужно.)
  • Паддинг, добавленный UnivNetFeatureExtractor, можно удалить из вывода UnivNetModel с помощью метода UnivNetFeatureExtractor.batch_decode(), как показано в примере использования ниже.
  • Добавление тишины в конец каждой звуковой волны может уменьшить артефакты в конце сгенерированного аудиосэмпла. Это можно сделать, передав pad_end = True в UnivNetFeatureExtractor.call(). Подробнее см. в этом issue.

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

import torch
from datasets import Audio, load_dataset
from scipy.io.wavfile import write

from transformers import UnivNetFeatureExtractor, UnivNetModel


model_id_or_path = "dg845/univnet-dev"
model = UnivNetModel.from_pretrained(model_id_or_path, device_map="auto")
feature_extractor = UnivNetFeatureExtractor.from_pretrained(model_id_or_path)

ds = load_dataset("hf-internal-testing/librispeech_asr_dummy", "clean", split="validation")
# Resample the audio to the model and feature extractor's sampling rate.
ds = ds.cast_column("audio", Audio(sampling_rate=feature_extractor.sampling_rate))
# Pad the end of the converted waveforms to reduce artifacts at the end of the output audio samples.
inputs = feature_extractor(
    ds[0]["audio"]["array"], sampling_rate=ds[0]["audio"]["sampling_rate"], pad_end=True, return_tensors="pt"
)

with torch.no_grad():
    audio = model(**inputs)

# Remove the extra padding at the end of the output.
audio = feature_extractor.batch_decode(**audio)[0]
# Convert to wav file
write("sample_audio.wav", feature_extractor.sampling_rate, audio)

Эта модель была предоставлена dg845. Насколько мне известно, официального выпуска кода нет, но неофициальная реализация доступна в maum-ai/univnet с предобученными контрольными точками здесь.

UnivNetConfig

класс transformers.UnivNetConfig

< >

( 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 = Nonemodel_in_channels: int = 64model_hidden_channels: int = 32num_mel_bins: int = 100resblock_kernel_sizes: list[int] | tuple[int, ...] = (3, 3, 3)resblock_stride_sizes: list[int] | tuple[int, ...] = (8, 8, 4)resblock_dilation_sizes: list | tuple = ((1, 3, 9, 27), (1, 3, 9, 27), (1, 3, 9, 27))kernel_predictor_num_blocks: int = 3kernel_predictor_hidden_channels: int = 64kernel_predictor_conv_size: int = 3kernel_predictor_dropout: float | int = 0.0initializer_range: float = 0.01leaky_relu_slope: float = 0.2 )

Параметры

  • model_in_channels (int, необязательный, по умолчанию 64) — Количество входных каналов для остаточной сети UnivNet. Это значение должно соответствовать noise_sequence.shape[1] и значению, используемому в классе UnivNetFeatureExtractor.
  • model_hidden_channels (int, необязательный, по умолчанию 32) — Количество скрытых каналов в каждом остаточном блоке остаточной сети UnivNet.
  • num_mel_bins (int, необязательный, по умолчанию 100) — Количество частотных бинов в лог-мел-спектрограмме, используемой для условного кодирования. Это значение должно соответствовать значению, использованному в классе UnivNetFeatureExtractor.
  • resblock_kernel_sizes (tuple[int] или list[int], необязательный, по умолчанию [3, 3, 3]) — Кортеж целых чисел, определяющий размеры ядра для одномерных свёрточных слоёв в остаточной сети UnivNet. Длина resblock_kernel_sizes определяет количество блоков resnet и должна совпадать с длиной resblock_stride_sizes и resblock_dilation_sizes.
  • resblock_stride_sizes (tuple[int] или list[int], необязательный, по умолчанию [8, 8, 4]) — Кортеж целых чисел, определяющий размеры шагов (stride) для одномерных свёрточных слоёв в остаточной сети UnivNet. Длина resblock_stride_sizes должна совпадать с длиной resblock_kernel_sizes и resblock_dilation_sizes.
  • resblock_dilation_sizes (tuple[tuple[int]] или list[list[int]], необязательный, по умолчанию [[1, 3, 9, 27], [1, 3, 9, 27], [1, 3, 9, 27]]) — Вложенный кортеж целых чисел, определяющий коэффициенты дилатации для дилатационных одномерных свёрточных слоёв в остаточной сети UnivNet. Длина resblock_dilation_sizes должна совпадать с длиной resblock_kernel_sizes и resblock_stride_sizes. Длина каждого вложенного списка в resblock_dilation_sizes определяет количество свёрточных слоёв в каждом блоке resnet.
  • kernel_predictor_num_blocks (int, необязательный, по умолчанию 3) — Количество остаточных блоков в сети предиктора ядра, которая вычисляет ядро и смещение для каждого слоя свёртки с переменными по позициям в остаточной сети UnivNet.
  • kernel_predictor_hidden_channels (int, необязательный, по умолчанию 64) — Количество скрытых каналов в каждом остаточном блоке сети предиктора ядра.
  • kernel_predictor_conv_size (int, необязательный, по умолчанию 3) — Размер ядра каждого слоя одномерной свёртки в сети предиктора ядер.
  • kernel_predictor_dropout (float, необязательный, по умолчанию 0.0) — Вероятность dropout для каждого остаточного блока в сети предсказателя ядра.
  • initializer_range (float, необязательный, по умолчанию 0.01) — Стандартное отклонение truncated_normal_initializer, используемое для инициализации всех матриц весов.
  • leaky_relu_slope (float, необязательный, по умолчанию 0.2) — Угол отрицательного наклона, используемого активацией leaky ReLU.

Это класс конфигурации для хранения настроек модели UnivNetModel. Он используется для создания модели Univnet в соответствии с указанными аргументами, определяя архитектуру модели. Создание конфигурации с параметрами по умолчанию даст конфигурацию, аналогичную конфигурации dg845/univnet-dev

Объекты конфигурации наследуются от PreTrainedConfig и могут использоваться для управления выводами модели. Подробнее читайте в документации PreTrainedConfig.

Пример:

>>> from transformers import UnivNetModel, UnivNetConfig

>>> # Initializing a Tortoise TTS style configuration
>>> configuration = UnivNetConfig()

>>> # Initializing a model (with random weights) from the Tortoise TTS style configuration
>>> model = UnivNetModel(configuration)

>>> # Accessing the model configuration
>>> configuration = model.config

UnivNetFeatureExtractor

класс transformers.UnivNetFeatureExtractor

< >

( feature_size: int = 1sampling_rate: int = 24000padding_value: float = 0.0do_normalize: bool = Falsenum_mel_bins: int = 100hop_length: int = 256win_length: int = 1024win_function: str = 'hann_window'filter_length: int | None = 1024max_length_s: int = 10fmin: float = 0.0fmax: float | None = Nonemel_floor: float = 1e-09center: bool = Falsecompression_factor: float = 1.0compression_clip_val: float = 1e-05normalize_min: float = -11.512925148010254normalize_max: float = 2.3143386840820312model_in_channels: int = 64pad_end_length: int = 10return_attention_mask = True**kwargs )

Параметры

  • feature_size (int, необязательный, по умолчанию 1) — Размерность признаков извлечённых признаков.
  • sampling_rate (int, необязательный, по умолчанию 24000) — Частота дискретизации, с которой аудиофайлы должны быть оцифрованы, выраженная в герцах (Гц).
  • padding_value (float, необязательный, по умолчанию 0.0) — Значение, используемое для дополнения при применении стратегии дополнения, заданной аргументом padding в UnivNetFeatureExtractor.call(). Должно соответствовать тишине в аудиосигнале. Аргумент pad_end в __call__ также будет использовать это значение дополнения.
  • do_normalize (bool, необязательный, по умолчанию False) — Указывает, следует ли выполнять нормализацию Tacotron 2 для входных данных. Нормализация может значительно улучшить производительность некоторых моделей.
  • num_mel_bins (int, необязательный, по умолчанию 100) — Количество мел-частотных бинов в извлечённых спектрограммных признаках. Это значение должно совпадать с UnivNetModel.config.num_mel_bins.
  • hop_length (int, необязательный, по умолчанию 256) — Прямое количество сэмплов между скользящими окнами. Во многих статьях также называется «сдвиг». Обратите внимание, что это отличается от других экстракторов аудиопризнаков, таких как SpeechT5FeatureExtractor, которые принимают hop_length в миллисекундах.
  • win_length (int, необязательный, по умолчанию 1024) — Прямое количество сэмплов для каждого скользящего окна. Обратите внимание, что это отличается от других аудио-фич-экстракторов, таких как SpeechT5FeatureExtractor, которые принимают win_length в миллисекундах.
  • win_function (str, optional, по умолчанию "hann_window") — Название оконной функции, используемой для оконирования; должна быть доступна через torch.{win_function}
  • filter_length (int, необязательный, по умолчанию 1024) — Количество компонентов БПФ, которые следует использовать. Если None, значение определяется с помощью transformers.audio_utils.optimal_fft_length.
  • max_length_s (int, необязательный, по умолчанию 10) — Максимальная длина входных данных модели в секундах. Используется для дополнения аудио.
  • fmin (float, необязательный, по умолчанию 0.0) — Минимальная частота в меле, Гц.
  • fmax (float, необязательный) — Максимальная мел-частота в Гц. Если не задано, по умолчанию используется sampling_rate / 2.
  • mel_floor (float, необязательный, по умолчанию 1e-09) — Минимальное значение банков мел-частот. Обратите внимание, что способ использования mel_floor в UnivNetFeatureExtractor отличается от того, что применяется в transformers.audio_utils.spectrogram().
  • center (bool, необязательный, по умолчанию False) — Определяет, следует ли дополнять звуковой сигнал нулями так, чтобы кадр t был центрирован относительно времени t * hop_length. Если False, кадр t начинается в момент времени t * hop_length.
  • compression_factor (float, необязательный, по умолчанию 1.0) — Множитель сжатия для динамического сжатия динамического диапазона при спектральной нормализации.
  • compression_clip_val (float, необязательный, по умолчанию 1e-05) — Значение обрезки, применяемое к волновой форме перед выполнением динамической компрессии диапазона при спектральной нормализации.
  • normalize_min (float, необязательный, по умолчанию -11.512925148010254) — Минимальное значение, используемое для линейной нормализации в стиле Tacotron 2. По умолчанию используется исходное значение из реализации Tacotron 2.
  • normalize_max (float, необязательный, по умолчанию 2.3143386840820312) — Максимальное значение, используемое для линейной нормализации в стиле Tacotron 2. По умолчанию используется исходное значение из реализации Tacotron 2.
  • model_in_channels (int, необязательный, по умолчанию 64) — Количество входных каналов для модели UnivNetModel. Это значение должно совпадать с UnivNetModel.config.model_in_channels.
  • pad_end_length (int, необязательный, по умолчанию 10) — Если выполняется выравнивание конца каждой звуковой волны, количество сэмплов, эквивалентное числу кадров спектрограммы, которое будет добавлено. Количество добавляемых сэмплов будет равно pad_end_length * hop_length.
  • return_attention_mask (bool, необязательный, по умолчанию True) — Указывает, должен ли call() возвращать attention_mask.

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

Этот класс извлекает лог-мел-фильтр-банковые признаки из сырой речи с использованием короткого преобразования Фурье (STFT). Реализация STFT следует подходу, описанному в TacoTron 2 и Hifi-GAN.

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

__call__

< >

( raw_speech: numpy.ndarray | list[float] | list[numpy.ndarray] | list[list[float]]sampling_rate: int | None = Nonepadding: bool | str | transformers.utils.generic.PaddingStrategy = Truemax_length: int | None = Nonetruncation: bool = Truepad_to_multiple_of: int | None = Nonereturn_noise: bool = Truegenerator: numpy.random._generator.Generator | None = Nonepad_end: bool = Falsepad_length: int | None = Nonedo_normalize: str | None = Nonereturn_attention_mask: bool | None = Nonereturn_tensors: str | transformers.utils.generic.TensorType | None = None )

Параметры

  • raw_speech (np.ndarray, list[float], list[np.ndarray], list[list[float]]) — Последовательность или батч последовательностей, для которых требуется выравнивание. Каждая последовательность может быть массивом numpy, списком значений float, списком массивов numpy или списком списков значений float. Аудио должно быть моноканальным, а не стерео, то есть одно значение float на каждый момент времени.
  • sampling_rate (int, необязательный) — Частота дискретизации, с которой вход raw_speech был оцифрован. Настоятельно рекомендуется передавать sampling_rate при вызове forward, чтобы избежать скрытых ошибок и обеспечить работу конвейера автоматического распознавания речи.
  • padding (bool, str или PaddingStrategy, , необязательный, по умолчанию True) — Выберите стратегию дополнения входных raw_speech волновых форм (в соответствии со стороной дополнения и индексом дополнения модели) из следующих:
    • True или 'longest': дополнить до самой длинной последовательности в батче (или не дополнять, если предоставлена только одна последовательность).
    • 'max_length': Дополнить до максимальной длины, указанной аргументом max_length, или до максимально допустимой длины входных данных для модели, если этот аргумент не указан.
    • False или 'do_not_pad' (по умолчанию): без дополнения нулями (т. е. может выводить батч с последовательностями разной длины).

    Если pad_end = True, такая заполняющая последовательность будет добавлена до применения стратегии padding.

  • max_length (int, необязательный) — Максимальная длина возвращаемого списка и, при необходимости, длина отступов (см. выше).
  • truncation (bool, необязательный, по умолчанию True) — Включает усечение, чтобы сократить входные последовательности длиннее max_length до max_length.
  • pad_to_multiple_of (int, необязательный) — Если задано, последовательность будет дополнена до кратного указанного значения.

    Это особенно полезно для использования Tensor Cores на аппаратных средствах NVIDIA с вычислительной способностью >= 7.5 (Volta) или на TPU, где производительность повышается при длине последовательности, кратной 128.

  • return_noise (bool, необязательный, по умолчанию True) — Следует ли генерировать и возвращать шумовой сигнал для использования в UnivNetModel.forward().
  • generator (numpy.random.Generator, необязательный, по умолчанию None) — Необязательный генератор случайных чисел numpy.random.Generator, используемый при генерации шума.
  • pad_end (bool, необязательный, по умолчанию False) — Определяет, нужно ли дополнять конец каждой звуковой дорожки тишиной. Это может помочь уменьшить артефакты в конце сгенерированного аудиосэмпла; подробности см. по адресу https://github.com/seungwonpark/melgan/issues/8. Дополнение тишиной выполняется до применения стратегии дополнения, указанной в padding.
  • pad_length (int, необязательный, по умолчанию None) — Если выполняется выравнивание конца каждой аудиоволны, длина выравнивания в кадрах спектрограммы. Если не задано, будет использоваться значение self.config.pad_end_length.
  • do_normalize (bool, необязательный) — Указывает, следует ли выполнять нормализацию Tacotron 2 для входных данных. Нормализация может значительно улучшить производительность некоторых моделей. Если значение не задано, по умолчанию используется self.config.do_normalize.
  • return_attention_mask (bool, необязательный) — Следует ли возвращать attention mask. Если значение не указано, будет возвращена attention mask в соответствии со значением по умолчанию для конкретного feature_extractor.

    Что такое маски внимания?

  • return_tensors (str или TensorType, необязательный) — Если задано, возвращает тензоры вместо списка целых чисел Python. Допустимые значения:
    • 'pt': возвращает объекты torch.np.array PyTorch.
    • 'np': возвращает объекты Numpy np.ndarray.

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

UnivNetModel

класс transformers.UnivNetModel

< >

( config: UnivNetConfig )

Параметры

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

Модель Univnet без дополнительных слоёв, выводящая необработанные скрытые состояния.

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

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

forward

< >

( input_features: Tensornoise_sequence: typing.Optional[torch.Tensor] = Nonepadding_mask: typing.Optional[torch.Tensor] = Nonegenerator: typing.Optional[torch.Generator] = Nonereturn_dict: bool | None = None**kwargs ) → UnivNetModelOutput or tuple(torch.Tensor)

Параметры

  • input_features (torch.Tensor формы (batch_size, sequence_length, feature_dim)) — Тензоры, соответствующие входным аудиособытиям. Аудиособытия можно получить с помощью UnivNetFeatureExtractor. Подробности см. в UnivNetFeatureExtractor.call() (processor_class использует UnivNetFeatureExtractor для обработки аудио).
  • noise_sequence (torch.Tensor, optional) — Тензор, содержащий последовательность шума стандартного гауссова распределения. Может быть батчеван и иметь форму (batch_size, sequence_length, config.model_in_channels), либо не быть батчеванным и иметь форму (sequence_length, config.model_in_channels)`. Если не указан, будет сгенерирован случайно.
  • padding_mask (torch.BoolTensor, необязательный) — Маска, указывающая, какие части каждой последовательности заполнены. Значения маски выбираются из [0, 1]:
    • 1 для токенов, которые не замаскированы
    • 0 для токенов, которые замаскированы

    Маска может быть батчевой с формой (batch_size, sequence_length) или небатчевой с формой (sequence_length,).

  • generator (torch.Generator, необязательный) — Генератор torch для обеспечения детерминированности генерации. return_dict: Следует ли возвращать подкласс ModelOutput вместо обычного кортежа.
  • return_dict (bool, необязательный) — Указывает, следует ли возвращать ModelOutput вместо обычного кортежа.

Возвращает

UnivNetModelOutput или tuple(torch.Tensor)

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

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

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

  • волновые формы (torch.Tensor формы (batch_size, sequence_length)) — Пакетные одномерные (моно-канальные) выходные аудиоволновые формы.
  • waveform_lengths (torch.Tensor формы (batch_size,)) — Длина в сэмплах каждой не дополненной формы волны в waveforms для батча.

Пример:

>>> from transformers import UnivNetFeatureExtractor, UnivNetModel
>>> from datasets import load_dataset, Audio

>>> model = UnivNetModel.from_pretrained("dg845/univnet-dev")
>>> feature_extractor = UnivNetFeatureExtractor.from_pretrained("dg845/univnet-dev")

>>> ds = load_dataset("hf-internal-testing/librispeech_asr_dummy", "clean", split="validation")
>>> # Resample the audio to the feature extractor's sampling rate.
>>> ds = ds.cast_column("audio", Audio(sampling_rate=feature_extractor.sampling_rate))
>>> inputs = feature_extractor(
...     ds[0]["audio"]["array"], sampling_rate=ds[0]["audio"]["sampling_rate"], return_tensors="pt"
... )
>>> audio = model(**inputs).waveforms
>>> list(audio.shape)
[1, 140288]
Update on GitHub