🚀 安全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}
}