Transformers documentation
UnivNet
Эта модель была опубликована в 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
< 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 = 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.configUnivNetFeatureExtractor
класс transformers.UnivNetFeatureExtractor
< source >( 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__
< source >( 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.arrayPyTorch.'np': возвращает объекты Numpynp.ndarray.
Основной метод для создания признаков и подготовки одной или нескольких последовательностей для модели.
UnivNetModel
класс transformers.UnivNetModel
< source >( config: UnivNetConfig )
Параметры
- config (UnivNetConfig) — Класс конфигурации модели, содержащий все параметры модели. Инициализация по файлу конфигурации не загружает веса, связанные с моделью, а только конфигурацию. Чтобы загрузить веса модели, используйте метод from_pretrained().
Модель Univnet без дополнительных слоёв, выводящая необработанные скрытые состояния.
Эта модель наследуется от PreTrainedModel. См. документацию родительского класса для общих методов, которые библиотека реализует для всех своих моделей (например, загрузка или сохранение, изменение размера входных эмбеддингов, обрезка голов и т. д.)
Эта модель также является подклассом torch.nn.Module в PyTorch. Используйте её как обычный модуль PyTorch и обращайтесь к документации PyTorch по всем вопросам, связанным с общим использованием и поведением.
forward
< source >( 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]