NSFW Detector v2
крошечный фильтр с правкой 0,01% весов
Pankaj8922/experiment — экспериментальный бинарный классификатор изображений: выдаёт вероятность NSFW. Это MobileNetV3-small на 1,53 млн параметров; по сути — отредактированная версия Pankaj8922/nsfw-detector-v2: изменено 151 число из 1 532 018 (0,01%), без переобучения сети.
😎 Ключевые особенности
- 🫤 Оценка NSFW:
0= sfw,1= nsfw; вход 224×224 RGB. - 📝 Правка только финального слоя: 150 весов + 1 bias; остальные параметры бит-в-бит как у оригинала.
- 👍 На двух независимых тестах AUC вырос: 0,768 → 0,946 и 0,865 → 0,944.
- 🙅♂ Меньше ложных срабатываний: обычные фото 87% → 20%, пустые кадры 41% → 0%, neutral 30% → 9% при p>0,5.
- 🫤 Слабое место — аниме и рисунки: около половины всё ещё уходит в флаг или ревью.
- 🤝 Три режима по порогам: allow / human review / block; пороги в
config.json.
📝 Пример
import torch, timm
from PIL import Image
import torchvision.transforms as T
model = timm.create_model('mobilenetv3_small_100', pretrained=False, num_classes=2)
model.load_state_dict(torch.load('pytorch_model.bin', map_location='cpu')); model.eval()
tf = T.Compose([T.Resize(224), T.CenterCrop(224), T.ToTensor(), T.Normalize([0.485,0.456,0.406],[0.229,0.224,0.225])])
x = tf(Image.open('image.jpg').convert('RGB')).unsqueeze(0)
with torch.no_grad(): p = torch.softmax(model(x), dim=1)[0, 1].item() # P(nsfw)
Подробнее
AUC: 0,768 → 0,946 (dataset 1) и 0,865 → 0,944 (dataset 2).Модель крошечная: 1,53 млн параметров, вход 224×224, запуск в примере на CPU.
Оценка на двух датасетах, а не на реальном трафике; выборка скромная: 380 и около 630 изображений.
Ограничения: center crop, не оценена fairness, не юридический инструмент для поиска незаконного контента; аниме и рисунки — слабое место.








Комментарии