ComfyUI 基础教程—— 应用 Controlnet 精准控制图像生成

news2024/12/24 2:18:25

一、前言

你是否有见过下面类似这样的图片:
 

看起来平平无奇,当你站远点看,或者把眼睛眯成一条缝了看,你会发现,这个图中藏有一些特别的元素。这就是利用了 Ai 绘画中的 ControlNet,实现对图片的相对更精准控制。
上一篇文章讲述了文生图的基本工作流和最基础的核心插件用法。通过提示器可以描述我们想要生成的图片。但是通过文字是无法精准描述描述图片的。就好你说 “一个女孩,穿着粉色的裙子”,一百个人听到这句话,脑海中产生的信息有一百种,每个人想到的都不一样,无论你再怎么加场景、细节、修饰符,都不可能统一所有人的理解。那今天要将的 ControlNet 却能在一定程度上指导 Stable Diffusion 图片的生成过程,实现一些特殊的效果。

二、ControlNet 的相关概念

2.1 什么是 ControlNet

ControlNet 是一个控制预训练图像扩散模型(例如 Stable Diffusion)的神经网络。它允许输入调节图像,然后使用调节图像来控制图像生成。这里的调节图像类型有很多,比如涂鸦、边缘图、姿势关键点、深度图、法线图、分割图等。这些输入条件都可以作为条件输入来指导生成图像的内容。

这里需要明确一点,ControlNet 是一种算法,用来控制预训练图像扩散模型生成图像的,可以搭配 Stable Diffusion 模型进行使用,但不是只能使用在 Stable Diffusion 中。

2.2 ControlNet 的使用场景

ControlNet 的使用场景非常之多。比如想要控制生成图像人物的姿势,可以给定一张参考图,使用姿势控制模型,提取出人物的姿势,进行控制;比如生成室内装修设计图,可以根据给定定一个法线图,进行控制;比如可以简单画个涂鸦草图,让 AI 根据这个草图进行绘制等等。由于 AI 绘图试一项创造性工作,所以无法列举完所有的场景,这里大家有个初步印象,然后可以尝试不同的 ControlNet 模型,发挥想象,用到合适的需求场景。

2.3 ControlNet 官方地址

ControlNet 的官方地址:GitHub - lllyasviel/ControlNet: Let us control diffusion models!

关于 ControlNet 的原理,官网上有一些讲解。本人水平有限,这里就班门弄斧,以免误导大家。感兴趣的朋友可以查看官网文档,或者搜索其它资料文献。

三、如何使用 ControlNet

对于使用 AI 绘画的人来说,应用才是最重要的。接下来通过一个示例讲解如何使用 ControlNet。

3.1 安装 ControlNet 插件

ComfyUI-Advanced-ControlNet
首先是 ControlNet 节点安装,如果你使用的秋葉整合包 ComfyUI,是自带了 ControlNet 节点的。如果没有,可在自行安装插件 ComfyUI-Advanced-ControlNet。相信能看到这里的朋友都掌握了插件安装的方法,如果有不会的朋友,可以回头去看我前面的文章,安装插件的方法前面的文章有讲。

3.2 模型下载

强调: ContrlNet 模型是分版本的,与基础大模型要对应。 比如你基础大模型使用的 SD1.5, 那么你的 ControlNet 模型也要选择 SD1.5 版本,模型不匹配运行会报错。

官方提供了 Stable Diffusion 1.5 版本的 ControlNet 模型下载地址:
https://huggingface.co/lllyasviel/ControlNet-v1-1/tree/main


这里面的模型非常之多,通过模型的名字基本能知道模型的作用。

下载模型,放到如下路径:ComfyUI\models\controlnet

如果需要下载 SDXL 或者其它版本的 ControlNet 模型,可自行在模型下载网站搜索下载。

多合一模型

controlnet-union-sdxl-1.0
这个模型只适用于 SDXL 版本,优势是该模型集成了 ControlNet 的 12 中类型的模型,不用挨个下载, 并且能更节约内存。
官方地址:https://huggingface.co/xinsir/controlnet-union-sdxl-1.0

3.3 ControlNet 使用

接下来通过一个实际的例子,展示 ControlNet 如何使用。

3.3.1 应用 ControlNet 节点

首先,我们不必要完全从零开始搭建工作流,直接加载默认的文生图工作流,在它的基础上进行修改。

然后我们添加一个 应用ControlNet 节点。
新建 -> 条件 -> ControlNet 这里面可能有好几个相关的节点。

