Downloads · 30 days
0
claroche1/salmonn-sqa-planb-v3
salmonn-sqa-planb-v3 is a audio-text-to-text model from claroche1. Use it for the audio-text-to-text task on the model card, and read the license before you ship it in a product. The card lists the license as apache-2.0.
LoRA/Q-Former weights that turn the SQA-finetuned SALMONN-7B from a lenient noise specialist into a calibrated, multi-dimensional speech-quality rater.
Downloads · 30 days
0
Access
Public
Updated Jul 14, 2026
Repo size
484 MB
Likes
1
Public
Click a slice to open those files.
.pth484 MB · 100%
From the Hugging Face model README
LoRA/Q-Former weights that turn the SQA-finetuned SALMONN-7B from a lenient noise specialist into a calibrated, multi-dimensional speech-quality rater.
Given a 16 kHz speech recording it emits per-dimension 1–5 scores, a short grounded description of what is wrong, and an overall MOS:
noise:2 reverberation:1 bandwidth:4 clipping:5 discontinuity:5 loudness:5.
The recording suffers from heavy reverberation and persistent background noise, and the
limited frequency range gives the voice a somewhat boxed-in, muffled character.
Overall MOS: 1.87
Every input used to train this model is public, so the whole pipeline is reproducible end to end: LibriTTS-R (CC BY 4.0) + MUSAN (CC BY 4.0) + OpenSLR SLR28 RIRs (Apache-2.0).
Code, corpus and the full experiment log: https://github.com/LarocheC/llm-sqa
The released SQA checkpoint described additive noise well, but as a quality meter it was weak: a coarse 5-value MOS floored at 2.5, effectively blind to reverberation (ρ(MOS,severity) = −0.11), and its MOS did not move when a denoiser improved the audio (+0.03).
A Stage-0 linear probe showed the degradation information was present in the frozen encoders (R² 0.82–0.95 at every tap, including the Q-Former output that reaches the LLM). The blindness lived in the LLM's learned read-out — trained only on noise — not in the architecture. So the fix was data + targets, with the encoders left frozen.
| # | Original SQA | this model |
|---|---|---|
| 1 | MOS↔SNR ρ 0.37 | ρ 0.46; names noise 98% at low SNR |
| 2 | Calibration vs PESQ/NISQA/DNSMOS ρ 0.40–0.49; 5 distinct MOS values | ρ 0.65–0.71; 63 distinct values (1.90–4.89) |
| 3 | reverb −0.27, bandwidth −0.37, clipping −0.48 | reverb −0.80, bandwidth −0.88, clipping −0.81, noise −0.93 |
| 4 | Enhancement: MOS +0.03, ρ(gain,PESQ) ≈ 0 | MOS gain +1.05 (91% of files), ρ +0.32 |
| 5 | Degenerate/made-up JSON under OOD input | 0/108 degenerate |
Reverberation on real measured rooms (held-out RWCP / Aachen AIR / REVERB RIRs, PESQ as an
independent reference): ρ(MOS, PESQ) +0.83 (the older legacy/v3 model scores +0.79).
| file | size | what |
|---|---|---|
stage2_checkpoint_best.pth | 121 MB | the model you want — scores + description + MOS |
stage1_checkpoint_best.pth | 121 MB | intermediate calibration-only checkpoint (Stage 2 initialized from it) |
legacy/v3_*.pth | 121 MB ea. | an earlier variant trained on a non-public RIR set — see the trade-off below |
Each contains only the 30.2 M trained parameters — Q-Former (22.8 M), speech→LLaMA projection
(3.1 M), Vicuna LoRA r=8/α=28 (4.2 M), and layer norms. No Vicuna/Whisper/BEATs base weights;
you supply those separately (scripts/setup_salmonn.sh in the repo).
git clone https://github.com/LarocheC/llm-sqa && cd llm-sqa
uv sync --extra experiments
bash scripts/setup_salmonn.sh # SALMONN code + Whisper/Vicuna/BEATs
uv run python scripts/fetch_checkpoints.py # pulls this repo
uv run python -m experiments.planb.eval_compare --n-clips 6
Two-stage LoRA-SFT on a 4,000-clip corpus built from LibriTTS-R train-clean-100, degraded on the fly with known parameters so the targets are exact rather than teacher-labelled.
0.55·min + 0.45·mean of those scores, blended 70/30 with a fused PESQ+NISQA+DNSMOS
metric MOS; descriptions LLM-paraphrased and programmatically grounding-verified (must name every
degraded axis, and no clean one).Trainable: Q-Former + projection + LoRA. Frozen: Whisper, BEATs, Vicuna base.
Reverberation severity is scored from the worse of the RT60 band and the DRR (direct-to- reverberant ratio) band. DRR matters as much as RT60: on a RIR set with varying mic distance it predicts perceived degradation far better (ρ(PESQ,DRR) = +0.67 vs ρ(PESQ,RT60) = −0.27) — a long-RT60 room still sounds fairly dry when the mic is close. RT60 and DRR are measured from each impulse response (Schroeder integration), so the pipeline works with any RIR corpus.
The per-dimension structured scores are the most reliable signal. Prefer them over the MOS.
The MOS is calibrated against objective metrics (PESQ/NISQA/DNSMOS), not human listener MOS. It is not a substitute for a subjective listening test.
Reverberation depends on which reverb you test. Scored against PESQ (an independent reference):
| reverb type | legacy/v3 | this model |
|---|---|---|
| synthetic exp-decay (fixed artificial direct path) | +0.61 | +0.39 |
| SLR28 simulated RIRs (image-method) — this model trained on these | +0.33 | +0.63 |
| real measured RIRs (RWCP / AIR / REVERB), held out from both | +0.79 | +0.83 |
On genuinely measured rooms the two are close, with this model modestly ahead. The large gap is on
the simulated RIRs it trained on, so that figure reflects in-distribution advantage rather than
generalization. If your audio is dominated by synthetic reverb, evaluate legacy/v3 too.
v3 is also slightly better calibrated on VoiceBank-DEMAND (ρ 0.69–0.75 vs 0.65–0.71) and uses a finer MOS scale (81 vs 63 distinct values). It is not reproducible from public data.
English, 16 kHz, single-speaker speech. Not validated on music, multi-speaker, or other languages.
Apache-2.0 for these weights. They are a derivative of SALMONN (Apache-2.0) and are used with Vicuna-7B-v1.5 / Whisper-large-v2 / BEATs, each under its own license — you must obtain those base models separately and comply with their terms (notably Meta's LLaMA license via Vicuna).