|
Download README.md from cftcimert/cifake-efficientnet-b0: direct link, hf CLI and curl.
- Browser
- Download file 4.21 kB
-
https://huggingface.co/cftcimert/cifake-efficientnet-b0/resolve/main/README.md
- Command line
-
hf download hf://cftcimert/cifake-efficientnet-b0/README.md
-
curl -L -o README.md https://huggingface.co/cftcimert/cifake-efficientnet-b0/resolve/main/README.md
4.21 kB
| license: mit | |
| library_name: onnx | |
| pipeline_tag: image-classification | |
| tags: | |
| - image-classification | |
| - onnx | |
| - efficientnet | |
| - deepfake-detection | |
| - ai-generated-image-detection | |
| - cifake | |
| - transfer-learning | |
| - pytorch | |
| - binary-classification | |
| datasets: | |
| - birdy654/cifake-real-and-ai-generated-synthetic-images | |
| metrics: | |
| - accuracy | |
| model-index: | |
| - name: CIFAKE-EfficientNet-B0 | |
| results: | |
| - task: | |
| type: image-classification | |
| name: Binary Image Classification | |
| dataset: | |
| name: CIFAKE | |
| type: birdy654/cifake-real-and-ai-generated-synthetic-images | |
| metrics: | |
| - type: accuracy | |
| value: 97.85 | |
| name: Test Accuracy | |
| # CIFAKE — Real vs AI-Generated Image Classifier | |
| A binary image classifier that distinguishes **real photographs** from **AI-generated (synthetic) images**, built with **EfficientNet-B0** and transfer learning. | |
| ## Model Description | |
| This model was trained to detect AI-generated images using the [CIFAKE dataset](https://www.kaggle.com/datasets/birdy654/cifake-real-and-ai-generated-synthetic-images), which contains 120,000 images (60K real from CIFAR-10 + 60K synthetic from Stable Diffusion v1.4). | |
| - **Architecture**: EfficientNet-B0 (pretrained on ImageNet) | |
| - **Task**: Binary classification (Real vs Fake) | |
| - **Output**: Single logit → apply sigmoid to get P(Real) | |
| - **Format**: ONNX (opset 17) | |
| - **Input**: RGB image tensor of shape `[batch, 3, 224, 224]`, normalized with ImageNet statistics | |
| ## Training Details | |
| ### Two-Phase Training Strategy | |
| | Phase | Epochs | Strategy | Learning Rate | Scheduler | | |
| |-------|--------|----------|---------------|-----------| | |
| | 1 | 10 | Feature extraction (backbone frozen) | 3e-4 | — | | |
| | 2 | 5 | Full fine-tuning (all layers) | 3e-5 | CosineAnnealingLR | | |
| - **Optimizer**: AdamW (weight_decay=1e-2) | |
| - **Loss**: BCEWithLogitsLoss | |
| - **Batch Size**: 128 | |
| - **Mixed Precision**: FP16 via `torch.autocast` | |
| ### Preprocessing | |
| ```python | |
| transforms.Resize((224, 224), interpolation=InterpolationMode.BICUBIC, antialias=True) | |
| transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]) | |
| ``` | |
| ## Performance | |
| | Metric | Value | | |
| |--------|-------| | |
| | **Test Accuracy** | **97.85%** | | |
| Evaluated on 20,000 test images (10K real + 10K AI-generated). | |
| ## Usage | |
| ### Python (ONNX Runtime) | |
| ```python | |
| import numpy as np | |
| import onnxruntime as ort | |
| from PIL import Image | |
| from torchvision import transforms | |
| from torchvision.transforms import InterpolationMode | |
| # Load model | |
| session = ort.InferenceSession("model.onnx") | |
| # Preprocess image | |
| transform = transforms.Compose([ | |
| transforms.Resize((224, 224), interpolation=InterpolationMode.BICUBIC, antialias=True), | |
| 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 = transform(image).unsqueeze(0).numpy() | |
| # Run inference | |
| logit = session.run(None, {"input": input_tensor})[0] | |
| probability = 1 / (1 + np.exp(-logit)) # sigmoid | |
| label = "REAL" if probability >= 0.5 else "FAKE" | |
| confidence = float(probability) if label == "REAL" else float(1 - probability) | |
| print(f"{label} ({confidence * 100:.2f}% confidence)") | |
| ``` | |
| ## Labels | |
| | Index | Class | Description | | |
| |-------|-------|-------------| | |
| | 0 | FAKE | AI-generated synthetic image | | |
| | 1 | REAL | Real photograph (from CIFAR-10) | | |
| The model outputs a single logit. After applying sigmoid: | |
| - `sigmoid(logit) >= 0.5` → **REAL** | |
| - `sigmoid(logit) < 0.5` → **FAKE** | |
| ## Dataset | |
| The [CIFAKE dataset](https://www.kaggle.com/datasets/birdy654/cifake-real-and-ai-generated-synthetic-images) consists of: | |
| | Split | Real | Fake | Total | | |
| |-------|------|------|-------| | |
| | Train | 50,000 | 50,000 | 100,000 | | |
| | Test | 10,000 | 10,000 | 20,000 | | |
| ## Citation | |
| ```bibtex | |
| @article{bird2024cifake, | |
| title={CIFAKE: Image Classification and Explainable Identification of AI-Generated Synthetic Images}, | |
| author={Bird, Jordan J and Lotfi, Ahmad}, | |
| journal={IEEE Access}, | |
| year={2024}, | |
| doi={10.1109/ACCESS.2024.3356122} | |
| } | |
| ``` | |
| ## License | |
| This model is released under the [MIT License](https://opensource.org/licenses/MIT). | |