Skip to content

Latest commit

 

History

5 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

campplus.AXERA

CAMPPlus 说话人声纹(Speaker Embedding)模型在 Axera 上的部署demo。

  • Python 推理(axengine)
  • C++ 推理
  • 模型转换(导出 → 对分验证 → 真实音频校准 → Pulsar2 量化)

支持平台

  • AX650N

功能

  • 声纹识别
  • 说话人聚类(可选)

模型

  • 模型:CAM++(iic/speech_campplus_sv_zh_en_16k-common_advanced v1.0.0, 中英文大语料训练,feat_dim=80,embedding_size=192)
  • 输入:80 维 kaldi FBank 特征 feature [1,360,80](16 kHz 音频,mean_nor)
  • 输出:说话人 embedding [1,192]

量化后的 campplus.axmodel(约 10.5 MB)与预编译的 C++ 可执行文件发布在 HuggingFace 仓库:campplus.AXERA

目录结构

campplus.AXERA/
|-- model_convert/           # 模型转换(导出 + 校准 + 量化)
|   |-- campplus/
|   |   |-- export_campplus.py   # ① 导出 onnx(onnxsim/onnxslim + 对分验证)
|   |   |-- cam_config.json      # ③ pulsar2 量化配置(U16 + SmoothQuant)
|   |   |-- compile.sh           # 一键量化编译
|   |   `-- speakerlab/          # CAMPPlus 模型定义与 FBank 特征
|   `-- README.md
|-- python/                   # Python 板端推理(axengine)
|   |-- campplus_sdk/         # 声纹 SDK(inference + clustering)
|   |-- example.py            # 验证 / 提取 / 聚类 demo
|   `-- requirements.txt
|-- cpp/                      # C++ 板端推理源码
|   |-- campplus_ax.cpp       # 主程序(验证 / 提取两种模式)
|   |-- src/                  # engine_wrapper、wav_reader
|   |-- third_party/          # kaldi-native-fbank + kissfft(源码包)
|   |-- build_ax650.sh        # 交叉编译
|   |-- download_toolchains.sh# gcc 交叉编译器 + BSP SDK 下载
|   `-- README.md
|-- requirements.txt          # 转换依赖
`-- LICENSE

模型转换

参考 model_convert/README.md:导出 ONNX (onnxsim/onnxslim + torch/ONNX 对分 cosine ≥ 0.99)→ 真实音频 FBank 校准 → pulsar2 build 量化。

板端部署

Python 推理

# 创建虚拟环境(python3.10 验证)
conda create -n campplus python=3.10
conda activate campplus

# 下载模型
mkdir -p models && cd models
wget https://huggingface.co/AXERA-TECH/campplus.AXERA/resolve/main/models/campplus.axmodel
cd ..

# 安装 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 说话人验证
python3 python/example.py --models-dir models --wav1 a.wav --wav2 b.wav

# 声纹提取 + 说话人聚类
python3 python/example.py --models-dir models --audio meeting.wav --diarize

C++ 推理

本地交叉编译(产物 cpp/bin/campplus_ax650):

# 下载工具链(gcc 交叉编译器 + AX650 BSP SDK)
bash cpp/download_toolchains.sh
# 交叉编译
bash cpp/build_ax650.sh

将整个工程目录拷贝到板端后,在板端工程根目录下执行(板端自带运行库, 无需编译环境):

export LD_LIBRARY_PATH=/soc/lib:${LD_LIBRARY_PATH:-}

# 1:1 说话人验证
./cpp/bin/campplus_ax650 --models-dir models --wav1 a.wav --wav2 b.wav

# 声纹提取(1.5s/0.75s 滑窗,保存 float32 [N,192])
./cpp/bin/campplus_ax650 --models-dir models --audio meeting.wav --output meeting.embed.bin

或直接下载 HuggingFace 仓库中已编译好的 bin/campplus_ax650

Latency(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(AX650N 实测,vad_example.wav 70.47s / 93 chunks)

推理路径 耗时 RTF
C++ 2.620 s 0.037
Python 6.71 s 0.095

RTF = 推理耗时 / 音频时长(不含模型加载,RTF < 1.0 即可实时)

参考

技术讨论

  • GitHub issues
  • QQ 群: 139953715

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages