speechbrain.lobes.models.FastSpeech2 模块

用于 FastSpeech 2 的神经网络模块:快速高质量的端到端文本转语音合成模型 作者 * Sathvik Udupa 2022 * Pradnya Kandarkar 2023 * Yingzhi Wang 2023

总结

AlignmentNetwork

使用高斯注意力学习输入文本和语谱图之间的对齐。

BinaryAlignmentLoss

二进制损失,如 https://arxiv.org/pdf/2108.10447.pdf 中所述,强制软对齐匹配硬对齐。

DurationPredictor

时长预测层

EncoderPreNet

Token 的嵌入层

FastSpeech2

FastSpeech2 文本转语音模型。

FastSpeech2WithAlignment

带有内部对齐的 FastSpeech2 文本转语音模型。

ForwardSumLoss

CTC 对齐损失

Loss

损失计算

LossWithAlignment

包括内部对齐器的损失计算

PostNet

FastSpeech2 Conv Postnet :param n_mel_channels: 卷积层的输入特征维度 :type n_mel_channels: int :param postnet_embedding_dim: 卷积层的输出特征维度 :type postnet_embedding_dim: int :param postnet_kernel_size: postnet 卷积核大小 :type postnet_kernel_size: int :param postnet_n_convolutions: 卷积层数量 :type postnet_n_convolutions: int :param postnet_dropout: postnet 的 dropout 概率 :type postnet_dropout: float

SPNPredictor

用于静音音素预测器的模块。

SSIMLoss

SSIM 损失为 (1 - SSIM) SSIM 在这里解释 https://en.wikipedia.org/wiki/Structural_similarity

TextMelCollate

根据每步的帧数对模型输入和目标进行零填充

TextMelCollateWithAlignment

根据每步的帧数对模型输入和目标进行零填充 结果:tuple 一个用作输入/目标的张量 tuple ( text_padded, dur_padded, input_lengths, mel_padded, output_lengths, len_x, labels, wavs )

函数

average_over_durations

计算时长内的平均值。

dynamic_range_compression

音频信号的动态范围压缩

maximum_path_numpy

单调对齐搜索算法,numpy 比 torch 实现速度更快。

mel_spectogram

计算原始音频信号的 MelSpectrogram

upsample

根据时长对编码器输出进行上采样

参考

class speechbrain.lobes.models.FastSpeech2.EncoderPreNet(n_vocab, blank_id, out_channels=512)[source]

继承自:Module

Token 的嵌入层

参数:
  • n_vocab (int) – 嵌入字典的大小

  • blank_id (int) – 填充索引

  • out_channels (int) – 每个嵌入向量的大小

示例

>>> from speechbrain.nnet.embedding import Embedding
>>> from speechbrain.lobes.models.FastSpeech2 import EncoderPreNet
>>> encoder_prenet_layer = EncoderPreNet(n_vocab=40, blank_id=0, out_channels=384)
>>> x = torch.rand(3, 5)
>>> y = encoder_prenet_layer(x)
>>> y.shape
torch.Size([3, 5, 384])
forward(x)[source]

计算前向传播

参数:

x (torch.Tensor) – (batch, tokens) 输入张量

返回:

output – 嵌入层输出

返回类型:

torch.Tensor

class speechbrain.lobes.models.FastSpeech2.PostNet(n_mel_channels=80, postnet_embedding_dim=512, postnet_kernel_size=5, postnet_n_convolutions=5, postnet_dropout=0.5)[source]

继承自:Module

FastSpeech2 Conv Postnet :param n_mel_channels: 卷积层的输入特征维度 :type n_mel_channels: int :param postnet_embedding_dim: 卷积层的输出特征维度 :type postnet_embedding_dim: int :param postnet_kernel_size: postnet 卷积核大小 :type postnet_kernel_size: int :param postnet_n_convolutions: 卷积层数量 :type postnet_n_convolutions: int :param postnet_dropout: postnet 的 dropout 概率 :type postnet_dropout: float

forward(x)[source]

计算前向传播

参数:

x (torch.Tensor) – (batch, time_steps, features) 输入张量

返回:

output – 预测的语谱图

返回类型:

torch.Tensor

class speechbrain.lobes.models.FastSpeech2.DurationPredictor(in_channels, out_channels, kernel_size, dropout=0.0, n_units=1)[source]

