nsfw-classifier

Classificador de imagens em 5 categorias para moderação de conteúdo. ResNet34 ajustada por transfer learning a partir do ImageNet.

Leia a seção "Limitações" antes de usar. A acurácia global de 91% não descreve o comportamento do modelo fora do dataset de treino.

Classes

anime_drawing · hentai · neutral · porn · sexy

Uso

from huggingface_hub import hf_hub_download
from safetensors.torch import load_file
from fastai.vision.all import *

pesos = hf_hub_download("SEU_USUARIO/nsfw-classifier", "model.safetensors")
learn = vision_learner(dls, resnet34, n_out=5)
learn.model.load_state_dict(load_file(pesos))

Pré-processamento (em config.json): redimensionar para 256, recortar 224, RGB em escala 0–1, normalização ImageNet (mean=[0.485,0.456,0.406], std=[0.229,0.224,0.225]).

Só o safetensors é distribuído. O .pkl do fastai foi removido: pickle executa código ao ser carregado, e o scanner do Hugging Face o marcava como inseguro.

Treino

Dados 22.434 imagens (treino) + 4.049 (validação)
Fonte strangerguardhf/NSFW-MultiDomain-Classification
Arquitetura ResNet34 pré-treinada no ImageNet
Regime fine_tune(10, base_lr=1e-3) — 1 época congelada + 9 destravadas
Hardware GTX 1070 Ti, 22,5 min

Resultados

Dentro da distribuição (validação, 4.049 imagens)

Acurácia global: 91,75%

classe recall precisão
anime_drawing 91,2% 89,3%
hentai 88,0% 92,8%
neutral 90,9% 91,1%
porn 93,5% 95,6%
sexy 94,3% 90,5%

Fora da distribuição (holdout, 29.629 imagens do Reddit)

Acurácia global: 91,01% — e este número engana. O holdout é 72% neutral, então o agregado reflete quase só essa classe.

classe n validação holdout queda
anime_drawing 2.657 91,2% 87,1% -4,1
hentai 1.196 88,0% 85,9% -2,1
neutral 21.294 90,9% 92,4% +1,5
porn 347 93,5% 60,2% -33,3
sexy 4.135 94,3% 90,5% -3,8

Limitações

A classe porn não generaliza

Recall cai de 93,5% para 60,2% e a precisão vai a 31,1% em dados de outra origem — de tudo que o modelo chama de porn, só um terço é.

A causa é conhecida: das 5.600 imagens de porn no treino, quase todas vêm de uma única fonte. O modelo aprendeu a noção de pornografia daquele dataset — material produzido — e erra em conteúdo amador.

Mas detecta "explícito" com confiabilidade

Os porn perdidos vão para sexy, não para neutral. Tratando as duas como uma classe única:

detectado como explícito
porn real (347) 91,6%
sexy real (4.135) 95,7%
falso positivo vindo de neutral 3,4%

Recomendação para produção: una porn e sexy num único rótulo. Como detector binário NSFW o modelo é sólido; como classificador de grau, a fronteira entre os dois não sobrevive à troca de distribuição — e é uma fronteira de convenção, não de fato.

Outras

  • anime_drawing ↔ hentai é a confusão mais frequente nas duas avaliações. Fronteira de grau, na qual anotadores humanos também divergem.
  • Só imagens. Para vídeo, extraia frames e agregue as previsões.
  • Viés de fonte. O treino vem de um dataset marcado como parcialmente sintético; parte do material pode ser gerada por IA.
  • Não é um sistema de moderação completo. É um classificador. Decisões automáticas sobre conteúdo de usuários exigem revisão humana e calibração de limiar conforme o custo de cada tipo de erro.

Atribuição

Treinado sobre strangerguardhf/NSFW-MultiDomain-Classification. Verifique a licença do dataset antes de redistribuir este modelo.

Downloads last month
39
Safetensors
Model size
21.8M params
Tensor type
F32
·
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Model tree for champao/nsfw-classifier

Finetuned
(2)
this model