| --- |
| license: apache-2.0 |
| language: |
| - zh |
| tags: |
| - text-to-speech |
| - tts |
| - chinese |
| - axera |
| - axmodel |
| - onnx |
| pipeline_tag: text-to-speech |
| --- |
| |
| # Inflect-Micro-v2-zh |
|
|
| 从零训练的中文 TTS:基于 [Inflect-Micro-v2](https://huggingface.co/owensong/Inflect-Micro-v2) |
| 架构(Apache-2.0)+ [NVIDIA BigVGAN](https://github.com/NVIDIA/BigVGAN) 声码器(MIT)。 |
| 声学模型 6.7M 参数(text→100-band mel),可在 **AX650 系列 NPU** 上实时部署 |
| (CPU + NPU 混合架构,RTF 0.15-0.19)。 |
|
|
| ## 示例音频(AX650 板上 C++ SDK 实跑) |
|
|
| 以下音频由交付的 **C++ SDK** 在 AX650 板端到端生成(acoustic ONNX 于 CPU + |
| BigVGAN axmodel 于 NPU int8,女声 v2:mel-GAN + length_scale=1.0 + noise=0),可直接试听: |
| |
| <audio controls src="audio/demo_female_casual.wav"></audio> 女声 · 日常口语:“今天中午我想吃一碗牛肉面。” |
| |
| <audio controls src="audio/demo_female_news.wav"></audio> 女声 · 新闻播报:“中国人民银行决定下调存款准备金率。” |
| |
| <audio controls src="audio/demo_male.wav"></audio> 男声 · 日常口语:“请问最近的医院在哪里。” |
| |
| <audio controls src="audio/demo_female_tianqi.wav"></audio> 女声 · 送气音示例:“天气允许的话” |
| |
| ## 长文本示例(Python SDK 自动分句,AX650 板上实跑,约 22s) |
| |
| <audio controls src="audio/demo_female_long.wav"></audio> 女声 · 长文本:央行降准新闻 + 北京简介 |
| |
| <audio controls src="audio/demo_male_long.wav"></audio> 男声 · 长文本:人工智能话题节目开场 |
| |
| > 长文本由 Python SDK `infer_board.py` 自动分句(≤250 tokens/句)后拼接,句间 0.2s 停顿。 |
|
|
| ## 文件说明 |
|
|
| ``` |
| models/ |
| ├── acoustic_female.onnx (+ .data) # 女声 文本→mel(CPU fp32,ls=0.7) |
| ├── acoustic_male.onnx (+ .data) # 男声 文本→mel(CPU fp32,ls=0.85) |
| ├── bigvgan_base.onnx (+ .data) # 声码器 mel→wav(CPU fp32,动态帧) |
| ├── bigvgan_base.axmodel # 声码器 mel→wav(AX650 NPU int8) |
| └── model_meta.json # 模型规格元数据 |
| checkpoints/ # 训练权重(PyTorch) |
| ├── base300.pt # 基础模型(AiShell-3,20 说话人) |
| ├── female_gan.pt # 女声(CosyVoice 音色 + GAN) |
| └── male_gan.pt # 男声(SSB0609 音色 + GAN) |
| python/ # Python 推理 SDK |
| reports/ # 验证报告(可懂度/性能/量化) |
| ``` |
|
|
| ## 快速开始(Python,CPU) |
|
|
| ```bash |
| pip install onnxruntime numpy soundfile pypinyin |
| |
| python python/infer_onnx.py \ |
| --text "你好世界,今天天气真不错,适合出去散步。" \ |
| --acoustic models/acoustic_female.onnx \ |
| --vocoder models/bigvgan_base.onnx \ |
| --output out.wav |
| ``` |
|
|
| ## 快速开始(AX650 板,CPU+NPU 混合) |
|
|
| 板上安装 `onnxruntime`、`pypinyin` 和 `axengine`(AXERA 提供): |
|
|
| ```bash |
| python python/infer_board.py \ |
| --text "人工智能技术正在改变我们的生活方式。" \ |
| --acoustic models/acoustic_female.onnx \ |
| --vocoder models/bigvgan_base.axmodel \ |
| --output out.wav |
| ``` |
|
|
| `infer_board.py` 自动完成:文本分句 → 声学模型(CPU)→ mel 后处理 |
| (静音门限 + 句尾拉伸)→ 声码器(NPU)分块拼接。 |
|
|
| ## 性能(AX650N 实测) |
|
|
| | 组件 | 耗时 | 说明 | |
| |---|---|---| |
| | acoustic(CPU fp32) | 0.30s/句 | 静态 max_mel=1024(单句 ≤10.9s) | |
| | vocoder(NPU int8) | 0.30s/块 | 512 mel 帧 = 5.46s 音频 | |
| | 整链路 RTF | 0.15-0.19 | 约 6x 实时 | |
| |
| ## 可懂度(SenseVoice,8 句测试) |
| |
| | 音色 | CER | |
| |---|---| |
| | 女声(CPU 全 fp32) | 0.075 | |
| | 男声(CPU 全 fp32) | 0.108 | |
| |
| ## 说明 |
| |
| - 声学模型必须 CPU fp32:VITS 的 flow/duration 对 NPU 8/16-bit 量化系统性敏感 |
| (int8/U16/BRecQ 全部验证失败);声码器 NPU int8 可用 |
| - 长文本自动分句(≤250 tokens/句)+ 声码器分块拼接(重叠交叉淡化) |
| - 训练流程与复现脚本见 [GitHub 仓库](https://github.com/ml-inory/Inflect-Micro-v2-zh) |
| |
| ## 致谢 |
| |
| - [owensong/Inflect-Micro-v2](https://huggingface.co/owensong/Inflect-Micro-v2)(架构,Apache-2.0) |
| - [NVIDIA BigVGAN](https://github.com/NVIDIA/BigVGAN)(声码器,MIT) |
| - [FunAudioLLM/CosyVoice](https://github.com/FunAudioLLM/CosyVoice)(数据生成,Apache-2.0) |
| - [OpenSLR AISHELL-3](https://www.openslr.org/resources/93/)(中文语料) |
| - AXERA Pulsar2(AX 编译工具链) |
| |
| 完整第三方声明见 GitHub 仓库 `THIRD_PARTY_NOTICES.md`。 |
| |
| ## License |
| |
| [Apache-2.0](https://github.com/ml-inory/Inflect-Micro-v2-zh/blob/main/LICENSE) |
| (与原版 Inflect-Micro-v2 一致) |
| |