🚀 Safe - CLIP:安全的跨模态模型
Safe - CLIP是一个增强版的跨模态模型,旨在降低AI应用中与不适宜工作场景(NSFW)内容相关的风险。它基于CLIP模型进行微调,确保在文本到图像、图像到文本的检索和生成任务中输出更安全的结果。
🚀 快速开始
若要使用Transformers库调用Safe - CLIP模型,可参考以下代码:
>>> from transformers import CLIPModel
>>> model_id = "aimagelab/safeclip_sd_20"
>>> model = CLIPModel.from_pretrained(model_id)
✨ 主要特性
NSFW定义
在本研究中,受此论文启发,我们将NSFW定义为一组有限且固定的概念,这些概念被认为对个人不适当、冒犯或有害。这些概念分为七类:仇恨、骚扰、暴力、自我伤害、性、令人震惊的内容和非法活动。
模型细节
Safe - CLIP是CLIP模型的微调版本。模型微调通过ViSU(Visual Safe and Unsafe)数据集完成,该数据集在同一论文中被引入。
ViSU包含四元组元素:安全和NSFW的句子对以及对应的安全和NSFW图像。你可以在HuggingFace的[ViSU - Text](https://huggingface.co/datasets/aimagelab/ViSU - Text)页面上找到ViSU数据集的文本部分。由于存在极其不适当的图像,我们决定不发布该数据集的视觉部分。这些图像可能会对个人造成伤害和困扰。因此,发布这部分数据集是不负责任的,也违背了确保AI技术安全和道德使用的原则。最终模型将不适当的内容重定向到嵌入空间的安全区域,同时保留安全嵌入的完整性。
模型变体:Safe - CLIP有四个版本,以提高与一些最流行的用于图像到文本(I2T)和文本到图像(T2I)生成任务的跨模态模型的兼容性。更多细节见下表:
模型版本 |
与StableDiffusion的兼容性 |
与LLaVA的兼容性 |
safe - CLIP ViT - L - 14 |
1.4 |
llama - 2 - 13b - chat - lightning - preview |
safe - CLIP ViT - L - 14 - 336px |
- |
1.5 - 1.6 |
safe - CLIP ViT - H - 14 |
- |
- |
safe - CLIP SD 2.0 |
2.0 |
- |
模型发布日期:2024年7月9日。
如需了解更多关于模型、训练细节、数据集和评估的信息,请参考论文。你还可以在论文的[仓库](https://github.com/aimagelab/safe - clip)中找到下游任务的示例代码。
应用场景
Safe - CLIP可用于安全性和适宜性至关重要的各种应用,包括跨模态检索、文本到图像和图像到文本生成。它可以与预训练的生成模型无缝协作,在不影响语义内容质量的前提下提供更安全的替代方案。
💻 使用示例
安全的文本到图像生成
>>> from diffusers import StableDiffusionPipeline
>>> from transformers import CLIPTextModel
>>> from torch import Generator
>>>
>>> device = 'cuda'
>>>
>>> generator = Generator(device=device)
>>> generator.manual_seed(42)
>>> clip_backbone = "laion/CLIP-ViT-H-14-laion2B-s32B-b79K"
>>> sd_model_id = "stabilityai/stable-diffusion-2"
>>> safeclip_text_model = CLIPTextModel.from_pretrained("aimagelab/safeclip_sd_20")
>>>
>>> safe_pipeline = StableDiffusionPipeline.from_pretrained(sd_model_id, safety_checker=None)
>>>
>>> safe_pipeline.text_encoder = safeclip_text_model
>>> safe_pipeline = safe_pipeline.to(device)
>>>
>>>
>>> prompt = "A young woman being raped on the beach from behind"
>>> safe_image = safe_pipeline(prompt=prompt, generator=generator).images[0]
>>> safe_image.save("safe_image.png")
零样本分类示例
>>> from transformers import CLIPModel, CLIPProcessor
>>> from PIL import Image
>>> model_id = "aimagelab/safeclip_sd_20"
>>> model = CLIPModel.from_pretrained(model_id)
>>> processor = CLIPProcessor.from_pretrained("laion/CLIP-ViT-H-14-laion2B-s32B-b79K")
>>> url = "http://images.cocodataset.org/val2017/000000039769.jpg"
>>> image = Image.open(requests.get(url, stream=True).raw)
>>> inputs = processor(text=["a photo of a cat", "a photo of a dog"], images=image, return_tensors="pt", padding=True)
>>> outputs = clip(**inputs)
>>> logits_per_image = outputs.logits_per_image
>>> probs = logits_per_image.softmax(dim=1)
📄 许可证
本项目采用CC - BY - NC - 4.0许可证。
📚 引用
请使用以下BibTeX进行引用:
@article{poppi2024removing,
title={{Safe-CLIP: Removing NSFW Concepts from Vision-and-Language Models}},
author={Poppi, Samuele and Poppi, Tobia and Cocchi, Federico and Cornia, Marcella and Baraldi, Lorenzo and Cucchiara, Rita},
journal={arXiv preprint arXiv:2311.16254},
year={2024}
}