ControlNet 从入门到精通,手把手教你精准控制画面,让灵感完美落地
发布时间:2025-06-25 20:40 浏览量:1
大家好!欢迎来到 Olares AIGC 官方系列课程。
在上期课程中,我们一同学习了如何应用 LoRA 模型来精准控制画面的风格与角色。
上期专栏回顾:
今天,我们将掌握一个在 AI 绘画领域中至关重要的技术——ControlNet。
本期课程将作为你深入理解和应用 ControlNet 的全面指南,我们将一同:
理解 ControlNet 的核心工作原理,明白它如何为扩散模型添加“骨架”,实现内容与结构的精确分离控制。
掌握 ControlNet 插件及相关模型的安装与管理方法,特别是在 Olares 环境下的配置。
精通 SD WebUI 中 ControlNet 插件的核心参数,理解其对生成结果的影响。
通过多个实战案例,学习单 ControlNet、多 ControlNet 叠加以及批量处理等高级应用技巧。
掌握 ControlNet,意味着你将拥有前所未有的图像控制能力,让 AI 绘画从充满随机性的生成过程转变为可预测、可设计的强大生产力工具。
从定义上来说,ControlNet 是一种通过添加额外条件来控制扩散模型的神经网络结构。它通过学习“控制图”(如骨骼姿势图、边缘线条图、深度图等)与最终生成图像之间的关系,训练出针对不同控制类型的模型。
在标准的图像生成流程中,我们主要通过提示词(Prompt)来输入“内容”指令。而 ControlNet 则在此基础上,引入了一个并行的、基于视觉参考的“结构”控制信号。这个结构信号并不会简单地与提示词信号混合,而是在扩散模型的不同层面与之协同工作,最终引导模型生成既符合提示词内容描述,又在空间布局、人物姿势、物体轮廓等方面受到精准控制的图像。
不同的 ControlNet 模型支持从不同维度对图像生成进行控制,主要可以分为以下几类:
姿势控制
代表模型:OpenPose
功能:识别参考图像中人物的身体、手部和面部的关键点,并生成一个骨骼姿势图。使用它,我们可以精确控制生成图像中单个或多个人物的姿势,非常适合需要特定动作、舞蹈造型或多人复杂互动的场景。
线条/轮廓控制
代表模型:Canny、Lineart、SoftEdge、Scribble
功能:专注于从参考图中提取各种类型的线条信息。Canny 提取最清晰的边缘,Lineart 提取艺术风格的线稿,SoftEdge 提取柔和的边缘,而Scribble 则可以响应简单的手绘涂鸦。
深度/ 3D 空间控制
代表模型:Depth、Normal Map
功能:Depth 模型分析图像的深度信息(物体远近),Normal Map 则分析物体表面的朝向和凹凸。这些模型能帮助我们保持或重建原始场景的空间布局、物体的立体感和光影关系。
内容/风格参考与重组
代表模型:Shuffle、Reference-only、IP-Adapter
功能:允许从一张或多张参考图中学习其视觉特征(如整体风格、色彩搭配、物体细节等),并将其灵活地应用到新图像中,比传统的图生图提供了更灵活的参考方式。
图像修复与增强
代表模型:Tile、Inpaint
功能:Tile 模型主要用于图像的细节增强和超分辨率。Inpaint 则专注于对图像的特定区域进行可控的修复和内容重绘。
在 Olares 系统预置的 SD WebUI 中,ControlNet 插件通常已经预装好了,可以直接使用。
如果你的环境中没有,可以参考我们第五期课程中关于插件安装的部分进行安装。
模型下载途径
Olares 系统通常会内置一些常用的 ControlNet 模型。
如果需要使用的模型不在内置列表中,可以自行下载。
ControlNet 的开发者(lllyasviel) 在 HuggingFace 上分享了官方训练的 ControlNet 模型。
在 ControlNet 插件的 GitHub 页面或 Civitai 等社区,可以找到更多由社区或第三方贡献的模型。
https://civitai.com/search/models?sortBy=models_v9&query=ControlNet
模型存放路径
在 Olares 文件系统中,ControlNet 模型的标准存放路径为:
将下载好的模型文件(.pth 或 .safetensors 格式)上传到此目录,然后在 WebUI 的 ControlNet 模型列表中点击刷新即可。我们通常不直接将原始图像作为 ControlNet 模型的输入,而是先通过预处理器对原始图像进行处理,提取出特定的“控制图”(如线条图、深度图等)。
这些预处理器本身也是一些小型的 AI 模型。SD WebUI 会在你首次使用某个预处理器时尝试自动下载。
如果你希望提前手动下载管理,可以参考 ControlNet 插件官方文档中的模型列表。
下载后它们将存放到 ControlNet 插件目录下的对应子目录里。
在 SD WebUI 中,ControlNet 插件被安装并启用后,会在文生图和图生图的参数设置区域下方,出现一个可折叠的“ControlNet”面板。展开它,就是我们进行所有相关设置和操作的主要区域。
本部分将以 Canny 为例,结合操作过程,详细解析各项关键参数。
ControlNet 的功能通过独立的“控制单元”来实现,你可以同时启用多个单元以实现复合控制。
在每个单元内,其界面布局和基础操作如下:
图像输入区位于每个单元的最上方,是放置控制参考图的核心区域。
你可以通过点击或拖拽来上传单张图片,也可以通过填入路径来输入目录以进行批量处理。
快捷操作按钮是在图像输入区下方的四个小图标按钮,提供便捷操作。
新建画布:点击后会创建一个空白画布,可以配合“绘图”功能直接手绘控制图。
使用本地摄像头:激活电脑的摄像头,实时捕捉画面作为参考图。
镜像摄像头内容:水平翻转摄像头捕捉的画面。
应用源图像尺寸:一个非常实用的功能,点击后会将当前参考图的宽度和高度,一键应用到 WebUI 主界面的“宽度”和“高度”设置上,确保生成图像与参考图尺寸一致。
在图像输入区下方,有四个关键的复选框选项,它们决定了 ControlNet 单元的基础工作状态。
启用(Enable)
这是 ControlNet 的总开关。只有勾选此项,当前控制单元的所有设置才会在图像生成过程中生效。
低显存优化(Low VRAM)
此选项通过分阶段、分步推理并及时卸载不用的模型等方式,来降低显存的峰值占用,本质上是以处理时间换取显存空间。当你需要同时启用多个 ControlNet 单元,或者你的显卡显存较为紧张时,开启此选项可以有效避免因显存不足导致的错误。
要使此功能完全生效,通常还需要在 WebUI 的启动参数中添加 --lowvram 标志。在 Olares 系统中,具体操作流程如下: 1. 打开 Olares“控制面板”,在“浏览”或类似的工作负载组里找到sdwebuishare3. 在打开的 YAML 编辑器中,搜索webui.py,找到 WebUI 的启动命令部分。4. 在参数列表的最后,添加一项新的参数:
5. 点击“确认” ,系统将应用新的配置并重启 WebUI 容器组。等待重启完成后,低显存优化功能即可正常工作。
完美像素(Pixel Perfect)
这是一个智能适配功能,强烈建议保持勾选。
启用后,ControlNet 会根据你输入的参考图尺寸和主界面设置的目标分辨率,自动计算最佳的预处理和缩放参数,确保“控制图”与最终生成图像的特征能够像素级精确对齐,有效避免因尺寸不匹配导致的构图拉伸或错位问题。
允许预览(Allow Preview)
建议始终开启此选项。
勾选后,当你运行预处理器时,图像输入区旁边会显示预处理器生成的“控制图”预览(如 Canny 的线条图、OpenPose 的骨骼图等)。这能让你在正式生成图像前,直观地判断预处理提取的结构信息是否准确、符合预期。
这个下拉框本质上是一个“需求分类器”或筛选器。默认是“全部”,此时下方的“预处理器”和“模型”下拉框会显示所有可用的选项。但如果你选择了一个具体的类型,比如 Canny,那么“预处理器”和“模型”列表将自动筛选出仅与 Canny 相关的选项,极大地方便了选择。预处理器(Preprocessor)
用于从你上传的原始图像中提取出“控制图”。例如,选择 canny 预处理器,它会从你的参考图中提取出边缘线条。模型(Model)
接收预处理器生成的“控制图”,并将其作为条件来控制最终图像的生成。WebUI 会根据你当前在主界面加载的基础大模型(SD1.5 或 SDXL),自动在模型列表中选择与之匹配的 ControlNet 模型版本。
为了更清晰地理解各参数的作用,我们以 Canny 模型为例进行演示。
控制权重(Control Weight)
此参数控制 ControlNet 生成的“结构信号”在最终图像生成中的强度或影响力,范围通常是 02。权重越高,最终图像的构图和轮廓就越严格地遵循“控制图”;权重越低,模型则有更多自由发挥的空间。你需要根据创作需求来平衡结构的遵循性与内容的多样性。使用 XYZ 图表脚本是观察其效果的最佳方式。
1. 在“脚本”中选择“X/Y/Z plot”。
2. 设置 X 轴类型为 Control Weight。
3. 在 X 轴值中填入一系列权重值,例如 0-1(+0.1)(代表从 0 到 1,每隔 0.1 取一个值)。
4. 运行后,生成的网格图会清晰展示权重从低到高,图像结构逐渐向控制图靠拢的过程。通过对比可以发现,在此类场景下,权重为 0.6 左右时通常能获得较为均衡且美观的效果。
起始与结束控制步数 (Starting/Ending Control Step)
这两个参数分别定义了 ControlNet 在整个采样步数中的介入和退出的时间点。
默认情况下 ControlNet 在整个生成过程中都生效。但在某些特殊场景下,比如当你的“控制图”线条过于精细和明确时,全程强控制可能会让最终图像显得“死板”。此时,可以尝试仅在中间阶段施加控制(例如,起始步数 0.2,结束步数 0.8),让模型在生成初期和末期有更多的随机性和生动性。大部分情况下,保持默认即可。
预处理器阈值
当你选择某些预处理器时,面板下方还会出现其专属的参数。例如,对于 Canny 预处理器,会出现“Canny 低阈值”和“高阈值”两个滑块。
这两个阈值共同决定了从原始图像中提取边缘信息的详细程度。较低的阈值组合(如50150)会提取出非常详细和密集的边缘线条;较高的组合(如默认的 100200)则会提取更概括、更主要的轮廓。过于详细的线条会极大地限制模型的创作空间,适合用于线稿上色等需要高度保真的场景。
控制方式(Control Mode)
这是一个用于快速平衡 ControlNet 与提示词影响力的快捷选项。
它提供了三个预设模式:
平衡(Balanced):默认选项,在遵循提示词和遵循控制图之间取得平衡。
提示词优先(My prompt is more important):让生成结果更侧重于响应提示词的描述。
控制网络优先(ControlNet is more important):让生成结果更严格地遵循控制图的结构。
在实际使用中,调整这个模式往往比精细微调“控制权重”更简单直接。同样,可以使用 XYZ 图表脚本来直观对比这三种模式带来的效果差异。
可以保持构图,替换内容。
1. 上传一张具有清晰轮廓的参考图。
2. 在 ControlNet Unit 0 中,选择控制类型为 Cannycanny3. 在主界面设置生成参数,例如提示词写a girl,设置好负面提示词、高清修复和图片尺寸。为了对比,先将生成批次设为 2,运行。4. 观察结果,生成的两张动漫风格图像在姿态和轮廓上与参考图非常神似,但内容已变为提示词所描述的女孩。这展示了 ControlNet 在精准轮廓控制下,为内容创作保留了充分空间。
5. 为了测试内容灵活性,将提示词改为 a wizard,并固定种子(如 7)以便后续对比,再次运行。结果同样优秀,证明了在构图不变的前提下,可以随心所欲地改变主题。✍️ 深度控制(Depth)
能在保持原始场景空间结构和物体布局的同时,对场景的风格、光照或材质进行修改,非常适合室内设计、建筑可视化或者需要保持复杂场景结构不变的创作。
1. 上传一张室内设计或建筑场景图。
2. 控制类型选 Depth,预处理器可选 depth_midas或 depth_zoe,运行生成深度图。3. 选择一个表现均衡的基础大模型,如 DreamShaper4. 提示词写入新的风格。
5.设 置好尺寸(如原图一半的 540×720),保持高清修复开启,运行。结果将在保留原有家具布局和空间透视的同时,呈现出全新的未来主义风格。
✍️姿势控制(OpenPose)
通过识别参考图像中人体的关键骨骼点(包括身体、手部和面部),或者直接使用我们提供的骨骼姿势图,来确保生成的图像中的人物与该姿势一致。
1. 上传一张处理好的标准 OpenPose 骨骼图(或上传人物照片,使用 openpose2. 控制类型选 OpenPose,如果直接上传骨骼图,预处理器选择 。3. 选择擅长人物生成的大模型,如 majic。
4. 输入人物描述提示词,如 a girl,white dress。
5. 点击“应用源图像尺寸”按钮,确保生成尺寸与骨骼图比例一致。
运行后,生成的人物将严格按照提供的骨骼图摆出相同的姿势。
强烈建议开启 ADetailer 插件修复全身图中可能崩坏的脸部。
✍️风格迁移(IP-Adapter)
从参考图中学习其视觉特征(如整体风格、色彩搭配、物体细节等),将其风格或元素特征迁移到新的构图上。
1. 控制类型选择 IP-Adapter。2. 上传一张风格鲜明的艺术作品(如梵高的《星空》)作为参考。
3. 提示词可以相对简单,如 a girl,因为主要风格由参考图提供。
4. 设置合适的尺寸(如 512×512)并运行。
生成的图像中,人物内容由提示词决定,但其整体风格、色彩、笔触等都将明显受到参考图的影响。
使用多 ControlNet
我们可以用一个 ControlNet 控制风格,用一个 ControlNet 控制结构。让两个 ControlNet 从不同维度对生成的图片施加影响。
1. 在 Unit 0 中,启用 IP-Adapter,上传梵高的《星空》作为风格参考。
2. 在 Unit 1 中,启用 Depth,上传一张室内设计图作为结构参考。
3. 简化提示词,设置与结构参考图一致的尺寸,运行。
生成的结果将是一张有趣的图片:其整体结构和布局遵循室内设计图的深度信息,但画面的风格、色彩却充满了梵高《星空》的特点。
控制不同 ControlNet 施加的影响
启用多个 ControlNet 时,如果生成多张图,默认情况下批量生成(Batch Options)中的设置是“所有 ControlNet 单元对批次中的所有图像生效”(All ControlNet units for all images in a batch),这意味着如果你生成多张图每一张图都会同时受到所有已激活 ControlNet 单元的影响。
不过,这里还提供了另一种选项“每个 ControlNet 单元对应批次中的一张图像” (Each Controlnet unit for each image in a batch),这个选项允许你在一次批量生成多张图片时让每一张图片只应用一个 ControlNet 单元的控制。
我们实战示范一下操作,独立控制源生成。
1. 选择批处理模式为“每个 ControlNet 单元对应批次中的一张图像”。
2. 同时激活 Unit 0 (Canny)和 Unit 1(OpenPose),并分别为它们上传不同的参考图。
3. 将“每批数量”设为 2。
4. 输入简单的提示词如 a lady,并开启 ADetailer。运行后,会一次性得到两张图,一张遵循了 Canny 的线条,另一张遵循了 OpenPose 的姿势。
若在此基础上勾选“风格对齐”选项,再次运行,新生成的两张图将在保持各自独立结构控制的同时,在色调、光照、氛围等视觉风格上表现出更高的一致性。
1.在 Olares 文件管理器的指定输入目录中放入多张图片。
2. 在 SD WebUI 的 ControlNet 面板中,于“输入目录”字段填入该目录映射到容器内的路径。
3.设置好统一的 ControlNet(如 Depth)和生成参数。
4. 点击“生成”。WebUI 将对文件夹内所有图片进行批量处理。
结果有时不会在界面实时显示,需直接去输出目录查看。
本期课程,我们系统学习了 ControlNet 的基本原理、模型类型、参数配置,并实际体验了多种 ControlNet 的具体应用,以及多控叠加等高级技巧。
通过掌握 ControlNet,我们在进行 AI 图像创作时,就能够更准确地表达和实现自己的创作意图。
非常期待和大家一起继续进阶,我们下期见!
欢迎在评论区留言交流👇
可以观看这个视频,详细了解 Olares。
📝 Olares 论坛已上线,欢迎在这里分享和讨论 https://forum.olares.cn/
- 上一篇:浙江宣传丨志愿填报谁说了算
- 下一篇:第九十六夜—人间毒药