| --- |
| license: apache-2.0 |
| library_name: ced.cpp |
| pipeline_tag: audio-classification |
| tags: |
| - audio-classification |
| - sound-event-detection |
| - audio-tagging |
| - audioset |
| - ggml |
| - gguf |
| - ced |
| base_model: |
| - mispeech/ced-tiny |
| - mispeech/ced-mini |
| - mispeech/ced-small |
| - mispeech/ced-base |
| --- |
| |
| # CED (GGUF) for ced.cpp / LocalAI |
|
|
| GGUF quantizations of the **CED** family (Consistent Ensemble Distillation, |
| Xiaomi) - SOTA-tier audio-tagging models that classify everyday sounds (baby |
| cry, footsteps, glass breaking, alarms, dog bark, ...) into the 527-class |
| [AudioSet](https://research.google.com/audioset/) ontology. |
|
|
| These files run with [**ced.cpp**](https://github.com/mudler/ced.cpp), a |
| standalone C++/[ggml](https://github.com/ggml-org/ggml) port (no Python, no |
| PyTorch at inference), and with [**LocalAI**](https://github.com/mudler/LocalAI) |
| via the `ced` backend. Converted from the `mispeech/ced-*` checkpoints |
| (Apache-2.0). CED is a plain AST/DeiT Vision Transformer over a log-mel |
| spectrogram; the port is numerically equal to the PyTorch reference. |
|
|
| ## Files |
|
|
| One self-contained GGUF per size + quant (config, 527 labels, and the mel |
| filterbank/window are all embedded). Pick by your accuracy/size budget: |
|
|
| | size | params | f16 | q8_0 | f32 | |
| |------|--------|-----|------|-----| |
| | **tiny** | 5.5M | `ced-tiny-f16.gguf` (11 MB) | `ced-tiny-q8_0.gguf` (6 MB) | - | |
| | **mini** | 9.6M | `ced-mini-f16.gguf` (19 MB) | `ced-mini-q8_0.gguf` (11 MB) | - | |
| | **small** | 22M | `ced-small-f16.gguf` (42 MB) | `ced-small-q8_0.gguf` (23 MB)| - | |
| | **base** | 86M | `ced-base-f16.gguf` (165 MB) | `ced-base-q8_0.gguf` (88 MB) | `ced-base-f32.gguf` (328 MB) | |
|
|
| `tiny`/`q8_0` (6 MB) is ideal for Raspberry-Pi-class CPUs; `base`/`f16` is the |
| accuracy default. |
|
|
| ## Parity vs PyTorch (ced-base, end-to-end probs) |
|
|
| | quant | max abs diff | top-5 tags | |
| |-------|--------------|------------| |
| | f32 | 1.7e-7 | identical | |
| | f16 | 6.4e-5 | identical | |
| | q8_0 | 6.0e-3 | identical | |
| |
| ## Performance (CPU, ced-base, 10s clip, Ryzen 9 9950X3D, 4 threads) |
| |
| | | latency | realtime factor | peak RSS | |
| |---|---|---|---| |
| | PyTorch (transformers, f32) | 155.7 ms | 65x | 717 MB | |
| | ced.cpp f16 | 100.6 ms | 100x | 189 MB | |
| | ced.cpp q8_0 | 117.2 ms | 86x | 111 MB | |
|
|
| ced.cpp f16 is ~1.55x faster than the PyTorch reference; q8_0 uses ~6.5x less |
| memory. |
| |
| ## Usage |
| |
| ```sh |
| ced-cli classify ced-base-f16.gguf clip.wav --top-k 5 |
| # 0.87 Baby cry, infant cry |
| # 0.12 Crying, sobbing |
| ``` |
| |
| In LocalAI: install the `ced` backend, configure a model with one of these |
| GGUFs, then call `POST /v1/audio/classification` (or stream over the realtime |
| websocket API for live recognition). |
| |
| ## License |
| |
| Model weights: **Apache-2.0** (© Xiaomi Corporation; from the `mispeech/ced-*` |
| checkpoints). AudioSet labels are CC-BY-4.0. The ced.cpp inference code is MIT. |
| |