Skip to main content
DeepFense Logo

DeepFense

A Modular Framework for Deepfake Audio Detection

Python PyTorch License


What is DeepFense?

DeepFense lets you build deepfake audio detectors by combining frontends (pretrained feature extractors), backends (classifiers), and loss functions -- all defined in a single YAML config. No code changes needed to run new experiments.

Raw Audio --> Frontend (Wav2Vec2, WavLM, HuBERT, ...) --> Backend (AASIST, MLP, ...) --> Loss --> Score

Install

conda create -n deepfense python=3.10
conda activate deepfense
pip install deepfense

Or install from source (for development):

conda create -n deepfense python=3.10
conda activate deepfense
git clone https://github.com/Yaselley/deepfense-framework
cd deepfense-framework
pip install -e .

Quick Start

1. Generate dummy test data

python tests/create_samples.py

2. Train

python train.py --config deepfense/config/train.yaml

3. Test

python test.py \
    --config deepfense/config/train.yaml \
    --checkpoint outputs/Wav2Vec2_Nes2Net_Example_*/best_model.pth

4. Multi-GPU Training

DeepFense supports multi-GPU training out of the box via PyTorch DDP. Just use torchrun:

# 2 GPUs on a single node
torchrun --nproc_per_node=2 train.py --config deepfense/config/train.yaml

# 4 GPUs
torchrun --nproc_per_node=4 train.py --config deepfense/config/train.yaml

No config changes required -- DDP is detected automatically. Checkpoints, logs, and evaluation run on rank 0 only. The saved checkpoints are identical to single-GPU ones and can be loaded without any DDP-specific handling.

5. Use real data

Create a Parquet file with columns ID, path, label ("bonafide" / "spoof"), then update the config:

data:
  train:
    parquet_files: ["/path/to/train.parquet"]
  val:
    parquet_files: ["/path/to/val.parquet"]

How Configuration Works

Everything is controlled by a single YAML file. Here is the anatomy:

# ---------- experiment ----------
exp_name: "my_experiment"
output_dir: "./outputs/"
seed: 42

# ---------- data ----------
data:
  sampling_rate: 16000
  label_map: {"bonafide": 1, "spoof": 0}
  train:
    parquet_files: ["train.parquet"]
    batch_size: 32
    base_transform:
      - type: "pad"
        max_len: 64600          # ~4 sec at 16 kHz
    augment_transform:          # training only
      - type: "rawboost"
        noise_ratio: 0.4
  val:
    parquet_files: ["val.parquet"]
    batch_size: 64
    base_transform:
      - type: "pad"
        max_len: 64600

# ---------- model ----------
model:
  type: "StandardDetector"
  frontend:
    type: "wav2vec2"                    # or wavlm, hubert, mert, eat
    args:
      source: "huggingface"             # or "fairseq" for local .pt files
      ckpt_path: "facebook/wav2vec2-xls-r-300m"
      freeze: True
  backend:
    type: "AASIST"                      # or MLP, Nes2Net, ECAPA_TDNN, RawNet2
    args:
      input_dim: 1024                   # must match frontend output dim
  loss:
    - type: "OCSoftmax"                 # or CrossEntropy, AMSoftmax, ASoftmax
      weight: 1.0
      embedding_dim: 32                 # must match backend output dim

# ---------- training ----------
training:
  epochs: 50
  device: "cuda"
  optimizer:
    type: "adam"
    lr: 0.0001
  scheduler:
    type: "cosine_annealing"
    T_max: 50
  monitor_metric: "EER"
  monitor_mode: "min"
  metrics:
    EER: {}
    ACC: {}
    minDCF: {Pspoof: 0.05}

See the Full Tutorial for a detailed walkthrough of every parameter.


Available Components

Category Options
Frontends Wav2Vec2, WavLM, HuBERT, MERT, EAT
Backends AASIST, ECAPA-TDNN, Nes2Net, RawNet2, MLP, TCM
Losses CrossEntropy, OC-Softmax, AM-Softmax, A-Softmax
Augmentations RawBoost, RIR, Codec, AdditiveNoise, SpeedPerturb, AddBabble, DropChunk, DropFreq
Metrics EER, minDCF, actDCF, ACC, F1

List them from the CLI:

deepfense list
deepfense list --component-type backends

Pretrained Models & Datasets (HuggingFace Hub)

DeepFense publishes 455+ pretrained models and 12 datasets at huggingface.co/DeepFense.

