File size: 4,158 Bytes
8fc5958
 
 
 
 
 
 
 
 
 
 
 
 
0629038
b413289
 
0629038
 
 
 
 
 
1e7ea51
 
 
 
 
0629038
b413289
 
 
0629038
b413289
 
 
 
0629038
b413289
 
 
0629038
 
 
 
 
b413289
0629038
b413289
 
0629038
914e755
0629038
914e755
 
 
 
 
0629038
914e755
 
 
 
 
b2e96cd
 
 
 
 
 
 
 
 
 
 
 
 
 
0629038
 
 
b2e96cd
 
b413289
 
0629038
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
---
license: apache-2.0
pipeline_tag: text-to-speech
tags:
  - axera
  - ax650
  - npu
  - tts
  - text-to-speech
  - zh
  - en
---

# Hojo-TTS-Light-40M — AX650/NPU3 预编译模型 + C++ SDK(s8 修复版)

Hojo-TTS-Light-40M 中文/英文 TTS(24kHz,15 音色)在爱芯 AX650/NPU3 上的预编译部署包。
全链路 NPU:LM(ax-llm s8)+ fine_local + decoder。

相对上一版的改进:
- LM 权重由 s4/W4A16 升级为 **s8**(Pulsar2 7.0 `llm_build2`),step0 logits 精度更高、长程生成更稳
- **修复生成随机性问题**:上一版 `temperature=0.0` 被运行时钳制为 1.0,实际退化为无种子 softmax 采样,
  导致每次生成完全不同、偶发近乎静音;本版固定为 argmax 确定性生成,相同输入多次运行 token 序列完全一致
- **修复全链路音频质量**(v2,2026-08-10):
  - fine_local 输入需对 LM hidden 做 RMS 归一化(axllm 输出未归一化,参考管线 RMS=1)
  - decoder bits padding 必须全零(上一版复制末帧污染输出)
  - decoder_sq 输出为 log-mag([nf, 2048] 全帧布局),ISTFT 读取 stride 修正为 2048
  - 修复后示例音频经 ASR 验证可正常转写(EN: "Hello, this is a demo.")
- 示例音频已更新为修复版实机生成

## 内容
- `models/`:预编译模型
  - `lm_s8/`:LM 10 层 decode-only axmodel + post + embedding(Pulsar2 7.0 llm_build2,s8/bf16 hidden)
  - `fine_local.axmodel`(INT8,cos 0.9997)
  - `decoder_sq.axmodel`(SmoothQuant+U16,mag 0.998+ / phase 0.95-0.97)
  - 音色 / 词典 / speaker_vecs / id2code / speaker_embeds
- `bin/`:C++ 可执行(AX650/aarch64)
  - `hojo_tts_cpp` / `tts_driver`:LM 生成 + 全链路出 wav

## 用法(板端)
```bash
./bin/hojo_tts_cpp \
  models/lm_s8 <embeds.bin> <num_tokens> 17659 128 \
  models/fine_local.axmodel models/decoder_sq.axmodel \
  models/lm_s8/embed_tokens.bin models/speaker_vecs.bin \
  <voice_idx> models/id2code.bin out.wav
```
`<embeds.bin>` 为文本 prompt 的 BF16 embedding(50 token 示例见 `models/README.md` 说明),
输出 `out.wav`(24kHz)。音色索引 0-14(voice_ids 见 models/Hojo-TTS-Light-40M-voice.npz)。

## 示例音频(24kHz WAV,板端 s8 实机生成)

中文示例(voice hojo_zh_f_01):

<audio controls src="https://huggingface.co/AXERA-TECH/Hojo-TTS-Light/resolve/main/audio/demo_zh.wav">
  你的浏览器不支持音频播放,可<a href="https://huggingface.co/AXERA-TECH/Hojo-TTS-Light/resolve/main/audio/demo_zh.wav">下载中文示例</a></audio>

英文示例(voice hojo_en_m_02):

<audio controls src="https://huggingface.co/AXERA-TECH/Hojo-TTS-Light/resolve/main/audio/demo_en.wav">
  你的浏览器不支持音频播放,可<a href="https://huggingface.co/AXERA-TECH/Hojo-TTS-Light/resolve/main/audio/demo_en.wav">下载英文示例</a>
</audio>

长示例(20 秒级,采样生成 temperature=0.8 / top_p=0.95 / repetition_penalty=1.1,与厂商推理一致):

中文长示例(voice hojo_zh_f_01):

<audio controls src="https://huggingface.co/AXERA-TECH/Hojo-TTS-Light/resolve/main/audio/demo_zh_long.wav">
  你的浏览器不支持音频播放,可<a href="https://huggingface.co/AXERA-TECH/Hojo-TTS-Light/resolve/main/audio/demo_zh_long.wav">下载中文长示例</a></audio>

英文长示例(voice hojo_en_m_02):

<audio controls src="https://huggingface.co/AXERA-TECH/Hojo-TTS-Light/resolve/main/audio/demo_en_long.wav">
  你的浏览器不支持音频播放,可<a href="https://huggingface.co/AXERA-TECH/Hojo-TTS-Light/resolve/main/audio/demo_en_long.wav">下载英文长示例</a>
</audio>

## 精度 / 性能
- LM s8:step0 top1 命中,前 30 步与 fp32 ONNX greedy 完全一致(量化累积后分叉属预期)
- decode ~175 tok/s;全链路 RTF≈0.43(decoder_sq)
- 短文本可用确定性 greedy(`post_config.json` 默认采样,避免长文本重复退化;greedy 可通过
  `enable_temperature=false` 开启)

## 复现
模型转换(ONNX → HF safetensors → llm_build2)与 C++ SDK 构建源码见 GitHub:`ml-inory/hojo-tts-light.axera`