Ce détecteur NSFW de classe 2 est un modèle Autokeras léger qui prend les intégrations CLIP ViT L/14 comme entrées. Il estime une valeur comprise entre 0 et 1 (1 = NSFW) et fonctionne bien avec les intégrations d'images.
DÉMO-Colab : https://colab.research.google.com/drive/19Acr4grlk5oQws7BHTqNIK-80XGw2u8Z?usp=sharing
Les intégrations de formation CLIP VL/14 peuvent être téléchargées ici : https://drive.google.com/file/d/1yenil0R4GqmTOFQ_GVw__x61ofZ-OBcS/view?usp=sharing (pas entièrement annotées manuellement et ne peuvent donc pas être utilisées comme test)
L'ensemble de tests (annoté manuellement) est là https://github.com/LAION-AI/CLIP-based-NSFW-Detector/blob/main/nsfw_testset.zip
https://github.com/rom1504/embedding-reader/blob/main/examples/inference_example.py inférence sur laion5B
Exemple d'utilisation du modèle :
@ lru_cache ( maxsize = None )
def load_safety_model ( clip_model ):
"""load the safety model"""
import autokeras as ak # pylint: disable=import-outside-toplevel
from tensorflow . keras . models import load_model # pylint: disable=import-outside-toplevel
cache_folder = get_cache_folder ( clip_model )
if clip_model == "ViT-L/14" :
model_dir = cache_folder + "/clip_autokeras_binary_nsfw"
dim = 768
elif clip_model == "ViT-B/32" :
model_dir = cache_folder + "/clip_autokeras_nsfw_b32"
dim = 512
else :
raise ValueError ( "Unknown clip model" )
if not os . path . exists ( model_dir ):
os . makedirs ( cache_folder , exist_ok = True )
from urllib . request import urlretrieve # pylint: disable=import-outside-toplevel
path_to_zip_file = cache_folder + "/clip_autokeras_binary_nsfw.zip"
if clip_model == "ViT-L/14" :
url_model = "https://raw.githubusercontent.com/LAION-AI/CLIP-based-NSFW-Detector/main/clip_autokeras_binary_nsfw.zip"
elif clip_model == "ViT-B/32" :
url_model = (
"https://raw.githubusercontent.com/LAION-AI/CLIP-based-NSFW-Detector/main/clip_autokeras_nsfw_b32.zip"
)
else :
raise ValueError ( "Unknown model {}" . format ( clip_model )) # pylint: disable=consider-using-f-string
urlretrieve ( url_model , path_to_zip_file )
import zipfile # pylint: disable=import-outside-toplevel
with zipfile . ZipFile ( path_to_zip_file , "r" ) as zip_ref :
zip_ref . extractall ( cache_folder )
loaded_model = load_model ( model_dir , custom_objects = ak . CUSTOM_OBJECTS )
loaded_model . predict ( np . random . rand ( 10 ** 3 , dim ). astype ( "float32" ), batch_size = 10 ** 3 )
return loaded_model
nsfw_values = safety_model . predict ( embeddings , batch_size = embeddings . shape [ 0 ])
Ce code et ce modèle sont publiés sous la licence MIT :
Copyright 2022, Christoph Schuhmann
L'autorisation est accordée par la présente, gratuitement, à toute personne obtenant une copie de ce logiciel et des fichiers de documentation associés (le « Logiciel »), d'utiliser le Logiciel sans restriction, y compris, sans limitation, les droits d'utilisation, de copie, de modification, de fusion. , publier, distribuer, accorder des sous-licences et/ou vendre des copies du Logiciel, et permettre aux personnes à qui le Logiciel est fourni de le faire, sous réserve des conditions suivantes :
L'avis de droit d'auteur ci-dessus et cet avis d'autorisation doivent être inclus dans toutes les copies ou parties substantielles du logiciel.
LE LOGICIEL EST FOURNI « EN L'ÉTAT », SANS GARANTIE D'AUCUNE SORTE, EXPRESSE OU IMPLICITE, Y COMPRIS MAIS SANS LIMITATION LES GARANTIES DE QUALITÉ MARCHANDE, D'ADAPTATION À UN USAGE PARTICULIER ET DE NON-VIOLATION. EN AUCUN CAS LES AUTEURS OU LES TITULAIRES DES DROITS D'AUTEUR NE SERONT RESPONSABLES DE TOUTE RÉCLAMATION, DOMMAGES OU AUTRE RESPONSABILITÉ, QUE CE SOIT DANS UNE ACTION CONTRACTUELLE, DÉLIT OU AUTRE, DÉCOULANT DE, DE OU EN RELATION AVEC LE LOGICIEL OU L'UTILISATION OU D'AUTRES TRANSACTIONS DANS LE LOGICIEL.