Transformers 文档
UnivNet
并获得增强的文档体验
开始使用
UnivNet
概述
UnivNet 模型由 Won Jang、Dan Lim、Jaesam Yoon、Bongwan Kin 和 Juntae Kim 在 UnivNet: A Neural Vocoder with Multi-Resolution Spectrogram Discriminators for High-Fidelity Waveform Generation 中提出。UnivNet 模型是一种生成对抗网络 (GAN),用于合成高保真语音波形。transformers
中共享的 UnivNet 模型是生成器,它将条件对数梅尔谱图和可选噪声序列映射到语音波形(例如,声码器)。推理时只需要生成器。用于训练生成器的判别器未实现。
论文摘要如下:
大多数神经声码器采用带限梅尔谱图生成波形。如果将全带频谱特征用作输入,则可以为声码器提供尽可能多的声学信息。然而,在某些采用全带梅尔谱图的模型中,会出现过平滑问题,即生成非清晰的谱图。为了解决这个问题,我们提出了 UnivNet,一种实时合成高保真波形的神经声码器。受语音活动检测领域工作的启发,我们添加了一个多分辨率谱图判别器,它采用使用各种参数集计算的多个线性谱图幅度。使用全带梅尔谱图作为输入,我们期望通过添加一个采用多分辨率谱图作为输入的判别器来生成高分辨率信号。在包含数百个说话者信息的训练集上的评估中,UnivNet 在可见和不可见说话者方面都取得了最佳的客观和主观结果,优于竞争模型。这些结果,包括文本到语音的最佳主观评分,表明它可以快速适应新说话者,而无需从头开始训练。
技巧
- UnivNetModel.forward() 的
noise_sequence
参数应为标准高斯噪声(例如来自torch.randn
),形状为([batch_size], noise_length, model.config.model_in_channels)
,其中noise_length
应与input_features
参数的长度维度(维度 1)匹配。如果未提供,它将随机生成;可以将torch.Generator
提供给generator
参数,以便可以重现前向传播。(请注意,UnivNetFeatureExtractor 默认返回生成的噪声,因此无需手动生成noise_sequence
。) - 可以通过
UnivNetFeatureExtractor.batch_decode()
方法从 UnivNetModel 输出中移除 UnivNetFeatureExtractor 添加的填充,如下面的用法示例所示。 - 在每个波形末尾添加静音填充可以减少生成音频样本末尾的伪影。这可以通过向 UnivNetFeatureExtractor.call() 提供
pad_end = True
来完成。有关更多详细信息,请参阅 此问题。
用法示例
import torch
from scipy.io.wavfile import write
from datasets import Audio, load_dataset
from transformers import UnivNetFeatureExtractor, UnivNetModel
model_id_or_path = "dg845/univnet-dev"
model = UnivNetModel.from_pretrained(model_id_or_path)
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
class transformers.UnivNetConfig
< 源 >( model_in_channels = 64 model_hidden_channels = 32 num_mel_bins = 100 resblock_kernel_sizes = [3, 3, 3] resblock_stride_sizes = [8, 8, 4] resblock_dilation_sizes = [[1, 3, 9, 27], [1, 3, 9, 27], [1, 3, 9, 27]] kernel_predictor_num_blocks = 3 kernel_predictor_hidden_channels = 64 kernel_predictor_conv_size = 3 kernel_predictor_dropout = 0.0 initializer_range = 0.01 leaky_relu_slope = 0.2 **kwargs )
参数
- model_in_channels (
int
, 可选, 默认为 64) — UnivNet 残差网络的输入通道数。这应与noise_sequence.shape[1]
和 UnivNetFeatureExtractor 类中使用的值对应。 - model_hidden_channels (
int
, 可选, 默认为 32) — UnivNet 残差网络中每个残差块的隐藏通道数。 - num_mel_bins (
int
, 可选, 默认为 100) — 条件对数梅尔谱图中的频率 bin 数。这应与 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]
) — 定义 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 声码器模型,定义模型架构。使用默认值实例化配置将生成与 UnivNet dg845/univnet-dev 架构类似的配置,该架构对应于 maum-ai/univnet 中的“c32”架构。
配置对象继承自 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
class transformers.UnivNetFeatureExtractor
< 源 >( feature_size: int = 1 sampling_rate: int = 24000 padding_value: float = 0.0 do_normalize: bool = False num_mel_bins: int = 100 hop_length: int = 256 win_length: int = 1024 win_function: str = 'hann_window' filter_length: typing.Optional[int] = 1024 max_length_s: int = 10 fmin: float = 0.0 fmax: typing.Optional[float] = None mel_floor: float = 1e-09 center: bool = False compression_factor = 1.0 compression_clip_val = 1e-05 normalize_min = -11.512925148010254 normalize_max = 2.3143386840820312 model_in_channels: int = 64 pad_end_length: int = 10 return_attention_mask = True **kwargs )
参数
- feature_size (
int
, 可选, 默认为 1) — 提取特征的特征维度。 - sampling_rate (
int
, 可选, 默认为 24000) — 音频文件应以赫兹 (Hz) 表示的采样率进行数字化。 - padding_value (
float
, 可选, 默认为 0.0) — 应用由 UnivNetFeatureExtractor.call() 的padding
参数定义的填充策略时要填充的值。应与音频静音对应。__call__
的pad_end
参数也将使用此填充值。 - do_normalize (
bool
, 可选, 默认为False
) — 是否对输入执行 Tacotron 2 归一化。归一化有助于显著提高某些模型的性能。 - num_mel_bins (
int
, 可选, 默认为 100) — 提取的谱图特征中的梅尔频率 bin 数。这应与UnivNetModel.config.num_mel_bins
匹配。 - hop_length (
int
, 可选, 默认为 256) — 滑动窗口之间的直接采样点数。在许多论文中也称为“shift”。请注意,这与其他音频特征提取器(例如 SpeechT5FeatureExtractor)不同,后者以毫秒为单位获取hop_length
。 - win_length (
int
, 可选, 默认为 1024) — 每个滑动窗口的直接采样点数。请注意,这与其他音频特征提取器(例如 SpeechT5FeatureExtractor)不同,后者以毫秒为单位获取win_length
。 - win_function (
str
, 可选, 默认为"hann_window"
) — 用于加窗的窗口函数名称,必须可通过torch.{win_function}
访问 - filter_length (
int
, 可选, 默认为 1024) — 要使用的 FFT 分量数量。如果为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) — 梅尔频率银行的最小值。请注意,UnivNetFeatureExtractor 使用mel_floor
的方式与 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: typing.Union[numpy.ndarray, list[float], list[numpy.ndarray], list[list[float]]] sampling_rate: typing.Optional[int] = None padding: typing.Union[bool, str, transformers.utils.generic.PaddingStrategy] = True max_length: typing.Optional[int] = None truncation: bool = True pad_to_multiple_of: typing.Optional[int] = None return_noise: bool = True generator: typing.Optional[numpy.random._generator.Generator] = None pad_end: bool = False pad_length: typing.Optional[int] = None do_normalize: typing.Optional[str] = None return_attention_mask: typing.Optional[bool] = None return_tensors: typing.Union[str, transformers.utils.generic.TensorType, NoneType] = None )
参数
- raw_speech (
np.ndarray
,list[float]
,list[np.ndarray]
,list[list[float]]
) — 要填充的序列或序列批次。每个序列可以是 numpy 数组、浮点值列表、numpy 数组列表或浮点值列表的列表。必须是单声道音频,而不是立体声,即每个时间步长一个浮点数。 - sampling_rate (
int
, 可选) —raw_speech
输入的采样率。强烈建议在转发调用时传递sampling_rate
,以防止无声错误并允许自动语音识别管道。 - 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
, 可选) — 如果设置,将序列填充为所提供值的倍数。这对于在计算能力
>= 7.5
(Volta) 的 NVIDIA 硬件或从序列长度为 128 倍数的 TPU 中受益的情况下启用 Tensor Core 的使用特别有用。 - 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
, 可选) — 是否返回注意力掩码。如果保留默认值,将根据特定 feature_extractor 的默认值返回注意力掩码。 - return_tensors (
str
或 TensorType, 可选) — 如果设置,将返回张量而不是 Python 整数列表。可接受的值为:'tf'
:返回 TensorFlowtf.constant
对象。'pt'
:返回 PyTorchtorch.np.array
对象。'np'
:返回 Numpynp.ndarray
对象。
对一个或多个序列进行特征化并为模型准备的主方法。
UnivNetModel
class transformers.UnivNetModel
< 源 >( config: UnivNetConfig )
参数
- config (UnivNetConfig) — 模型配置类,包含模型的所有参数。使用配置文件初始化不加载与模型关联的权重,只加载配置。请查看 from_pretrained() 方法加载模型权重。
输出原始隐藏状态,顶部没有任何特定头的 Univnet 模型。
此模型继承自 PreTrainedModel。请查看超类文档以了解库为所有模型实现的通用方法(例如下载或保存、调整输入嵌入大小、修剪头部等)。
此模型也是 PyTorch torch.nn.Module 子类。将其作为常规 PyTorch 模块使用,并参考 PyTorch 文档以了解所有与一般用法和行为相关的事项。
forward
< 源 >( input_features: FloatTensor noise_sequence: typing.Optional[torch.FloatTensor] = None padding_mask: typing.Optional[torch.FloatTensor] = None generator: typing.Optional[torch._C.Generator] = None return_dict: typing.Optional[bool] = None ) → transformers.models.univnet.modeling_univnet.UnivNetModelOutput
或 tuple(torch.FloatTensor)
参数
- input_features (
torch.FloatTensor
) — 包含对数梅尔频谱图的张量。可以是批处理的,形状为(batch_size, sequence_length, config.num_mel_channels)
,或非批处理的,形状为(sequence_length, config.num_mel_channels)
。 - noise_sequence (
torch.FloatTensor
, 可选) — 包含标准高斯噪声序列的张量。可以是批处理的,形状为(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 而不是普通元组。
返回
transformers.models.univnet.modeling_univnet.UnivNetModelOutput
或 tuple(torch.FloatTensor)
一个 transformers.models.univnet.modeling_univnet.UnivNetModelOutput
或一个 torch.FloatTensor
的元组(如果传入 return_dict=False
或当 config.return_dict=False
时),根据配置 (UnivNetConfig) 和输入包含各种元素。
- waveforms (
torch.FloatTensor
,形状为(batch_size, sequence_length)
) — 批处理的 1D (单通道) 输出音频波形。 - waveform_lengths (
torch.FloatTensor
,形状为(batch_size,)
) —waveforms
中每个未填充波形的批处理样本长度。
UnivNetModel forward 方法,覆盖 __call__
特殊方法。
虽然前向传递的配方需要在此函数中定义,但在此之后应调用 Module
实例,而不是此函数,因为前者负责运行预处理和后处理步骤,而后者则默默地忽略它们。
示例
>>> 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]