ai-image-detector / README.md
fatihunal's picture
Duplicate from wkaandemir/ai-image-detector
b664492
|
Raw
History Blame Contribute Delete
6.83 kB
---
license: mit
language:
- tr
- en
tags:
- ai-image-detection
- image-classification
- vit
- clip
- lora
library_name: pytorch
pipeline_tag: image-classification
base_model: openai/clip-vit-base-patch16
---
# AI Image Detector
Modern uretici modellerin (Stable Diffusion, Midjourney, DALL-E, Flux, GPT Image vb.) urettigi gorselleri **gercek** ve **yapay (fake)** olarak siniflandirmak icin ince ayar yapilmis bir CLIP ViT-B/16 modelidir. Egitim; iz koruyucu (forensic), frekans-farkinda (frequency-aware) bir yaklasimla, LoRA ile yapilmistir.
Canli demo: [ai-image-detector-space](https://huggingface.co/spaces/wkaandemir/ai-image-detector-space)
---
## Icindekiler
- [Model Detaylari](#model-detaylari)
- [Performans](#performans)
- [Karar Esikleri](#karar-esikleri)
- [Kullanim](#kullanim)
- [Egitim Verisi](#egitim-verisi)
- [Sinirlamalar](#sinirlamalar)
- [Etik Kullanim](#etik-kullanim)
- [Depo Yapisi](#depo-yapisi)
- [Atif](#atif)
---
## Model Detaylari
| | |
|---|---|
| **Omurga (Backbone)** | `vit_base_patch16_clip_224.openai` (CLIP ViT-B/16) |
| **Goruntu boyutu** | 256 x 256 |
| **Ince ayar yontemi** | LoRA (r=16, a=32), `qkv` + `attn.proj` hedefleri - omurgaya birlestirilmis (merged) |
| **Gorev** | Ikili goruntu siniflandirma (`fake` / `real`) |
| **Skor** | Sigmoid cikisi = `p(real)`; 0 = fake, 1 = real |
| **Lisans** | MIT |
---
## Performans
Modelin egitim ve esik secimi sirasinda **hic gormedigi** hold-out test bolunmesinde degerlendirilmistir:
| Metrik | Deger |
|---|---|
| Dogruluk (Accuracy) | 0.959 |
| F1 (real) | 0.958 |
| Makro F1 | 0.959 |
| Kesinlik (Precision, real) | 0.990 |
| Duyarlilik (Recall, real) | 0.928 |
| ROC-AUC | 0.994 |
| Ortalama Hassasiyet (Average Precision) | 0.994 |
| Sahte'i gercek sanma orani (real FPR) | 0.0095 |
| Belirsizlik orani | 0.0026 |
Erken durdurma oncesi en iyi dogrulama dogrulugu: **0.9735** (20 epoch'tan 10.'unda, patience=5 ile 12.'de durdu).
---
## Karar Esikleri
Model `p(real)` skoru uretir. Sicaklik olceklemeli (temperature-scaled, T=0.595) karar kurali bir belirsizlik bandi kullanir:
```
fake_threshold real_threshold
<----- YAPAY ------><-- BELIRSIZ --><-- GERCEK -->
0 ---------------------------------------------------------------- 1
```
- `p(real) < 0.91` -> **fake (yapay)**
- `p(real) >= 0.93` -> **real (gercek)**
- `0.91 <= p(real) < 0.93` -> **uncertain (belirsiz)** - karar vermekten kacinilir
Esikler, islem hedeflerini (`fake_as_real <= 0.02`) karsilayacak sekilde ozel bir kalibrasyon bolunmesinde secilmistir.
---
## Kullanim
Model agirliklari `model.safetensors` olarak saklanir (LoRA bagdasticilari omurgaya birlestirilmistir). Yukleme icin CLIP ViT-B/16 basliginin `timm` ile yeniden kurulmasi gerekir.
### Minimal cikarim ornegi
```python
import torch
from safetensors.torch import load_file
import timm
# 1. Mimarinin yeniden kurulmasi ve birlestirilmis agirliklarin yuklenmesi
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. On-isleme (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 cikisi = 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)
```
### Canli Demo (HF Space)
Modeli tarayicida denemek icin: [ai-image-detector-space](https://huggingface.co/spaces/wkaandemir/ai-image-detector-space)
### Self-host (Docker)
Modeli kendi sunucunuzda calistirmak icin `docker/` dizinindeki Dockerfile ve `docker-compose.yml` kullanin:
```bash
docker compose up
```
Bu komut; CPU-only PyTorch imaji kurar, model agirliklarini bu depodan indirir ve Gradio arayuzunu `http://localhost:7860` adresinde baslatir.
---
## Egitim Verisi
~20.000 normalize edilmis, kaynak-farkinda ve dengeli bir veri kumesinde egitilmistir:
- **Gercek**: [Spawning/PD12M](https://huggingface.co/datasets/Spawning/PD12M)'den 7.553 gorsel (kamu mali / CC0).
- **Yapay**: [pthan12/AIGenImages2026](https://huggingface.co/datasets/pthan12/AIGenImages2026)'dan 3.735 gorsel (modern ureticiler: Flux, Midjourney, GPT Image, DALL-E, Reve vb.) + [poloclub/diffusiondb](https://huggingface.co/datasets/poloclub/diffusiondb)'den 3.818 gorsel (eski Stable Diffusion).
**Bolunmeler (splits):** 15.106 egitim / 1.888 dogrulama / 1.888 test / 1.118 dis test (genellemeyi olcmek icin kaynak grubuna gore ayri tutuldu). Bolunmeler arasi tekrar yok (SHA-256 ile dogrulandi).
---
## Sinirlamalar
- **Dagilim kaymasi (Distribution shift).** Her dedektor gibi, bu model de egitildigi dagilim icinde genelleme yapar. Egitim dagiliminin disinda kalan gorseller (orn. cok kucuk, agir sikistirilmis veya alisilmadik kaynak stilleri) yanlis siniflandirilabilir.
- **Dusmanca kacinma (Adversarial evasion).** Kararli bir saldirgan, herhangi bir sabit dedektoru atlatmak icin perturbasyon tasarlayabilir. Bu model adaptif dusmanca saldirilara karsi dayanikli degildir.
- **Uureticiler gelisiyor.** Egitim verisinde temsil edilmeyen gelecekteki uretici surumlerinin tespiti daha zor olabilir. Daha yeni ureticilerle periyodik yeniden egitim onerilir.
- **Yuze ozel iddia yok.** Model gorsellerin tamamini puanlar; manipule edilmis bolgeleri yerellestirmez veya yuzler hakkinda garanti vermez.
---
## Etik Kullanim
Bu model **savunmaci** kullanim icin tasarlanmistir: icerik ozgunluk kontrolleri, medya okuryazarligi ve adli analiz. Insan incelemesi olmadan bireyleri aldatici icerik olusturmakla yanlis suclamak icin kullanilmamalidir; belirsiz tahminler, sahtekarlik kaniti sayilmak yerine sonucsuz olarak ele alinmalidir.
---
## Depo Yapisi
Bu depo bir model karti + demo deposudur. Egitim kodu ozel tutulmustur.
| Dosya/Dizin | Aciklama |
|---|---|
| `model.safetensors` | Birlestirilmis (merged) model agirliklari |
| `config.json` | Mimari, esikler ve normalizasyon parametreleri |
| `metrics.json` | Egitim, dogrulama ve test metrikleri |
| `app.py` | HF Space Gradio demosu |
| `docker/` | Self-host icin Docker dosyalari |
| `Dockerfile` | CPU-only Docker imaji |
| `docker-compose.yml` | Tek komutla deploy |
| `examples/` | Ornek test gorselleri |
---
## Atif
Bu modeli kullanirsaniz lutfen atifta bulunun:
```bibtex
@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}
}
```