|
Download README.md from Imagers/Imager-1-tiny: direct link, hf CLI and curl.
- Browser
- Download file 4.83 kB
-
https://huggingface.co/Imagers/Imager-1-tiny/resolve/main/README.md
- Command line
-
hf download hf://Imagers/Imager-1-tiny/README.md
-
curl -L -o README.md https://huggingface.co/Imagers/Imager-1-tiny/resolve/main/README.md
4.83 kB
| language: en | |
| license: apache-2.0 | |
| tags: | |
| - image-classification | |
| - ai-detection | |
| - pytorch | |
| - resnet | |
| - imager | |
| datasets: | |
| - Hemg/AI-Generated-vs-Real-Images-Datasets | |
| - Rajarshi-Roy-research/Defactify_Image_Dataset | |
| metrics: | |
| - accuracy | |
| - f1 | |
| - roc_auc | |
| # Imager-1-Tiny | |
| **Imager-1-Tiny** is a lightweight yet powerful image classifier designed to distinguish between real photographs and AI-generated images. It is part of the **IMAGER** family of open-source AI detection models. | |
| With only 25 million parameters, it offers an excellent trade-off between speed, memory consumption, and accuracy, making it ideal for resource-constrained environments. | |
| ## Model Details | |
| - **Developed by:** Imagers | |
| - **Model type:** ResNet-50 (Convolutional Neural Network) | |
| - **Parameters:** ~25 Million | |
| - **Input size:** 224 x 224 pixels | |
| - **License:** Apache 2.0 | |
| - **Fine-tuned from:** ImageNet pre-trained weights | |
| - **Optimal Threshold:** **0.385** (Crucial for correct inference) | |
| ## Intended Uses & Limitations | |
| ### Direct Use | |
| This model is intended for classifying images as either **Real (0)** or **AI-Generated (1)**. It is optimized for speed and low memory consumption, making it ideal for edge devices, mobile applications, or backend servers with limited resources (like Railway's 512MB RAM free tier). | |
| ### Out-of-Scope Use | |
| - **Medical or Legal Evidence:** Do not use this model as the sole evidence in legal or medical contexts. It is a statistical tool, not a forensic authority. Always combine it with human review. | |
| - **Highly Compressed or Edited Images:** The model may struggle with images that have been heavily compressed (e.g., low-quality JPEGs), heavily filtered, or contain significant post-processing artifacts not seen during training. | |
| - **Adversarial Attacks:** Like all current AI detectors, this model is vulnerable to adversarial noise specifically designed to fool it. | |
| ## Training Data | |
| The model was trained on a combination of two large-scale datasets: | |
| 1. **Hemg/AI-Generated-vs-Real-Images-Datasets:** 152,710 images. | |
| 2. **Rajarshi-Roy-research/Defactify_Image_Dataset:** ~96,000 images (generated by DALL-E 3, Midjourney v6, SDXL, and SD3). | |
| **Label Mapping:** | |
| - `0` = Real Image | |
| - `1` = AI-Generated Image | |
| ### ⚖️ Legal & Dataset Licensing Note | |
| While the model weights are released under the Apache 2.0 license, users must also comply with the original licenses of the training datasets. The **Defactify** dataset is licensed under MIT, while the **Hemg** dataset is intended for research purposes. Commercial use of this model should be reviewed against the original dataset terms to ensure full compliance. | |
| ## Training Procedure | |
| - **Framework:** PyTorch, torchvision | |
| - **Hardware:** Kaggle GPU environment (NVIDIA T4 or P100) | |
| - **Epochs:** Early stopping triggered at Epoch 35 (no improvement for 8 consecutive epochs). | |
| - **Total Training Time:** ~6.03 hours. | |
| - **Optimization:** AdamW (Learning rate: `1e-4` or `2e-4` - *update if different*) | |
| - **Loss Function:** BCEWithLogitsLoss | |
| - **Batch Size:** 32 or 64 (*update if different*) | |
| - **Precision:** FP32 (Full precision was used to ensure numerical stability). | |
| ## Evaluation Results | |
| - **Validation Accuracy:** 97.03% | |
| - **Macro F1-Score:** 0.9737 | |
| - **F1-Score (AI Class):** 0.9608 | |
| - **AUC-ROC:** 0.982 | |
| **Confusion Matrix (Validation Set):** | |
| | | Predicted Real | Predicted AI | | |
| |---|---|---| | |
| | **Actual Real** | 11,937 | 239 | | |
| | **Actual AI** | 442 | 10,288 | | |
| *The model is slightly better at detecting Real images (98.0% recall) than AI images (95.9% recall).* | |
| ## How to Use | |
| Because this is a custom PyTorch model, you need to load the architecture and weights manually. | |
| ```python | |
| import torch | |
| import torch.nn as nn | |
| from torchvision import models, transforms | |
| from PIL import Image | |
| # 1. Define the architecture | |
| def load_imager_tiny(): | |
| model = models.resnet50(weights=None) # We load custom weights next | |
| # IMPORTANT: The final layer was replaced to output a single logit | |
| model.fc = nn.Linear(model.fc.in_features, 1) | |
| return model | |
| # 2. Load weights | |
| model = load_imager_tiny() | |
| model.load_state_dict(torch.load("imager-1-tiny_best.pth", map_location="cpu")) | |
| model.eval() | |
| # 3. Preprocess image (Standard ImageNet normalization) | |
| preprocess = transforms.Compose([ | |
| transforms.Resize(256), | |
| transforms.CenterCrop(224), | |
| transforms.ToTensor(), | |
| transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]), | |
| ]) | |
| image = Image.open("your_image.jpg").convert("RGB") | |
| input_tensor = preprocess(image).unsqueeze(0) | |
| # 4. Inference | |
| with torch.no_grad(): | |
| logit = model(input_tensor) | |
| prob = torch.sigmoid(logit).item() | |
| # 5. Apply the specific threshold (CRITICAL) | |
| THRESHOLD = 0.385 | |
| prediction = "AI-Generated" if prob > THRESHOLD else "Real" | |
| print(f"Probability of AI: {prob:.4f} -> Prediction: {prediction}") |