Sidon-GGUF / README.md
cstr's picture
Upload README.md with huggingface_hub
3bca5d2 verified
|
Raw
History Blame Contribute Delete
4.13 kB
---
license: mit
language:
- multilingual
datasets:
- google/fleurs-r
- parler-tts/libritts_r_filtered
tags:
- speech-restoration
- speech-enhancement
- dereverberation
- gguf
- crispasr
base_model: sarulab-speech/sidon-v0.1
base_model_relation: quantized
pipeline_tag: audio-to-audio
---
# Sidon GGUF (quant ladder)
GGUF conversions of [SaruLab Sidon v0.1](https://huggingface.co/sarulab-speech/sidon-v0.1), a multilingual
speech-restoration model that removes noise and reverberation and restores speech bandwidth (16 kHz in β†’ 48 kHz out).
Packaged for native, no-PyTorch inference with [CrispASR](https://github.com/CrispStrobe/CrispASR).
The model is the first eight layers of w2v-BERT 2.0 with the Sidon LoRA adapter merged, followed by Sidon's continuous
DAC decoder. The SeamlessM4T log-mel window and filter bank are embedded in the GGUF. Port by
[@KevinAHM](https://huggingface.co/KevinAHM/Sidon-GGUF) (CrispASR PR #283); this repo adds the quantization ladder.
## Files
| File | Precision | Size | Notes |
| --- | --- | ---: | --- |
| `sidon-v0.1-f16.gguf` | FP16 weights, FP32 norms/biases | 470 MiB | Reference. Byte-identical to KevinAHM/Sidon-GGUF. |
| `sidon-v0.1-q8_0.gguf` | Q8_0 predictor matmuls | 320 MiB | Highest-fidelity quant. |
| `sidon-v0.1-q6_k.gguf` | Q6_K predictor matmuls | 281 MiB | Balanced. |
| `sidon-v0.1-q4_k.gguf` | Q4_K predictor matmuls | 240 MiB | Smallest. Intelligible, but see fidelity note. |
Only the w2v-BERT predictor's large linear weights are quantized; the DAC decoder convolutions and all
norms/biases/Snake `alpha` parameters are kept at their original precision.
## Fidelity
Validated by **ASR round-trip** (Whisper `base.en`) on the restored output β€” the metric that matters for a
restoration model, since output-waveform correlation understates perceptual quality:
| Quant | ASR round-trip (JFK clip) | Output-waveform corr. vs F16 |
| --- | --- | ---: |
| F16 | WER 0 (exact transcript) | 1.000 |
| Q8_0 | WER 0 | r β‰ˆ 0.99, SNR β‰ˆ 16 dB |
| Q4_K | WER 0 | r β‰ˆ 0.61, SNR β‰ˆ 1 dB |
All quants restore fully intelligible speech (WER 0). Q4_K's low waveform correlation means its fine restored
detail diverges from F16 even though intelligibility is preserved; prefer **Q8_0 or Q6_K** when output fidelity to
the reference matters, and Q4_K when size is the priority.
## Validation against the original model
The GGUF port was checked against the **upstream SaruLab TorchScript** modules
(`feature_extractor_cpu.pt` + `decoder_cpu.pt`) on the JFK clip:
| Stage | Metric | Result |
| --- | --- | --- |
| Predictor handoff (w2v-BERT) | cosine, our F16 vs upstream F32 | **0.998** |
| End-to-end 48 kHz output | Pearson r | 0.945 |
| ASR round-trip (Whisper base.en) | transcription | **identical** |
The predictor reproduces the original almost exactly (0.998); the end-to-end
drop to 0.945 is the continuous-DAC decoder amplifying F16 weight-rounding
through its Snake activations, not a port error β€” the restored speech is
functionally identical (same transcription). The reference intermediates used
for this check are published here as `sidon-ref.gguf` (`input_16k`,
`predictor_feats`, `output_48k`) with `sidon-ref-48k.wav`; regenerate with
`tools/reference_backends/sidon_ref_dump.py` and re-run our side with
`CRISPASR_SIDON_DUMP_HANDOFF=<path>`.
## CrispASR usage
```bash
crispasr --s2s -m sidon-v0.1-q8_0.gguf -f input.wav --s2s-output restored-48khz.wav
```
CrispASR auto-detects the `sidon` architecture from GGUF metadata. The S2S interface processes a complete clip and
returns a complete restored clip (not streaming). GPU: `--gpu-backend cuda` / `--gpu-backend vulkan`.
**Long inputs:** the predictor uses O(TΒ²) self-attention (~50 feature frames/sec). Inputs are capped at ~60 s
(3000 frames) by default and fail cleanly past that; raise `CRISPASR_SIDON_MAX_FRAMES` if you have the memory.
## Conversion
```bash
# F16 from upstream weights:
python models/convert-sidon-to-gguf.py --base w2v-bert-2.0 --sidon sidon_raw_weight --out sidon-v0.1-f16.gguf
# quants:
crispasr-quantize sidon-v0.1-f16.gguf sidon-v0.1-q4_k.gguf q4_k
```