intrect commited on
Commit
3c5d488
·
verified ·
1 Parent(s): 66b964e

Upload README.md with huggingface_hub

Browse files
Files changed (1) hide show
  1. README.md +75 -0
README.md ADDED
@@ -0,0 +1,75 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ---
2
+ license: cc-by-nc-4.0
3
+ tags:
4
+ - audio-classification
5
+ - ai-music-detection
6
+ - forensic
7
+ - onnx
8
+ language:
9
+ - en
10
+ pipeline_tag: audio-classification
11
+ ---
12
+
13
+ # ArtifactNet v9.4 — AI-Generated Music Forensic Detection
14
+
15
+ ArtifactNet detects AI-generated music by extracting forensic residual artifacts via a task-specific UNet, rather than learning generator-specific patterns. This approach generalizes across 22 AI music generators with only 4.2M parameters.
16
+
17
+ ## Model Description
18
+
19
+ - **Architecture**: ArtifactUNet (3.6M) + 7ch HPSS Forensic CNN (424K) = 4.2M total
20
+ - **Input**: 44.1kHz mono audio, 4-second segments
21
+ - **Output**: P(AI) ∈ [0, 1] per segment, song-level median verdict
22
+ - **Format**: Single ONNX file (entire pipeline: STFT → UNet → HPSS → 7ch → CNN → sigmoid)
23
+
24
+ ## Performance (ArtifactBench v1, fair eval)
25
+
26
+ | Metric | ArtifactNet (4.2M) | CLAM (194M) | SpecTTTra (19M) |
27
+ |---|---|---|---|
28
+ | **F1** | **0.983** | 0.824 | 0.766 |
29
+ | **Precision** | 0.991 | 0.758 | 0.885 |
30
+ | **Recall (TPR)** | 0.976 | 0.904 | 0.675 |
31
+ | **FPR** | 0.015 | 0.705 | 0.214 |
32
+ | @FPR≤5% TPR | **99.1%** | - | - |
33
+
34
+ Evaluated on 8,766 tracks across 22 AI generators and 6 real music sources.
35
+
36
+ ## Usage
37
+
38
+ ```python
39
+ import onnxruntime as ort
40
+ import numpy as np
41
+ import soundfile as sf
42
+
43
+ # Load model
44
+ sess = ort.InferenceSession("artifactnet_v94_full.onnx")
45
+
46
+ # Load audio (44.1kHz mono, 4-second chunk)
47
+ audio, sr = sf.read("track.wav", dtype="float32")
48
+ if audio.ndim > 1:
49
+ audio = audio.mean(axis=1)
50
+ chunk = audio[:4 * 44100].reshape(1, -1).astype(np.float32)
51
+
52
+ # Inference
53
+ prob = sess.run(None, {"audio": chunk})[0][0]
54
+ print(f"P(AI) = {prob:.4f}") # > 0.5 → AI-generated
55
+ ```
56
+
57
+ For song-level verdict, compute median over multiple chunks.
58
+
59
+ ## Benchmark
60
+
61
+ Evaluate with [ArtifactBench v1](https://huggingface.co/datasets/intrect/artifactbench-v1).
62
+
63
+ ## Citation
64
+
65
+ ```bibtex
66
+ @article{oh2026artifactnet,
67
+ title={ArtifactNet: Detecting AI-Generated Music via Forensic Residual Physics},
68
+ author={Oh, Heewon},
69
+ year={2026}
70
+ }
71
+ ```
72
+
73
+ ## License
74
+
75
+ CC BY-NC 4.0