AI Image Detector (Yapay Zeka Görsel Dedektörü)
Modern üretici modellerin (Stable Diffusion, Midjourney, DALL·E, Flux, GPT Image vb.) ürettiği görselleri gerçek ve yapay (fake) olarak sınıflandırmak için ince ayar yapılmış bir CLIP ViT-B/16 modelidir. Eğitim; iz koruyucu (forensic), frekans-farkında (frequency-aware) bir yaklaşımla, LoRA ile yapılmıştır.
📌 İçindekiler
🧠 Model Detayları
| Omurga (Backbone) | vit_base_patch16_clip_224.openai (CLIP ViT-B/16) |
| Görüntü boyutu | 256 × 256 |
| İnce ayar yöntemi | LoRA (r=16, α=32), qkv + attn.proj hedefleri — omurgaya birleştirilmiş (merged) |
| Görev | İkili görüntü sınıflandırma (fake / real) |
| Skor | Sigmoid çıkışı = p(real); 0 = fake, 1 = real |
| Lisans | MIT |
📊 Performans
Modelin eğitim ve eşik seçimi sırasında hiç görmediği hold-out test bölünmesinde değerlendirilmiştir:
| Metrik | Değer |
|---|---|
| Doğruluk (Accuracy) | 0.959 |
| F1 (real) | 0.958 |
| Makro F1 | 0.959 |
| Kesinlik (Precision, real) | 0.990 |
| Duyarlılık (Recall, real) | 0.928 |
| ROC-AUC | 0.994 |
| Ortalama Hassasiyet (Average Precision) | 0.994 |
| Sahte'i gerçek sanma oranı (real FPR) | 0.0095 |
| Belirsizlik oranı | 0.0026 |
Erken durdurma öncesi en iyi doğrulama doğruluğu: 0.9735 (20 epoch'tan 10.'sunda, patience=5 ile 12.'de durdu).
⚖️ Karar Eşikleri
Model p(real) skoru üretir. Sıcaklık ölçeklemeli (temperature-scaled, T=0.595) karar kuralı bir belirsizlik bandı kullanır:
fake_threshold real_threshold
<───── YAPAY ──────><── BELİRSİZ ──><── GERÇEK
0 ─────────────────────────────────────────────────────────── 1
p(real) < 0.91→ fake (yapay)p(real) >= 0.93→ real (gerçek)0.91 <= p(real) < 0.93→ uncertain (belirsiz) — karar vermekten kaçınılır
Eşikler, işlem hedeflerini (fake_as_real <= 0.02) karşılayacak şekilde özel bir kalibrasyon bölünmesinde seçilmiştir.
🚀 Kullanım
Model ağırlıkları model.safetensors olarak saklanır (LoRA bağdaştırıcıları omurgaya birleştirilmiştir). Yükleme için projenin DetectorPredictor sarmalayıcısına veya CLIP ViT-B/16 başlığının elle yeniden kurulmasına gerek vardır.
Minimal çıkarım örneği
import torch
from safetensors.torch import load_file
import timm
# 1. Mimariyi yeniden kur ve birleştirilmiş ağırlıkları yükle
state = load_file("model.safetensors")
model = timm.create_model("vit_base_patch16_clip_224.openai", pretrained=False, num_classes=1)
model.load_state_dict(state, strict=False)
model.eval()
# 2. Ön-işle (256x256, CLIP normalizasyonu)
from torchvision import transforms
tfm = transforms.Compose([
transforms.Resize((256, 256)),
transforms.ToTensor(),
transforms.Normalize(mean=[0.481, 0.458, 0.408], std=[0.269, 0.261, 0.276]),
])
x = tfm(image).unsqueeze(0)
# 3. Tahmin (sigmoid çıkışı = p(real))
with torch.no_grad():
p_real = torch.sigmoid(model(x)).item()
pred = "real" if p_real >= 0.93 else "fake" if p_real < 0.91 else "uncertain"
print(p_real, pred)
Gradio demosu
Bu depodaki app.py, modeli model.safetensors'tan yükleyen hazır bir Gradio arayüzüdür (HF Space olarak da çalışır):
python app.py
Kaynak depodaki scripts/gradio_app.py ise tek komutluk bir CLI/demo sunar:
python scripts/gradio_app.py --checkpoint-path model.safetensors --server-name 0.0.0.0
📚 Eğitim Verisi
~20.000 normalize edilmiş, kaynak-farkında ve dengeli bir veri kümesinde eğitilmiştir:
- Gerçek: Spawning/PD12M'den 7.553 görsel (kamu malı / CC0).
- Yapay: pthan12/AIGenImages2026'dan 3.735 görsel (modern üreticiler: Flux, Midjourney, GPT Image, DALL·E, Reve vb.) + poloclub/diffusiondb'den 3.818 görsel (eski Stable Diffusion).
Bölünmeler (splits): 15.106 eğitim / 1.888 doğrulama / 1.888 test / 1.118 dış test (genellemeyi ölçmek için kaynak grubuna göre ayrı tutuldu). Bölünmeler arası tekrar yok (SHA-256 ile doğrulendi).
⚠️ Sınırlamalar
- Dağılım kayması (Distribution shift). Her dedektör gibi, bu model de eğitildiği dağılım içinde genelleme yapar. Eğitim dağılımının dışında kalan görseller (ör. çok küçük, ağır sıkıştırılmış veya alışılmadık kaynak stilleri) yanlış sınıflandırılabilir. Yüksek kaliteli profesyonel fotoğraflarda ve modern AI çıktılarında mükemmel çalışan bir model, yine de alışılmadık düşük kaliteli girdilerde yanılabilir.
- Düşmanca kaçınma (Adversarial evasion). Kararlı bir saldırgan, herhangi bir sabit dedektörü atlatmak için pertürbasyon tasarlayabilir. Bu model adaptif düşmanca saldırılara karşı dayanıklı değildir.
- Üreticiler gelişiyor. Eğitim verisinde temsil edilmeyen gelecekteki üretici sürümlerinin tespiti daha zor olabilir. Daha yeni üreticilerle periyodik yeniden eğitim önerilir.
- Yüze özel iddia yok. Model görsellerin tamamını puanlar; manipüle edilmiş bölgeleri yerelleştirmez veya yüzler hakkında garanti vermez.
🧭 Etik Kullanım
Bu model savunmacı kullanım için tasarlanmıştır: içerik özgünlük kontrolleri, medya okuryazarlığı ve adli analiz. İnsan incelemesi olmadan bireyleri aldatıcı içerik oluşturmakla yanlış suçlamak için kullanılmamalıdır; belirsiz tahminler, sahtekarlık kanıtı sayılmak yerine sonuçsuz olarak ele alınmalıdır.
📖 Atıf
Bu modeli kullanırsanız lütfen atıfta bulunun:
@misc{ai-image-detector-2026,
title = {AI Image Detector: CLIP ViT-B/16 LoRA model for AI image detection},
author = {Demir, Kaan},
year = {2026},
url = {https://huggingface.co/wkaandemir/ai-image-detector}
}