NeuTTS-Nano-French 是由 Neuphonic 开发的轻量级法语语音合成(TTS)模型,属于 NeuTTS Nano 多语言系列。该模型专为端侧设备设计,支持即时语音克隆功能,可在 CPU 和边缘设备上实现实时语音合成。
| 属性 | 说明 |
|---|---|
| 原始模型 | neuphonic/neutts-nano-french |
| 任务类型 | Text-to-Speech (TTS) / 语音合成 |
| 模型框架 | PyTorch (LlamaForCausalLM 架构) |
| 输入格式 | 文本(法语)+ 参考音频(.wav) |
| 输出格式 | 24kHz 单声道 WAV 音频 |
| 模型参数 | ~228.7M(激活 ~116.8M) |
| 语言 | 法语(fr) |
| 音频编解码 | NeuCodec(单码本神经音频编解码器) |
本仓库在 华为昇腾 Ascend910 NPU 上完成了 NeuTTS-Nano-French 的适配和验证。
AutoModelForCausalLM 加载即可自动适配 NPUtorch.device("npu") 将 backbone 和 codec 模型加载到 NPU| 组件 | 版本 |
|---|---|
| Python | 3.11.14 |
| PyTorch | 2.9.0+cpu |
| torch_npu | 2.9.0.post1 |
| CANN | 25.5.2 |
| NPU | Ascend910 (64GB HBM) |
| OS | Linux aarch64 |
neutts>=1.0.0
neucodec>=0.0.5
soundfile>=0.12.0
librosa>=0.10.0
numpy>=1.24.0
torch>=2.0.0系统依赖(用于音素化):
# espeak-ng(phonemizer 后端)
espeak-ng >= 1.52.0# Ubuntu/Debian
sudo apt install espeak-ng
# 或从源码构建
git clone https://github.com/espeak-ng/espeak-ng.git
cd espeak-ng
./autogen.sh
./configure --prefix=/usr/local
make -j$(nproc)
make installpip install neutts neucodec soundfile librosa numpyexport PHONEMIZER_ESPEAK_PATH=/path/to/espeak-ng
export PHONEMIZER_ESPEAK_LIBRARY=/path/to/libespeak-ng.so
export HF_ENDPOINT=https://hf-mirror.com # 或 HuggingFace 直连# NPU 推理
python inference.py --device npu
# 使用自定义文本
python inference.py --device npu --input_text "Bonjour, comment allez-vous?"
# 使用自定义参考音频
python inference.py --device npu \
--ref_audio samples/juliette.wav \
--ref_text samples/juliette.txt \
--input_text "Votre texte en français ici."python compare_cpu_npu.py此脚本自动执行:
测试条件:
"Dans les zones rurales où de nombreuses communautés n'ont pas accès à l'électricité, l'énergie solaire peut faire une énorme différence."samples/juliette.wav(约 3.5 秒法语女声)NPU 推理结果:
| 指标 | 数值 |
|---|---|
| 模型加载时间 | 24.20s |
| 参考音频编码 | 0.85s |
| 推理生成时间 | 10.09s |
| 输出音频长度 | 8.46s |
| 音频采样率 | 24000 Hz |
CPU 推理结果:
| 指标 | 数值 |
|---|---|
| 模型加载时间 | 23.25s |
| 参考音频编码 | 0.79s |
| 推理生成时间 | 122.78s |
| 输出音频长度 | 8.82s |
| 音频采样率 | 24000 Hz |
性能对比(NPU vs CPU):
| 指标 | CPU | NPU (Ascend910) | 加速比 |
|---|---|---|---|
| 推理生成时间 | 122.78s | 10.09s | 12.2x |
| 参考音频编码 | 0.79s | 0.85s | 0.9x |
使用贪婪解码模式(do_sample=False)进行精度对比,消除采样随机性影响:
| 指标 | 数值 | 说明 |
|---|---|---|
| 均方误差 (MSE) | 0.0000000000 | 完全一致 |
| 最大绝对误差 (MaxAbs) | 0.0000000000 | 完全一致 |
| 平均绝对误差 (MAE) | 0.0000000000 | 完全一致 |
| 相对误差 | 0.0000% | < 1% ✅ |
| 余弦相似度 | 1.0000000000 | 完全一致 |
| 峰值信噪比 (PSNR) | inf dB | 完全一致 |
| 波形符号一致率 | 100.00% | 完全一致 |
| 输出音频长度 | 642720 samples (26.78s) | 完全一致 |
结论:NPU 与 CPU 推理结果误差为 0.0000%,远低于 1% 的要求。在贪婪解码模式下,NPU 与 CPU 输出波形完全一致。
该模型默认使用 temperature=1.0, do_sample=True 进行采样式生成,这是 TTS 生成模型的正常行为,用于增加语音的自然度和表现力。在采样模式下:
do_sample=False(贪婪解码)可消除随机性,验证 NPU 与 CPU 的计算一致性neutts-nano-french/
├── inference.py # 推理脚本(支持 CPU/NPU)
├── compare_cpu_npu.py # CPU vs NPU 精度对比脚本
├── requirements.txt # Python 依赖清单
├── README.md # 本说明文档
├── samples/
│ ├── juliette.wav # 参考音频样本
│ └── juliette.txt # 参考音频对应文本
├── output_cpu.wav # CPU 推理输出示例
└── output_npu.wav # NPU 推理输出示例#+NPU#+语音#+TTS#+法语#+昇腾#+端侧推理#+语音克隆