继承自:Module

时长预测层

参数:
  • in_channels (int) – 卷积层的输入特征维度

  • out_channels (int) – 卷积层的输出特征维度

  • kernel_size (int) – 时长预测器卷积核大小

  • dropout (float) – dropout 概率,默认为 0

  • n_units (int)

示例

>>> from speechbrain.lobes.models.FastSpeech2 import FastSpeech2
>>> duration_predictor_layer = DurationPredictor(in_channels=384, out_channels=384, kernel_size=3)
>>> x = torch.randn(3, 400, 384)
>>> mask = torch.ones(3, 400, 384)
>>> y = duration_predictor_layer(x, mask)
>>> y.shape
torch.Size([3, 400, 1])
forward(x, x_mask)[source]

计算前向传播

参数:
  • x (torch.Tensor) – (batch, time_steps, features) 输入张量

  • x_mask (torch.Tensor) – 输入张量的掩码

返回:

output – 时长预测器输出

返回类型:

torch.Tensor

class speechbrain.lobes.models.FastSpeech2.SPNPredictor(enc_num_layers, enc_num_head, enc_d_model, enc_ffn_dim, enc_k_dim, enc_v_dim, enc_dropout, normalize_before, ffn_type, ffn_cnn_kernel_size_list, n_char, padding_idx)[source]

继承自:Module

用于静音音素预测器的模块。它接收不包含任何静音音素 token 的音素序列作为输入,并预测是否应该在某个位置之后插入一个静音音素。这是为了避免在推理时由于输入序列中没有静音音素 token 而导致语速过快的问题。

参数:
  • enc_num_layers (int) – 编码器中 Transformer 层 (TransformerEncoderLayer) 的数量

  • enc_num_head (int) – 编码器 Transformer 层中多头注意力 (MHA) 的头数

  • enc_d_model (int) – 编码器中期望的特征数量

  • enc_ffn_dim (int) – 前馈网络模型的维度

  • enc_k_dim (int) – key 的维度

  • enc_v_dim (int) – value 的维度

  • enc_dropout (float) – 编码器的 Dropout

  • normalize_before (bool) – 在 Transformer 层中,归一化应该应用于 MHA 或 FFN 之前还是之后。

  • ffn_type (str) – 在 Transformer 层内部是使用卷积层还是前馈网络

  • ffn_cnn_kernel_size_list (list of int) – 如果 ffn_type 是 1dcnn,则为 2 个 1d 卷积的卷积核大小

  • n_char (int) – token 嵌入的符号数量

  • padding_idx (int) – 填充索引

forward(tokens, last_phonemes)[source]

模块的前向传播

参数:
  • tokens (torch.Tensor) – 不包含静音音素的输入 token

  • last_phonemes (torch.Tensor) – 指示某个索引处的音素是否是单词的最后一个音素

返回:

spn_decision – 指示是否应该在音素之后插入静音音素

返回类型:

torch.Tensor

infer(tokens, last_phonemes)[source]

推理函数

参数:
  • tokens (torch.Tensor) – 不包含静音音素的输入 token

  • last_phonemes (torch.Tensor) – 指示某个索引处的音素是否是单词的最后一个音素

返回:

spn_decision – 指示是否应该在音素之后插入静音音素

返回类型:

torch.Tensor

class speechbrain.lobes.models.FastSpeech2.FastSpeech2(enc_num_layers, enc_num_head, enc_d_model, enc_ffn_dim, enc_k_dim, enc_v_dim, enc_dropout, dec_num_layers, dec_num_head, dec_d_model, dec_ffn_dim, dec_k_dim, dec_v_dim, dec_dropout, normalize_before, ffn_type, ffn_cnn_kernel_size_list, n_char, n_mels, postnet_embedding_dim, postnet_kernel_size, postnet_n_convolutions, postnet_dropout, padding_idx, dur_pred_kernel_size, pitch_pred_kernel_size, energy_pred_kernel_size, variance_predictor_dropout)[source]

继承自:Module

FastSpeech2 文本到语音模型。该类是模型的主要入口点,负责实例化所有子模块,这些子模块又管理单独的神经网络层。简化的结构:输入 -> token 嵌入 -> 编码器 -> 时长/音高/能量预测器 -> 时长上采样器 -> 解码器 -> 输出。在训练期间,使用教师强制(使用真实时长进行上采样)。

