nsfw image detector
Overview
Highlights
- Automates real-time content moderation for user uploads
- Lightweight architecture ensures low latency integration
- Permissive MIT license for commercial application
- Streamlines brand safety across digital platforms
Usage
# Install Hugging Face transformers
pip install transformers torch
# Load model with transformers
from transformers import AutoModel, AutoTokenizer
model = AutoModel.from_pretrained("Freepik/nsfw_image_detector")
tokenizer = AutoTokenizer.from_pretrained("Freepik/nsfw_image_detector")
Hugging Face Download
We recommend downloading the model via the Hugging Face CLI or Hub SDK.
Guidance:Before downloading, install huggingface_hub with:
pip install -U huggingface_hub
CLI Download
Download the full repository
huggingface-cli download Freepik/nsfw_image_detector
Download a single file to a local folder (e.g. config.json into ./dir)
huggingface-cli download Freepik/nsfw_image_detector config.json --local-dir ./dir
See the official docs for more CLI options
SDK Download
# 模型下载
from huggingface_hub import snapshot_download
model_dir = snapshot_download('Freepik/nsfw_image_detector')
Git Download
Make sure git-lfs is installed first
git lfs install
git clone https://huggingface.co/Freepik/nsfw_image_detector
To skip LFS large-file downloads, use:
GIT_LFS_SKIP_SMUDGE=1 git clone https://huggingface.co/Freepik/nsfw_image_detector
Model files are hosted on the Hugging Face Hub — download directly via HF CLI / SDK / Git, not through this site.
PyTorch / Transformers Usage
Install Transformers
pip install -U transformers torch
Load the model and run inference
from transformers import AutoModelForCausalLM, AutoTokenizer
model = AutoModelForCausalLM.from_pretrained('Freepik/nsfw_image_detector')
tokenizer = AutoTokenizer.from_pretrained('Freepik/nsfw_image_detector')
Full Documentation
---
license: mit
base_model:
- timm/eva02_base_patch14_448.mim_in22k_ft_in22k_in1k
pipeline_tag: image-classification
tags:
- pytorch
- transformers
---
EVA-based Fast NSFW Image Classifier
Table of Contents
- Global Performance - Accuracy by AI Content - AI-Generated Content - Non-AI-Generated Content - Quick Start via pip - Quick Start with Pipeline - Avoid installation of pip dependencyModel Description
This model is a vision transformer based on the EVA architecture, fine-tuned for NSFW content classification. It has been trained
to detect four categories (neutral, low, medium, high) of visual content using 100,000 synthetically labeled images.
The model can be used as a binary (true/false) classifier if desired, or you can obtain the full output probabilities.. It outperforms other excellent publicly available models such as Falconsai/nsfw_image_detection or AdamCodd/vit-base-nsfw-detector in our internal benchmarks adding the enrichment of being able to select the NSFW level that suits your use case.
Try it Online! 🚀
You can try this model directly in your browser through our Hugging Face Space. Upload any image and get instant NSFW classification results without any installation required.
Model Performance Comparison
Global Performance
| Category | Freepik | Falconsai | Adamcodd |
|----------|-------------|------------------|----------------|
| High | 99.54% | 97.92% | 98.62% |
| Medium | 97.02% | 78.54% | 91.65% |
| Low | 98.31% | 31.25% | 89.66% |
| Neutral | 99.87% | 99.27% | 98.37% |
In the table below, the results are obtained as follows:
- For the Falconsai and AdamCodd models:
* A prediction is considered correct if the image is labeled "low", "medium", or "high" and the model returns true.
* If the label is "neutral", the correct output should be false.
- For the Freepik model:
Conclusions:
- Our model outperforms AdamCodd and Falconsai in accuracy. It is entirely fair to compare them on the "high" and "neutral" labels.
- Our model offers greater granularity. It is not only suitable for detecting "high" and "neutral" content, but also performs excellently at identifying "low" and "medium" NSFW content.
Accuracy by AI Content
We have created a manually labeled dataset with careful attention to avoiding biases (gender, ethnicity, etc.). While the sample size is relatively small, it provides meaningful insights into model performance across different scenarios, which was very useful in the training process to avoid biases.
The following tables show detection accuracy percentages across different NSFW categories and content types:
#### AI-Generated Content
| Category | Freepik Model | Falconsai Model | Adamcodd Model |
|----------|-------------|------------------|----------------|
| High | 100.00% | 84.00% | 92.00% |
| Medium | 96.15% | 69.23% | 96.00% |
| Low | 100.00% | 35.71% | 92.86% |
| Neutral | 100.00% | 100.00% | 66.67% |
Conclusions:
- Avoid using Falconsai for AI-generated content to prevent prediction errors.
- Our model is the best option to detect NSFW content in AI-generated content.
Usage
Quick Start via pip
```sh
pip install nsfw-image-detector
from PIL import Image
from nsfw_image_detector import NSFWDetector
import torch
Initialize the detector
detector = NSFWDetector(dtype=torch.bfloat16, device="cuda")Load and classify an image
image = Image.open("your_image")Check if the image contains NSFW content sentivity level medium or higher
is_nsfw = detector.is_nsfw(image, "medium")Get probability scores for all categories
probabilities = detector.predict_proba(image) print(f"Is NSFW: {is_nsfw}") print(f"Probabilities: {probabilities}")Example output:### Quick Start with PipelineCreate classifier pipeline
classifier = pipeline( "image-classification", model="Freepik/nsfw_image_detector", device=0 # Use GPU (0) or CPU (-1) )Load and classify an image
image = Image.open("path/to/your/image.jpg") predictions = classifier(image) print(predictions)Example output:The model supports efficient batch processing for multiple images:Note: If the intention is to use the model in production review Speed and Memory Metrics section before using this approach.
Avoid installation of pip dependency
The following example demonstrates how to customize the NSFW detection label, it is very similar to the code in PyPy. This code returns True if the NSFW level is 'medium' or higher:
from transformers import AutoModelForImageClassification
import torch
from PIL import Image
from typing import List, Dict
import torch.nn.functional as F
from timm.data.transforms_factory import create_transform
from torchvision.transforms import Compose
from timm.data import resolve_data_config
from timm.models import get_pretrained_cfg
device = "cuda" if torch.cuda.is_available() else "cpu"
Load model and processor
model = AutoModelForImageClassification.from_pretrained("Freepik/nsfw_image_detector", torch_dtype = torch.bfloat16).to(device)Load original processor (faster for tensors)
cfg = get_pretrained_cfg("eva02_base_patch14_448.mim_in22k_ft_in22k_in1k") processor: Compose = create_transform(**resolve_data_config(cfg.__dict__))def predict_batch_values(model, processor: Compose, img_batch: List[Image.Image] | torch.Tensor) -> List[Dict[str, float]]:
"""
Process a batch of images and return prediction scores for each NSFW category
"""
idx_to_label = {0: 'neutral', 1: 'low', 2: 'medium', 3: 'high'}
# Prepare batch
inputs = torch.stack([processor(img) for img in img_batch])
output = []
with torch.inference_mode():
logits = model(inputs).logits
batch_probs = F.log_softmax(logits, dim=-1)
batch_probs = torch.exp(batch_probs).cpu()
for i in r