RootAccess4Life commited on
Commit
dbdbc56
Β·
verified Β·
1 Parent(s): aa8cd39

Model card: inputs, both results, provenance, limits

Browse files
Files changed (1) hide show
  1. README.md +115 -0
README.md ADDED
@@ -0,0 +1,115 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ---
2
+ license: mit
3
+ tags:
4
+ - audio
5
+ - audio-classification
6
+ - deepfake-detection
7
+ - source-tracing
8
+ - open-set-recognition
9
+ - wavlm
10
+ - encodec
11
+ ---
12
+
13
+ # sourcetrace β€” fitted heads for open-set audio deepfake source tracing
14
+
15
+ Fitted heads for [`sourcetrace`](https://github.com/pujariaditya/sourcetrace), which
16
+ names **which generator produced a synthetic speech clip** β€” or reports that the
17
+ generator is not one it has seen.
18
+
19
+ **These are not standalone models.** Each file is a `torch.save` dict with
20
+ `format: "sourcetrace-method-checkpoint"`, loaded by `sourcetrace.method.Method.load`.
21
+ They hold the small trained head plus the fitted scoring stack (class anchors,
22
+ relative-Mahalanobis density, z-norm constants, conformal calibration, per-block
23
+ whitening). The front-ends β€” `microsoft/wavlm-large` and `facebook/encodec_24khz` β€” are
24
+ frozen, are **not** included here, and are fetched separately by
25
+ `scripts/download_models.py`.
26
+
27
+ ## Input
28
+
29
+ Not audio. A **2133-d** feature vector per clip, laid out as
30
+ `[ SSL 0:2048 | signature 2048:2100 | codec residual 2100:2133 ]`, produced by
31
+ `scripts/extract_features.py`. There is no way to run these weights without the
32
+ repository and an extracted feature cache.
33
+
34
+ ## `mlaad_v5.pt`
35
+
36
+ MLAAD v5, family-level open-set protocol: 65 known generator families, 9,620 evaluation
37
+ trials, split seed 42, fit seed 0.
38
+
39
+ | Metric | Value | Published SOTA |
40
+ |---|---|---|
41
+ | FPR95 (lower better) | **1.14 %** | 3.36 % |
42
+ | OOD-EER (lower better) | 3.66 % | β€” |
43
+ | Closed-set accuracy | 99.34 % | β€” |
44
+
45
+ Conformal abstention: measured coverage 96.11 % against a 95 % nominal level.
46
+
47
+ **Reproducible, not just reported.** Refitting from the public code at these seeds
48
+ reproduces `results/ablation/full.json` bit-for-bit β€” FPR95 1.1428571428571428, OOD-EER
49
+ 3.6571428571428575, closed-set 99.33714285714285, under exact equality rather than a
50
+ tolerance. This file is that fit. Downloading it saves the ~35-40 min fit and nothing
51
+ else: evaluation still reads the feature cache, so MLAAD v5 must be downloaded and
52
+ extracted first.
53
+
54
+ ```bash
55
+ huggingface-cli download RootAccess4Life/ood-source-tracing mlaad_v5.pt \
56
+ --local-dir checkpoints
57
+ python scripts/evaluate.py --task mlaad_v5 --checkpoint checkpoints/mlaad_v5.pt
58
+ ```
59
+
60
+ **Single-seed.** One split seed, one fit seed. These are point estimates with no
61
+ variance attached; do not read the margin over 3.36 % as a measured effect size.
62
+
63
+ ## `stopa.pt`
64
+
65
+ STOPA cross-corpus open-set protocol: 3 EET attacks fitted, 5 known enrolled, 5 unknown
66
+ held out; 33,200 enrolment and 629,800 trial clips, conditions pooled, split seed 42 /
67
+ fit seed 0.
68
+
69
+ | Metric | Value | Published SOTA |
70
+ |---|---|---|
71
+ | Unknown-attack EER (lower better) | **9.33 %** | 16.43 % |
72
+ | Known-attack EER | 10.79 % | β€” |
73
+
74
+ Measured by the released code on 2026-08-18; raw numbers in `results/stopa_measured.json`.
75
+
76
+ A lost earlier implementation had recorded 9.38 % and the paper declines to print it,
77
+ because no identified run stood behind it. The figure above is **not** a recovery of that
78
+ run β€” different implementation, and the reference head's seeded initialisation is
79
+ unrecoverable. It is an independent measurement that happens to land 0.05 points away,
80
+ with a protocol, seeds and a results file behind it. Cite this one, not 9.38.
81
+
82
+ **Single-seed**, like the MLAAD numbers above.
83
+
84
+ ```bash
85
+ huggingface-cli download RootAccess4Life/ood-source-tracing stopa.pt --local-dir checkpoints
86
+ python scripts/evaluate.py --task stopa --checkpoint checkpoints/stopa.pt
87
+ ```
88
+
89
+ ## Limitations
90
+
91
+ - Trained on MLAAD v5 only. Attribution across other corpora, languages, codecs or
92
+ recording conditions is untested.
93
+ - The head in the public code is a reconstruction from `docs/METHOD.md`. It does not
94
+ reproduce an earlier reference implementation's FPR95 = 0.7543 % / OOD-EER = 2.81 %;
95
+ that head's seeded initialisation is unrecoverable and those figures are retired.
96
+ - For research on open-set attribution. Not validated for forensic, legal or moderation
97
+ use; the abstention rule is calibrated on this protocol and its coverage guarantee
98
+ does not transfer off it.
99
+
100
+ ## Licence
101
+
102
+ MIT, matching the code repository. MLAAD and STOPA carry their own terms; no audio is
103
+ redistributed here.
104
+
105
+ ## Citation
106
+
107
+ ```bibtex
108
+ @inproceedings{pujari2027frontend,
109
+ title = {Front-End Evidence and Calibrated Abstention for
110
+ Open-Set Audio Deepfake Attribution},
111
+ author = {Pujari, Aditya},
112
+ booktitle = {Proc. IEEE ICASSP},
113
+ year = {2027}
114
+ }
115
+ ```