Diffusers库是由Hugging Face团队推出的一款专门用于处理扩散模型(Diffusion Models)的工具箱,支持各种扩散模型的加载、训练和微调,能够生成高质量的图像、音频,此外,它还提供了多种噪声调度器,用于调节模型推理中的速度和质量。
diffusers主要特点
- 易用性:Diffusers库提供了简单方便的diffusion推理训练pipeline,使得用户可以轻松地实现图像和音频的生成。
- 模块化设计:库中的各个模块(如Unet、VAE、CLIP、scheduler等)都可以进行自定义和替换,满足了用户在不同应用场景下的需求。
- 活跃的社区支持:Diffusers库拥有一个活跃的模型和数据社区,用户可以直接从指定的仓库调用别人上传的数据集和预训练checkpoint,大大降低了开发门槛。
- 支持最新技术:随着扩散模型技术的不断发展,Diffusers库也在不断更新和完善,支持最新的Stable Diffusion等模型。
ControlNet模型是一种用于控制预训练图像扩散模型(例如Stable Diffusion)的神经网络,它通过接受调节图像作为输入来操控图像生成过程 。这种模型的引入,使得AI绘画的生成过程更加可控,有助于将AI绘画应用到各行各业中,为AI绘画的商业落地奠定了基础 。
ControlNet主要特点:
-
多种调节图像类型:ControlNet能够处理多种类型的调节图像,如涂鸦、边缘图、姿势关键点、深度图、分割图、法线图等,这些输入都可以作为条件输入来指导生成图像的内容。
-
内部架构:ControlNet的内部架构包括前馈和反向传播两部分。在前馈过程中,ControlNet利用额外的条件向量来训练模型的一个可训练副本,而不是直接训练原始权重,以防止过拟合并保持大模型的高质量。
-
与Stable Diffusion结合:ControlNet与Stable Diffusion结合使用时,可以通过编码器和整体架构来增强Stable Diffusion的性能,使其能够接受指导图像生成过程的条件输入。
-
训练:在训练ControlNet时,会随机用空字符串替换50%的文本提示,这有助于模型更好地理解输入条件图的含义,例如Canny边缘图或人类涂鸦。
-
输入条件的多样性:ControlNet是一种灵活的工具,允许使用不同类型的条件输入来加强Stable Diffusion,包括Canny边缘图、线条图、涂鸦、霍夫线、语义分割、深度图、法线图和姿势等。
Diffusers使用ControlNet模型
control_v11p_sd15_canny模型
安装依赖包:
pip install opencv-contrib-python
pip install diffusers transformers accelerate
示例代码:
import torch
import os
from huggingface_hub import HfApi
from pathlib import Path
from diffusers.utils import load_image
import numpy as np
import cv2
from PIL import Image
from diffusers import (
ControlNetModel,
StableDiffusionControlNetPipeline,
UniPCMultistepScheduler,
)
checkpoint = "lllyasviel/control_v11p_sd15_canny"
image = load_image(
"https://hf-mirror.com/lllyasviel/control_v11p_sd15_canny/resolve/main/images/input.png"
)
image = np.array(image)
low_threshold = 100
high_threshold = 200
image = cv2.Canny(image, low_threshold, high_threshold)
image = image[:, :, None]
image = np.concatenate([image, image, image], axis=2)
control_image = Image.fromarray(image)
control_image.save("./images/control.png")
controlnet = ControlNetModel.from_pretrained(checkpoint, torch_dtype=torch.float16)
pipe = StableDiffusionControlNetPipeline.from_pretrained(
"runwayml/stable-diffusion-v1-5", controlnet=controlnet, torch_dtype=torch.float16
)
pipe.scheduler = UniPCMultistepScheduler.from_config(pipe.scheduler.config)
pipe.enable_model_cpu_offload()
generator = torch.manual_seed(33)
image = pipe("a blue paradise bird in the jungle", num_inference_steps=20, generator=generator, image=control_image).images[0]
image.save('images/image_out.png')
control_v11f1p_sd15_depth模型
安装依赖包:
pip install diffusers transformers accelerate
示例代码:
import torch
import os
from huggingface_hub import HfApi
from pathlib import Path
from diffusers.utils import load_image
from PIL import Image
import numpy as np
from transformers import pipeline
from diffusers import (
ControlNetModel,
StableDiffusionControlNetPipeline,
UniPCMultistepScheduler,
)
checkpoint = "lllyasviel/control_v11p_sd15_depth"
image = load_image(
"https://hf-mirror.com/lllyasviel/control_v11p_sd15_depth/resolve/main/images/input.png"
)
prompt = "Stormtrooper's lecture in