Add codec-residual source-tracing model (MLAAD v5 + STOPA)
Browse files- README.md +90 -0
- mlaad_v5.pt +3 -0
README.md
ADDED
|
@@ -0,0 +1,90 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
---
|
| 2 |
+
license: mit
|
| 3 |
+
library_name: sourcetrace
|
| 4 |
+
pipeline_tag: audio-classification
|
| 5 |
+
tags:
|
| 6 |
+
- audio
|
| 7 |
+
- audio-deepfake-detection
|
| 8 |
+
- source-tracing
|
| 9 |
+
- open-set-recognition
|
| 10 |
+
- speech
|
| 11 |
+
- mlaad
|
| 12 |
+
- stopa
|
| 13 |
+
base_model:
|
| 14 |
+
- microsoft/wavlm-large
|
| 15 |
+
- facebook/encodec_24khz
|
| 16 |
+
datasets:
|
| 17 |
+
- mueller91/MLAAD
|
| 18 |
+
language:
|
| 19 |
+
- en
|
| 20 |
+
---
|
| 21 |
+
|
| 22 |
+
# Codec-Residual Open-Set Audio Deepfake Source Tracing
|
| 23 |
+
|
| 24 |
+
Fitted model checkpoint for **open-set audio deepfake source tracing** — attributing a
|
| 25 |
+
synthetic utterance to the **generator** (acoustic model × vocoder) that produced it, and
|
| 26 |
+
**rejecting** generators unseen in training. Evaluated on **MLAAD v5** (source tracing) and
|
| 27 |
+
**STOPA** (speaker/attack tracing).
|
| 28 |
+
|
| 29 |
+
- **Code / reproduction:** https://github.com/pujariaditya/ood_source_tracing
|
| 30 |
+
- **Checkpoint:** `mlaad_v5.pt` — the trained factorized gated head (frozen WavLM-Large front-end
|
| 31 |
+
is loaded separately from `microsoft/wavlm-large`; not stored here).
|
| 32 |
+
|
| 33 |
+
## Results (this checkpoint, vs published SOTA)
|
| 34 |
+
|
| 35 |
+
| Benchmark | Metric | This model | SOTA |
|
| 36 |
+
|-----------|--------|-----------|------|
|
| 37 |
+
| MLAAD v5 | FPR95 | **0.75%** | 3.36% |
|
| 38 |
+
| MLAAD v5 | OOD-EER | 2.81% | — |
|
| 39 |
+
| STOPA | unknown-attack EER | **9.38%** | 16.43% |
|
| 40 |
+
|
| 41 |
+
SOTA: MLAAD v5 FPR95 = PANDA / Neamtu-2026 (arXiv 2606.10758); STOPA unknown-attack EER =
|
| 42 |
+
Firc/Chhibber (arXiv 2509.24674). Numbers are at the paper's protocol scale.
|
| 43 |
+
|
| 44 |
+
## Method
|
| 45 |
+
|
| 46 |
+
Frozen **WavLM-Large** (layers 4-7, mean|std pooling) + a classical **phase/modulation
|
| 47 |
+
signature** channel + a novel **neural codec-reconstruction-residual** channel (EnCodec-24kHz
|
| 48 |
+
at 3 bandwidths). These feed a **factorized gated embedding head** (acoustic-model / vocoder /
|
| 49 |
+
codec sub-spaces with AM-driven FiLM gates). Open-set scoring fuses a per-class **conformal
|
| 50 |
+
margin** with a **relative-Mahalanobis** density (with language-covariance inflation). See the
|
| 51 |
+
GitHub repo's `docs/METHOD.md` for details.
|
| 52 |
+
|
| 53 |
+
## Usage
|
| 54 |
+
|
| 55 |
+
```bash
|
| 56 |
+
git clone https://github.com/pujariaditya/ood_source_tracing
|
| 57 |
+
cd ood_source_tracing
|
| 58 |
+
pip install -e .
|
| 59 |
+
|
| 60 |
+
# fetch this checkpoint
|
| 61 |
+
hf download RootAccess4Life/ood-source-tracing mlaad_v5.pt --local-dir checkpoints
|
| 62 |
+
|
| 63 |
+
# evaluate (reproduces v5-FPR 0.75)
|
| 64 |
+
python scripts/evaluate.py --task mlaad_v5 --checkpoint checkpoints/mlaad_v5.pt
|
| 65 |
+
```
|
| 66 |
+
|
| 67 |
+
Programmatic load:
|
| 68 |
+
|
| 69 |
+
```python
|
| 70 |
+
from sourcetrace.method import Method
|
| 71 |
+
model = Method.load("mlaad_v5.pt")
|
| 72 |
+
scores = model.score_openset(features) # higher = more likely a known generator
|
| 73 |
+
```
|
| 74 |
+
|
| 75 |
+
The checkpoint is a `torch.save` dict produced by `Method.save` (trained head weights + the
|
| 76 |
+
conformal calibration, relative-Mahalanobis density, PCA-whiten transfer, and codec
|
| 77 |
+
normalization statistics). It can also be regenerated from scratch: `python scripts/train.py
|
| 78 |
+
--task mlaad_v5 --seed 0`.
|
| 79 |
+
|
| 80 |
+
## Base models & data
|
| 81 |
+
|
| 82 |
+
- Front-end: [`microsoft/wavlm-large`](https://huggingface.co/microsoft/wavlm-large)
|
| 83 |
+
- Codec channel: [`facebook/encodec_24khz`](https://huggingface.co/facebook/encodec_24khz)
|
| 84 |
+
- Training data: [MLAAD](https://huggingface.co/datasets/mueller91/MLAAD) (v5, PANDA
|
| 85 |
+
family-level split) and [STOPA](https://doi.org/10.5281/zenodo.15606628).
|
| 86 |
+
|
| 87 |
+
## License
|
| 88 |
+
|
| 89 |
+
MIT (see the GitHub repository). Base-model and dataset licenses are held by their respective
|
| 90 |
+
providers.
|
mlaad_v5.pt
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:1bcddc3ab369066cc5d4fdb4befbc1c2a7972db62e4ff88375744789511ab04d
|
| 3 |
+
size 78364343
|