稳定扩散版本2

文本转图像示例 文本转图像示例 文本转图像示例

此仓库包含从头开始训练的Stable Diffusion模型,并将持续更新新的检查点。以下是当前可用模型的概述。更多内容即将发布。

最新动态

2023年3月24日

Stable UnCLIP 2.1

2022年12月7日

版本 2.1

  • 基于相同参数数量和架构的新稳定扩散模型(Stable Diffusion 2.1-vHugging Face)在768x768分辨率和(Stable Diffusion 2.1-baseHuggingFace)在512x512分辨率上,均基于2.0并在2.0的基础上微调,使用较少限制的LAION-5B数据集进行NSFW过滤。默认情况下,如果未安装xformers,模型的注意操作将在全精度下评估。要启用fp16(这可能会导致v2.1模型的普通注意模块出现数值不稳定),请使用ATTN_PRECISION=fp16 python <thescript.py>运行脚本。

2022年11月24日

版本 2.0

  • 新的稳定扩散模型(Stable Diffusion 2.0-v)在768x768分辨率下。U-Net参数数量与1.5相同,但使用OpenCLIP-ViT/H作为文本编码器并从头开始训练。_SD 2.0-v_是所谓的v-prediction模型。
  • 上述模型从_SF 2.0-base_微调而来,后者作为标准噪声预测模型在512x512图像上训练,也提供。
  • 增加了x4上采样潜在文本引导扩散模型
  • 新的深度引导稳定扩散模型,从_SD 2.0-base_微调而来。模型基于通过MiDaS推断的单目深度估计,可以用于保持结构的img2img和形状条件合成。

    深度转图像示例

  • 文本引导修复模型,从_SD 2.0-base_微调而来。

我们遵循原始仓库并提供基础推理脚本来从模型中采样。


原始的Stable Diffusion模型是与CompVisRunwayML合作创建的,基于以下工作:

高分辨率图像合成与潜在扩散模型
Robin Rombach*, Andreas Blattmann*, Dominik Lorenz\, Patrick EsserBjörn Ommer
CVPR ‘22 口头报告 | GitHub | arXiv | 项目页面

以及许多其他人

Stable Diffusion是一个潜在的文本到图像扩散模型。 ____________

要求

您可以通过运行以下命令来更新现有的潜在扩散环境:

conda install pytorch==1.12.1 torchvision==0.13.1 -c pytorch
pip install transformers==4.19.2 diffusers invisible-watermark
pip install -e .

xformers高效注意

为了提高GPU上的效率和速度, 我们强烈推荐安装xformers库。

已在带CUDA 11.4的A100上测试。 安装需要较新的nvcc和gcc/g++版本,可以通过以下命令获得:

export CUDA_HOME=/usr/local/cuda-11.4
conda install -c nvidia/label/cuda-11.4.0 cuda-nvcc
conda install -c conda-forge gcc
conda install -c conda-forge gxx_linux-64==9.5.0

然后,运行以下命令(编译可能需要长达30分钟)。

cd ..
git clone https://github.com/facebookresearch/xformers.git
cd xformers
git submodule update --init --recursive
pip install -r requirements.txt
pip install -e .
cd ../stablediffusion

成功安装后,代码将在U-Net和自动编码器中的自注意和交叉注意层自动使用内存高效注意

一般免责声明

Stable Diffusion模型是通用的文本到图像扩散模型,因此反映了其训练数据中的偏见和(误)概念。尽管已经努力减少明确的色情内容,但我们不推荐在没有额外安全机制和考虑的情况下将提供的权重用于服务或产品。权重是研究成果,应如此对待。 有关训练过程和数据的详细信息,以及模型的预期用途,请参见相应的模型卡。 权重可通过Hugging Face上的StabilityAI组织根据CreativeML Open RAIL++-M License获得。

稳定扩散v2

