File size: 4,609 Bytes
0ceb741 906ada2 0ceb741 906ada2 | 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 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 | ---
license: mit
library_name: axera
pipeline_tag: audio-classification
tags:
- speaker-embedding
- speaker-verification
- speaker-diarization
- campplus
- speech
---
# campplus.AXERA
CAM++ 说话人声纹模型 Axera 推理demo。
- [x] Python 推理(axengine,`python/example.py`)
- [x] C++ 可执行文件(`bin/campplus_ax650`)
- [x] 一键运行脚本(`run_ax650.sh`)
源码(模型转换 + C++ 源码)见 GitHub:
[campplus.AXERA](https://github.com/AXERA-TECH/campplus.AXERA)
## 支持模型
| 模型 | 输入 | 输出 | axmodel 大小 | 量化精度 |
|------|------|------|------|------|
| CAM++ (speech_campplus_sv_zh_en_16k-common_advanced) | feature [1,360,80] | embedding [1,192] | 10.5 MB | U16+SmoothQuant,embedding cosine 0.9957 |
## 目录结构
```
campplus.AXERA/
├── models/
│ ├── campplus.axmodel # AX650 量化模型
│ └── model_meta.json
├── bin/
│ └── campplus_ax650 # C++ 可执行文件
├── python/
│ ├── campplus_sdk/ # 声纹 SDK(inference + clustering)
│ ├── example.py # 验证 / 提取 / 聚类 demo
│ └── requirements.txt # numpy torch torchaudio axengine
├── samples/ # 示例音频(ModelScope 官方示例)
├── run_ax650.sh # 一键运行(Python / C++)
├── configuration.json
└── README.md
```
## 快速开始(AX650 板端)
```bash
# 下载本仓库到板端后:
bash run_ax650.sh # C++ 1:1 说话人验证(samples 示例)
bash run_ax650.sh python # Python 1:1 说话人验证
bash run_ax650.sh cpp a.wav b.wav # C++ 自定义音频
bash run_ax650.sh python a.wav b.wav # Python 自定义音频
```
## Python 推理
### 环境
```bash
conda create -n campplus python=3.10
conda activate campplus
# 安装 axengine (https://github.com/AXERA-TECH/pyaxengine/releases/latest)
pip install axengine-x.x.x-py3-none-any.whl
pip install -r python/requirements.txt
```
### 1:1 说话人验证
```bash
python3 python/example.py --models-dir models --wav1 a.wav --wav2 b.wav
```
输出 cosine 相似度(同人 ≈ 0.67,不同人 ≈ 0.06,越高越可能是同一说话人):
```
cosine similarity: 0.6726
```
### 声纹提取 + 说话人聚类
```bash
python3 python/example.py --models-dir models --audio meeting.wav --diarize
```
按 1.5 s / 0.75 s 滑窗提取 embedding,谱聚类输出:
```
Speaker_0: [0.00 35.25]
Speaker_1: [35.25 70.47]
```
## C++ 推理(bin/ 可执行文件)
```bash
export LD_LIBRARY_PATH=/soc/lib:${LD_LIBRARY_PATH:-}
./bin/campplus_ax650 --models-dir models --wav1 a.wav --wav2 b.wav
./bin/campplus_ax650 --models-dir models --audio meeting.wav --output meeting.embed.bin
```
特征提取(kaldi-native-fbank,snip_edges=true / dither=0 / povey / mean_nor)
与 Python 版(torchaudio kaldi fbank)逐点对齐(主机实测 cosine 0.99999986);
板端 C++ 与 Python 提取的 embedding cosine = 0.99999955。
## 性能(AX650N 实测)
| 指标 | 数值 |
|------|------|
| NPU 单次推理([1,360,80] → [1,192]) | 2.559 ms(ax_run_model 实测) |
| C++ 端到端(fbank + NPU) | 28.2 ms/chunk |
| Python 端到端(torchaudio fbank + axengine) | 72.1 ms/chunk |
### RTF(vad_example.wav 70.47s / 93 chunks)
| 推理路径 | 耗时 | RTF |
|------|------|------|
| C++ | 2.620 s | 0.037 |
| Python | 6.71 s | 0.095 |
> RTF = 推理耗时 / 音频时长(不含模型加载,RTF < 1.0 即可实时)
## 精度(板端实测 vs ONNX 参考)
| 路径 | cosine |
|------|--------|
| C++ embedding vs ONNX(93 chunks) | 0.9941(per-chunk min 0.9912) |
| Python axengine vs ONNX | 0.9950 – 0.9966 |
| 1:1 验证(同人 speaker1_a/b) | 0.6685(C++)/ 0.6668(Python),参考 ≈ 0.67 |
| 1:1 验证(不同人 speaker1_a/2_a) | 0.0638(C++),参考 ≈ 0.06 |
## 模型转换复现
按 GitHub 仓库 [model_convert](https://github.com/AXERA-TECH/campplus.AXERA/tree/main/model_convert)
说明:ModelScope 权重 → ONNX(onnxsim/onnxslim,torch/ONNX cosine 1.0)→
真实音频 FBank 校准(5 段真实语音 30 组)→ Pulsar2 U16+SmoothQuant 量化
(embedding cosine 0.9957,gate 0.99)。
## 参考
- [3D-Speaker](https://github.com/modelscope/3D-Speaker)
- [3D-Speaker-MT.axera](https://github.com/AXERA-TECH/3D-Speaker-MT.axera)
- [campplus.AXERA](https://github.com/AXERA-TECH/campplus.AXERA)(源码仓)
- [Magnetar](https://github.com/AXERA-TECH/Magnetar) — AXERA 模型部署 agent 工具
|