Transformers 文档
UnivNet
并获得增强的文档体验
开始使用
UnivNet
概述
UnivNet 模型在 UnivNet: A Neural Vocoder with Multi-Resolution Spectrogram Discriminators for High-Fidelity Waveform Generation 中被提出,作者是 Won Jang, Dan Lim, Jaesam Yoon, Bongwan Kin 和 Juntae Kim。UnivNet 模型是一个生成对抗网络 (GAN),经过训练可以合成高保真语音波形。在 transformers
中共享的 UnivNet 模型是生成器,它将条件对数梅尔频谱图和可选的噪声序列映射到语音波形(例如,声码器)。推理只需要生成器。用于训练 generator
的判别器未实现。
论文的摘要如下:
大多数神经声码器采用带限梅尔频谱图来生成波形。如果使用全频带频谱特征作为输入,则可以为声码器提供尽可能多的声音信息。然而,在一些使用全频带梅尔频谱图的模型中,会出现过平滑问题,其中一部分会生成非锐利的频谱图。为了解决这个问题,我们提出了 UnivNet,这是一种神经声码器,可以实时合成高保真波形。受到语音活动检测领域的启发,我们添加了一个多分辨率频谱图判别器,它使用使用各种参数集计算的多个线性频谱图幅度。使用全频带梅尔频谱图作为输入,我们期望通过添加一个使用多分辨率频谱图作为输入的判别器来生成高分辨率信号。在包含数百位说话人信息的数据集上的评估中,UnivNet 在竞争模型中获得了针对见过和未见过说话人的最佳客观和主观结果。这些结果,包括文本到语音的最佳主观评分,证明了快速适应新说话人的潜力,而无需从头开始训练。
提示
- UnivNetModel.forward() 的
noise_sequence
参数应该是形状为([batch_size], noise_length, model.config.model_in_channels)
的标准高斯噪声(例如来自torch.randn
),其中noise_length
应与input_features
参数的长度维度(维度 1)匹配。如果未提供,它将随机生成;可以向generator
参数提供torch.Generator
,以便可以重现前向传播。(请注意,默认情况下 UnivNetFeatureExtractor 将返回生成的噪声,因此无需手动生成noise_sequence
。) - UnivNetFeatureExtractor 添加的填充可以通过
UnivNetFeatureExtractor.batch_decode()
方法从 UnivNetModel 输出中移除,如下面的用法示例所示。 - 在每个波形的末尾添加静音填充可以减少生成的音频样本末尾的伪影。这可以通过向 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) — 条件对数梅尔频谱图中的频率箱 (frequency bins) 数量。这应该与 UnivNetFeatureExtractor 类中使用的值相对应。 - resblock_kernel_sizes (
Tuple[int]
或List[int]
, 可选, 默认为[3, 3, 3]
) — 定义 UnivNet 残差网络中 1D 卷积层内核大小的整数元组。resblock_kernel_sizes
的长度定义了 resnet 块的数量,并且应该与resblock_stride_sizes
和resblock_dilation_sizes
的长度相匹配。 - resblock_stride_sizes (
Tuple[int]
或List[int]
, 可选, 默认为[8, 8, 4]
) — 定义 UnivNet 残差网络中 1D 卷积层步幅大小的整数元组。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 残差网络中扩张的 1D 卷积层的扩张率的嵌套整数元组。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) — 内核预测器网络中每个 1D 卷积层的内核大小。 - 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
< source >( 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: float = 1.0 compression_clip_val: float = 1e-05 normalize_min: float = -11.512925148010254 normalize_max: float = 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) — 提取的频谱图特征中 mel 频率箱的数量。这应与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) — 最小 mel 频率,单位为 Hz。 - fmax (
float
, 可选) — 最大 mel 频率,单位为 Hz。如果未设置,则默认为sampling_rate / 2
。 - mel_floor (
float
, 可选, 默认为 1e-09) — mel 频率库的最小值。请注意,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) 从原始语音中提取 log-mel 滤波器组特征。STFT 的实现遵循 TacoTron 2 和 Hifi-GAN。
此特征提取器继承自 SequenceFeatureExtractor,其中包含大多数主要方法。用户应参考此超类以获取有关这些方法的更多信息。
__call__
< source >( raw_speech: typing.Union[numpy.ndarray, typing.List[float], typing.List[numpy.ndarray], typing.List[typing.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 Cores 的使用尤其有用。 - 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。如果保留为默认值,将根据特定 feature_extractor 的默认值返回 attention mask。 - return_tensors (
str
或 TensorType, 可选) — 如果设置,将返回 tensors 而不是 python 整数列表。可接受的值为:'tf'
:返回 TensorFlowtf.constant
对象。'pt'
:返回 PyTorchtorch.np.array
对象。'np'
:返回 Numpynp.ndarray
对象。
用于对一个或多个序列进行特征化和模型准备的主要方法。
UnivNetModel
class transformers.UnivNetModel
< source >( config: UnivNetConfig )
参数
- config (UnivNetConfig) — 带有模型所有参数的模型配置类。使用配置文件初始化不会加载与模型关联的权重,仅加载配置。查看 from_pretrained() 方法以加载模型权重。
UnivNet GAN 声码器。此模型继承自 PreTrainedModel。查看超类文档以获取库为其所有模型实现的通用方法(例如下载或保存、调整输入嵌入大小、剪枝头等)。
此模型也是 PyTorch torch.nn.Module 子类。将其用作常规 PyTorch 模块,并参考 PyTorch 文档以获取与常规用法和行为相关的所有事项。
forward
< source >( 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
or tuple(torch.FloatTensor)
参数
- input_features (
torch.FloatTensor
) — 包含 log-mel 频谱图的张量。可以是批处理的,形状为(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 表示未被掩码的 token
- 0 表示被掩码的 token
掩码可以是批处理的,形状为
(batch_size, sequence_length)
,也可以是非批处理的,形状为(sequence_length,)
。 - generator (
torch.Generator
, 可选) — 用于使生成确定性的 torch generator。 - return_dict — 是否返回 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 (形状为
(batch_size, sequence_length)
的torch.FloatTensor
) — 批处理的 1D(单声道)输出音频波形。 - waveform_lengths (形状为
(batch_size,)
的torch.FloatTensor
) —waveforms
中每个未填充波形的批处理样本长度。
UnivNetModel 前向方法,覆盖了 __call__
特殊方法。
尽管前向传递的配方需要在该函数中定义,但应该在之后调用 Module
实例而不是此函数,因为前者负责运行预处理和后处理步骤,而后者会静默地忽略它们。
将噪声波形和条件频谱图转换为语音波形。传递一批 log-mel 频谱图会返回一批语音波形。传递单个、非批处理的 log-mel 频谱图会返回单个、非批处理的语音波形。
示例
>>> 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]