这里说说最常用的 ControlNet应用高级 这个节点。掌握这个节点,其它节点使用方式大同小异,大家可以自行尝试。

ControlNet应用高级 和 ControlNet应用 相比,多了负面条件控制,以及开始时间和结束时间。我们可以把两者都添加进来更直观的看到。

这里输入和输出中的正面条件和负面条件都很好理解,说一下开始时间和结束时间,它们指的是,在整个采样器去除噪波,生成图片过程中,ControlNet 介入控制的时机,最小是0,最大是1。如果开始时间设置为0,结束时间设置为1,则表示生成图片过程中,ControlNet 从头到尾都介入控制。

再看剩余的参数和输入条件:

  • 强度:是 ControlNet 的作用强度。值越大,生成的图片 ControlNet 参考强度越大,也越贴近参考效果,但是实际使用中,往往也不是参考效果越明显越好。比如前言中看到的光影文字效果,我们以文字的深度图作为 ControlNet 参考图,生成风景照,当 ControlNet 强度太大了,生成的图像中,文字非常明显, 反而风景照发挥的空间太小了,往往效果不近人如意。实际使用过程中,还需要根据实际生成图片不断调整。
  • ControlNet:该输入项需要连接到 ControlNet 加载器。前面我们下载的模型,需要根据需要选择一个使用。
  • 图像:这里需要一个输入一个经过 ControlNet 预处理器处理过的图像。

3.3.2 ControlNet 模型加载器

ControlNet 模型加载器同样有很多种,这里挑一个最常用的。

只有一个参数,选择我们需要的模型。前面强调过,这里的模型版本,要和你选择的基础大模型匹配。

3.3.3 ControlNet 预处理器

ControlNet 的预处理器种类非常多,选择哪个需要和加载的 ControlNet 模型对应上。 比如前面选择了模型加载了 openpose 类型,这里就要选择面部与姿态下面的预处理器。

这里我们选择 DW姿态预处理器来说明。

这里面的参数,检测项需要就启用,不需要就禁用。分辨率可以根据基础大模型设置。一般 SD1.5 设置 512, SDXL 设置 1024。BBox检测和姿态预估是用来检测身体各个部位的,在其他场景中也会用到,不同模型之间的区别,大家可以自行了解。

首次使用某个 ControlNet 预处理器时间会长一点,会自动从网络下载所需要的模型,请保持网络通畅,并且可以在 ComfyUI 启动器的控制台看到下载任务和进度。后续如果本地有了该模型,很快就可以加载进来。

输入图像,需要出入一张参考图像。

Aux集成预处理器

下面再介绍一个多合一的 ControlNet 预处理器 —— Aux 集成预处理器。

它只有两个参数,预处理器,需要自己选择,比如选择 DW姿态预处理,就和上面的效果基本一致了。同样需要输入一张参考图。

图像加载节点

输入的参考图,就是从本地或者网络加载一张图片,然后输出到 ControlNet 预处理器。这里就需要使用到图像加载节点。

  • 加载本地图像
    加载图像使用 LoadImage 节点就可以。新建->图像->加载图像

    点击 choose file to upload , 选择一张本地图片,或者直接拖动图片到上面就可以,实际使用中,拖拽一张网络图片也是可以的。

  • 加载网络图像
    有时候我们知道网络图片的地址,那就可以使用专门加载网络图片的节点。我们可以搜索一下本地节点,没有的话,就需要自己安装。我这里有很多插件提供了加载网络图片的节点。

以上就是所有 ControlNet 需要的节点,都添加进来然后正确连接起来就可以了。

3.4 实例展示

3.4.1 人物姿态控制

这里本地有一张图片

下面生成一张女孩的图片,姿态和这张图片保持一致。工作流如下:

和上面讲解的节点一样,这里,注意就是 Clip 文本编码器输出的正面条件和负面条件连接到 ControlNet 应用节点的输入,ControlNet 应用节点的输出再分别连接到 K 采样器的输入。
另外这里将 ControlNet 的预处理器输出到一个预览图像节点,方便我们查看与预处理处理后的结果。

大模型选择的 xxmix9Realistic 写实风格,正向提示词就简单填写的 1 girl, 最终的结果生成了一个女孩,姿势与我们的参考图是一致的。当然这个图并不完美,放大看比较模糊,细节也很欠缺。如果要生成一张质量较高的图片,需要非常好的提示词,好需要一些其他的节点。如增加 Lora 模型(后面文章讲解如何使用),放大处理节点,对局部进细节进行处理(比如手部修复,面部修复)等等。

