File size: 3,471 Bytes
3f67ccd
7c268e9
 
 
 
 
 
 
 
 
 
 
 
3f67ccd
7c268e9
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
---
license: other
license_name: nvidia-open-model-license
license_link: https://www.nvidia.com/en-us/agreements/enterprise-software/nvidia-open-model-license/
language:
- en
pipeline_tag: audio-classification
tags:
- speaker-diarization
- sortformer
- axera
- ax650
- rttm
---

# Sortformer.AXERA

`nvidia/diar_streaming_sortformer_4spk-v2.1`(NVIDIA Open Model License)端到端流式说话人日志在 AX650N 的量化部署包:
输入 16 kHz 单声道会议音频,输出 RTTM 说话人时序标签。

- 模型: 2 张拆图 axmodel(U16 激活 / S8 权重)——preencode + encoder;encoder 提供 fifo188(精度优先)与 fifo40(速度优先)
- 依赖: Python 仅 numpy + soundfile + axengine;C++ 为预编译 aarch64 可执行文件

## 目录

```
├── models/          # preencode.axmodel / encoder.axmodel / encoder_fifo40.axmodel + model_meta
├── python/          # Python 推理入口(sortformer_sdk + example.py)
├── bin/             # C++ 可执行文件(aarch64):sortformer_ax650
├── samples/         # 演示音频(AMI 会议 120 s)
├── run_ax650.sh  run_cpp_ax650.sh   # 一键运行(Python / C++)
└── requirements.txt
```

## Python 运行

```bash
pip3 install numpy soundfile
# pyaxengine: https://github.com/AXERA-TECH/pyaxengine/releases/latest
pip3 install axengine-<version>-py3-none-any.whl
./run_ax650.sh                            # 自带样例 samples/sample_meeting.wav
./run_ax650.sh input.wav out.rttm --fast  # fifo40 快速版
```

或:

```python
import sys; sys.path.insert(0, "python")
from sortformer_sdk import AxengineGraphPair, StreamingDiarizer, SortformerConfig

diarizer = StreamingDiarizer(
    AxengineGraphPair("models/preencode.axmodel", "models/encoder.axmodel"),
    SortformerConfig(),
)
preds = diarizer.process_wav(waveform_16k_float32, 16000)   # (T, 4) @ 80 ms
lines = diarizer.rttm_lines(preds, uri="meeting")
```

## C++ 运行

```bash
export LD_LIBRARY_PATH=/soc/lib:${LD_LIBRARY_PATH:-}
./bin/sortformer_ax650 --preencode models/preencode.axmodel --encoder models/encoder.axmodel \
    --wav input.wav --rttm out.rttm --threads 8
# 或一键:./run_cpp_ax650.sh input.wav out.rttm [--fast]
```

## 模型说明

- 输入: 16 kHz 单声道 wav;输出: RTTM(`SPEAKER <uri> 1 <start> <dur> <NA> <NA> speaker_k <NA>`)
- 流程: 主机 log-mel(128 mel / 25 ms 窗 / 10 ms 步长,与 NeMo 逐点对齐)→ preencode → 主机打包
  `seq [1,390,512]` → encoder → 主机 `streaming_update`(静音画像 / top-k + AOSC 压缩 / FIFO 弹出)→ 后处理
- 拆图契约:spkcache 188 + fifo 188 + chunk 14 帧,图内无 Scatter/Where;80 ms/帧、最多 4 说话人、1.04 s 延迟
- 完整转换源码见 GitHub: [Sortformer.AXERA](https://github.com/ZY-2012/Sortformer.AXERA)

## 精度与性能(AX650N 实测)

ES2004a(1049 s,collar=0):

| 推理路径 | DER | RTF |
|---|---|---|
| NeMo FP32(参考) | 30.89% | — |
| C++ fifo188(精度优先) | 30.70% | 0.144 |
| C++ fifo40(速度优先) | 30.64% | 0.064 |

AMI-SDM(5 场加权)/ AliMeeting(4 场远场,TextGrid 参考),collar=0:

| 配置 | AMI-5 DER | Ali-4 DER |
|---|---|---|
| fifo188 | 33.77% | 21.71% |
| fifo40 | 34.34% | 22.02% |

## License

部署代码 Apache-2.0;上游 Sortformer 权重为
[NVIDIA Open Model License](https://www.nvidia.com/en-us/agreements/enterprise-software/nvidia-open-model-license/)。