CoolFace
Modelpublic

shivam-2211/voice-detection-model

sourceHugging Facemitupdated 3mo agoView on Hugging Face
1likes12downloads
Model Card

Voice Detection Model

Binary audio classifier — classifies speech as FAKE (AI-generated) or REAL (human).

Built by fine-tuning `facebook/wav2vec2-large-xlsr-53` on the `garystafford/deepfake-audio-detection` dataset.


Model Details

ArchitectureWav2Vec2ForSequenceClassification
Base modelfacebook/wav2vec2-large-xlsr-53
Parameters315,701,634 (F32)
File size1.26 GB
FormatSafetensors
Transformers4.57.6

Labels

json
{
  "id2label": { "0": "FAKE", "1": "REAL" },
  "label2id": { "FAKE": 0, "REAL": 1 }
}
IDLabelMeaning
0FAKEAI-generated / synthetic / deepfake
1REALAuthentic human speech

Architecture

Transformer Encoder

Hidden size1024
Intermediate size4096
Layers24
Attention heads16
Activationgelu
Stable layer norm
Layer norm eps1e-05
Layerdrop0.1

CNN Feature Extractor (7 layers)

LayerChannelsKernelStride
1512105
251232
351232
451232
551232
651222
751222
  • Activation: gelu · Norm: layer · Bias: true
  • Conv positional embeddings: 128, 16 groups
  • Feature encoder was frozen during fine-tuning

TDNN Classifier Head

LayerDimKernelDilation
151251
251232
351233
451211
5150011
  • Classifier projection: 256
  • X-vector output dim: 512

Regularization

Attention dropout0.1
Hidden dropout0.1
Feature proj dropout0.1
Activation dropout0.0
Final dropout0.0
SpecAugment✅ enabled
Time mask prob0.075
Time mask length10

Preprocessor

From preprocessor_config.json:

TypeWav2Vec2FeatureExtractor
Sampling rate16000 Hz
Feature size1 (mono)
Normalize
Return attention mask
Padding sideright
Padding value0

Training

Dataset

`garystafford/deepfake-audio-detection` — 1,866 samples total.

Group-aware defensive splits (speaker isolation):

SplitSamples
Train1,467
Validation206
Test193

Hyperparameters

Learning rate3e-5
Batch size8 per device
Gradient accumulation2 (effective batch 16)
Max epochs10
Early stopping patience3 (metric: F1)
Warmup ratio0.1
Weight decay0.01
Max grad norm1.0
PrecisionFP16
LossWeighted CrossEntropy (class-balanced)
Seed42

Preprocessing

  • Silence trimming (librosa.effects.trim, 30 dB threshold)
  • Truncate/pad to 5.0s (80,000 samples at 16 kHz)
  • Random crop during training, center crop during eval

Augmentation (training only)

TransformRangeProbability
Gaussian noise0.001–0.01 amplitude0.4
Time stretch0.9–1.1×0.3
Pitch shift±2 semitones0.3
Gain±6 dB0.5

Infrastructure

PlatformGoogle Colab
GPUNVIDIA T4
Python3.12

Usage

python
import torch
import librosa
from transformers import Wav2Vec2ForSequenceClassification, Wav2Vec2FeatureExtractor

model_id = "shivam-2211/voice-detection-model"
extractor = Wav2Vec2FeatureExtractor.from_pretrained(model_id)
model = Wav2Vec2ForSequenceClassification.from_pretrained(model_id)
model.eval()

# Load audio at 16 kHz mono
audio, sr = librosa.load("sample.wav", sr=16000, mono=True)

inputs = extractor(audio, sampling_rate=16000, return_tensors="pt", padding=True)

with torch.no_grad():
    logits = model(**inputs).logits
    probs = torch.softmax(logits, dim=-1)
    pred_id = torch.argmax(probs, dim=-1).item()
    confidence = probs[0][pred_id].item()

label = model.config.id2label[pred_id]
print(f"{label} ({confidence:.2%})")

Repository Files

FileDescription
model.safetensorsModel weights (1.26 GB)
config.jsonArchitecture and label config
preprocessor_config.jsonFeature extractor settings
training_args.binSerialized training hyperparameters

Limitations

  • Performance may degrade on heavily compressed, noisy, or very short audio.
  • Newer voice synthesis methods may produce artifacts not represented in training data.
  • Should not be used as sole evidence without expert review.

License

MIT