artifactnet / README.md
intrect's picture
Upload README.md with huggingface_hub
3c5d488 verified
|
Raw
History Blame
2.05 kB
metadata
license: cc-by-nc-4.0
tags:
  - audio-classification
  - ai-music-detection
  - forensic
  - onnx
language:
  - en
pipeline_tag: audio-classification

ArtifactNet v9.4 — AI-Generated Music Forensic Detection

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.

Model Description

  • Architecture: ArtifactUNet (3.6M) + 7ch HPSS Forensic CNN (424K) = 4.2M total
  • Input: 44.1kHz mono audio, 4-second segments
  • Output: P(AI) ∈ [0, 1] per segment, song-level median verdict
  • Format: Single ONNX file (entire pipeline: STFT → UNet → HPSS → 7ch → CNN → sigmoid)

Performance (ArtifactBench v1, fair eval)

Metric ArtifactNet (4.2M) CLAM (194M) SpecTTTra (19M)
F1 0.983 0.824 0.766
Precision 0.991 0.758 0.885
Recall (TPR) 0.976 0.904 0.675
FPR 0.015 0.705 0.214
@FPR≤5% TPR 99.1% - -

Evaluated on 8,766 tracks across 22 AI generators and 6 real music sources.

Usage

import onnxruntime as ort
import numpy as np
import soundfile as sf

# Load model
sess = ort.InferenceSession("artifactnet_v94_full.onnx")

# Load audio (44.1kHz mono, 4-second chunk)
audio, sr = sf.read("track.wav", dtype="float32")
if audio.ndim > 1:
    audio = audio.mean(axis=1)
chunk = audio[:4 * 44100].reshape(1, -1).astype(np.float32)

# Inference
prob = sess.run(None, {"audio": chunk})[0][0]
print(f"P(AI) = {prob:.4f}")  # > 0.5 → AI-generated

For song-level verdict, compute median over multiple chunks.

Benchmark

Evaluate with ArtifactBench v1.

Citation

@article{oh2026artifactnet,
  title={ArtifactNet: Detecting AI-Generated Music via Forensic Residual Physics},
  author={Oh, Heewon},
  year={2026}
}

License

CC BY-NC 4.0