参数:
  • enc_num_layers (int) – 编码器中 Transformer 层 (TransformerEncoderLayer) 的数量

  • enc_num_head (int) – 编码器 Transformer 层中多头注意力 (MHA) 的头数

  • enc_d_model (int) – 编码器中期望的特征数量

  • enc_ffn_dim (int) – 前馈网络模型的维度

  • enc_k_dim (int) – key 的维度

  • enc_v_dim (int) – value 的维度

  • enc_dropout (float) – 编码器的 Dropout

  • dec_num_layers (int) – 解码器中 transformer 层 (TransformerEncoderLayer) 的数量

  • dec_num_head (int) – 解码器 transformer 层中多头注意力 (MHA) 头部的数量

  • dec_d_model (int) – 解码器中期望的特征数量

  • dec_ffn_dim (int) – 前馈网络模型的维度

  • dec_k_dim (int) – 键的维度

  • dec_v_dim (int) – 值的维度

  • dec_dropout (float) – 解码器的 dropout

  • normalize_before (bool) – 在 Transformer 层中,归一化应该应用于 MHA 或 FFN 之前还是之后。

  • ffn_type (str) – transformer 层内部是否使用卷积层而不是前馈网络。

  • ffn_cnn_kernel_size_list (list of int) – 如果 ffn_type 是 1dcnn,则为 2 个 1d 卷积的卷积核大小

  • n_char (int) – token 嵌入的符号数量

  • n_mels (int) – 梅尔谱图中的 bin 数量

  • postnet_embedding_dim (int) – 卷积层的输出特征维度

  • postnet_kernel_size (int) – postnet 卷积核大小

  • postnet_n_convolutions (int) – 卷积层数量

  • postnet_dropout (float) – postnet 的 dropout 概率

  • padding_idx (int) – 填充索引

  • dur_pred_kernel_size (int) – 时长预测器中的卷积核大小

  • pitch_pred_kernel_size (int) – 音高预测的核大小。

  • energy_pred_kernel_size (int) – 能量预测的核大小。

  • variance_predictor_dropout (float) – 变异性预测器(时长/音高/能量)的 dropout 概率

示例

>>> import torch
>>> from speechbrain.lobes.models.FastSpeech2 import FastSpeech2
>>> model = FastSpeech2(
...    enc_num_layers=6,
...    enc_num_head=2,
...    enc_d_model=384,
...    enc_ffn_dim=1536,
...    enc_k_dim=384,
...    enc_v_dim=384,
...    enc_dropout=0.1,
...    dec_num_layers=6,
...    dec_num_head=2,
...    dec_d_model=384,
...    dec_ffn_dim=1536,
...    dec_k_dim=384,
...    dec_v_dim=384,
...    dec_dropout=0.1,
...    normalize_before=False,
...    ffn_type='1dcnn',
...    ffn_cnn_kernel_size_list=[9, 1],
...    n_char=40,
...    n_mels=80,
...    postnet_embedding_dim=512,
...    postnet_kernel_size=5,
...    postnet_n_convolutions=5,
...    postnet_dropout=0.5,
...    padding_idx=0,
...    dur_pred_kernel_size=3,
...    pitch_pred_kernel_size=3,
...    energy_pred_kernel_size=3,
...    variance_predictor_dropout=0.5)
>>> inputs = torch.tensor([
...     [13, 12, 31, 14, 19],
...     [31, 16, 30, 31, 0],
... ])
>>> input_lengths = torch.tensor([5, 4])
>>> durations = torch.tensor([
...     [2, 4, 1, 5, 3],
...     [1, 2, 4, 3, 0],
... ])
>>> mel_post, postnet_output, predict_durations, predict_pitch, avg_pitch, predict_energy, avg_energy, mel_lens = model(inputs, durations=durations)
>>> mel_post.shape, predict_durations.shape
(torch.Size([2, 15, 80]), torch.Size([2, 5]))
>>> predict_pitch.shape, predict_energy.shape
(torch.Size([2, 5, 1]), torch.Size([2, 5, 1]))
forward(tokens, durations=None, pitch=None, energy=None, pace=1.0, pitch_rate=1.0, energy_rate=1.0)[source]

用于训练和推断的前向传播