3.4.2 局部重绘

局部重绘的方法有很多,本示例将通过 ControlNet 完成一个局部重绘的简单工作流。
想要实现的效果是对下面这张图片进行局部重绘,比如给这个女孩换上不同的裤子。

先说一下基本的思路,就是加载上面的图像,然后创建需要重绘部位的遮罩(在 PS 里面也称为蒙版),然后对遮罩区域进行重新绘制,这里就要创建图中女孩裤子部分的遮罩。此时,使用 ControlNet 的模型是 inpaint 类型。针对这个示例,接下来使用 SDXL 版本的模型进行,一步一步实现效果。
先上图:

和前面使用 openpose 的工作流基本类似。这里 SDXL 的模型,我选择的是 union 版本,这里在加载 ControlNet 模型的时候,ControlNet 加载器不能直接连接到 应用 ControlNet 节点上,因为我们使用 union 版本的模型,它集成了12种类型的模型功能,使用时就需要选择具体使用哪种类型,这应该很好理解。
所以这里连接到 设置 UnionControlNet 类型 这个节点,然后再将输出端连接到 应用ControlNet 节点。

在设置 UnionControlNet 类型中,基于重绘,我们选择 repaint 类型。同时,与之对应的预处理器节点应该选择 Inpaint 内部预处理器。该预处理需要输入图像和遮罩。刚刚也说过了,我们需要创建遮罩区域,对遮罩区域进行重绘。

如何创建图像遮罩呢?
在图片上鼠标右键,点击"在遮罩编辑器中打开",

然后会自动打开遮罩编辑器,操作非常简单,左下角工具条依次是清除遮罩、设置画笔宽度、设置遮罩透明度、设置遮罩颜色。如果涂错了,点击清除,或按住右键涂抹即可。最后记得点击右下角保存。

另外记得大模型也要选择对应的 SDXL 版本,对于 SDXL 分辨率可以设置为 1024 左右。正向提示词写上“1 girl,short red_dress, ”。最后运行看看:

不出意外的话,意外出现了。。。生成的图像一片漆黑,预览预处理器处理过后的图像倒是能看清楚图像和遮罩。
不要慌,这里,有个小细节,就是 inpaint 内部预处理处理过后的图像不能直接输入到 ControlNet 应用节点,需要先转换为 RGB。

再次运行,可以看到,图片中的人物已经换上了红色的裙子。
Ok,这次没问题了。

注意这个图像转RGB节点,是 WAS 插件下的图像到RGB。 不要添加为其他自定义插件中的 Convert Image To RBG 了,亲测过,不生效。

我们还可以再进一步补充完善完善一下这个工作流。上述这个工作流,K采样器的 Latent 我们传入的试一个空 Latent,图像的宽高是我们自己设置的,这样有两个特点:

  1. 有可能我们设置的值与原图宽高不一致
  2. 空的 Latent 意味着对整个图完全进行了重绘。关于这一点,后面在专门写一篇文章,讲述各种重绘方式的区别。

由于是图片局部重绘,我们实际上可以将原图使用 VAE编码器进行编码转换成 Latent 输出到采样器中。这里使用 VAE 内补编码器。输入端,需要传入图像,VAE 模型,遮罩,输出 Latent 连接到采样器。VAE内补编码器还有一个参数,“遮罩延展”,这个类似与 PS 中的羽化,可以让重绘部分和原图融合得更好。这个值可以在使用过程中不断修改尝试,达到自己满意的效果就可以了。

最后完整的工作流如下:

3.5 ControlNet 堆的使用

有时候我们想用多张图片的不同 ControlNet 类型进行控制,最原始的做法就是依次添加不同的 ControlNet 相关的节点,把它们依次串联起来。这样做节点数看起来会很多,不是很直观。ComfyUI 中可以使用 ControlNet 堆进行统一处理。使用也非常简单:

如果你没有这个自定义插件,就需要额外下载,看这个节点样式,使用起来非常简单。它支持最多三个 ControlNet 一起控制,整合了 ControlNet 模型加载器,并且分别提供了开关、强度、介入时间等参数。如果 3 个不够用,还可以继续串联 ControlNet 堆节点。一般来说。

四、结束语