# See what's available
deepfense download list-datasets
deepfense download list-models --filter WavLM

# Download a dataset (parquet files)
deepfense download dataset CompSpoof

# Download a pretrained model (checkpoint + config)
deepfense download model ASV19_WavLM_Nes2Net_NoAug_Seed42

# Test the downloaded model
python test.py \
    --config models/ASV19_WavLM_Nes2Net_NoAug_Seed42/config.yaml \
    --checkpoint models/ASV19_WavLM_Nes2Net_NoAug_Seed42/best_model.pth

Or in Python:

from deepfense.hub import download_dataset, download_model

parquets = download_dataset("CompSpoof")           # returns list of local paths
files    = download_model("ASV19_WavLM_Nes2Net_NoAug_Seed42")  # returns {"checkpoint": ..., "config": ...}

See the HuggingFace Hub Guide for full workflows (training, evaluation, inference).


Adding Your Own Component

Every component type follows the same pattern:

  1. Create a file (e.g. deepfense/models/backends/my_backend.py)
  2. Decorate with the registry:
    from deepfense.utils.registry import register_backend
    from deepfense.models.base_model import BaseBackend
    
    @register_backend("MyBackend")
    class MyBackend(BaseBackend):
        def __init__(self, config):
            super().__init__()
            # ...
    
        def forward(self, x):
            # ...
    
  3. Import it in the package __init__.py
  4. Use it in your config:
    backend:
      type: "MyBackend"
      args: { ... }
    

The same pattern applies to frontends, losses, augmentations, datasets, optimizers, and metrics. See the user guides for detailed walkthroughs.


Project Structure

deepfense/
├── cli/             # CLI commands (train, test, list)
├── config/          # YAML configs + parquet generators
├── data/            # Dataset loading + transforms/augmentations
├── models/
│   ├── frontends/   # Wav2Vec2, WavLM, HuBERT, MERT, EAT
│   ├── backends/    # AASIST, ECAPA-TDNN, Nes2Net, MLP, ...
│   ├── losses/      # OC-Softmax, AM-Softmax, CrossEntropy, ...
│   └── modules/     # Shared layers (pooling, conformer, fairseq_local)
├── training/        # Trainer, evaluator, metrics, seed
└── utils/           # Registry, visualization

Documentation

Guide Description
Installation Setup instructions
Quick Start First model in 5 minutes
Full Tutorial Every config option explained
Architecture How DeepFense works internally
Configuration Reference All YAML parameters
Library Usage Use DeepFense as a Python library
HuggingFace Hub Download datasets & pretrained models
CLI Reference CLI commands
Components Frontend, backend, loss, augmentation reference
User Guides Adding custom components, training workflows

Citation

@software{deepfense2025,
  title={DeepFense: A Modular Framework for Deepfake Audio Detection},
  author={DeepFense Team},
  year={2025},
  url={https://github.com/Yaselley/deepfense-framework}
}

License

Apache 2.0 -- see LICENSE for details.

Metadata

Release files for deepfense 0.2.2

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for deepfense 0.2.2
File Size Uploaded
deepfense-0.2.2.tar.gz 154.7 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for deepfense 0.2.2
File Interpreter ABI Platform
deepfense-0.2.2-py3-none-any.whl Python 3 none any Details

Total release size: 397.3 kB

Release files / deepfense-0.2.2.tar.gz

Download URL deepfense-0.2.2.tar.gz
Size 154.7 kB
Tags Source
SHA-256 checksum
How to use checksums
63af86a7d7c2926e511149d3bf3e3153cfb8914a0e2438c019b8a1c43d6986cc
BLAKE2b-256 checksum
How to use checksums
55423dbe5b3303ac2d9cb90410c02bb0fa848b8fbe44e6e6252cd273ffb83367
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.10.12

Release files / deepfense-0.2.2-py3-none-any.whl

Download URL deepfense-0.2.2-py3-none-any.whl
Size 242.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
7a2621bf1d49c22e4e21afd0f49ac6e336b100e1c6b0d03fbdaa19b66d33d725
BLAKE2b-256 checksum
How to use checksums
efeb0d355ddaa3eb5cd5102a0aa1cbf27114f3ce352d4e151c4cbadea11e8eb1
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.10.12

Release history Release notifications | RSS feed

This release

0.2.2 This release

2 release files

0.2.1

2 release files

0.2.0

2 release files

0.1

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page