🚀 安全CLIP(Safe-CLIP)模型
Safe-CLIP是一款增强版的视觉语言模型,旨在降低人工智能应用中与不适宜工作场景(NSFW)内容相关的风险。它基于CLIP模型进行微调,确保在文本到图像、图像到文本的检索和生成任务中输出更安全的结果。
🚀 快速开始
使用Transformers库调用Safe-CLIP
以下是使用Transformers库调用Safe-CLIP的代码片段:
>>> from transformers import CLIPModel
>>> model_id = "aimagelab/safeclip_vit-l_14"
>>> model = CLIPModel.from_pretrained(model_id)
如果你想在OpenCLIP库中使用Safe-CLIP,请查看这个仓库。
✨ 主要特性
- 降低NSFW风险:基于CLIP模型微调,有效缓解AI应用中NSFW内容带来的风险,确保输出更安全。
- 多版本适配:提供四种版本,提高与流行视觉语言模型在图像到文本(I2T)和文本到图像(T2I)生成任务中的兼容性。
- 广泛应用:可用于跨模态检索、文本到图像和图像到文本生成等对安全性和适宜性要求较高的场景。
📚 详细文档
NSFW定义
在本研究中,受这篇论文的启发,我们将NSFW定义为一组有限且固定的概念,这些概念被认为是不适当、冒犯性或对个人有害的。这些概念分为七类:仇恨、骚扰、暴力、自残、性、令人震惊的内容和非法活动。
模型细节
Safe-CLIP是CLIP模型的微调版本。模型微调是通过ViSU(视觉安全与不安全)数据集完成的,该数据集在同一篇论文中被引入。
ViSU包含四元组元素:安全和不安全的句子对以及相应的安全和不安全图像。你可以在HuggingFace的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日。
有关模型、训练细节、数据集和评估的更多信息,请参考论文。你还可以在论文的仓库中找到下游任务的示例代码。
应用场景
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 = "openai/clip-vit-large-patch14"
>>> sd_model_id = "CompVis/stable-diffusion-v1-4"
>>> safeclip_text_model = CLIPTextModel.from_pretrained("aimagelab/safeclip_vit-l_14")
>>>
>>> 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_vit-l_14"
>>> model = CLIPModel.from_pretrained(model_id)
>>> processor = CLIPProcessor.from_pretrained("openai/clip-vit-large-patch14")
>>> 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}
}