You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何恢复训练好的Tacotron2模型并解决调用infer方法报错问题

错误原因

你调用的是NeMo框架封装的Tacotron2Model类,该类没有infer方法,你参考的PyTorch Hub原生NVIDIA Tacotron2接口和NeMo封装后的接口不通用,这是报错的核心原因。

修正后的可运行代码

from nemo.collections.tts.models import Tacotron2Model
import torch

# 加载你训练好的NeMo格式Tacotron2模型
check_point_path = '/content/drive/My Drive/***/checkpoints/'
tacotron2 = Tacotron2Model.restore_from(check_point_path + 'Tacotron2.nemo')
tacotron2 = tacotron2.to('cuda')
tacotron2.eval()

# 加载WaveGlow声码器
waveglow = torch.hub.load('NVIDIA/DeepLearningExamples:torchhub', 'nvidia_waveglow', model_math='fp16')
waveglow = waveglow.remove_weightnorm(waveglow)
waveglow = waveglow.to('cuda')
waveglow.eval()

text = "你需要生成的文本内容"

with torch.no_grad():
    # 先用Tacotron2自带的parse方法处理文本,得到编码后的序列
    parsed_text = tacotron2.parse(text)
    # 调用generate方法生成mel谱,这是NeMo封装的正确接口
    mel_spec, _, _ = tacotron2.generate(**parsed_text)
    # 声码器生成音频
    audio = waveglow.infer(mel_spec)
audio_numpy = audio[0].data.cpu().numpy()
rate = 22050

from IPython.display import Audio
Audio(audio_numpy, rate=rate)

单独提取Mel谱的方法

如果你不需要生成音频,只需要输出mel谱,直接取generate方法的第一个返回值即可,得到的是张量格式的mel谱,shape为[batch_size, mel_bins, time_steps],可以按需转成numpy格式保存。

注意事项

  • 如果你训练Tacotron2时用的文本标注规则(比如音素/字符编码、特殊符号定义)和默认配置不同,要确保输入文本和训练时的预处理规则一致,避免生成效果异常
  • 如果WaveGlow推理时出现维度不匹配报错,可以检查mel谱的维度,部分版本的NeMo输出的mel谱可能需要调整维度顺序适配WaveGlow,只需调用mel_spec = mel_spec.transpose(1,2)调整即可

内容的提问来源于stack exchange,提问作者Majid Adibian

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 10:45:04