Este detector NSFW de 2 clases es un modelo ligero de Autokeras que toma incrustaciones CLIP ViT L/14 como entradas. Estima un valor entre 0 y 1 (1 = NSFW) y funciona bien con incrustaciones de imágenes.
DEMO-Colab: https://colab.research.google.com/drive/19Acr4grlk5oQws7BHTqNIK-80XGw2u8Z?usp=sharing
Las incorporaciones de CLIP VL/14 de capacitación se pueden descargar aquí: https://drive.google.com/file/d/1yenil0R4GqmTOFQ_GVw__x61ofZ-OBcS/view?usp=sharing (no está anotado de forma totalmente manual, por lo que no se puede utilizar como prueba)
El conjunto de pruebas (anotado manualmente) está ahí 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 inferencia en laion5B
Ejemplo de uso del modelo:
@ 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 ])
Este código y modelo se publica bajo la licencia MIT:
Copyright 2022, Christoph Schuhmann
Por el presente se otorga permiso, sin cargo, a cualquier persona que obtenga una copia de este software y los archivos de documentación asociados (el "Software"), para operar con el Software sin restricciones, incluidos, entre otros, los derechos de uso, copia, modificación, fusión. , publicar, distribuir, sublicenciar y/o vender copias del Software, y permitir que las personas a quienes se les proporciona el Software lo hagan, sujeto a las siguientes condiciones:
El aviso de derechos de autor anterior y este aviso de permiso se incluirán en todas las copias o partes sustanciales del Software.
EL SOFTWARE SE PROPORCIONA "TAL CUAL", SIN GARANTÍA DE NINGÚN TIPO, EXPRESA O IMPLÍCITA, INCLUYENDO PERO NO LIMITADO A LAS GARANTÍAS DE COMERCIABILIDAD, IDONEIDAD PARA UN PROPÓSITO PARTICULAR Y NO INFRACCIÓN. EN NINGÚN CASO LOS AUTORES O TITULARES DE DERECHOS DE AUTOR SERÁN RESPONSABLES DE NINGÚN RECLAMO, DAÑO U OTRA RESPONSABILIDAD, YA SEA EN UNA ACCIÓN CONTRACTUAL, AGRAVIO O DE OTRA MANERA, QUE SURJA DE, FUERA DE O EN RELACIÓN CON EL SOFTWARE O EL USO U OTRAS NEGOCIOS EN EL SOFTWARE.