参数:
  • tokens (torch.Tensor) – 输入 token 批次

  • durations (torch.Tensor) – 每个 token 的时长批次。如果为 None,模型将根据预测时长进行推断。

  • pitch (torch.Tensor) – 每帧的音高批次。如果为 None,模型将根据预测音高进行推断。

  • energy (torch.Tensor) – 每帧的能量批次。如果为 None,模型将根据预测能量进行推断。

  • pace (float) – 时长的缩放因子

  • pitch_rate (float) – 音高的缩放因子

  • energy_rate (float) – 能量的缩放因子

返回:

  • mel_post (torch.Tensor) – 来自解码器的梅尔输出

  • postnet_output (torch.Tensor) – 来自 postnet 的梅尔输出

  • predict_durations (torch.Tensor) – 每个 token 的预测时长

  • predict_pitch (torch.Tensor) – 每个 token 的预测音高

  • avg_pitch (torch.Tensor) – 如果输入音高不为 None,则为每个 token 的目标音高;如果输入音高为 None,则为 None。

  • predict_energy (torch.Tensor) – 每个 token 的预测能量

  • avg_energy (torch.Tensor) – 如果输入能量不为 None,则为每个 token 的目标能量;如果输入能量为 None,则为 None。

  • mel_length – 梅尔谱图的预测长度

speechbrain.lobes.models.FastSpeech2.average_over_durations(values, durs)[source]

计算时长内的平均值。

参数:
  • values (torch.Tensor) – 形状: [B, 1, T_de]

  • durs (torch.Tensor) – 形状: [B, T_en]

返回:

avg – 形状: [B, 1, T_en]

返回类型:

torch.Tensor

speechbrain.lobes.models.FastSpeech2.upsample(feats, durs, pace=1.0, padding_value=0.0)[source]

根据时长对编码器输出进行上采样

参数:
  • feats (torch.Tensor) – 输入 token 批次

  • durs (torch.Tensor) – 用于上采样的时长

  • pace (float) – 时长的缩放因子

  • padding_value (int) – 填充索引

返回:

  • mel_post (torch.Tensor) – 来自解码器的梅尔输出

  • predict_durations (torch.Tensor) – 每个 token 的预测时长

class speechbrain.lobes.models.FastSpeech2.TextMelCollate[source]

基类: object

根据每步的帧数对模型输入和目标进行零填充

__call__(batch)[source]

从规范化的文本和梅尔谱图整理训练批次

参数:

batch (list) – [规范化文本, 规范化梅尔谱图]

返回:

  • text_padded (torch.Tensor)

  • dur_padded (torch.Tensor)

  • input_lengths (torch.Tensor)

  • mel_padded (torch.Tensor)

  • pitch_padded (torch.Tensor)

  • energy_padded (torch.Tensor)

  • output_lengths (torch.Tensor)

  • len_x (torch.Tensor)

  • labels (torch.Tensor)

  • wavs (torch.Tensor)

  • no_spn_seq_padded (torch.Tensor)

  • spn_labels_padded (torch.Tensor)

  • last_phonemes_padded (torch.Tensor)

class speechbrain.lobes.models.FastSpeech2.Loss(log_scale_durations, ssim_loss_weight, duration_loss_weight, pitch_loss_weight, energy_loss_weight, mel_loss_weight, postnet_mel_loss_weight, spn_loss_weight=1.0, spn_loss_max_epochs=8)[source]

继承自:Module

损失计算

参数:
  • log_scale_durations (bool) – 对目标时长应用对数变换

  • ssim_loss_weight (float) – ssim 损失的权重

  • duration_loss_weight (float) – 时长损失的权重

  • pitch_loss_weight (float) – 音高损失的权重

  • energy_loss_weight (float) – 能量损失的权重

  • mel_loss_weight (float) – 梅尔损失的权重

  • postnet_mel_loss_weight (float) – postnet 梅尔损失的权重

  • spn_loss_weight (float) – spn 损失的权重

  • spn_loss_max_epochs (int) – 最大 epoch 数

forward(predictions, targets, current_epoch)[source]

计算损失函数值并更新统计信息

参数:
  • predictions (tuple) – 模型预测

  • targets (tuple) – 真实数据

  • current_epoch (int) – 当前 epoch 的计数。

返回:

loss – 损失值

