VITS
概述
VITS模型由Jaehyeon Kim、Jungil Kong和Juhee Son在Conditional Variational Autoencoder with Adversarial Learning for End-to-End Text-to-Speech中提出。
VITS(Variational Inference with adversarial learning for end-to-end Text-to-Speech)是一种端到端的语音合成模型,它根据输入的文本序列预测语音波形。它是一个条件变分自编码器(VAE),由后验编码器、解码器和条件先验组成。
一组基于频谱图的声学特征由基于流的模块预测,该模块由基于Transformer的文本编码器和多个耦合层组成。频谱图使用一堆转置卷积层进行解码,风格与HiFi-GAN声码器非常相似。受到TTS问题中一对多性质的启发,即相同的文本输入可以以多种方式发音,该模型还包括一个随机时长预测器,这使得模型能够从相同的输入文本中合成具有不同节奏的语音。
模型通过结合变分下界和对抗训练的损失进行端到端训练。为了提高模型的表达能力,归一化流被应用于条件先验分布。在推理过程中,文本编码基于持续时间预测模块进行上采样,然后通过流模块和HiFi-GAN解码器的级联映射为波形。由于持续时间预测器的随机性,模型是非确定性的,因此需要固定种子来生成相同的语音波形。
论文的摘要如下:
最近提出了几种端到端的文本到语音(TTS)模型,这些模型支持单阶段训练和并行采样,但其样本质量无法与两阶段TTS系统相媲美。在这项工作中,我们提出了一种并行的端到端TTS方法,该方法生成的音频比当前的两阶段模型更加自然。我们的方法采用了变分推断,并结合了归一化流和对抗训练过程,从而提高了生成模型的表达能力。我们还提出了一种随机时长预测器,用于从输入文本中合成具有多样节奏的语音。通过对潜在变量的不确定性建模和随机时长预测器,我们的方法表达了自然的一对多关系,即一个文本输入可以通过不同的音高和节奏以多种方式发音。在LJ Speech(一个单说话者数据集)上进行的主观人类评估(平均意见得分,或MOS)表明,我们的方法优于目前公开的最佳TTS系统,并且达到了与真实语音相当的MOS。
该模型也可以与来自Massively Multilingual Speech (MMS)的TTS检查点一起使用,因为这些检查点使用相同的架构和稍微修改过的分词器。
该模型由Matthijs和sanchit-gandhi贡献。原始代码可以在这里找到。
使用示例
VITS 和 MMS-TTS 的检查点都可以使用相同的 API。由于基于流的模型是非确定性的,设置种子以确保输出的可重复性是一个好习惯。对于使用罗马字母的语言,如英语或法语,可以直接使用分词器来预处理文本输入。以下代码示例使用 MMS-TTS 英语检查点运行前向传递:
import torch
from transformers import VitsTokenizer, VitsModel, set_seed
tokenizer = VitsTokenizer.from_pretrained("facebook/mms-tts-eng")
model = VitsModel.from_pretrained("facebook/mms-tts-eng")
inputs = tokenizer(text="Hello - my dog is cute", return_tensors="pt")
set_seed(555) # make deterministic
with torch.no_grad():
outputs = model(**inputs)
waveform = outputs.waveform[0]
生成的波形可以保存为.wav
文件:
import scipy
scipy.io.wavfile.write("techno.wav", rate=model.config.sampling_rate, data=waveform)
或者在 Jupyter Notebook / Google Colab 中显示:
from IPython.display import Audio
Audio(waveform, rate=model.config.sampling_rate)
对于某些使用非罗马字母的语言,如阿拉伯语、普通话或印地语,需要使用uroman
perl包来将文本输入预处理为罗马字母。
你可以通过检查预训练的tokenizer
的is_uroman
属性来判断你的语言是否需要uroman
包:
from transformers import VitsTokenizer
tokenizer = VitsTokenizer.from_pretrained("facebook/mms-tts-eng")
print(tokenizer.is_uroman)
如果 is_uroman 属性为 True
,分词器将自动应用 uroman
包到你的文本输入中,但如果尚未安装 uroman,你需要使用以下命令进行安装:
pip install --upgrade uroman
注意:使用uroman
作为Python包所需的Python版本应>= 3.10
。
您可以像往常一样使用分词器,无需任何额外的预处理步骤:
import torch
from transformers import VitsTokenizer, VitsModel, set_seed
import os
import subprocess
tokenizer = VitsTokenizer.from_pretrained("facebook/mms-tts-kor")
model = VitsModel.from_pretrained("facebook/mms-tts-kor")
text = "이봐 무슨 일이야"
inputs = tokenizer(text=text, return_tensors="pt")
set_seed(555) # make deterministic
with torch.no_grad():
outputs = model(inputs["input_ids"])
waveform = outputs.waveform[0]
如果你不想升级到 python >= 3.10
,那么你可以使用 uroman
perl 包来预处理文本输入到罗马字母表。
要做到这一点,首先将 uroman 仓库克隆到你的本地机器,并将 bash 变量 UROMAN
设置为本地路径:
git clone https://github.com/isi-nlp/uroman.git
cd uroman
export UROMAN=$(pwd)
然后,您可以使用以下代码片段对文本输入进行预处理。您可以依赖使用bash变量UROMAN
来指向uroman仓库,或者您可以将uroman目录作为参数传递给uromanize
函数:
import torch
from transformers import VitsTokenizer, VitsModel, set_seed
import os
import subprocess
tokenizer = VitsTokenizer.from_pretrained("facebook/mms-tts-kor")
model = VitsModel.from_pretrained("facebook/mms-tts-kor")
def uromanize(input_string, uroman_path):
"""Convert non-Roman strings to Roman using the `uroman` perl package."""
script_path = os.path.join(uroman_path, "bin", "uroman.pl")
command = ["perl", script_path]
process = subprocess.Popen(command, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
# Execute the perl command
stdout, stderr = process.communicate(input=input_string.encode())
if process.returncode != 0:
raise ValueError(f"Error {process.returncode}: {stderr.decode()}")
# Return the output as a string and skip the new-line character at the end
return stdout.decode()[:-1]
text = "이봐 무슨 일이야"
uromanized_text = uromanize(text, uroman_path=os.environ["UROMAN"])
inputs = tokenizer(text=uromanized_text, return_tensors="pt")
set_seed(555) # make deterministic
with torch.no_grad():
outputs = model(inputs["input_ids"])
waveform = outputs.waveform[0]
VitsConfig
类 transformers.VitsConfig
< source >( vocab_size = 38 hidden_size = 192 num_hidden_layers = 6 num_attention_heads = 2 window_size = 4 use_bias = True ffn_dim = 768 layerdrop = 0.1 ffn_kernel_size = 3 flow_size = 192 spectrogram_bins = 513 hidden_act = 'relu' hidden_dropout = 0.1 attention_dropout = 0.1 activation_dropout = 0.1 initializer_range = 0.02 layer_norm_eps = 1e-05 use_stochastic_duration_prediction = True num_speakers = 1 speaker_embedding_size = 0 upsample_initial_channel = 512 upsample_rates = [8, 8, 2, 2] upsample_kernel_sizes = [16, 16, 4, 4] resblock_kernel_sizes = [3, 7, 11] resblock_dilation_sizes = [[1, 3, 5], [1, 3, 5], [1, 3, 5]] leaky_relu_slope = 0.1 depth_separable_channels = 2 depth_separable_num_layers = 3 duration_predictor_flow_bins = 10 duration_predictor_tail_bound = 5.0 duration_predictor_kernel_size = 3 duration_predictor_dropout = 0.5 duration_predictor_num_flows = 4 duration_predictor_filter_channels = 256 prior_encoder_num_flows = 4 prior_encoder_num_wavenet_layers = 4 posterior_encoder_num_wavenet_layers = 16 wavenet_kernel_size = 5 wavenet_dilation_rate = 1 wavenet_dropout = 0.0 speaking_rate = 1.0 noise_scale = 0.667 noise_scale_duration = 0.8 sampling_rate = 16000 **kwargs )
参数
- vocab_size (
int
, optional, 默认为 38) — VITS 模型的词汇量大小。定义了可以通过传递给 VitsModel 的inputs_ids
表示的不同标记的数量。 - hidden_size (
int
, optional, 默认为 192) — 文本编码器层的维度。 - num_hidden_layers (
int
, optional, 默认为 6) — Transformer 编码器中的隐藏层数量。 - num_attention_heads (
int
, optional, defaults to 2) — Transformer编码器中每个注意力层的注意力头数。 - window_size (
int
, optional, defaults to 4) — Transformer编码器的注意力层中相对位置嵌入的窗口大小。 - use_bias (
bool
, optional, defaults toTrue
) — 是否在Transformer编码器的键、查询、值投影层中使用偏置。 - ffn_dim (
int
, optional, defaults to 768) — Transformer编码器中“中间”(即前馈)层的维度。 - layerdrop (
float
, 可选, 默认为 0.1) — 编码器的LayerDrop概率。更多详情请参阅[LayerDrop论文](see https://arxiv.org/abs/1909.11556) - ffn_kernel_size (
int
, optional, 默认为 3) — Transformer 编码器中前馈网络使用的 1D 卷积层的核大小。 - flow_size (
int
, optional, 默认为 192) — 流层的维度。 - spectrogram_bins (
int
, optional, defaults to 513) — 目标频谱图中的频率区间数量。 - hidden_act (
str
或function
, 可选, 默认为"relu"
) — 编码器和池化器中的非线性激活函数(函数或字符串)。如果是字符串,支持"gelu"
、"relu"
、"selu"
和"gelu_new"
。 - hidden_dropout (
float
, optional, defaults to 0.1) — 嵌入层和编码器中所有全连接层的dropout概率。 - attention_dropout (
float
, optional, 默认为 0.1) — 注意力概率的丢弃比例。 - activation_dropout (
float
, optional, 默认为 0.1) — 全连接层内部激活函数的丢弃比例。 - initializer_range (
float
, 可选, 默认为 0.02) — 用于初始化所有权重矩阵的截断正态初始化器的标准差。 - layer_norm_eps (
float
, optional, defaults to 1e-05) — 层归一化层使用的epsilon值。 - use_stochastic_duration_prediction (
bool
, 可选, 默认为True
) — 是否使用随机持续时间预测模块或常规持续时间预测器。 - num_speakers (
int
, optional, defaults to 1) — 如果这是一个多说话者模型,则为说话者的数量。 - speaker_embedding_size (
int
, 可选, 默认为 0) — 用于说话人嵌入的通道数。对于单说话人模型为零。 - upsample_initial_channel (
int
, optional, 默认为 512) — HiFi-GAN 上采样网络的输入通道数。 - upsample_rates (
Tuple[int]
或List[int]
, 可选, 默认为[8, 8, 2, 2]
) — 一个整数元组,定义了HiFi-GAN上采样网络中每个1D卷积层的步幅。upsample_rates
的长度定义了卷积层的数量,并且必须与upsample_kernel_sizes
的长度匹配。 - upsample_kernel_sizes (
Tuple[int]
或List[int]
, 可选, 默认为[16, 16, 4, 4]
) — 一个整数元组,定义了HiFi-GAN上采样网络中每个1D卷积层的核大小。upsample_kernel_sizes
的长度定义了卷积层的数量,并且必须与upsample_rates
的长度匹配。 - resblock_kernel_sizes (
Tuple[int]
或List[int]
, 可选, 默认为[3, 7, 11]
) — 一个整数元组,定义了HiFi-GAN多感受野融合(MRF)模块中1D卷积层的核大小。 - resblock_dilation_sizes (
Tuple[Tuple[int]]
或List[List[int]]
, 可选, 默认为[[1, 3, 5], [1, 3, 5], [1, 3, 5]]
) — 一个嵌套的整数元组,定义了HiFi-GAN多感受野融合(MRF)模块中扩张1D卷积层的扩张率。 - leaky_relu_slope (
float
, optional, defaults to 0.1) — 用于leaky ReLU激活的负斜率角度。 - depth_separable_channels (
int
, 可选, 默认为 2) — 每个深度可分离块中使用的通道数。 - depth_separable_num_layers (
int
, optional, defaults to 3) — 在每个深度可分离块中使用的卷积层数。 - duration_predictor_flow_bins (
int
, optional, defaults to 10) — 在持续时间预测模型中使用无约束有理样条映射的通道数量。 - duration_predictor_tail_bound (
float
, optional, defaults to 5.0) — 在持续时间预测模型中计算无约束有理样条时,尾部边界值。 - duration_predictor_kernel_size (
int
, optional, defaults to 3) — 用于持续时间预测模型中的1D卷积层的核大小。 - duration_predictor_dropout (
float
, optional, defaults to 0.5) — 持续时间预测模型的丢弃比率。 - duration_predictor_num_flows (
int
, optional, 默认为 4) — 持续时间预测模型使用的流阶段数量。 - duration_predictor_filter_channels (
int
, optional, 默认为 256) — 用于持续时间预测模型中的卷积层的通道数。 - prior_encoder_num_flows (
int
, 可选, 默认为 4) — 先验编码器流模型使用的流阶段数量。 - prior_encoder_num_wavenet_layers (
int
, optional, defaults to 4) — 用于先验编码器流模型的WaveNet层数。 - posterior_encoder_num_wavenet_layers (
int
, 可选, 默认为 16) — 后验编码器模型使用的WaveNet层数。 - wavenet_kernel_size (
int
, optional, defaults to 5) — WaveNet模型中使用的1D卷积层的核大小。 - wavenet_dilation_rate (
int
, optional, defaults to 1) — WaveNet模型中使用的扩张1D卷积层的扩张率。 - wavenet_dropout (
float
, optional, 默认为 0.0) — WaveNet 层的 dropout 比率。 - speaking_rate (
float
, optional, defaults to 1.0) — 语速。较大的值会使合成语音更快。 - noise_scale (
float
, optional, 默认为 0.667) — 语音预测的随机程度。较大的值会在预测的语音中产生更多的变化。 - noise_scale_duration (
float
, optional, 默认为 0.8) — 持续时间预测的随机程度。较大的值会在预测的持续时间中产生更多的变化。 - sampling_rate (
int
, optional, 默认为 16000) — 输出音频波形数字化的采样率,以赫兹(Hz)表示。
这是用于存储VitsModel配置的配置类。它用于根据指定的参数实例化一个VITS模型,定义模型架构。使用默认值实例化配置将产生类似于VITS facebook/mms-tts-eng架构的配置。
配置对象继承自PretrainedConfig,可用于控制模型输出。阅读PretrainedConfig的文档以获取更多信息。
示例:
>>> from transformers import VitsModel, VitsConfig
>>> # Initializing a "facebook/mms-tts-eng" style configuration
>>> configuration = VitsConfig()
>>> # Initializing a model (with random weights) from the "facebook/mms-tts-eng" style configuration
>>> model = VitsModel(configuration)
>>> # Accessing the model configuration
>>> configuration = model.config
VitsTokenizer
类 transformers.VitsTokenizer
< source >( vocab_file pad_token = '
构建一个VITS分词器。同时支持MMS-TTS。
此分词器继承自PreTrainedTokenizer,其中包含了大部分主要方法。用户应参考此超类以获取有关这些方法的更多信息。
__call__
< source >( text: typing.Union[str, typing.List[str], typing.List[typing.List[str]]] = None text_pair: typing.Union[str, typing.List[str], typing.List[typing.List[str]], NoneType] = None text_target: typing.Union[str, typing.List[str], typing.List[typing.List[str]]] = None text_pair_target: typing.Union[str, typing.List[str], typing.List[typing.List[str]], NoneType] = None add_special_tokens: bool = True padding: typing.Union[bool, str, transformers.utils.generic.PaddingStrategy] = False truncation: typing.Union[bool, str, transformers.tokenization_utils_base.TruncationStrategy] = None max_length: typing.Optional[int] = None stride: int = 0 is_split_into_words: bool = False pad_to_multiple_of: typing.Optional[int] = None padding_side: typing.Optional[bool] = None return_tensors: typing.Union[str, transformers.utils.generic.TensorType, NoneType] = None return_token_type_ids: typing.Optional[bool] = None return_attention_mask: typing.Optional[bool] = None return_overflowing_tokens: bool = False return_special_tokens_mask: bool = False return_offsets_mapping: bool = False return_length: bool = False verbose: bool = True **kwargs ) → BatchEncoding
参数
- text (
str
,List[str]
,List[List[str]]
, optional) — 要编码的序列或序列批次。每个序列可以是一个字符串或一个字符串列表(预分词的字符串)。如果序列以字符串列表(预分词)的形式提供,你必须设置is_split_into_words=True
(以消除与序列批次的歧义)。 - text_pair (
str
,List[str]
,List[List[str]]
, optional) — 要编码的序列或序列批次。每个序列可以是一个字符串或一个字符串列表 (预分词的字符串)。如果序列以字符串列表(预分词)的形式提供,你必须设置is_split_into_words=True
(以消除与序列批次的歧义)。 - text_target (
str
,List[str]
,List[List[str]]
, optional) — 要编码为目标文本的序列或序列批次。每个序列可以是一个字符串或一个字符串列表(预分词的字符串)。如果序列以字符串列表(预分词)的形式提供,你必须设置is_split_into_words=True
(以消除与序列批次的歧义)。 - text_pair_target (
str
,List[str]
,List[List[str]]
, 可选) — 要编码为目标文本的序列或序列批次。每个序列可以是一个字符串或一个字符串列表(预分词的字符串)。如果序列以字符串列表(预分词)的形式提供,你必须设置is_split_into_words=True
(以消除与序列批次的歧义)。 - add_special_tokens (
bool
, 可选, 默认为True
) — 是否在编码序列时添加特殊标记。这将使用底层的PretrainedTokenizerBase.build_inputs_with_special_tokens
函数,该函数定义了哪些标记会自动添加到输入ID中。如果您想自动添加bos
或eos
标记,这将非常有用。 - padding (
bool
,str
or PaddingStrategy, optional, defaults toFalse
) — 激活并控制填充。接受以下值:True
或'longest'
: 填充到批次中最长的序列(如果只提供一个序列,则不进行填充)。'max_length'
: 填充到由参数max_length
指定的最大长度,或者如果未提供该参数,则填充到模型可接受的最大输入长度。False
或'do_not_pad'
(默认): 不进行填充(即,可以输出具有不同长度序列的批次)。
- truncation (
bool
,str
or TruncationStrategy, optional, defaults toFalse
) — Activates and controls truncation. Accepts the following values:True
or'longest_first'
: Truncate to a maximum length specified with the argumentmax_length
or to the maximum acceptable input length for the model if that argument is not provided. This will truncate token by token, removing a token from the longest sequence in the pair if a pair of sequences (or a batch of pairs) is provided.'only_first'
: Truncate to a maximum length specified with the argumentmax_length
or to the maximum acceptable input length for the model if that argument is not provided. This will only truncate the first sequence of a pair if a pair of sequences (or a batch of pairs) is provided.'only_second'
: Truncate to a maximum length specified with the argumentmax_length
or to the maximum acceptable input length for the model if that argument is not provided. This will only truncate the second sequence of a pair if a pair of sequences (or a batch of pairs) is provided.False
or'do_not_truncate'
(default): No truncation (i.e., can output batch with sequence lengths greater than the model maximum admissible input size).
- max_length (
int
, optional) — Controls the maximum length to use by one of the truncation/padding parameters.如果未设置或设置为
None
,则在需要截断/填充参数时,将使用预定义的模型最大长度。如果模型没有特定的最大输入长度(如XLNet),则截断/填充到最大长度的功能将被停用。 - stride (
int
, 可选, 默认为 0) — 如果与max_length
一起设置为一个数字,当return_overflowing_tokens=True
时返回的溢出标记将包含来自截断序列末尾的一些标记,以提供截断序列和溢出序列之间的一些重叠。此参数的值定义了重叠标记的数量。 - is_split_into_words (
bool
, 可选, 默认为False
) — 输入是否已经预分词(例如,分割成单词)。如果设置为True
,分词器会假设输入已经分割成单词(例如,通过空格分割),然后进行分词。这对于NER或标记分类非常有用。 - pad_to_multiple_of (
int
, 可选) — 如果设置,将序列填充到提供的值的倍数。需要激活padding
。 这对于在计算能力>= 7.5
(Volta)的NVIDIA硬件上启用Tensor Cores特别有用。 - padding_side (
str
, 可选) — 模型应在哪一侧应用填充。应在['right', 'left']之间选择。 默认值从同名的类属性中选取。 - return_tensors (
str
或 TensorType, 可选) — 如果设置,将返回张量而不是Python整数列表。可接受的值有:'tf'
: 返回 TensorFlowtf.constant
对象。'pt'
: 返回 PyTorchtorch.Tensor
对象。'np'
: 返回 Numpynp.ndarray
对象。
- return_token_type_ids (
bool
, optional) — Whether to return token type IDs. If left to the default, will return the token type IDs according to the specific tokenizer’s default, defined by thereturn_outputs
attribute. - return_attention_mask (
bool
, optional) — Whether to return the attention mask. If left to the default, will return the attention mask according to the specific tokenizer’s default, defined by thereturn_outputs
attribute. - return_overflowing_tokens (
bool
, optional, 默认为False
) — 是否返回溢出的令牌序列。如果提供了一对输入ID序列(或一批对),并且使用了truncation_strategy = longest_first
或True
,则会引发错误,而不是返回溢出的令牌。 - return_special_tokens_mask (
bool
, optional, defaults toFalse
) — 是否返回特殊令牌掩码信息。 - return_offsets_mapping (
bool
, optional, defaults toFalse
) — Whether or not to return(char_start, char_end)
for each token.这仅在继承自PreTrainedTokenizerFast的快速分词器上可用,如果使用Python的分词器,此方法将引发
NotImplementedError
。 - return_length (
bool
, optional, defaults toFalse
) — 是否返回编码输入的长度。 - verbose (
bool
, 可选, 默认为True
) — 是否打印更多信息和警告。 - **kwargs — 传递给
self.tokenize()
方法
一个BatchEncoding包含以下字段:
-
input_ids — 要输入模型的令牌ID列表。
-
token_type_ids — 要输入模型的令牌类型ID列表(当
return_token_type_ids=True
或 如果“token_type_ids”在self.model_input_names
中)。 -
attention_mask — 指定模型应关注哪些令牌的索引列表(当
return_attention_mask=True
或如果“attention_mask”在self.model_input_names
中)。 -
overflowing_tokens — 溢出令牌序列列表(当指定了
max_length
并且return_overflowing_tokens=True
)。 -
num_truncated_tokens — 截断的令牌数量(当指定了
max_length
并且return_overflowing_tokens=True
)。 -
special_tokens_mask — 0和1的列表,1表示添加的特殊令牌,0表示 常规序列令牌(当
add_special_tokens=True
和return_special_tokens_mask=True
)。 -
length — 输入的长度(当
return_length=True
)
主要方法,用于将一个或多个序列或一个或多个序列对进行标记化并准备供模型使用。
VitsModel
类 transformers.VitsModel
< source >( config: VitsConfig )
参数
- config (VitsConfig) — 模型配置类,包含模型的所有参数。使用配置文件初始化时不会加载与模型相关的权重,仅加载配置。查看 from_pretrained() 方法以加载模型权重。
完整的VITS模型,用于文本到语音合成。 该模型继承自PreTrainedModel。请查看超类文档以了解库为其所有模型实现的通用方法(如下载或保存、调整输入嵌入的大小、修剪头部等)。
该模型也是一个PyTorch torch.nn.Module 子类。 将其作为常规的PyTorch模块使用,并参考PyTorch文档以获取与一般使用和行为相关的所有信息。
前进
< source >( input_ids: typing.Optional[torch.Tensor] = None attention_mask: typing.Optional[torch.Tensor] = None speaker_id: typing.Optional[int] = None output_attentions: typing.Optional[bool] = None output_hidden_states: typing.Optional[bool] = None return_dict: typing.Optional[bool] = None labels: typing.Optional[torch.FloatTensor] = None ) → transformers.models.vits.modeling_vits.VitsModelOutput
或 tuple(torch.FloatTensor)
参数
- input_ids (
torch.LongTensor
of shape(batch_size, sequence_length)
) — Indices of input sequence tokens in the vocabulary. Padding will be ignored by default should you provide it.可以使用AutoTokenizer获取索引。详情请参见PreTrainedTokenizer.encode()和 PreTrainedTokenizer.call()。
- attention_mask (
torch.Tensor
of shape(batch_size, sequence_length)
, optional) — Mask to avoid performing convolution and attention on padding token indices. Mask values selected in[0, 1]
:- 1 for tokens that are not masked,
- 0 for tokens that are masked.
- speaker_id (
int
, optional) — 使用哪个说话者嵌入。仅用于多说话者模型。 - output_attentions (
bool
, 可选) — 是否返回所有注意力层的注意力张量。有关更多详细信息,请参见返回张量下的attentions
。 - output_hidden_states (
bool
, 可选) — 是否返回所有层的隐藏状态。有关更多详细信息,请参见返回张量下的hidden_states
。 - return_dict (
bool
, 可选) — 是否返回一个 ModelOutput 而不是一个普通的元组。 - 标签 (
torch.FloatTensor
形状为(batch_size, config.spectrogram_bins, sequence_length)
, 可选) — 目标频谱图的浮点值。时间步设置为-100.0
的将被忽略(屏蔽)以进行损失计算。
返回
transformers.models.vits.modeling_vits.VitsModelOutput
或 tuple(torch.FloatTensor)
一个 transformers.models.vits.modeling_vits.VitsModelOutput
或一个由 torch.FloatTensor
组成的元组(如果传递了 return_dict=False
或当 config.return_dict=False
时),包含根据配置(VitsConfig)和输入的各种元素。
-
waveform (
torch.FloatTensor
形状为(batch_size, sequence_length)
) — 模型预测的最终音频波形。 -
sequence_lengths (
torch.FloatTensor
形状为(batch_size,)
) —waveform
批次中每个元素的样本长度。 -
spectrogram (
torch.FloatTensor
形状为(batch_size, sequence_length, num_bins)
) — 在流模型输出处预测的对数梅尔频谱图。该频谱图被传递给 Hi-Fi GAN 解码器模型以获得最终的音频波形。 -
hidden_states (
tuple(torch.FloatTensor)
, 可选, 当传递output_hidden_states=True
或当config.output_hidden_states=True
时返回) — 由torch.FloatTensor
组成的元组(一个用于嵌入层的输出,如果模型有嵌入层,+ 一个用于每一层的输出)形状为(batch_size, sequence_length, hidden_size)
。模型在每一层输出处的隐藏状态加上可选的初始嵌入输出。
-
attentions (
tuple(torch.FloatTensor)
, 可选, 当传递output_attentions=True
或当config.output_attentions=True
时返回) — 由torch.FloatTensor
组成的元组(每层一个)形状为(batch_size, num_heads, sequence_length, sequence_length)
。注意力权重在注意力 softmax 之后,用于计算自注意力头中的加权平均值。
VitsModel 的前向方法,重写了 __call__
特殊方法。
尽管前向传递的配方需要在此函数内定义,但之后应该调用Module
实例而不是这个,因为前者负责运行预处理和后处理步骤,而后者会默默地忽略它们。
示例:
>>> from transformers import VitsTokenizer, VitsModel, set_seed
>>> import torch
>>> tokenizer = VitsTokenizer.from_pretrained("facebook/mms-tts-eng")
>>> model = VitsModel.from_pretrained("facebook/mms-tts-eng")
>>> inputs = tokenizer(text="Hello - my dog is cute", return_tensors="pt")
>>> set_seed(555) # make deterministic
>>> with torch.no_grad():
... outputs = model(inputs["input_ids"])
>>> outputs.waveform.shape
torch.Size([1, 45824])