Pocket-TTS 中英双语 · AX650 推理包

Pocket-TTS 中英双语社区版(Mimi 编解码器 + FlowLM/LSD,零样本声音克隆)在 AX650N 上的板端推理包: axmodel + int8 ONNX + Python 运行时 + 音色资源,即取即用。

导出/量化/拆图源码见 GitHub: https://github.com/ZY-2012/pocket-tts-zh-en.AXERA

实测指标(AX650N,参考音色 Vivian)

项目 Python 运行时 C++ 运行时(推荐)
平均 RTF(11 条中英文本) 0.665 —
长文(3 分块,18s 音频) 0.674 0.39~0.43
短句 0.72~0.81 ~0.39
首帧延迟(含音色编码+prefill) 167 ms ~130 ms
逐帧耗时(80ms 帧) ≈51 ms AR 29ms + flow_net 0.6ms(关键路径),Mimi ~23ms 被流水线隐藏
回环 CER 常规中英文本 0%(ASR 底噪内) 同左
benchmark(zh_long 40 条) CER 0.68% / RTF 0.699 —

C++ 加速路径:ORT 1.23(官方 aarch64)+ 跨帧流水线(Flow-AR ∥ Mimi 解码)+ 注意力融合(opset-23 Attention,578→422 节点),比 Python 快约 1.7~1.8 倍;详见 cpp/ 与 GitHub 报告。

板端运行

环境:AX650N(BSP + axengine wheel + onnxruntime>=1.16 + numpy/soundfile/scipy/sentencepiece),Python 3.10+。

# 短句
bash run_ax650.sh "你好,世界。"
# 长文本(自动分块 + 块间 120ms)
TEXT_FILE=long.txt bash run_ax650.sh
# 流式写 WAV(生成中即可播放)
STREAM=1 bash run_ax650.sh "今天天气不错。" out_stream.wav
# 批量(载入一次跑多条,RTF 口径同 benchmark)
python3 board/pocket_tts_batch.py --texts-json configs/listen_texts.json \
  --out-dir output --onnx-dir models --axmodel-dir models --cpu-model-dir models \
  --mimi-split-dir models/mimi_split --spm models/chn_jpn_yue_eng_ko_spectok.bpe.model \
  --reference models/Vivian.wav --threads 4 --prefill-threads 8 \
  --flow-ar-model flow_ar_step_int8.onnx --flow-net-model flow_net_step_fp32.axmodel \
  --flow-prefill-model flow_step_int8.onnx --mimi-tf-model mimi_transformer_step_int8.onnx \
  --encoder-dir models/encoder

C++ 运行时(可选)

包内自带 aarch64 预编译二进制(cpp/bin/pocket_tts_zh_en + ORT 1.14 运行库,板端免编译):

# 主机侧分词(与 Python 前端一致): python tools/prepare_tokens.py --spm models/xxx.bpe.model --text "..." --out req.tokens
TOKENS_FILE=cpp/req/zh_short.tokens bash cpp/run_cpp.sh out.wav

实测(ORT 1.23 + 跨帧流水线 + 注意力融合 Attention 算子,AR=5 线程 ∥ mimi=2 线程): zh_short RTF ≈0.39 / zh_long RTF ≈0.39~0.43(板端有他人负载时波动),首帧 0.13s,回环 CER 0%。 (Python 版同配置为 0.73 / 0.67;C++ 相对 Python 提速约 1.71.8 倍。) 源码与交叉编译脚本见 GitHub 仓库 cpp/。 (ORT 选 1.23.0 官方 aarch64 包:GLIBC 2.17/2.27 兼容;部分非官方高版本构建要求 GLIBC≥2.38,无法在 Ubuntu 22.04 板端加载。)

目录

run_ax650.sh                       # 一键推理
board/pocket_tts_axera.py          # 运行时(axengine + onnxruntime 混合)
board/pocket_tts_batch.py          # 批量驱动(benchmark 同款入口)
cpp/                                # C++ 运行时(预编译二进制 + ORT 库 + 示例请求)
tools/prepare_tokens.py             # 主机侧文本 -> token 文件
configs/listen_texts.json          # 试听/自测文本集
models/
├── step_config.json               # 结构参数(12.5Hz、24kHz、KV 窗口等)
├── chn_jpn_yue_eng_ko_spectok.bpe.model  # SentencePiece
├── Vivian.wav                     # 参考音色(可替换任意 wav,自动重采样 24k)
├── flow_step_int8.onnx            # FlowLM prefill(ORT int8, 101.5MB)
├── flow_ar_step_int8.onnx         # FlowLM AR 步(ORT 动态 int8, 75.7MB)
├── flow_ar_step_fused_int8.onnx   # FlowLM AR 步(注意力融合 Attention 算子 + int8,推荐)
├── flow_net_step_fp32.axmodel     # LSD flow_net(NPU FP32, 36MB)
├── mimi_conv_step.axmodel         # Mimi 卷积解码(NPU U16, 4.4MB)
├── mimi_split/mimi_transformer_step_int8.onnx  # Mimi transformer(ORT int8, 6.6MB)
├── mimi_split/mimi_conv_step.onnx              # 卷积解码 ONNX(CPU 回退)
├── encoder/step_encoder_40f.axmodel            # 音色编码(NPU, 24.8MB)
└── step_encoder.onnx              # 音色编码(CPU 精确回退)

运行时设计(混合 NPU/CPU)

阶段 后端
音色编码 NPU 静态 3.2s 档(超档取尾窗、不足左补齐)
FlowLM prefill / AR 步 CPU ORT int8(KV 窗口 512)
flow_net NPU FP32
Mimi transformer CPU ORT int8(KV 窗口 266)
Mimi 卷积解码 NPU U16

文本前端:标点归一化 + 数字转汉字(2026→二零二六、-3.5→负三点五)+ 三级分块(≤48 token/块)。

说明

  • 质控口径:NPU/量化入环后波形会与 fp32 分叉(自回归混沌放大),PCM cos 不是合格指标;请用回环 CER + 人工试听验收(本包常规中英文本 CER 均在 ASR 底噪)。
  • 参考音色可换:任意 wav(自动重采样 24kHz);同一音色在处理进程内自动缓存前缀。
  • 许可:模型权重 CC BY-NC 4.0(仅非商业);请勿用于诈骗/伪造他人声音,克隆需获得本人授权。

参考 & 感谢

Downloads last month
8
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support