返回类型:

torch.Tensor

speechbrain.lobes.models.FastSpeech2.mel_spectogram(sample_rate, hop_length, win_length, n_fft, n_mels, f_min, f_max, power, normalized, min_max_energy_norm, norm, mel_scale, compression, audio)[source]

计算原始音频信号的 MelSpectrogram

参数:
  • sample_rate (int) – 音频信号的采样率。

  • hop_length (int) – STFT 窗之间的跳跃长度。

  • win_length (int) – 窗大小。

  • n_fft (int) – FFT 大小。

  • n_mels (int) – 梅尔滤波器组的数量。

  • f_min (float) – 最小频率。

  • f_max (float) – 最大频率。

  • power (float) – 幅度谱图的指数。

  • normalized (bool) – 是否在 STFT 后按幅度归一化。

  • min_max_energy_norm (bool) – 是否按最小-最大值归一化

  • norm (str or None) – 如果为 "slaney",则将三角形梅尔权重除以梅尔带宽度。

  • mel_scale (str) – 使用的尺度:"htk" 或 "slaney"。

  • compression (bool) – 是否进行动态范围压缩

  • audio (torch.Tensor) – 输入音频信号

返回:

  • mel (torch.Tensor)

  • rmse (torch.Tensor)

speechbrain.lobes.models.FastSpeech2.dynamic_range_compression(x, C=1, clip_val=1e-05)[source]

音频信号的动态范围压缩

class speechbrain.lobes.models.FastSpeech2.SSIMLoss[源]

继承自:Module

SSIM 损失为 (1 - SSIM) SSIM 在这里解释 https://en.wikipedia.org/wiki/Structural_similarity

class speechbrain.lobes.models.FastSpeech2.SSIMLoss[source]

sequence_mask(sequence_length, max_len=None)[source]

参数:
  • 创建序列掩码,用于过滤序列张量中的填充。

  • sequence_length (torch.Tensor) – 序列长度。

返回:

max_len (int) – 最大序列长度。默认为 None。

返回类型:

掩码

[B, T_max]

sample_wise_min_max(x: Tensor, mask: Tensor)[source]

参数:
  • 沿第一维度对张量进行最小-最大值归一化

  • x (torch.Tensor) – 输入张量 [B, D1, D2]

返回类型:

mask (torch.Tensor) – 输入掩码 [B, D1, 1]

归一化张量
参数:
  • forward(y_hat, y, length)[source]

  • y_hat (torch.Tensor) – 模型预测值 [B, T, D]。

  • y (torch.Tensor) – 目标值 [B, T, D]。

返回:

length (torch.Tensor) – 用于掩码批次中每个样本的长度。

返回类型:

损失

在 [0, 1] 范围内的平均损失值,由长度进行掩码。

基类: object

class speechbrain.lobes.models.FastSpeech2.TextMelCollateWithAlignment[source]

根据每步的帧数对模型输入和目标进行零填充。结果:tuple

一个张量元组,用作输入/目标(

)

text_padded, dur_padded, input_lengths, mel_padded, output_lengths, len_x, labels, wavs

从规范化的文本和梅尔谱图整理训练批次

参数:

batch (list) – [规范化文本, 规范化梅尔谱图]

返回:

  • __call__(batch)[source]

  • input_lengths (torch.Tensor)

  • mel_padded (torch.Tensor)

  • pitch_padded (torch.Tensor)

  • energy_padded (torch.Tensor)

  • output_lengths (torch.Tensor)

  • labels (torch.Tensor)

  • wavs (torch.Tensor)

phoneme_padded (torch.Tensor)

单调对齐搜索算法,numpy 比 torch 实现速度更快。

参数:
  • speechbrain.lobes.models.FastSpeech2.maximum_path_numpy(value, mask)[source]

  • value (torch.Tensor) – 输入对齐值 [b, t_x, t_y]

返回:

mask (torch.Tensor) – 输入对齐掩码 [b, t_x, t_y]

返回类型:

torch.Tensor

示例

>>> import torch
>>> from speechbrain.lobes.models.FastSpeech2 import maximum_path_numpy
>>> alignment = torch.rand(2, 5, 100)
>>> mask = torch.ones(2, 5, 100)
>>> hard_alignments = maximum_path_numpy(alignment, mask)
路径

继承自:Module

