Image Classification
Transformers
Safetensors
English
siglip
OpenSDI
Spotting Diffusion-Generated Images in the Open World
SDXL
AI-vs-Real
SigLIP2
Instructions to use prithivMLmods/OpenSDI-SDXL-SigLIP2 with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- Transformers
How to use prithivMLmods/OpenSDI-SDXL-SigLIP2 with Transformers:
# Use a pipeline as a high-level helper from transformers import pipeline pipe = pipeline("image-classification", model="prithivMLmods/OpenSDI-SDXL-SigLIP2") pipe("https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/hub/parrots.png")# Load model directly from transformers import AutoProcessor, AutoModelForImageClassification processor = AutoProcessor.from_pretrained("prithivMLmods/OpenSDI-SDXL-SigLIP2") model = AutoModelForImageClassification.from_pretrained("prithivMLmods/OpenSDI-SDXL-SigLIP2", device_map="auto") - Notebooks
- Google Colab
- Kaggle
| license: apache-2.0 | |||
| datasets: | |||
| - nebula/OpenSDI_test | |||
| - madebyollin/megalith-10m | |||
| language: | |||
| - en | |||
| base_model: | |||
| - google/siglip2-base-patch16-224 | |||
| pipeline_tag: image-classification | |||
| library_name: transformers | |||
| tags: | |||
| - OpenSDI | |||
| - Spotting Diffusion-Generated Images in the Open World | |||
| - OpenSDI | |||
| - SDXL | |||
| - AI-vs-Real | |||
| - SigLIP2 | |||
| %3C!----%3E%3C%2Ftd%3E%3C%2Ftr%3E%3Ctr id="L22"> | |||
| # OpenSDI-SDXL-SigLIP2 | |||
| > OpenSDI-SDXL-SigLIP2 is a vision-language encoder model fine-tuned from google/siglip2-base-patch16-224 for binary image classification. It is trained to detect whether an image is a real photograph or generated using Stable Diffusion XL (SDXL), utilizing the SiglipForImageClassification architecture. | |||
| > [!note] | |||
| *SigLIP 2: Multilingual Vision-Language Encoders with Improved Semantic Understanding, Localization, and Dense Features* https://arxiv.org/pdf/2502.14786 | |||
| > [!note] | |||
| *OpenSDI: Spotting Diffusion-Generated Images in the Open World* https://arxiv.org/pdf/2503.19653, OpenSDI SDXL SigLIP2 works best with crisp and high-quality images. Noisy images are not recommended for validation. | |||
| > [!warning] | |||
| If the task is based on image content moderation or AI-generated image vs. real image classification, it is recommended to use the OpenSDI-Flux.1-SigLIP2 model. | |||
| ```py | |||
| Classification Report: | |||
| precision recall f1-score support | |||
| Real_Image 0.8632 0.8757 0.8694 10000 | |||
| SDXL_Generated 0.8739 0.8612 0.8675 10000 | |||
| accuracy 0.8685 20000 | |||
| macro avg 0.8685 0.8684 0.8684 20000 | |||
| weighted avg 0.8685 0.8685 0.8684 20000 | |||
| ``` | |||
| %3C!----%3E%3C%2Ftd%3E%3C%2Ftr%3E%3Ctr id="L49"> | |||
| --- | |||
| ## Label Space: 2 Classes | |||
| The model classifies an image as either: | |||
| ``` | |||
| Class 0: Real_Image | |||
| Class 1: SDXL_Generated | |||
| ``` | |||
| --- | |||
| ## Install Dependencies | |||
| ```bash | |||
| pip install -q transformers torch pillow gradio hf_xet | |||
| ``` | |||
| --- | |||
| ## Inference Code | |||
| ```python | |||
| import gradio as gr | |||
| from transformers import AutoImageProcessor, SiglipForImageClassification | |||
| from PIL import Image | |||
| import torch | |||
| # Load model and processor | |||
| model_name = "prithivMLmods/OpenSDI-SDXL-SigLIP2" # Replace with your model path | |||
| model = SiglipForImageClassification.from_pretrained(model_name) | |||
| processor = AutoImageProcessor.from_pretrained(model_name) | |||
| # Label mapping | |||
| id2label = { | |||
| "0": "Real_Image", | |||
| "1": "SDXL_Generated" | |||
| } | |||
| def classify_image(image): | |||
| image = Image.fromarray(image).convert("RGB") | |||
| inputs = processor(images=image, return_tensors="pt") | |||
| with torch.no_grad(): | |||
| outputs = model(**inputs) | |||
| logits = outputs.logits | |||
| probs = torch.nn.functional.softmax(logits, dim=1).squeeze().tolist() | |||
| prediction = { | |||
| id2label[str(i)]: round(probs[i], 3) for i in range(len(probs)) | |||
| } | |||
| return prediction | |||
| # Gradio Interface | |||
| iface = gr.Interface( | |||
| fn=classify_image, | |||
| inputs=gr.Image(type="numpy"), | |||
| outputs=gr.Label(num_top_classes=2, label="SDXL Image Detection"), | |||
| title="OpenSDI-SDXL-SigLIP2", | |||
| description="Upload an image to determine whether it is a real photograph or generated by Stable Diffusion XL (SDXL)." | |||
| ) | |||
| if __name__ == "__main__": | |||
| iface.launch() | |||
| ``` | |||
| --- | |||
| ## Intended Use | |||
| OpenSDI-SDXL-SigLIP2 is intended for the following scenarios: | |||
| * Generative Content Detection – Accurately identify images generated using SDXL. | |||
| * Dataset Integrity – Screen datasets to ensure they contain only authentic photographic content. | |||
| * Trust and Safety – Flag AI-generated media in user-generated content pipelines. | |||
| * Digital Media Forensics – Support authenticity verification in investigative workflows. |