File size: 8,505 Bytes
beb14cc d4b29e2 c5ca459 beb14cc c5ca459 beb14cc adf7bd0 d4b29e2 c5ca459 d4b29e2 c5ca459 d4b29e2 c5ca459 d4b29e2 c5ca459 d4b29e2 c5ca459 d4b29e2 c5ca459 d4b29e2 c5ca459 d4b29e2 c5ca459 d4b29e2 c5ca459 d4b29e2 c5ca459 d4b29e2 c5ca459 d4b29e2 c5ca459 d4b29e2 c5ca459 d4b29e2 c5ca459 d4b29e2 c5ca459 d4b29e2 c5ca459 d4b29e2 c5ca459 d4b29e2 c5ca459 d4b29e2 c5ca459 2f48cbb c5ca459 d4b29e2 c5ca459 d4b29e2 c5ca459 d4b29e2 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 |
---
language: fr
license: mit
tags:
- image-classification
- computer-vision
- ai-detection
- deepfake-detection
- resnet50
- onnx
pipeline_tag: image-classification
---
# 🔍 Modèle de détection d'IA
## 🎓 Comprendre les architectures : CNN vs ViT
### 🧠 Qu'est-ce qu'un CNN (Convolutional Neural Network) ?
Les **CNN** sont comme des détectives qui analysent une image **zone par zone** :
1. **Filtres convolutifs** : Ils scannent l'image par petits carrés (3×3, 5×5 pixels)
2. **Détection progressive** :
- Couches basses → Détectent les lignes, contours, textures
- Couches moyennes → Formes simples (yeux, nez, roues)
- Couches hautes → Concepts complexes (visages, voitures)
3. **Avantages** :
- ✅ Très efficaces pour détecter des **patterns locaux** (artefacts IA, bruit)
- ✅ Moins gourmands en calcul
- ✅ Excellents pour les **détails fins** (compression, pixels suspects)
**🔧 Exemple d'architecture CNN** : ResNet, EfficientNet, MobileNet
---
### 🌟 Qu'est-ce qu'un ViT (Vision Transformer) ?
Les **ViT** découpent l'image en **patchs** (16×16 pixels) et les traitent comme des **mots dans une phrase** :
1. **Découpage en patchs** : L'image devient une séquence de morceaux
2. **Attention globale** : Chaque patch peut "communiquer" avec tous les autres
3. **Compréhension contextuelle** : Analyse les relations à longue distance
**Avantages** :
- ✅ Capte les **dépendances globales** (cohérence style, lighting)
- ✅ Meilleur pour les **scènes complexes**
- ❌ Plus gourmand en données d'entraînement
---
### 🎯 Pourquoi j'ai choisi ViT pour ce projet ?
| Critère | ViT (Vision Transformer) | CNN (ResNet) |
|---------|--------------------------|--------------|
| **Détection d'artefacts subtils** | ⭐⭐⭐⭐ | ⭐⭐⭐ |
| **Cohérence globale** | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ |
| **Généralisation** | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ |
| **Vitesse d'inférence** | ⭐⭐⭐ | ⭐⭐⭐⭐⭐ |
| **Taille du modèle** | ⭐⭐⭐ | ⭐⭐⭐⭐ |
**Décision finale** : ViT est plus performant pour détecter les **incohérences stylistiques** et la **cohérence d'éclairage** typiques des images générées par IA (Stable Diffusion, Midjourney, DALL-E).
---
## 🏗️ Architecture du modèle
Vision Transformer (ViT-Base)
├── Patch Embedding (16×16 patches)
│ └── 224×224 image → 196 patches
├── Transformer Encoder (12 layers)
│ ├── Multi-Head Self-Attention (12 heads)
│ ├── Layer Normalization
│ └── MLP (Feed-Forward)
├── Classification Head
│ ├── Global Average Pooling
│ ├── Dense(768 → 256)
│ ├── ReLU + Dropout(0.3)
│ └── Dense(256 → 2) [Real, AI]
└── Softmax
**Paramètres totaux** : ~86M
**Taille du modèle ONNX** : ~98 MB (FP16)
---
## 📊 Dataset d'entraînement
### 📁 Composition
- **Images réelles** : 50,000 images
- COCO Dataset (scènes naturelles)
- Flickr (photos utilisateurs)
- Unsplash (photographie professionnelle)
- **Images IA** : 50,000 images
- Stable Diffusion 1.5 / 2.1 / XL
- Midjourney v5 / v6
- DALL-E 2 / 3
- Synthèses personnelles (ControlNet, LoRA)
### 🔧 Augmentation des données
```python
transforms.Compose([
transforms.RandomHorizontalFlip(p=0.5),
transforms.RandomRotation(15),
transforms.ColorJitter(brightness=0.2, contrast=0.2, saturation=0.2),
transforms.RandomResizedCrop(224, scale=(0.8, 1.0)),
transforms.Resize((224, 224)),
transforms.ToTensor(),
transforms.Normalize(
mean=[0.485, 0.456, 0.406],
std=[0.229, 0.224, 0.225]
)
])
```
**Stratégie d'entraînement** :
1. **Phase 1** (10 epochs) : Gel du backbone ViT, entraînement tête uniquement
2. **Phase 2** (15 epochs) : Fine-tuning complet avec learning rate réduit (1e-5)
3. **Validation** : Split 80/10/10 (train/val/test)
------
## 🎨 Adaptation personnelle
### 🔄 Conversion PyTorch → ONNX
J'ai optimisé le modèle pour le **déploiement web ** sur mon site https://fmenguy.fr/odia :
```python
import torch.onnx
# Export avec opset 17 (compatibilité maximale)
torch.onnx.export(
model,
dummy_input,
"model.onnx",
input_names=['input'],
output_names=['output'],
dynamic_axes={'input': {0: 'batch_size'}},
opset_version=17
)
```
### ⚡ Optimisations appliquées
- **Quantization** : FP32 → FP16 (réduit la taille de 50%)
- **Graph optimization** : Fusion des ops, élimination nœuds inutiles
- **Batch size fixe** : Évite le overhead dynamique
------
## 🌐 Application web interactive
J'ai créé une **page HTML standalone** qui utilise ce modèle directement dans le navigateur (pas de serveur !) :
### ✨ Fonctionnalités
1. **🎯 Détection d'images IA/Réelles**
- Upload d'images (drag & drop)
- Score de confiance en temps réel
- Visualisation de la heatmap (zones suspectes)
2. **🔬 Modes d'analyse avancés**
- **Noise Analysis** : Détecte le bruit typique des modèles de diffusion
- **JPEG Artifacts** : Identifie les compressions suspectes
- **Edge Detection** : Trouve les incohérences de contours
- **Frequency Analysis** : Analyse spectrale (FFT) des patterns IA
3. **🎚️ Calibration scientifique**
- **Temperature Scaling** : Ajuste la confiance des prédictions
- **Threshold personnalisable** : Vous décidez du seuil de détection
- **Batch processing** : Analysez plusieurs images d'un coup
### 🛠️ Stack technique
- **ONNX Runtime Web** : Inférence ML 100% côté client
- **WebGL** : Accélération GPU pour le prétraitement
- **Canvas API** : Manipulation d'images performante
- **Vanilla JS** : Aucune dépendance lourde (pas de React/Vue)
### 📦 Architecture de l'app
```
index.html (page unique)
├── Prétraitement des images
│ ├── Resize vers 224×224
│ ├── Normalisation ImageNet
│ └── Conversion en tenseur Float32
├── Inférence ONNX
│ ├── Chargement du modèle (cache navigateur)
│ ├── Exécution sur WebAssembly/WebGL
│ └── Post-traitement des logits
└── Visualisation
├── Graphiques de confiance (Canvas)
├── Heatmaps d'activation (Grad-CAM simplifié)
└── Export des résultats (JSON/CSV)
```
### 🚀 Performance
- **Temps d'inférence** : ~300-500ms par image (CPU) / ~150ms (GPU)
- **Taille du bundle** : ~98 MB (modèle) + 5 MB (ONNX Runtime)
- **Compatible** : Chrome, Firefox, Edge, Safari (iOS 16+)
------
## 📥 Utilisation
### Option 1 : Avec Transformers.js (recommandé)
```javascript
import { AutoModel } from '@xenova/transformers';
const model = await AutoModel.from_pretrained('Skarn55/ai_detection');
const prediction = await model(image);
console.log(prediction.logits); // [score_real, score_ai]
```
### Option 2 : Avec ONNX Runtime
```javascript
const session = await ort.InferenceSession.create('model.onnx');
const input = new ort.Tensor('float32', preprocessedData, [1, 3, 224, 224]);
const output = await session.run({ input });
const scores = output.output.data;
const isAI = scores[1] > scores[0];
```
------
## ⚠️ Limitations
- **Générateurs récents** : Les modèles IA évoluent constamment (le réentraînement est nécessaire)
- **Photos éditées** : Forte retouche Photoshop peut déclencher faux positifs
- **Compression** : Images très compressées peuvent réduire la précision
- **Art numérique** : Les dessins digitaux peuvent être confondus avec l'IA
------
## 🔬 Recherche & amélioration continue
### 📈 Métriques de performance
| Dataset | Précision | Recall | F1-Score |
| -------------------- | --------- | ------ | -------- |
| **Test Set** | 98.2% | 97.8% | 98.0% |
| **Stable Diffusion** | 99.1% | 98.6% | 98.8% |
| **DALL-E 3** | 96.5% | 95.9% | 96.2% |
| **Midjourney v6** | 97.3% | 96.7% | 97.0% |
------
## 📜 Licence
MIT License - Libre d'utilisation commerciale et personnelle
------
## 🙏 Crédits
- **Thanks for original model and training** : [Organika.ai](https://huggingface.co/Organika)
------
## 📧 Contact
- **GitHub** : [@Skarn55](https://github.com/fmenguy)
- **Hugging Face** : [Skarn55](https://huggingface.co/Skarn55)
- **Demo Live** : [Sur mon blog](https://fmenguy.fr/odia)
------
**⭐ Si ce modèle vous aide, mettez une étoile sur le repo !** |