كاشف NSFW من الفئة الثانية هو نموذج Autokeras خفيف الوزن يأخذ تضمينات CLIP ViT L/14 كمدخلات. يقوم بتقدير قيمة بين 0 و1 (1 = NSFW) ويعمل بشكل جيد مع التضمينات من الصور.
ديمو-كولاب: https://colab.research.google.com/drive/19Acr4grlk5oQws7BHTqNIK-80XGw2u8Z?usp=sharing
يمكن تنزيل تضمينات CLIP VL/14 التدريبية هنا: https://drive.google.com/file/d/1yenil0R4GqmTOFQ_GVw__x61ofZ-OBcS/view?usp=sharing (لم يتم شرحها يدويًا بالكامل لذا لا يمكن استخدامها كاختبار)
مجموعة الاختبار (الموضحة يدويًا) موجودة 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 الاستدلال على laion5B
مثال على استخدام النموذج:
@ 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 ])
تم إصدار هذا الرمز والنموذج بموجب ترخيص MIT:
حقوق الطبع والنشر 2022، كريستوف شومان
يُمنح الإذن مجانًا لأي شخص يحصل على نسخة من هذا البرنامج وملفات الوثائق المرتبطة به ("البرنامج")، للتعامل في البرنامج دون قيود، بما في ذلك، على سبيل المثال لا الحصر، حقوق الاستخدام والنسخ والتعديل والدمج. ونشر و/أو توزيع وترخيص من الباطن و/أو بيع نسخ من البرنامج، والسماح للأشخاص الذين تم توفير البرنامج لهم بالقيام بذلك، وفقًا للشروط التالية:
يجب تضمين إشعار حقوق الطبع والنشر أعلاه وإشعار الإذن هذا في جميع النسخ أو الأجزاء الكبيرة من البرنامج.
يتم توفير البرنامج "كما هو"، دون أي ضمان من أي نوع، صريحًا أو ضمنيًا، بما في ذلك، على سبيل المثال لا الحصر، ضمانات القابلية للتسويق والملاءمة لغرض معين وعدم الانتهاك. لا يتحمل المؤلفون أو أصحاب حقوق الطبع والنشر بأي حال من الأحوال المسؤولية عن أي مطالبة أو أضرار أو مسؤولية أخرى، سواء في إجراء العقد أو الضرر أو غير ذلك، الناشئة عن أو خارج أو فيما يتعلق بالبرنامج أو الاستخدام أو المعاملات الأخرى في برمجة.