安全版 Stable Diffusion
安全版 Stable Diffusion 在 安全潜在扩散:缓解扩散模型中的不当退化 中提出,缓解了 Stable Diffusion 模型的不当退化,因为它们是在未过滤的网络抓取数据集上训练的。例如,Stable Diffusion 可能会意外生成裸露、暴力、描绘自残以及其他令人反感的图像。安全版 Stable Diffusion 是 Stable Diffusion 的扩展,它大大减少了这类内容。
论文摘要如下:
文本条件图像生成模型最近在图像质量和文本对齐方面取得了惊人的成果,因此在快速增长的应用中被采用。由于它们高度依赖数据,依赖从互联网随机抓取的数十亿个数据集,因此正如我们所展示的,它们也遭受了退化和有偏见的人类行为的影响。反过来,它们甚至可能会强化这种偏差。为了帮助对抗这些不良副作用,我们提出了安全潜在扩散(SLD)。具体来说,为了衡量由于未过滤和不平衡训练集造成的不当退化,我们建立了一个新颖的图像生成测试平台 - 不当图像提示(I2P) - 包含专门的现实世界图像到文本提示,涵盖裸露和暴力等概念。正如我们详尽的实证评估所表明的那样,引入的 SLD 在扩散过程中删除并抑制了不当图像部分,无需额外训练,也不会对整体图像质量或文本对齐产生不利影响。
提示
使用 StableDiffusionPipelineSafe 的 safety_concept
属性来检查和编辑当前的安全概念
>>> from diffusers import StableDiffusionPipelineSafe
>>> pipeline = StableDiffusionPipelineSafe.from_pretrained("AIML-TUDA/stable-diffusion-safe")
>>> pipeline.safety_concept
'an image showing hate, harassment, violence, suffering, humiliation, harm, suicide, sexual, nudity, bodily fluids, blood, obscene gestures, illegal activity, drug use, theft, vandalism, weapons, child abuse, brutality, cruelty'
对于每次图像生成,活动概念也包含在 StableDiffusionSafePipelineOutput
中。
有 4 种配置(SafetyConfig.WEAK
、SafetyConfig.MEDIUM
、SafetyConfig.STRONG
和 SafetyConfig.MAX
)可以应用
>>> from diffusers import StableDiffusionPipelineSafe
>>> from diffusers.pipelines.stable_diffusion_safe import SafetyConfig
>>> pipeline = StableDiffusionPipelineSafe.from_pretrained("AIML-TUDA/stable-diffusion-safe")
>>> prompt = "the four horsewomen of the apocalypse, painting by tom of finland, gaston bussiere, craig mullins, j. c. leyendecker"
>>> out = pipeline(prompt=prompt, **SafetyConfig.MAX)
一定要查看 Stable Diffusion 的 提示 部分,了解如何探索调度器速度和质量之间的权衡,以及如何有效地重用管道组件!
StableDiffusionPipelineSafe
class diffusers.StableDiffusionPipelineSafe
< 源代码 >( vae: AutoencoderKL text_encoder: CLIPTextModel tokenizer: CLIPTokenizer unet: UNet2DConditionModel scheduler: KarrasDiffusionSchedulers safety_checker: SafeStableDiffusionSafetyChecker feature_extractor: CLIPImageProcessor image_encoder: Optional = None requires_safety_checker: bool = True )
参数
- vae (AutoencoderKL) — 用于将图像编码和解码为潜在表示的变分自动编码器 (VAE) 模型。
- text_encoder (CLIPTextModel) — 冻结的文本编码器 (clip-vit-large-patch14)。
- tokenizer (CLIPTokenizer) — 用于对文本进行标记的
CLIPTokenizer
。 - unet (UNet2DConditionModel) — 用于对编码的图像潜在表示进行去噪的
UNet2DConditionModel
。 - scheduler (SchedulerMixin) — 与
unet
结合使用以对编码的图像潜在表示进行去噪的调度器。 可以是 DDIMScheduler、LMSDiscreteScheduler 或 PNDMScheduler 之一。 - safety_checker (
StableDiffusionSafetyChecker
) — 用于估计生成的图像是否可能被认为具有攻击性或有害性的分类模块。 有关模型潜在危害的更多详细信息,请参阅 模型卡。 - feature_extractor (CLIPImageProcessor) — 用于从生成图像中提取特征的
CLIPImageProcessor
; 用作safety_checker
的输入。
基于 StableDiffusionPipeline 的管道,用于使用安全潜在扩散进行文本到图像的生成。
此模型继承自 DiffusionPipeline。 检查超类文档,了解为所有管道实现的通用方法(下载、保存、在特定设备上运行等)。
该管道还继承了以下加载方法
- load_ip_adapter() 用于加载 IP 适配器
__call__
< source >( prompt: Union height: Optional = None width: Optional = None num_inference_steps: int = 50 guidance_scale: float = 7.5 negative_prompt: Union = None num_images_per_prompt: Optional = 1 eta: float = 0.0 generator: Union = None latents: Optional = None ip_adapter_image: Union = None output_type: Optional = 'pil' return_dict: bool = True callback: Optional = None callback_steps: int = 1 sld_guidance_scale: Optional = 1000 sld_warmup_steps: Optional = 10 sld_threshold: Optional = 0.01 sld_momentum_scale: Optional = 0.3 sld_mom_beta: Optional = 0.4 ) → StableDiffusionPipelineOutput or tuple
参数
- prompt (
str
或List[str]
) — 用于指导图像生成的提示或提示。 如果未定义,您需要传递prompt_embeds
。 - height (
int
, 可选, 默认为self.unet.config.sample_size * self.vae_scale_factor
) — 生成的图像的高度(以像素为单位)。 - width (
int
, 可选, 默认为self.unet.config.sample_size * self.vae_scale_factor
) — 生成的图像的宽度(以像素为单位)。 - num_inference_steps (
int
, 可选, 默认为 50) — 降噪步骤的数量。 更多的降噪步骤通常会导致更高的图像质量,但会以更慢的推理为代价。 - guidance_scale (
float
, 可选, 默认为 7.5) — 较高的引导比例值鼓励模型生成与文本prompt
密切相关的图像,但会以较低的图像质量为代价。 当guidance_scale > 1
时启用引导比例。 - negative_prompt (
str
或List[str]
, 可选) — 用于指导图像生成中不包含内容的提示或提示。 如果未定义,您需要改为传递negative_prompt_embeds
。 当不使用引导 (guidance_scale < 1
) 时忽略。 - num_images_per_prompt (
int
, 可选, 默认为 1) — 每个提示生成的图像数量。 - eta (
float
, 可选, 默认为 0.0) — 对应于 DDIM 论文中的参数 eta (η)。 仅适用于 DDIMScheduler,在其他调度器中被忽略。 - generator (
torch.Generator
或List[torch.Generator]
, 可选) — 一个torch.Generator
用于使生成确定性。 - latents (
torch.Tensor
, 可选) — 从高斯分布中采样的预生成的噪声潜在变量,用作图像生成的输入。 可用于使用不同的提示调整相同的生成。 如果未提供,则通过使用提供的随机generator
采样来生成潜在变量张量。 ip_adapter_image — (PipelineImageInput
, 可选): 可选的图像输入,用于处理 IP 适配器。 - callback (
Callable
, 可选) — 在推理过程中每callback_steps
步调用一次的函数。 该函数使用以下参数调用:callback(step: int, timestep: int, latents: torch.Tensor)
。 - callback_steps (
int
, 可选, 默认为 1) — 调用callback
函数的频率。 如果未指定,则在每一步都调用回调函数。 - sld_guidance_scale (
float
, 可选, 默认为 1000) — 如果sld_guidance_scale < 1
,则禁用安全引导。 - sld_warmup_steps (
int
, 可选, 默认为 10) — 安全引导的预热步骤数。 只有当扩散步骤大于sld_warmup_steps
时,才会应用 SLD。 - sld_threshold (
float
, 可选, 默认为 0.01) — 分隔适当图像和不适当图像之间的超平面的阈值。 - sld_momentum_scale (
float
, 可选, 默认为 0.3) — 要在每个扩散步骤中添加到安全引导的 SLD 动量的比例。 如果设置为 0.0,则禁用动量。 动量在预热期间累积,用于小于sld_warmup_steps
的扩散步骤。 - sld_mom_beta (
float
, 可选, 默认为 0.4) — 定义安全引导动量如何累积。sld_mom_beta
指示保留多少先前动量。 动量在预热期间累积,用于小于sld_warmup_steps
的扩散步骤。
返回值
StableDiffusionPipelineOutput 或 tuple
如果 return_dict
为 True
,则返回 StableDiffusionPipelineOutput,否则返回 tuple
,其中第一个元素是包含生成图像的列表,第二个元素是包含 bool
的列表,指示相应的生成图像是否包含“不适合工作”(nsfw)内容。
用于生成管道调用函数。
示例
import torch
from diffusers import StableDiffusionPipelineSafe
from diffusers.pipelines.stable_diffusion_safe import SafetyConfig
pipeline = StableDiffusionPipelineSafe.from_pretrained(
"AIML-TUDA/stable-diffusion-safe", torch_dtype=torch.float16
).to("cuda")
prompt = "the four horsewomen of the apocalypse, painting by tom of finland, gaston bussiere, craig mullins, j. c. leyendecker"
image = pipeline(prompt=prompt, **SafetyConfig.MEDIUM).images[0]
StableDiffusionSafePipelineOutput
class diffusers.pipelines.stable_diffusion_safe.StableDiffusionSafePipelineOutput
< source >( images: Union 参数 List[PIL.Image.Image]
或 np.ndarray
) — 长度为 batch_size
的去噪 PIL 图像列表,或形状为 (batch_size, height, width, num_channels)
的 NumPy 数组。PIL 图像或 NumPy 数组表示扩散管道去噪后的图像。 List[bool]
) — 表示相应的生成图像是否可能代表“不适合工作场所”(nsfw) 内容的标志列表,或者如果无法执行安全检查,则为 None
。 List[PIL.Image.Image]
或 np.ndarray
) — 被安全检查器标记的去噪 PIL 图像列表,可能包含“不适合工作场所”(nsfw) 内容,或者如果未执行安全检查或没有图像被标记,则为 None
。 str
) — 应用的安全概念,用于安全指导,或者如果安全指导已禁用,则为 None
安全稳定扩散管道的输出类。