ControlNet 在 AI 绘画中非常重要,大多数生产环境中,都不是天马行空,完全随机生成图片的,有了 ControlNet, 能够更精准地控制生图,才能不断修改完善,符合实际使用需求。本文只是讲解了 ControlNet 的入门使用方法,更多的知识需要在大量的练习和探索中掌握。
回到开头图片,文字融入图片的效果又该如何应用 ControlNet 来生成呢?
留给大家自己去学习探索。最后中秋节快到了,提前祝大家中秋节快乐!

https://blog.csdn.net/zsd2829568515/article/details/135256915?spm=1001.2100.3001.7377&utm_medium=distribute.pc_feed_blog_category.none-task-blog-classify_tag-11-135256915-null-null.nonecase&depth_1-utm_source=distribute.pc_feed_blog_category.none-task-blog-classify_tag-11-135256915-null-null.nonecase

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2115176.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

实施经济实惠的DFIR 网络防御解决方案

数字取证 事件响应(DFIR)是防御的重要组成部分,它包括发现网络危险,调查它们,并采取措施阻止它们。这对于保护私有数据安全和确保IT系统正常工作非常重要。由于资金和资源有限,小公司往往难以建立有效的DFI…

数据库安全漏洞的克星:SqlMap

SqlMap:一键自动化,精准识别SQL注入漏洞。 - 精选真开源,释放新价值。 概览 sqlmap是一个广受认可的开源工具,专注于自动化SQL注入漏洞的检测和利用。它能够与多种数据库系统交互,包括但不限于MySQL、Oracle、Postgre…

Android源码修改 默认导航方式

1、静态修改 代码路径&#xff1a;frameworks/base/core/res/res/values/config.xml&#xff0c;由于我是用hbuilder打开 我们可以看到代码注释 <!-- Controls the navigation bar interaction mode: 0: 3 button mode (back, home, overview buttons) 1…

Excel和Word日常使用记录:

Excel使用总结 表格颜色填充&#xff1a; 合并单元格&#xff1a; 选中你要合并的单元格区域。 按下快捷键 Alt H&#xff0c;然后松开这些键。 再按下 M&#xff0c;接着按 C。 这个组合键执行的操作是&#xff1a;Alt H&#xff1a;打开“主页”选项卡。 M&#xff1a;选…

【Vue】状态管理模式Vuex

数据共享 流程搭建变更状态辅助函数分割模块 流程 Vuex是一个Vue的状态管理工具&#xff0c;状态就是数据&#xff08;某个状态在很多个组件来使用 &#xff0c;多个组件共同维护一份数据&#xff09; 搭建 1&#xff09;Vuex我们在脚手架搭建项目的时候直接搭建好了&#xff0…

面壁带来了小钢炮,MiniCPM3-4B

MiniCPM3-4B 是 MiniCPM 系列的第三代产品。 相比 MiniCPM1.0/MiniCPM2.0&#xff0c;MiniCPM3-4B 拥有更强大、更多用途的技能集&#xff0c;可以实现更广泛的应用。 MiniCPM3-4B 支持函数调用和代码解释器。 有关使用指南&#xff0c;请参阅高级功能。 MiniCPM3-4B 具有 32k …

微擎忘记后台登录用户名和密码怎么办?解决方法

微擎忘记后台登录名和登录密码是很常见的&#xff0c;服务器百科网fwqbk.com告诉你找回后台登录用户名和密码的方法&#xff1a; 一&#xff1a;找回微擎后台用户名 &#xff08;如果只是忘记了后台登录密码&#xff0c;请忽略此步骤&#xff0c;跳转到第二步&#xff09; 通…

博客摘录「 深度学习 | 编码器-解码器网络、seq2seq模型、束搜索算法」2024年9月7日

老师在课上是这样引入的&#xff1a; Sequence to Sequence Learning&#xff1a;两个循环神经网络组成。 红色部分和绿色部分都是RNN。 预测任务就是从一个序列到另一个序列。 第一个序列称之为原序列&#xff0c;第二个序列称为目标序列。两者…

【Windows】解决新版 Edge 浏览器开机自启问题(简单有效)

文章目录 1.前言2.查找资料3.查找方法4.解决办法 参考文章&#xff1a; 解决新版 Edge 浏览器开机自启问题&#xff08;简单有效&#xff09; Edge开机启动如何关闭 1.前言 电脑开机后edge浏览器开机自启动&#xff0c;并且在任务管理器–启动项内可看到edge浏览器&#xff0…

【Python篇】PyQt5 超详细教程——由入门到精通(中篇一)

