richiejp commited on
Commit
6256d05
Β·
verified Β·
1 Parent(s): 5af65b4

Sync model card with upstream GitHub inference README

Browse files
Files changed (1) hide show
  1. README.md +107 -40
README.md CHANGED
@@ -19,8 +19,11 @@ license: apache-2.0
19
  acoustic echo cancellation (AEC), noise suppression, and dereverberation of
20
  16 kHz speech, designed to run on commodity CPUs in real time.
21
 
22
- - 1.3 M parameters (~5 MB F32)
23
- - ~1.56 ms per 16 ms frame on Zen4 (4 threads) β€” **β‰ˆ10Γ— realtime**
 
 
 
24
  - Causal, streaming: 256-sample hop, 16 ms algorithmic latency
25
  - F32 reference inference in C++ via [GGML](https://github.com/ggml-org/ggml);
26
  PyTorch reference included for verification and research
@@ -31,9 +34,14 @@ This page is the Hugging Face model card β€” it hosts the published weights.
31
  Source code, build system, tests, and training pipeline live in the GitHub
32
  repository: <https://github.com/localai-org/LocalVQE>.
33
 
34
- The current release is **v1.2**. It doubles the supported delay
35
- window from 500 ms to 1 second at a ~20 % per-hop CPU cost. It also
36
- avoids oversuppression of voices that are near to the noise floor.
 
 
 
 
 
37
 
38
  The technical report describing the architecture, streaming-state contract,
39
  and streaming-causal normalisation operator is included in this repo as
@@ -97,17 +105,22 @@ implementation, no streaming runtime. We re-implemented it from the
97
  paper as a GGML graph at
98
  [richiejp/deepvqe-ggml](https://github.com/richiejp/deepvqe-ggml)
99
  (the full-width ~7.5 M-parameter version) before starting LocalVQE.
100
- LocalVQE is the same idea pruned and rebuilt to ~1.3 M parameters
101
- (~5 MB F32), small enough to run on commodity CPUs in real time.
 
 
 
 
102
 
103
  ## Files in this repository
104
 
105
  | File | Size | Description |
106
  |---|---|---|
107
- | `localvqe-v1.2-1.3M.pt` | 11 MB | PyTorch checkpoint β€” DNS5 pre-training + ICASSP 2022/2023 AEC Challenge fine-tune. |
108
- | `localvqe-v1.2-1.3M-f32.gguf` | 5 MB | GGML F32 export β€” what the C++ inference engine loads. |
109
- | `localvqe-v1.1-1.3M.pt` | 11 MB | Previous release. |
110
- | `localvqe-v1.1-1.3M-f32.gguf` | 5 MB | Previous release (F32 GGUF). |
 
111
  | `localvqe-v1-1.3M-f32.gguf` | 5 MB | Original release. |
112
 
113
  Only F32 GGUF is published today. A `quantize` tool is included in the
@@ -120,6 +133,18 @@ Full 800-clip eval on the
120
  [ICASSP 2022 AEC Challenge blind test set](https://github.com/microsoft/AEC-Challenge)
121
  β€” real recordings, not synthetic mixes.
122
 
 
 
 
 
 
 
 
 
 
 
 
 
123
  | Scenario | n | AECMOS echo ↑ | AECMOS deg ↑ | blind ERLE ↑ | DNSMOS OVRL ↑ |
124
  |-----------------------------------|----:|--------------:|-------------:|-------------:|--------------:|
125
  | doubletalk | 115 | 4.72 | 2.37 | 8.4 dB | 2.83 |
@@ -128,12 +153,27 @@ Full 800-clip eval on the
128
  | farend-singletalk-with-movement | 193 | 4.12 | 4.96 | 40.6 dB | 1.75 |
129
  | nearend-singletalk | 200 | 5.00 | 4.16 | 2.1 dB | 3.17 |
130
 
131
- v1.2 vs v1.1 deltas: AECMOS echo MOS +0.80 / +0.72 on FE-ST and
132
- FE-ST-with-movement (the primary release goal β€” these scenarios are
133
- where echo leaks through), near-end deg MOS +0.11, double-talk
134
- roughly unchanged. FE-ST-with-movement raw ERLE drops 4.4 dB; v1.2
135
- is less aggressive when the echo path is moving, trading raw
136
- cancellation for fewer near-end gating artefacts.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
137
 
138
  - **AECMOS** (Purin et al., ICASSP 2022) is Microsoft's non-intrusive AEC
139
  quality predictor. "Echo" rates how well echo was removed; "degradation"
@@ -189,22 +229,41 @@ glslc`/`shaderc`).
189
  Measured with `bench` on Zen4 desktop (Ryzen 9 7900). Each hop is a
190
  full `ggml_backend_graph_compute`.
191
 
192
- **v1.2** (current, 1024 ms echo-search window):
193
-
194
- | Backend | Threads | p50 | p99 | max |
195
- |-----------------------------|--------:|--------:|--------:|--------:|
196
- | CPU | 1 | 4.15 ms | 4.53 ms | 6.23 ms |
197
- | CPU | 4 | 1.56 ms | 1.73 ms | 4.57 ms |
198
- | CPU | 8 | 1.89 ms | 2.15 ms | 6.91 ms |
199
- | CPU | 16 | 2.12 ms | 2.17 ms | 6.43 ms |
200
- | Vulkan β€” AMD iGPU (RADV) | β€” | 4.88 ms | 5.06 ms | 6.24 ms |
201
- | Vulkan β€” NVIDIA RTX 5070 Ti | β€” | 1.79 ms | 3.42 ms | 5.42 ms |
202
-
203
- Beyond β‰ˆ4 threads the model is small enough that thread-launch and
204
- synchronisation overhead dominate; **four threads is the sweet spot
205
- on Zen4**.
206
-
207
- **v1.1** (previous, 512 ms echo-search window) for comparison:
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
208
 
209
  | Backend | Threads | p50 | p99 | max |
210
  |-----------------------------|--------:|--------:|--------:|--------:|
@@ -222,9 +281,12 @@ range.
222
 
223
  ## Running Inference
224
 
225
- Download `localvqe-v1.2-1.3M-f32.gguf` from this repository (the file list above)
226
- either via `huggingface-cli`, the Hub web UI, or `hf_hub_download` from
227
- `huggingface_hub`. Then:
 
 
 
228
 
229
  ### CLI
230
 
@@ -269,10 +331,15 @@ calibration have been worked through.
269
 
270
  ## PyTorch Reference
271
 
272
- `localvqe-v1.2-1.3M.pt` is the PyTorch checkpoint used to produce the GGUF export.
273
- It is provided for verification, ablation, and downstream research β€” not
274
- for end-user inference, which should go through the GGML build above. The
275
- model definition lives under `pytorch/` in the
 
 
 
 
 
276
  [GitHub repo](https://github.com/localai-org/LocalVQE):
277
 
278
  ```bash
 
19
  acoustic echo cancellation (AEC), noise suppression, and dereverberation of
20
  16 kHz speech, designed to run on commodity CPUs in real time.
21
 
22
+ - Two sizes β€” choose by CPU budget:
23
+ - **v1.3 (current)** β€” 4.8 M parameters (~19 MB F32), ~3.3 ms per 16 ms
24
+ frame on Zen4 (4 threads), **β‰ˆ4.7Γ— realtime**.
25
+ - **v1.2** β€” 1.3 M parameters (~5 MB F32), ~1.6 ms per 16 ms frame on
26
+ Zen4 (4 threads), **β‰ˆ9.7Γ— realtime**.
27
  - Causal, streaming: 256-sample hop, 16 ms algorithmic latency
28
  - F32 reference inference in C++ via [GGML](https://github.com/ggml-org/ggml);
29
  PyTorch reference included for verification and research
 
34
  Source code, build system, tests, and training pipeline live in the GitHub
35
  repository: <https://github.com/localai-org/LocalVQE>.
36
 
37
+ The current release is **v1.3**. It widens the encoder/decoder
38
+ (mic channels `[2,112,32,104,96,152]`, far `[2,64,32]`, bottleneck
39
+ 256) and trains from scratch under a noise-floor-aware loss recipe.
40
+ On doubletalk it filters noise better than v1.2; on far-end-only
41
+ echo it cancels harder but the residual rates rougher in AECMOS β€”
42
+ some users will prefer v1.2's gentler trade-off on FE-ST scenes.
43
+ v1.2 stays available as the small/fast option (~1/4 the per-hop
44
+ cost). Both reuse v1.2's 1024 ms echo-search window.
45
 
46
  The technical report describing the architecture, streaming-state contract,
47
  and streaming-causal normalisation operator is included in this repo as
 
105
  paper as a GGML graph at
106
  [richiejp/deepvqe-ggml](https://github.com/richiejp/deepvqe-ggml)
107
  (the full-width ~7.5 M-parameter version) before starting LocalVQE.
108
+ LocalVQE is the same idea rebuilt for streaming CPU inference, and
109
+ published in two sizes: a 1.3 M-parameter compact build (v1.2,
110
+ ~5 MB F32) for tight CPU budgets, and a 4.8 M-parameter wider build
111
+ (v1.3, ~19 MB F32) that filters noise better on some clips at ~2Γ—
112
+ the per-hop cost. Both are small enough to run real time on
113
+ commodity CPUs.
114
 
115
  ## Files in this repository
116
 
117
  | File | Size | Description |
118
  |---|---|---|
119
+ | `localvqe-v1.3-4.8M.pt` | 55 MB | PyTorch checkpoint β€” DNS5 pre-training + ICASSP 2022/2023 AEC Challenge fine-tune, wider arch + noise-floor-aware loss. **Current release.** |
120
+ | `localvqe-v1.3-4.8M-f32.gguf` | 19 MB | GGML F32 export of the current release β€” what the C++ inference engine loads. |
121
+ | `localvqe-v1.2-1.3M.pt` | 11 MB | Compact alternative β€” same arch family as v1.3 (`arch_version=3`), ~1/4 the cost per hop. |
122
+ | `localvqe-v1.2-1.3M-f32.gguf` | 5 MB | GGML F32 export of the compact variant. |
123
+ | `localvqe-v1.1-1.3M-f32.gguf` | 5 MB | Older release (F32 GGUF). |
124
  | `localvqe-v1-1.3M-f32.gguf` | 5 MB | Original release. |
125
 
126
  Only F32 GGUF is published today. A `quantize` tool is included in the
 
133
  [ICASSP 2022 AEC Challenge blind test set](https://github.com/microsoft/AEC-Challenge)
134
  β€” real recordings, not synthetic mixes.
135
 
136
+ **v1.3** (current, 4.8 M):
137
+
138
+ | Scenario | n | AECMOS echo ↑ | AECMOS deg ↑ | blind ERLE ↑ | DNSMOS OVRL ↑ |
139
+ |-----------------------------------|----:|--------------:|-------------:|-------------:|--------------:|
140
+ | doubletalk | 115 | 4.73 | **2.62** | 8.5 dB | 2.89 |
141
+ | doubletalk-with-movement | 185 | 4.67 | **2.43** | 8.3 dB | 2.85 |
142
+ | farend-singletalk | 107 | 3.69 | 4.83 | **50.9 dB** | 1.94 |
143
+ | farend-singletalk-with-movement | 193 | 3.88 | 4.98 | **49.9 dB** | 1.96 |
144
+ | nearend-singletalk | 200 | 5.00 | 4.18 | 2.4 dB | 3.17 |
145
+
146
+ **v1.2** (compact alternative, 1.3 M):
147
+
148
  | Scenario | n | AECMOS echo ↑ | AECMOS deg ↑ | blind ERLE ↑ | DNSMOS OVRL ↑ |
149
  |-----------------------------------|----:|--------------:|-------------:|-------------:|--------------:|
150
  | doubletalk | 115 | 4.72 | 2.37 | 8.4 dB | 2.83 |
 
153
  | farend-singletalk-with-movement | 193 | 4.12 | 4.96 | 40.6 dB | 1.75 |
154
  | nearend-singletalk | 200 | 5.00 | 4.16 | 2.1 dB | 3.17 |
155
 
156
+ v1.3 vs v1.2 deltas (same 800-clip set, same eval pipeline):
157
+
158
+ - **Doubletalk deg MOS +0.25**, dt-with-movement deg MOS +0.13 β€” the
159
+ wider model + noise-floor-aware loss recipe noticeably reduces
160
+ perceived speech degradation when both talkers are active. This is
161
+ the primary v1.3 release goal.
162
+ - **FE-ST-with-movement ERLE +9.3 dB**, FE-ST ERLE +5.2 dB β€” v1.3
163
+ cancels far-end echo substantially harder. **AECMOS echo MOS drops
164
+ βˆ’0.24 / βˆ’0.09** at the same time: the residual after cancellation
165
+ rates rougher on AECMOS's perceptual scale even though there's
166
+ numerically less of it. Some users will prefer v1.2's gentler
167
+ trade-off on far-end-only scenes.
168
+ - **Nearend-singletalk identical** within noise (deg +0.02,
169
+ OVRL +0.00) β€” wider capacity doesn't help (or hurt) when there's
170
+ nothing to cancel.
171
+ - DNSMOS OVRL is up 0.04–0.21 across all scenarios β€” the wider
172
+ model produces consistently cleaner-rated output by DNS metrics.
173
+
174
+ For the original v1.2 vs v1.1 deltas (the previous release's
175
+ headline numbers), see the [v1.2 release notes on
176
+ GitHub](https://github.com/localai-org/LocalVQE).
177
 
178
  - **AECMOS** (Purin et al., ICASSP 2022) is Microsoft's non-intrusive AEC
179
  quality predictor. "Echo" rates how well echo was removed; "degradation"
 
229
  Measured with `bench` on Zen4 desktop (Ryzen 9 7900). Each hop is a
230
  full `ggml_backend_graph_compute`.
231
 
232
+ **v1.3** (current β€” 4.8 M, wider encoder/decoder, bn 256):
233
+
234
+ | Backend | Threads | p50 | p99 | RT factor |
235
+ |-----------------------------|--------:|--------:|--------:|----------:|
236
+ | CPU | 1 | 9.73 ms | 14.48 ms | 1.58Γ— |
237
+ | CPU | 2 | 5.41 ms | 5.62 ms | 2.95Γ— |
238
+ | CPU | 4 | 3.21 ms | 3.42 ms | 4.97Γ— |
239
+ | CPU | 8 | 3.47 ms | 3.80 ms | 4.59Γ— |
240
+ | CPU | 16 | 3.79 ms | 4.06 ms | 4.19Γ— |
241
+ | Vulkan β€” AMD iGPU (RADV) | β€” | 8.71 ms | 9.15 ms | 1.83Γ— |
242
+ | Vulkan β€” NVIDIA RTX 5070 Ti | β€” | 2.57 ms | 4.21 ms | 6.07Γ— |
243
+
244
+ The wider v1.3 model is ~2Γ— the per-hop cost of v1.2 in matching
245
+ configurations. The dGPU (RTX 5070 Ti) ends up the fastest option
246
+ by ~1.25Γ— vs 4-thread CPU. The 1-thread case is the worst, still
247
+ real-time (RT 1.58Γ—) but with little margin β€” running v1.3 on a
248
+ low-core / power-constrained device should use v1.2 instead.
249
+
250
+ **v1.2** (compact alternative β€” 1.3 M, 1024 ms echo-search window):
251
+
252
+ | Backend | Threads | p50 | p99 | RT factor |
253
+ |-----------------------------|--------:|--------:|--------:|----------:|
254
+ | CPU | 1 | 4.28 ms | 4.85 ms | 3.72Γ— |
255
+ | CPU | 2 | 2.59 ms | 3.80 ms | 6.09Γ— |
256
+ | CPU | 4 | 1.65 ms | 2.91 ms | 8.90Γ— |
257
+ | CPU | 8 | 1.93 ms | 2.41 ms | 8.22Γ— |
258
+ | CPU | 16 | 2.09 ms | 2.22 ms | 7.69Γ— |
259
+ | Vulkan β€” AMD iGPU (RADV) | β€” | 6.10 ms | 6.53 ms | 2.61Γ— |
260
+ | Vulkan β€” NVIDIA RTX 5070 Ti | β€” | 1.96 ms | 3.64 ms | 7.85Γ— |
261
+
262
+ Beyond β‰ˆ4 threads both models are small enough that thread-launch
263
+ and synchronisation overhead dominate; **four threads is the sweet
264
+ spot on Zen4** for both v1.2 and v1.3.
265
+
266
+ **v1.1** (older, 512 ms echo-search window) for comparison:
267
 
268
  | Backend | Threads | p50 | p99 | max |
269
  |-----------------------------|--------:|--------:|--------:|--------:|
 
281
 
282
  ## Running Inference
283
 
284
+ Download a GGUF from the file list above β€” `localvqe-v1.3-4.8M-f32.gguf`
285
+ for the current default, or `localvqe-v1.2-1.3M-f32.gguf` for the
286
+ smaller / faster option β€” via `huggingface-cli`, the Hub web UI, or
287
+ `hf_hub_download` from `huggingface_hub`. The CLI flags are the same
288
+ either way; the examples below use v1.2 so the snippets are shorter
289
+ to type. Swap the filename in to run v1.3.
290
 
291
  ### CLI
292
 
 
331
 
332
  ## PyTorch Reference
333
 
334
+ `localvqe-v1.3-4.8M.pt` (current) and `localvqe-v1.2-1.3M.pt`
335
+ (compact alternative) are the PyTorch checkpoints used to produce
336
+ the GGUF exports. They are provided for verification, ablation, and
337
+ downstream research β€” not for end-user inference, which should go
338
+ through the GGML build above. Both share `arch_version=3` (pre-norm
339
+ CausalGroupNorm + SiLU + STFT-256) and differ only in width
340
+ (`mic_channels`, `far_channels`, `bottleneck_hidden`), which the
341
+ loader reads from the saved `model_config` field. The model
342
+ definition lives under `pytorch/` in the
343
  [GitHub repo](https://github.com/localai-org/LocalVQE):
344
 
345
  ```bash