使用高斯注意力学习输入文本和语谱图之间的对齐。

class speechbrain.lobes.models.FastSpeech2.AlignmentNetwork(in_query_channels=80, in_key_channels=512, attn_channels=80, temperature=0.0005)[source]

参数:
  • query -> conv1d -> relu -> conv1d -> relu -> conv1d -> L2_dist -> softmax -> 对齐 key -> conv1d -> relu -> conv1d - - - - - - - - - - - -^

  • in_query_channels (int) – 查询网络中的通道数。默认为 80。

  • in_key_channels (int) – 键网络中的通道数。默认为 512。

  • attn_channels (int) – 注意力层中的内部通道数。默认为 80。

示例

>>> import torch
>>> from speechbrain.lobes.models.FastSpeech2 import AlignmentNetwork
>>> aligner = AlignmentNetwork(
...     in_query_channels=80,
...     in_key_channels=512,
...     attn_channels=80,
...     temperature=0.0005,
... )
>>> phoneme_feats = torch.rand(2, 512, 20)
>>> mels = torch.rand(2, 80, 100)
>>> alignment_soft, alignment_logprob = aligner(mels, phoneme_feats, None, None)
>>> alignment_soft.shape, alignment_logprob.shape
(torch.Size([2, 1, 100, 20]), torch.Size([2, 1, 100, 20]))
temperature (float) – softmax 的温度。默认为 0.0005。

forward(queries, keys, mask, attn_prior)[source]

参数:
  • 对齐器编码器的前向传播。

  • queries (torch.Tensor) – 查询张量 [B, C, T_de]

  • keys (torch.Tensor) – 查询张量 [B, C_emb, T_en]

  • mask (torch.Tensor) – 查询掩码 [B, T_de]

返回:

  • attn_prior (torch.Tensor) – 先验注意力张量 [B, 1, T_en, T_de]

  • attn (torch.Tensor) – 软注意力 [B, 1, T_en, T_de]

attn_logp (torch.Tensor) – 对数概率 [B, 1, T_en , T_de]

继承自:Module

class speechbrain.lobes.models.FastSpeech2.FastSpeech2WithAlignment(enc_num_layers, enc_num_head, enc_d_model, enc_ffn_dim, enc_k_dim, enc_v_dim, enc_dropout, in_query_channels, in_key_channels, attn_channels, temperature, dec_num_layers, dec_num_head, dec_d_model, dec_ffn_dim, dec_k_dim, dec_v_dim, dec_dropout, normalize_before, ffn_type, ffn_cnn_kernel_size_list, n_char, n_mels, postnet_embedding_dim, postnet_kernel_size, postnet_n_convolutions, postnet_dropout, padding_idx, dur_pred_kernel_size, pitch_pred_kernel_size, energy_pred_kernel_size, variance_predictor_dropout)[source]

具有内部对齐的 FastSpeech2 文本到语音模型。该类是模型的主要入口点,负责实例化所有子模块,这些子模块又管理单独的神经网络层。某些部分采纳自以下实现:https://github.com/coqui-ai/TTS/blob/dev/TTS/tts/models/forward_tts.py

