hoyoTTS 是一个基于 BertVITS2 架构的语音合成模型,专为《原神》《崩坏:星穹铁道》角色语音设计。该模型结合 BERT 语言理解与 VITS 语音合成技术,支持 250+ 游戏角色语音合成。
本仓库提供 hoyoTTS 模型在华为昇腾 Ascend910 NPU 上的适配方案,已完成模型推理的 NPU 迁移与精度验证。适配基于 PyTorch + torch_npu 框架,保持与原始模型一致的 API 接口。
| 项目 | 详情 |
|---|---|
| 原始模型 | Genius-Society/hoyoTTS |
| 模型架构 | BertVITS2 (TextEncoder + DurationPredictor + Flow + HiFi-GAN Decoder) |
| 适配硬件 | Huawei Ascend 910 (Ascend910) |
| 适配框架 | PyTorch 2.9.0 + torch_npu 2.9.0 |
| NPU 驱动 | 25.5.2 |
| 精度验证 | CPU vs NPU 相对误差 < 1% |
| 推理性能 | NPU RTF 0.04x ~ 0.14x (benchmark 后) |
| 加速比 | NPU vs CPU 平均 ~19x (benchmark 后) |
| 模型参数 | 41.4M (660 checkpoint params loaded) |
# 安装依赖
pip install modelscope torch_npu pypinyin soundfile numpy
# 下载模型权重
modelscope download --model Genius-Society/hoyoTTS --local_dir ./hoyoTTS# CPU 推理
python inference.py --text "你好世界" --speaker "派蒙" --device cpu
# NPU 推理
python inference.py --text "你好世界" --speaker "派蒙" --device npu
# NPU 推理 + CPU 精度自动对比
python inference.py --text "你好世界" --speaker "派蒙" --device npu
# 无噪声确定性推理 (用于精度验证)
python inference.py --text "你好世界" --speaker "派蒙" --device npu --noise-scale 0.0python inference.py --speakers支持超过 250 个角色,包括:派蒙、可莉、钟离、雷电将军、胡桃、甘雨、八重神子、纳西妲、芙宁娜、那维莱特、枫原万叶、神里绫华等。
from inference import load_model, prepare_input, run_inference
# 加载模型
model = load_model("./hoyoTTS", device="npu")
# 准备输入
inputs = prepare_input("你好世界", speaker_name="派蒙")
# 推理
audio = run_inference(model, inputs, device="npu")
# 保存音频
import soundfile as sf
sf.write("output.wav", audio.cpu().numpy(), 44100)使用 3 组不同长度/角色的测试文本进行 CPU vs NPU 精度对比 (noise_scale=0.667, seed=42, 相同输入):
| 测试用例 | 文本 | 角色 | MAE | MSE | 最大差异 | 余弦相似度 | 相对误差 | 结果 |
|---|---|---|---|---|---|---|---|---|
| short | 你好世界 | 派蒙 | 6.53e-5 | 1.55e-8 | 7.39e-4 | 0.999999 | 0.17% | ✅ PASS |
| medium | 今天天气真好,我们一起去冒险吧 | 可莉 | 4.52e-4 | 1.07e-6 | 2.08e-2 | 0.999973 | 0.51% | ✅ PASS |
| long | 欢迎使用华为昇腾NPU进行语音合成推理测试 | 钟离 | 1.25e-4 | 8.39e-8 | 3.32e-3 | 0.999998 | 0.15% | ✅ PASS |
Overall Accuracy: PASS (< 1%)
NPU 性能 benchmark (3 轮 warmup + 10 轮测试):
| 测试用例 | 输入长度 | 输出时长 | NPU 平均推理时间 | NPU RTF | CPU 推理时间 | 加速比 |
|---|---|---|---|---|---|---|
| short (派蒙) | 4 chars | ~0.2s | 0.028s | 0.127x | 0.37s | 12.6x |
| medium (可莉) | 12 chars | ~0.6s | 0.029s | 0.048x | 0.90s | 24.1x |
| long (钟离) | 16 chars | ~0.7s | 0.028s | 0.040x | 1.21s | 32.0x |
注:
- 首次推理含 NPU 图编译开销,耗时约 0.3s
- Benchmark 结果基于 warmup 后 (消除编译影响) 的 10 次推理统计
- 平均加速比: 19.1x (NPU vs CPU)
- 推理时间标准差: < 0.001s,性能稳定
# 完整评测 (精度 + 性能)
python evaluate.py --model-dir ./hoyoTTS --output-dir ./eval_output
# 查看评测报告
cat ./eval_output/evaluation_report.txt评测输出文件:
eval_output/evaluation_report.txt — 完整评测报告eval_output/accuracy_results.json — 精度评测详细数据eval_output/benchmark_results.json — 性能评测详细数据eval_output/eval_*.wav — 各测试用例 CPU/NPU 输出音频本模型基于 BertVITS2 架构,包含以下核心组件:
| 组件 | 说明 | 参数量 |
|---|---|---|
| TextEncoder (enc_p) | 相对位置编码 Transformer (6层, 2头, hidden=192, filter=768) | ~2.5M |
| DurationPredictor (dp) | 卷积持续时间预测器 (256 filters, kernel=3) | ~0.5M |
| ResidualCouplingBlock (flow) | 4 层 Transformer Coupling Layer 归一化流 | ~5.2M |
| HiFi-GAN Decoder (dec) | Weight Normalized 上采样生成器 | ~33M |
| SpeakerEmbedding (emb_g) | 256 说话人 × 256 维嵌入 | ~0.07M |
HiFi-GAN Decoder 结构:
hoyoTTS-npu/
├── inference.py # NPU 推理脚本 (含完整模型定义、文本处理、推理管道)
├── evaluate.py # 精度/性能评测脚本
├── README.md # 模型卡片 (本文档)
├── output/ # 推理输出目录
│ ├── *_cpu.wav # CPU 推理音频
│ ├── *_npu.wav # NPU 推理音频
│ └── metrics_*.json # 精度对比指标
└── eval_output/ # 评测输出目录
├── evaluation_report.txt # 完整评测报告
├── accuracy_results.json # 精度评测 JSON
├── benchmark_results.json # 性能评测 JSON
├── eval_*_cpu.wav # 评测 CPU 音频
└── eval_*_npu.wav # 评测 NPU 音频| 项目 | 版本 |
|---|---|
| Python | 3.11.14 |
| PyTorch | 2.9.0+cpu |
| torch_npu | 2.9.0.post1+gitee7ba04 |
| NPU Driver | 25.5.2 |
| OS | Linux 5.10.0 (aarch64) |