Deepfake Face Detector

A hybrid CNN model for detecting AI-generated (deepfake) face images, built using transfer learning on a dual-stream architecture.

Model Architecture

This model combines two parallel CNN streams:

  • Spatial Stream โ€” EfficientNet-B4 pretrained on ImageNet, fine-tuned to detect visible artifacts such as unnatural skin texture, blending edges, and facial inconsistencies
  • Frequency Stream โ€” Xception backbone with fixed SRM (Steganalysis Rich Model) filters to detect invisible GAN noise fingerprints in pixel residuals
  • Fusion Module โ€” Both stream outputs are concatenated (1792 + 2048 = 3840 features) and passed through a classification head with Dropout regularization
  • Output โ€” Sigmoid activation producing a probability score (0 = fake, 1 = real)

Training Strategy

Three-phase transfer learning approach:

Phase Layers Trained Learning Rate Epochs
1 Classifier head only 1e-3 3
2 Top EfficientNet blocks + classifier 1e-4 3

Dataset

Trained and evaluated on 140k Real and Fake Faces

Split Real Fake Total
Train 50,000 50,000 100,000
Valid 10,000 10,000 20,000
Test 10,000 10,000 20,000

Fake images are StyleGAN2-generated faces. Real images are sourced from Flickr-Faces-HQ (FFHQ).

Performance

Metric Score
Test Accuracy 98.59%
Validation Accuracy 98.55%

Usage

import torch
from torchvision import transforms
from PIL import Image

model = HybridDeepfakeDetector()
model.load_state_dict(torch.load("deepfake_detector_phase2.pth", map_location="cpu"))
model.eval()

transform = transforms.Compose([
    transforms.Resize((224, 224)),
    transforms.ToTensor(),
    transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])
])

image = Image.open("face.jpg").convert("RGB")
tensor = transform(image).unsqueeze(0)

with torch.no_grad():
    prob = model(tensor).item()

label = "REAL" if prob > 0.5 else "FAKE"
print(f"{label} ({prob*100:.1f}% confidence)")

Limitations

  • Optimized for StyleGAN2 generated faces โ€” may perform differently on other GAN architectures
  • Best results on frontal face images
  • Not tested on video deepfakes

Try It

Live demo available at Hugging Face Spaces

Downloads last month

-

Downloads are not tracked for this model. How to track
Inference Providers NEW
This model isn't deployed by any Inference Provider. ๐Ÿ™‹ Ask for provider support