参数:
  • enc_num_layers (int) – 编码器中 Transformer 层 (TransformerEncoderLayer) 的数量

  • enc_num_head (int) – 编码器 Transformer 层中多头注意力 (MHA) 的头数

  • enc_d_model (int) – 编码器中期望的特征数量

  • enc_ffn_dim (int) – 前馈网络模型的维度

  • enc_k_dim (int) – key 的维度

  • enc_v_dim (int) – value 的维度

  • enc_dropout (float) – 编码器的 Dropout

  • 简化的结构:输入 -> token 嵌入 -> 编码器 -> 对齐器 -> 时长/音高/能量 -> 上采样器 -> 解码器 -> 输出

  • in_query_channels (int) – 查询网络中的通道数。

  • in_key_channels (int) – 键网络中的通道数。

  • attn_channels (int) – 注意力层中的内部通道数。

  • dec_num_layers (int) – 解码器中 transformer 层 (TransformerEncoderLayer) 的数量

  • dec_num_head (int) – 解码器 transformer 层中多头注意力 (MHA) 头部的数量

  • dec_d_model (int) – 解码器中期望的特征数量

  • dec_ffn_dim (int) – 前馈网络模型的维度

  • dec_k_dim (int) – 键的维度

  • dec_v_dim (int) – 值的维度

  • dec_dropout (float) – 解码器的 dropout

  • normalize_before (bool) – 在 Transformer 层中,归一化应该应用于 MHA 或 FFN 之前还是之后。

  • ffn_type (str) – transformer 层内部是否使用卷积层而不是前馈网络。

  • ffn_cnn_kernel_size_list (list of int) – 如果 ffn_type 是 1dcnn,则为 2 个 1d 卷积的卷积核大小

  • n_char (int) – token 嵌入的符号数量

  • n_mels (int) – 梅尔谱图中的 bin 数量

  • postnet_embedding_dim (int) – 卷积层的输出特征维度

  • postnet_kernel_size (int) – postnet 卷积核大小

  • postnet_n_convolutions (int) – 卷积层数量

  • postnet_dropout (float) – postnet 的 dropout 概率

  • padding_idx (int) – 填充索引

  • dur_pred_kernel_size (int) – 时长预测器中的卷积核大小

  • pitch_pred_kernel_size (int) – 音高预测的核大小。

  • energy_pred_kernel_size (int) – 能量预测的核大小。

  • variance_predictor_dropout (float) – 变异性预测器(时长/音高/能量)的 dropout 概率

示例

>>> import torch
>>> from speechbrain.lobes.models.FastSpeech2 import FastSpeech2WithAlignment
>>> model = FastSpeech2WithAlignment(
...    enc_num_layers=6,
...    enc_num_head=2,
...    enc_d_model=384,
...    enc_ffn_dim=1536,
...    enc_k_dim=384,
...    enc_v_dim=384,
...    enc_dropout=0.1,
...    in_query_channels=80,
...    in_key_channels=384,
...    attn_channels=80,
...    temperature=0.0005,
...    dec_num_layers=6,
...    dec_num_head=2,
...    dec_d_model=384,
...    dec_ffn_dim=1536,
...    dec_k_dim=384,
...    dec_v_dim=384,
...    dec_dropout=0.1,
...    normalize_before=False,
...    ffn_type='1dcnn',
...    ffn_cnn_kernel_size_list=[9, 1],
...    n_char=40,
...    n_mels=80,
...    postnet_embedding_dim=512,
...    postnet_kernel_size=5,
...    postnet_n_convolutions=5,
...    postnet_dropout=0.5,
...    padding_idx=0,
...    dur_pred_kernel_size=3,
...    pitch_pred_kernel_size=3,
...    energy_pred_kernel_size=3,
...    variance_predictor_dropout=0.5)
>>> inputs = torch.tensor([
...     [13, 12, 31, 14, 19],
...     [31, 16, 30, 31, 0],
... ])
>>> mels = torch.rand(2, 100, 80)
>>> mel_post, postnet_output, durations, predict_pitch, avg_pitch, predict_energy, avg_energy, mel_lens, alignment_durations, alignment_soft, alignment_logprob, alignment_mas = model(inputs, mels)
>>> mel_post.shape, durations.shape
(torch.Size([2, 100, 80]), torch.Size([2, 5]))
>>> predict_pitch.shape, predict_energy.shape
(torch.Size([2, 5, 1]), torch.Size([2, 5, 1]))
>>> alignment_soft.shape, alignment_mas.shape
(torch.Size([2, 100, 5]), torch.Size([2, 100, 5]))
temperature (float) – softmax 的温度。

用于训练和推断的前向传播

参数:
  • tokens (torch.Tensor) – 输入 token 批次

  • forward(tokens, mel_spectograms=None, pitch=None, energy=None, pace=1.0, pitch_rate=1.0, energy_rate=1.0)[source]

  • pitch (torch.Tensor) – 每帧的音高批次。如果为 None,模型将根据预测音高进行推断。

  • energy (torch.Tensor) – 每帧的能量批次。如果为 None,模型将根据预测能量进行推断。

  • pace (float) – 时长的缩放因子

  • pitch_rate (float) – 音高的缩放因子

  • energy_rate (float) – 能量的缩放因子

