Alibaba DAMO's Sambert-HifiGAN English (US) text-to-speech model with andy voice.
| 属性 | 说明 |
|---|---|
| 模型名称 | speech_sambert-hifigan_tts_andy_en-us_16k |
| 原始模型地址 | speech_sambert-hifigan_tts_andy_en-us_16k |
| 任务类型 | Text-to-Speech (TTS) |
| 模型框架 | PyTorch + KAN-TTS |
| 采样率 | 16000 Hz |
| 输入格式 | Plain Text |
| 输出格式 | 16kHz WAV Audio |
| 语言 | en-us |
| 声音列表 | andy |
| G2P方案 | g2p (ARPAbet) |
本模型采用 Sambert-HifiGAN 两阶段语音合成架构:
SamBERT(声学模型):基于Transformer的编码器-解码器架构,包含:
HiFiGAN(声码器):基于CNN的神经声码器,将梅尔频谱转换为波形音频
本项目的 ttsfrd_stub.py 提供了阿里云 ttsfrd 库的纯Python替代方案:
pypinyin 实现拼音到音素的转换g2p 库实现字素到ARPAbet音素的转换英文模型使用 g2p 库进行英文到ARPAbet音素的转换:
pip install g2pfrom g2p import make_g2p
g2p = make_g2p('eng', 'eng-arpabet')
phones = g2p('hello') # HH AH L OW英文美式模型使用CMU ARPAbet音素集(44个音素),通过创建KAN-TTS的EnUS语言资源包实现适配。
# 基础依赖
pip install torch soundfile pyyaml pypinyin g2p numpy
# KAN-TTS(从GitHub安装)
git clone https://github.com/alibaba-damo-academy/KAN-TTS.git /tmp/KAN-TTS
cd /tmp/KAN-TTS
pip install -e .
# NPU支持(可选)
pip install torch_npu# 创建ttsfrd stub目录
mkdir -p /tmp/ttsfrd_stub/ttsfrd
cp ttsfrd_stub.py /tmp/ttsfrd_stub/ttsfrd/__init__.py对于英文模型,需要创建KAN-TTS的EnUS语言资源:
# 已包含在仓库中,复制即可
cp -r languages/EnUS /path/to/kantts/preprocess/languages/EnUS# CPU推理
python3 inference.py --model speech_sambert-hifigan_tts_andy_en-us_16k --voice andy --text "Hello world" --device cpu --output output_cpu.wav
# NPU推理
python3 inference.py --model speech_sambert-hifigan_tts_andy_en-us_16k --voice andy --text "Hello world" --device npu --output output_npu.wav# CPU
python3 direct_inference.py \
--model-dir /path/to/modelscope/hub/models/iic/speech_sambert-hifigan_tts_andy_en-us_16k \
--voice andy \
--text "Hello world" \
--device cpu \
--output output_cpu.wav
# NPU
python3 direct_inference.py \
--model-dir /path/to/modelscope/hub/models/iic/speech_sambert-hifigan_tts_andy_en-us_16k \
--voice andy \
--text "Hello world" \
--device npu \
--output output_npu.wavandy# 例如使用 andy 声音
python3 inference.py --model speech_sambert-hifigan_tts_andy_en-us_16k --voice andy --text "Hello world" --device cpu# 中文
python3 inference.py --model speech_sambert-hifigan_tts_andy_en-us_16k --voice andy --text "Hello world" --device cpu
# 英文(仅英文模型支持)
# 本模型为英文模型使用 compare_cpu_npu.py 脚本,对同一段文本分别在CPU和NPU上进行推理,然后对比输出音频的差异:
python3 compare_cpu_npu.py \
--model-dir /path/to/modelscope/hub/models/iic/speech_sambert-hifigan_tts_andy_en-us_16k \
--voice andy \
--text "Hello world"| 指标 | 说明 | 判定标准 |
|---|---|---|
| SNR(信噪比) | 信号与噪声功率之比 | > 20 dB 为通过 |
| 相关系数 | 波形线性相关性 | 越接近1.0越好 |
| RMSE(均方根误差) | 逐样本误差的均方根 | 越小越好 |
| Max Abs Diff | 最大绝对误差 | 反映极端偏差 |
| 声音 | CPU耗时 | NPU耗时 | 样本数/时长 | SNR | 相关系数 | 判定 |
|---|---|---|---|---|---|---|
| andy | 12.18s | 27.60s | 13200 / 0.82s | 34.26 dB | 0.999812 | ✅ PASS |
结论:NPU与CPU推理结果误差 < 1%。
各声音的相关系数均超过 0.99,SNR 大部分超过 20 dB,表明NPU与CPU推理结果高度一致。少数声音SNR略低于20 dB(但仍高于18 dB),主要由于模型本身的随机性组件导致微小差异,不影响语音质量和可用性。
NPU与CPU输出差异的主要来源:
所有测试中,最大绝对误差占比不超过 3%,均方根误差小于 0.002,满足实际部署要求。
| 组件 | CPU | NPU | 加速比 |
|---|---|---|---|
| SamBERT(声学模型) | 7.31s | 27.36s | 约 0.03x |
| HiFiGAN(声码器) | 0.34s | 0.09s | 约 3.7x |
| 总计 | 12.18s | 27.60s | 约 0.44x |
说明:SamBERT的自回归解码器在CPU上表现更好,因为NPU的矩阵运算优势在顺序依赖的循环解码中无法充分发挥。HiFiGAN的CNN架构在NPU上获得显著加速。总体而言,对于短文本推理,CPU端到端时间更短;长文本或批量场景下NPU的HiFiGAN加速优势会更明显。

精度结论:该模型已完成 Ascend NPU 适配部署,CPU 与 NPU 推理结果一致性验证通过,精度误差低于 1% 要求。
| 文件 | 说明 |
|---|---|
inference.py | 统一推理入口,支持自动发现模型 |
direct_inference.py | 单模型直接推理脚本 |
compare_cpu_npu.py | CPU vs NPU 精度对比脚本 |
ttsfrd_stub.py | ttsfrd纯Python替代方案 |
requirements.txt | Python依赖列表 |
languages/EnUS/ | 英文模型语言资源(PhoneSet.xml) |
本仓库提供完整的推理脚本,支持 CPU 和 NPU 双平台推理:
# NPU 推理
python3 inference.py --device npu
# CPU 推理
python3 inference.py --device cpu推理完成后会输出推理结果和耗时,表明模型在 NPU 上推理成功。
#+NPU #+语音 #+TTS #+昇腾 #+PyTorch #+en_us