Deepfake Detector

Two-branch fusion model for detecting AI-generated / deepfake faces.

  • Branch 1 โ€” CLIP ViT-L/14 vision encoder: high-level semantic features
  • Branch 2 โ€” FFT magnitude CNN: frequency-domain artifacts (GAN spectral peaks, diffusion noise patterns)
  • AUC: 0.9995

Install

pip install torch transformers huggingface_hub pillow peft

Usage

import torch
from PIL import Image
from transformers import CLIPImageProcessor
from huggingface_hub import hf_hub_download
import sys, os

# Download model.py from the repo
model_py = hf_hub_download(repo_id="knmrfr/deepfake-detector", filename="model.py")
sys.path.insert(0, os.path.dirname(model_py))

from model import DeepfakeDetector

# Load model
model = DeepfakeDetector.from_pretrained("knmrfr/deepfake-detector")
model.eval()

# Load processor
processor = CLIPImageProcessor.from_pretrained("openai/clip-vit-large-patch14")

# Run inference
image = Image.open("face.jpg").convert("RGB")
inputs = processor(images=image, return_tensors="pt")

with torch.no_grad():
    outputs = model(**inputs)
    probs = torch.softmax(outputs.logits, dim=1)[0]
    predicted_idx = int(torch.argmax(probs))

label = model.id2label[predicted_idx]
confidence = round(float(probs[predicted_idx]) * 100, 1)
print(f"{label} ({confidence}%)")  # e.g. "Deepfake (98.3%)"

Labels

ID Label
0 Realism (real face)
1 Deepfake (AI-generated)

Notes

  • Input should be a face-centered image (the training datasets are pre-cropped face images, so production input should match that framing for best results).
  • The CLIP backbone (openai/clip-vit-large-patch14) is loaded automatically on first use (~1.7GB download).
Downloads last month
41
Inference Providers NEW
This model isn't deployed by any Inference Provider. ๐Ÿ™‹ Ask for provider support

Space using knmrfr/deepfake-detector 1