| --- |
| 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} |
| } |
| ``` |
|
|