当前位置: 首页 > news >正文

Diffusers代码学习-多个ControlNet组合

可以根据不同的图像输入组合多个ControlNet条件来创建MultiControlNet。为了获得更好的结果,比较有利的做法是:

1. 有选择的进行遮罩,使其不重叠(例如,遮罩canny图像中姿势条件所在的区域)

2. 使用controlnetconditioning_scale参数进行实验,以确定分配给每个条件输入的权重

下面将结合Canny 边缘检测图像和人体姿态估计图像来生成新图像。

 

# 以下代码为程序运行进行设置

import os

os.environ["HF_ENDPOINT"] = "https://hf-mirror.com"
from diffusers.utils import load_image, make_image_grid
from PIL import Image
import numpy as np
import cv2

# 以下代码加载初始图像,并通过Canny边缘检测生成控制图片
original_image = load_image("https://hf-mirror.com/datasets/huggingface/documentation-images/resolve/main/diffusers/landscape.png"
)
image = np.array(original_image)low_threshold = 100
high_threshold = 200image = cv2.Canny(image, low_threshold, high_threshold)

# 将姿态重叠的图像中间列清零

zero_start = image.shape[1] // 4

zero_end = zero_start + image.shape[1] // 2
image[:, zero_start:zero_end] = 0

image = image[:, :, None]
image = np.concatenate([image, image, image], axis=2)
canny_image = Image.fromarray(image)
make_image_grid([original_image, canny_image], rows=1, cols=2)

# 以下代码会引入与人物姿态检测相关的模型

from controlnet_aux import OpenposeDetectoropenpose = OpenposeDetector.from_pretrained("lllyasviel/ControlNet")
original_image = load_image("https://hf-mirror.com/datasets/huggingface/documentation-images/resolve/main/diffusers/person.png"
)
openpose_image = openpose(original_image)
make_image_grid([original_image, openpose_image], rows=1, cols=2)from diffusers import StableDiffusionXLControlNetPipeline, ControlNetModel, AutoencoderKL, UniPCMultistepScheduler
import torch

# 以下代码建立多个ControlNet组合

controlnets = [
ControlNetModel.from_pretrained(
"thibaud/controlnet-openpose-sdxl-1.0", torch_dtype=torch.float16
),
ControlNetModel.from_pretrained(
"diffusers/controlnet-canny-sdxl-1.0", torch_dtype=torch.float16, use_safetensors=True
),
]

vae = AutoencoderKL.from_pretrained("madebyollin/sdxl-vae-fp16-fix", torch_dtype=torch.float16, use_safetensors=True)
pipe = StableDiffusionXLControlNetPipeline.from_pretrained(
"stabilityai/stable-diffusion-xl-base-1.0", controlnet=controlnets, vae=vae, torch_dtype=torch.float16, use_safetensors=True
)
pipe.scheduler = UniPCMultistepScheduler.from_config(pipe.scheduler.config)

pipe.enable_model_cpu_offload()

# 以下代码由提示词及控制图片生成图片
prompt = "a giant standing in a fantasy landscape, best quality"
negative_prompt = "monochrome, lowres, bad anatomy, worst quality, low quality"generator = torch.manual_seed(1)images = [openpose_image.resize((1024, 1024)), canny_image.resize((1024, 1024))]images = pipe(prompt,image=images,num_inference_steps=25,generator=generator,negative_prompt=negative_prompt,num_images_per_prompt=3,controlnet_conditioning_scale=[1.0, 0.8],
).imagesoutput = make_image_grid([original_image, canny_image, openpose_image, images[0].resize((512, 512)), images[1].resize((512, 512)), images[2].resize((512, 512))], rows=2, cols=3)

output.show()

以下是用以形成Canny边缘检测图片的背景图片

图片

以下是人物姿态图片

图片

以下为应用多个ControlNet组合形成的图片。这里挑选3张拼接

图片

相关文章:

  • 110.网络游戏逆向分析与漏洞攻防-装备系统数据分析-装备与技能描述信息的处理
  • 统一电荷控制模型与异质结场效应晶体管中的亚阈值电流
  • 面试题:谈谈你对乐观锁和悲观锁的理解?
  • 用链表实现的C语言队列
  • 行为树 Behavoir Tree入门教程|讲的最清晰的教程(大概)
  • 【介绍下R-tree,什么是R-tree?】
  • linux Ubuntu安装samba服务器与SSH远程登录
  • 基于构件开发模型-系统架构师(八)
  • 第一章 Docker入门
  • Mysql查询分析工具Explain的使用
  • Django里choices字段使用中文使用
  • 数据库索引推荐大PK,DBdoctor和资深DBA的终极较量
  • Hbase布隆过滤器
  • 手机丢失不惊慌,华为手机已升级至楼层级设备查找!
  • C++作业第四天
  • 【140天】尚学堂高淇Java300集视频精华笔记(86-87)
  • 2017-08-04 前端日报
  • classpath对获取配置文件的影响
  • DataBase in Android
  • Java到底能干嘛?
  • Linux学习笔记6-使用fdisk进行磁盘管理
  • React as a UI Runtime(五、列表)
  • Spring Cloud Feign的两种使用姿势
  • spring security oauth2 password授权模式
  • Spring思维导图,让Spring不再难懂(mvc篇)
  • storm drpc实例
  • Unix命令
  • Vultr 教程目录
  • 阿里云前端周刊 - 第 26 期
  • 初识 webpack
  • 检测对象或数组
  • 开年巨制!千人千面回放技术让你“看到”Flutter用户侧问题
  • 两列自适应布局方案整理
  • 判断客户端类型,Android,iOS,PC
  • 思维导图—你不知道的JavaScript中卷
  • 项目实战-Api的解决方案
  • 3月7日云栖精选夜读 | RSA 2019安全大会:企业资产管理成行业新风向标,云上安全占绝对优势 ...
  • Play Store发现SimBad恶意软件,1.5亿Android用户成受害者 ...
  • # 执行时间 统计mysql_一文说尽 MySQL 优化原理
  • (2021|NIPS,扩散,无条件分数估计,条件分数估计)无分类器引导扩散
  • (Java实习生)每日10道面试题打卡——JavaWeb篇
  • (Matalb分类预测)GA-BP遗传算法优化BP神经网络的多维分类预测
  • (Note)C++中的继承方式
  • (多级缓存)缓存同步
  • (回溯) LeetCode 77. 组合
  • (离散数学)逻辑连接词
  • (切换多语言)vantUI+vue-i18n进行国际化配置及新增没有的语言包
  • (三)Pytorch快速搭建卷积神经网络模型实现手写数字识别(代码+详细注解)
  • (四)React组件、useState、组件样式
  • (转) SpringBoot:使用spring-boot-devtools进行热部署以及不生效的问题解决
  • (转)Linux NTP配置详解 (Network Time Protocol)
  • (转)Linux下编译安装log4cxx
  • (自适应手机端)响应式新闻博客知识类pbootcms网站模板 自媒体运营博客网站源码下载
  • .Net Core中Quartz的使用方法
  • .net mvc actionresult 返回字符串_.NET架构师知识普及