5.png

Watermark-Detection-SigLIP2

Watermark-Detection-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 contains a watermark or not, using the SiglipForImageClassification architecture.

Watermark detection works best with crisp and high-quality images. Noisy images are not recommended for validation.

SigLIP 2: Multilingual Vision-Language Encoders with Improved Semantic Understanding, Localization, and Dense Features https://arxiv.org/pdf/2502.14786

Classification Report:
              precision    recall  f1-score   support

No Watermark     0.9290    0.9722    0.9501     12779
   Watermark     0.9622    0.9048    0.9326      9983

    accuracy                         0.9427     22762
   macro avg     0.9456    0.9385    0.9414     22762
weighted avg     0.9435    0.9427    0.9424     22762

download.png


Label Space: 2 Classes

The model classifies an image as either:

Class 0: "No Watermark"
Class 1: "Watermark"

Install dependencies

pip install -q transformers torch pillow gradio

Inference Code

import gradio as gr
from transformers import AutoImageProcessor, SiglipForImageClassification
from PIL import Image
import torch

# Load model and processor
model_name = "prithivMLmods/Watermark-Detection-SigLIP2"  # Update this if using a different path
model = SiglipForImageClassification.from_pretrained(model_name)
processor = AutoImageProcessor.from_pretrained(model_name)

# Label mapping
id2label = {
    "0": "No Watermark",
    "1": "Watermark"
}

def classify_watermark(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_watermark,
    inputs=gr.Image(type="numpy"),
    outputs=gr.Label(num_top_classes=2, label="Watermark Detection"),
    title="Watermark-Detection-SigLIP2",
    description="Upload an image to detect whether it contains a watermark."
)

if __name__ == "__main__":
    iface.launch()

Demo Inference

Watermark

Screenshot 2025-04-29 at 18-22-52 Watermark-Detection-SigLIP2.png Screenshot 2025-04-29 at 18-27-09 Watermark-Detection-SigLIP2.png

No Watermark

Screenshot 2025-04-29 at 18-25-43 Watermark-Detection-SigLIP2.png Screenshot 2025-04-29 at 18-31-34 Watermark-Detection-SigLIP2.png

Intended Use

Watermark-Detection-SigLIP2 is useful in scenarios such as:

  • Content Moderation – Automatically detect watermarked content on image sharing platforms.
  • Dataset Cleaning – Filter out watermarked images from training datasets.
  • Copyright Enforcement – Monitor and flag usage of watermarked media.
  • Digital Forensics – Support analysis of tampered or protected media assets.
Downloads last month
8
Safetensors
Model size
92.9M params
Tensor type
F32
·
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Model tree for prithivMLmods/Watermark-Detection-SigLIP2

Finetuned
(68)
this model

Dataset used to train prithivMLmods/Watermark-Detection-SigLIP2

Collection including prithivMLmods/Watermark-Detection-SigLIP2