文章目录 PyQt5入门级超详细教程前言第4部分&#xff1a;事件处理与信号槽机制4.1 什么是信号与槽&#xff1f;4.2 信号与槽的基本用法4.3 信号与槽的基础示例代码详解&#xff1a; 4.4 处理不同的信号代码详解&#xff1a; 4.5 自定义信号与槽代码详解&#xff1a; 4.6 信号槽…

如何部署Vue+Springboot项目

很多同学在项目上线的部署遇到困难&#xff0c;不懂得怎么部署项目&#xff0c;本文将会带大家手把手从前端部署、java部署来教会大家。 如果项目涉及到了docker相关中间件的环境配置&#xff0c;请参看&#xff1a;https://blog.csdn.net/weixin_73195042/article/details/13…

vue3 为组件的 emits 标注类型,defineEmits基于类型的定义的简单理解

1&#xff09;在 <script setup> 中&#xff0c;emit 函数的类型标注也可以通过运行时声明或是类型声明进行。 2&#xff09;基于类型的&#xff1a; const emit defineEmits<{ (e: change, id: number): void (e: update, value: string): void }>() 说明&#x…

STM32 PWM 详解(基于 STM32F429 HAL 库)

目录 前言 一、PWM 简介 二、STM32F429 的 PWM 功能 1.定时器资源 2.PWM 模式 3.PWM原理图 三、使用 HAL 库配置 STM32F429 的 PWM 1.开启时钟 2.配置定时器 3.配置通道 4.启动定时器 5.PWM 占空比的调节 四、应用实例 五、总结 前言 在嵌入式系统开发中&#…

Python的图像算术与逻辑运算详解

一.图像加法运算 图像加法运算主要有两种方法。第一种是调用Numpy库实现&#xff0c;目标图像像素为两张图像的像素之和&#xff1b;第二种是通过OpenCV调用add()函数实现。第二种方法的函数原型如下&#xff1a; dst add(src1, src2[, dst[, mask[, dtype]]]) – src1表示第…

JavaScript使用地理位置 API

前言 在JavaScript中&#xff0c;Geolocation API 是一种用于访问用户地理位置的接口。这个API允许网页应用程序获取用户的位置并提供基于位置的服务。 if (navigator.geolocation)navigator.geolocation.getCurrentPosition(function () {},function () {});这个函数中需要传…

VMware Workstation v17.6 中文注册精简版

VMware Workstation Pro 是一款功能强大的桌面虚拟化软件&#xff0c;它允许用户在单一的物理机器上同时运行多个操作系统。无论是在 Windows 或 Linux 主机上&#xff0c;您都可以轻松创建和运行各种虚拟机&#xff0c;包括 Windows、Linux 以及 BSD。 全新升级&#xff0c;更…

【debug】nvidia-smi:Failed to initialize NVML: Unknown Error

今天用服务器时又突然报错cuda不可用&#xff0c;输入nvidia-smi检查&#xff0c;报错如题。 根据网上搜的原因&#xff0c;可能是因为系统内核自动升级导致与驱动版本不匹配&#xff0c;尝试重启&#xff1a;reboot&#xff0c;报错&#xff1a; 尝试 exit 退出容器再进入&am…

android framework工程师遇到成长瓶颈迷茫怎么办?千里马经验分享

背景 近来有一些framework老司机粉丝朋友发来了一些framework工作中的一些疑问&#xff0c;具体描述如下&#xff1a; 这个同学遇到的问题&#xff0c;其实就是大部分framework开发者工作比较久后遇到的一个上升瓶颈问题。 具体总结有以下几个瓶颈问题 1、framework属于系…

Qt qrc机制

文章目录 0. 前言1. qrc机制2. qrc使用 0. 前言 要设置窗口图标&#xff0c;就需要有图片及其图片所在路径&#xff0c;在本机上可能没什么问题&#xff0c;但是换了一个机器&#xff0c;路径可能不一致或者图片丢失&#xff0c;这就导致图片显示不出来。 Qt引入qrc机制&…

基于springboot+vue实现的农家乐管理系统

基于springbootvue实现的山庄农家乐管理系统前后端分离项目&#xff08;文末查看源码lw&#xff09;4-10 系统角色&#xff1a; 管理员、用户 主要功能&#xff1a; &#xff08;1&#xff09;用户关键功能包含用户注册登陆、个人信息修改、首页、农家乐、美食信息、民宿信息…