库名称:transformers
许可证:cc-by-nc-4.0
标签:
- clip
- safeclip
- 视觉与语言
- 文本到图像
- 图像到文本
- 生成
- 检索
- 安全性
- nsfw
模型卡片:Safe-CLIP
Safe-CLIP 是在论文 Safe-CLIP: 从视觉与语言模型中移除 NSFW 概念 中提出的增强型视觉与语言模型,旨在降低 AI 应用中与 NSFW(不适合工作场所)内容相关的风险。
基于 CLIP 模型,Safe-CLIP 经过微调以服务于语言和视觉概念之间的关联,确保在文本到图像和图像到文本的检索与生成任务中输出更安全的结果。
NSFW 定义
在我们的工作中,参考了这篇论文的启发,我们将 NSFW 定义为一组有限且固定的概念,这些概念被认为是不适当、冒犯性或对个体有害的。这些概念分为七类:仇恨、骚扰、暴力、自残、性、令人震惊和非法活动。
与 Transformers 一起使用
以下是与 Transformers 一起使用的代码片段:
>>> from transformers import CLIPModel
>>> model_id = "aimagelab/safeclip_vit-l_14"
>>> model = CLIPModel.from_pretrained(model_id)
如果想在 OpenCLIP 库中使用 Safe-CLIP,请查看此仓库。
模型详情
Safe-CLIP 是 CLIP 模型的微调版本。模型的微调是通过 ViSU(视觉安全与非安全)数据集完成的,该数据集在同一篇论文中提出。
ViSU 包含四元组元素:安全和非安全的句子对以及对应的安全和非安全图像。您可以在 HuggingFace 的 ViSU-Text 页面上公开找到 ViSU 数据集的文本部分。由于包含极端不适当的图像,我们决定不发布数据集的视觉部分。这些图像可能对个体造成伤害和困扰,因此发布这部分数据集是不负责任的,也违背了确保 AI 技术安全与伦理使用的原则。最终模型将不适当内容重定向到嵌入空间的安全区域,同时保留安全嵌入的完整性。
变体 Safe-CLIP 提供四个版本,以提高与一些最流行的视觉与语言模型的兼容性,这些模型用于图像到文本和文本到图像的生成任务。更多细节见下表。
|
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)
引用
请使用以下 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}
}