返回:

  • mel_post (torch.Tensor) – 来自解码器的梅尔输出

  • postnet_output (torch.Tensor) – 来自 postnet 的梅尔输出

  • predict_durations (torch.Tensor) – 每个 token 的预测时长

  • predict_pitch (torch.Tensor) – 每个 token 的预测音高

  • avg_pitch (torch.Tensor) – 如果输入音高不为 None,则为每个 token 的目标音高;如果输入音高为 None,则为 None。

  • predict_energy (torch.Tensor) – 每个 token 的预测能量

  • avg_energy (torch.Tensor) – 如果输入能量不为 None,则为每个 token 的目标能量;如果输入能量为 None,则为 None。

  • mel_length – 梅尔谱图的预测长度

  • mel_spectograms (torch.Tensor) – 梅尔谱图批次(仅用于训练)

  • alignment_durations – 来自硬对齐图的时长

  • alignment_soft (torch.Tensor) – 软对齐势

  • alignment_logprob (torch.Tensor) – 对数尺度对齐势

alignment_mas (torch.Tensor) – 硬对齐图

继承自:Module

包括内部对齐器的损失计算

参数:
  • log_scale_durations (bool) – 对目标时长应用对数变换

  • class speechbrain.lobes.models.FastSpeech2.LossWithAlignment(log_scale_durations, ssim_loss_weight, duration_loss_weight, pitch_loss_weight, energy_loss_weight, mel_loss_weight, postnet_mel_loss_weight, aligner_loss_weight, binary_alignment_loss_weight, binary_alignment_loss_warmup_epochs, binary_alignment_loss_max_epochs)[source]

  • duration_loss_weight (float) – 时长损失的权重

  • pitch_loss_weight (float) – 音高损失的权重

  • energy_loss_weight (float) – 能量损失的权重

  • mel_loss_weight (float) – 梅尔损失的权重

  • postnet_mel_loss_weight (float) – postnet 梅尔损失的权重

  • ssim_loss_weight (float) – ssim 损失的权重

  • aligner_loss_weight (float) – 对齐器损失的权重

  • binary_alignment_loss_weight (float) – postnet 梅尔损失的权重

  • binary_alignment_loss_warmup_epochs (int) – 二进制损失影响逐渐增加的 epoch 数。

binary_alignment_loss_max_epochs (int) – 从此 epoch 开始,忽略二进制损失的影响。

计算损失函数值并更新统计信息

参数:
  • predictions (tuple) – 模型预测

  • targets (tuple) – 真实数据

  • forward(predictions, targets, current_epoch)[source]

返回:

loss – 损失值

返回类型:

torch.Tensor

current_epoch (int) – 用于确定二进制对齐损失的开始/结束

继承自:Module

CTC 对齐损失

参数:

class speechbrain.lobes.models.FastSpeech2.ForwardSumLoss(blank_logprob=-1)[source]

示例

>>> import torch
>>> from speechbrain.lobes.models.FastSpeech2 import ForwardSumLoss
>>> loss_func = ForwardSumLoss()
>>> attn_logprob = torch.rand(2, 1, 100, 5)
>>> key_lens = torch.tensor([5, 5])
>>> query_lens = torch.tensor([100, 100])
>>> loss = loss_func(attn_logprob, key_lens, query_lens)
blank_logprob (填充值)
参数:
  • forward(attn_logprob, key_lens, query_lens)[source]

  • attn_logprob (torch.Tensor) – 对数尺度对齐势 [B, 1, query_lens, key_lens]

  • key_lens (torch.Tensor) – 梅尔长度

返回:

query_lens (torch.Tensor) – 音素长度

返回类型:

torch.Tensor

总损失

继承自:Module

class speechbrain.lobes.models.FastSpeech2.BinaryAlignmentLoss[source]

>>> import torch
>>> from speechbrain.lobes.models.FastSpeech2 import BinaryAlignmentLoss
>>> loss_func = BinaryAlignmentLoss()
>>> alignment_hard = torch.randint(0, 2, (2, 100, 5))
>>> alignment_soft = torch.rand(2, 100, 5)
>>> loss = loss_func(alignment_hard, alignment_soft)
二元损失,强制软对齐匹配硬对齐,如 https://arxiv.org/pdf/2108.10447.pdf 中所述。.. rubric:: 示例
forward(alignment_hard, alignment_soft)[source]

alignment_hard: torch.Tensor

硬对齐图 [B, mel_lens, phoneme_lens]

alignment_soft: torch.Tensor