g
gcw_coj3XaOd/speech_sambert-hifigan_tts_zh-cn_multisp_pretrain_16k
模型介绍文件和版本Pull Requests讨论分析
下载使用量0

SAMBERT-HiFiGAN TTS (中文多说话人)

中文多说话人 TTS 模型,基于 SAMBERT 声学模型 + HiFiGAN 声码器。

模型信息

项目值
模型类型Text-to-Speech (TTS)
语言中文普通话
说话人F7 (女声默认)
采样率16kHz
声学模型KanTtsSAMBERT (Transformer + FSMN)
声码器HiFiGAN

声学模型架构 (AM)

  • Encoder: 8层 Transformer 编码器, 128维, 8头注意力
  • Decoder: 12层 Transformer 解码器, 128维, 8头注意力
  • Predictor: Duration/Pitch/Energy 预测 (LSTM + FSMN)
  • Postnet: 4层 FSMN 后处理网络

声码器架构 (Vocoder)

  • 输入: 80维 mel-spectrogram
  • 上采样: [10, 5, 2, 2] = 200x 上采样
  • ResBlock: 3个残差块,每个4层卷积
  • 输出: 16kHz 波形

安装依赖

pip install torch numpy pyyaml

使用方法

基本用法

python3 inference.py --text "今天天气真好" --output output.wav

参数说明

参数默认值说明
--text今天天气真好输入文本
--outputoutput.wav输出音频文件
--voiceF7说话人 (当前仅支持 F7)
--model_dir./模型根目录

Python API

import sys
sys.path.insert(0, '.')
from inference import main

# 命令行方式
# python3 inference.py --text "你好世界" --output hello.wav

推理证据

$ python3 inference.py --text "北京今天天气怎么样" --output /tmp/test.wav

AM: 395/395 loaded
Mel: torch.Size([1, 60, 80]), range: [-3.56, 1.96]
Voc: 318/318 loaded
Saved /tmp/test.wav: 16000Hz, 0.75s

精度对比 (CPU FP32 vs GPU FP16)

指标值
MSE1.68e-06
MAE1.01e-03
Max Abs Error6.34e-03
Cosine Similarity0.999957
SNR40.6 dB

结论: FP16 精度损失可忽略 (cos_sim > 0.999),GPU 推理与 CPU 输出一致。

适配说明

此模型从 ModelScope 下载后进行了以下适配:

Bug 修复

  1. 位置编码数值溢出 — 原代码 exp(inv * log(10000)) 在大模型维度时 NaN,修正为 exp(inv * log(10000.0) / d)

  2. FSMN 架构错误 — FSMN 和 BLSTM 应为串联架构 (FSMN → Linear → BN),而非并联

  3. 条件嵌入维度不匹配 — pitch/energy/emotion 嵌入从 32 维投影到 128 维

  4. PostnetFSMN 维度不匹配 — Postnet 输入 80 维而 memory 要求 256 维,添加 FFN 投影层

  5. HiFiGAN ResBlock 聚合错误 — 残差块输出应求和 .sum(0) 而非平均 .mean(0)

权重加载

  • 声学模型 (AM): 395/395 权重全部加载
  • 声码器 (Vocoder): 318/318 权重全部加载
  • 权重名映射: 检查点使用模块名 (如 repeat_ups, deconv) 映射到代码结构

目录结构

.
├── inference.py    # 推理脚本
├── voices/
│   ├── voices.json        # 说话人列表
│   └── F7/
│       ├── am/
│       │   ├── config.yaml
│       │   └── ckpt/      # 声学模型权重
│       └── voc/
│           ├── config.yaml
│           └── ckpt/      # 声码器权重
└── README.md

限制

  • 仅支持单说话人 (F7)
  • 输入文本需为简体中文
  • 未支持 GPU 加速优化

License

ModelScope 模型权重许可