稳定扩散v2指的是使用下采样因子8自动编码器、865M UNet和OpenCLIP ViT-H/14文本编码器的特定模型配置。_SD 2-v_模型生成768x768像素的输出。

在不同的无分类器指导比例(1.5, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0)和50个DDIM采样步骤下的评估显示了检查点的相对改进:

稳定扩散评估结果

文本到图像

![文本到图像示例](assets/stable-samples/txt2img/merged-

0023.png) 文本到图像示例 文本到图像示例

用法

以下展示了如何使用diffusers库从_SF 2.0-v_模型中采样:

import torch
from diffusers import StableDiffusionPipeline

model_id = "stabilityai/stable-diffusion-2"
device = "cuda"
pipe = StableDiffusionPipeline.from_pretrained(model_id, torch_dtype=torch.float16)
pipe = pipe.to(device)

prompt = "the dog is walking"
image = pipe(prompt).images[0]

image.save("dog.png")

或者,可以使用我们提供的直接脚本:

python scripts/txt2img.py --prompt "a beautiful cat" --H 768 --W 768 --seed 27 --n_samples 1 --n_iter 1

深度条件稳定扩散

深度条件图像示例 深度条件图像示例 深度条件图像示例

Stable Diffusion 2 depth-conditioned model对形状和深度信息敏感。其使用方式与文本到图像模型相似,不同的是需要额外的单目深度图。 我们提供了用于生成这种深度图的代码片段,可以集成到推理管道中。

import torch
from diffusers import StableDiffusionDepth2ImgPipeline

model_id = "stabilityai/stable-diffusion-2-depth"
device = "cuda"
pipe = StableDiffusionDepth2ImgPipeline.from_pretrained(model_id, torch_dtype=torch.float16)
pipe = pipe.to(device)

prompt = "a luxurious mansion"
depth_map = get_depth_map("input_image.jpg")  # 生成深度图的函数
image = pipe(prompt, depth_map).images[0]

image.save("mansion.png")

图片修复

图片修复示例 图片修复示例 图片修复示例

Stable Diffusion 2.0 inpainting model 是一个专门用于图片修复任务的模型。其使用方法与其他模式相似,但需要额外的掩码信息。 我们提供了生成这种掩码的代码片段,可以集成到推理管道中。

import torch
from diffusers import StableDiffusionInpaintPipeline

model_id = "stabilityai/stable-diffusion-2-inpainting"
device = "cuda"
pipe = StableDiffusionInpaintPipeline.from_pretrained(model_id, torch_dtype=torch.float16)
pipe = pipe.to(device)

prompt = "a beautiful beach"
init_image = "path_to_image.png"  # 初始图像
mask_image = "path_to_mask.png"   # 掩码图像
image = pipe(prompt, init_image=init_image, mask_image=mask_image).images[0]

image.save("beach.png")

图像上采样

图像上采样示例 图像上采样示例 图像上采样示例

用法

import torch
from diffusers import StableDiffusionUpscalePipeline

model_id = "stabilityai/stable-diffusion-x4-upscaler"
device = "cuda"
pipe = StableDiffusionUpscalePipeline.from_pretrained(model_id, torch_dtype=torch.float16)
pipe = pipe.to(device)

prompt = "an ultra high resolution photo of a cat"
low_res_image = get_low_res_image("path_to_image.png")  # 生成低分辨率图像的函数
image = pipe(prompt, image=low_res_image).images[0]

image.save("high_res_cat.png")

参考

致谢

我们对以下人和组织表示感谢:

更多信息和更新,请访问我们的GitHub页面Hugging Face页面

快速入门

Stable Diffusion是一个强大的工具,可以用来生成高质量的图像。以下是一个快速入门指南:

  1. 安装必要的依赖库。
  2. 下载并加载模型。
  3. 输入提示词生成图像。

更多详细信息,请参考上述每个部分的使用说明。祝您使用愉快!

参考资料

https://github.com/Stability-AI/stablediffusion/blob/main/README.md