使用diffusers和ControlNet进行文生图

使用Diffusers和ControlNet文生图详解

Diffusers库是由Hugging Face团队推出的一款专门用于处理扩散模型(Diffusion Models)的工具箱,支持各种扩散模型的加载、训练和微调,能够生成高质量的图像、音频,此外,它还提供了多种噪声调度器,用于调节模型推理中的速度和质量。

diffusers主要特点

  1. 易用性:Diffusers库提供了简单方便的diffusion推理训练pipeline,使得用户可以轻松地实现图像和音频的生成。
  2. 模块化设计:库中的各个模块(如Unet、VAE、CLIP、scheduler等)都可以进行自定义和替换,满足了用户在不同应用场景下的需求。
  3. 活跃的社区支持:Diffusers库拥有一个活跃的模型和数据社区,用户可以直接从指定的仓库调用别人上传的数据集和预训练checkpoint,大大降低了开发门槛。
  4. 支持最新技术:随着扩散模型技术的不断发展,Diffusers库也在不断更新和完善,支持最新的Stable Diffusion等模型。

ControlNet模型是一种用于控制预训练图像扩散模型(例如Stable Diffusion)的神经网络,它通过接受调节图像作为输入来操控图像生成过程 。这种模型的引入,使得AI绘画的生成过程更加可控,有助于将AI绘画应用到各行各业中,为AI绘画的商业落地奠定了基础 。

ControlNet主要特点:

  1. 多种调节图像类型:ControlNet能够处理多种类型的调节图像,如涂鸦、边缘图、姿势关键点、深度图、分割图、法线图等,这些输入都可以作为条件输入来指导生成图像的内容。

  2. 内部架构:ControlNet的内部架构包括前馈和反向传播两部分。在前馈过程中,ControlNet利用额外的条件向量来训练模型的一个可训练副本,而不是直接训练原始权重,以防止过拟合并保持大模型的高质量。

  3. 与Stable Diffusion结合:ControlNet与Stable Diffusion结合使用时,可以通过编码器和整体架构来增强Stable Diffusion的性能,使其能够接受指导图像生成过程的条件输入。

  4. 训练:在训练ControlNet时,会随机用空字符串替换50%的文本提示,这有助于模型更好地理解输入条件图的含义,例如Canny边缘图或人类涂鸦。

  5. 输入条件的多样性: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 beautiful lecture hall"

depth_estimator
### RNN与Diffuser在机器学习中的差异及应用 #### 循环神经网络(RNN) 循环神经网络(Recurrent Neural Network, RNN)是一类用于处理序列数据的神经网络架构。这类模型特别适用于时间序列分析、自然语言处理等领域,因为其设计允许信息在网络内部以一种特定的方式传递。 RNN通过引入隐藏状态来捕捉输入序列的时间依赖关系。这种机制使得当前时刻的状态不仅取决于当下的输入,还受到之前所有历史输入的影响。然而,标准形式的RNN存在梯度消失/爆炸问题,这限制了长期记忆能力的有效利用[^2]。 为了克服这些问题,研究人员提出了几种改进版本,比如长短时记忆网络(LSTM) 门控循环单元(GRU),这些变体能够在一定程度上缓解上述挑战并提高性能表现。 ```python import torch.nn as nn class SimpleRNN(nn.Module): def __init__(self, input_size, hidden_size, output_size): super(SimpleRNN, self).__init__() self.rnn = nn.RNN(input_size=input_size, hidden_size=hidden_size, batch_first=True) self.fc = nn.Linear(hidden_size, output_size) def forward(self, x): out, _ = self.rnn(x) out = self.fc(out[:, -1, :]) return out ``` #### 扩散模型(Diffusion Models) 扩散模型(Diffusion Models)属于一类生成对抗网络之外的新颖概率形建模框架。该技术最初由Sohl-Dickstein等人于2015年提出,并在过去几年里得到了快速发展。不同于传统的自回归或流形映射方法,扩散模型采用了一种渐进式的噪声注入过程,逐步破坏训练样本直至接近高斯白噪水平;随后再逆向执行去噪操作重建原始像或其他类型的结构化对象[^6]。 具体来说,在前向过程中,算法会按照预定的概率分布逐渐增加随机扰动至目标实例之上;而在反向阶段,则是从纯噪音出发并通过一系列迭代更新恢复出清晰的数据模式。这一正向-反向转换流程构成了完整的扩散采样链路,最终实现高质量合成结果的同时具备良好的泛化特性。 ```python from diffusers import DDPMPipeline pipeline = DDPMPipeline.from_pretrained('google/ddpm-cifar10-32') images = pipeline(batch_size=8).images ``` #### 应用场景对比 - **文本生成**:虽然两者都可以应用于文本领域,但是由于RNN及其衍生结构擅长捕捉上下文语义关联性,所以在诸如对话系统、翻译任务等方面占据优势位置。 - **像生成**:相比之下,扩散模型因其出色的视觉效果以及易于扩展到更高维度空间的特点而被广泛采纳为片创造工具之一。 - **音频信号处理**:对于连续型媒体文件如语音片段编辑而言,两种方案各有千秋——前者凭借强大的时序理解力适合做转录工作,后者则可能更适合音乐创作等创意需求。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值