第二十七部分 ControlNet
27.1 基本原理
ControlNet是一个强大的扩展工具,用于增强Stable Diffusion模型在图像生成任务中的控制能力。通过引入控制模型和预处理器,ControlNet可以在扩散过程中保持原始图像结构的同时,进行更精确的图像生成。
预处理器与模型的架构
预处理器:预处理器负责从原始图像中提取有用的信息。这些信息可以是边缘、深度图、姿势等。预处理器的输出作为控制模型的输入,为图像生成提供参考。
控制模型:控制模型将预处理器的输出与扩散模型结合起来。它们在生成过程中引导扩散模型,使生成的图像既符合输入提示,又保留原始图像的特征。
关键概念
控制:通过预处理器和控制模型,ControlNet能够在生成图像时保持对原始图像结构的控制,生成更符合预期的图像。
预处理器:预处理器提取原始图像中的关键信息,如边缘、深度等,为控制模型提供参考。
控制模型:控制模型结合预处理器输出和扩散模型,确保生成图像的质量和一致性。
通过理解这些基本原理,用户可以更好地利用ControlNet在图像生成任务中的强大功能,实现更精确和高质量的图像生成。
27.2 安装和基本使用
ControlNet文件夹位于Stable Diffusion WebUI的根目录下的Extension文件夹内。

下载地址:
https://github.com/Mikubill/sd-webui-controlnet
你可以直接下载后解压缩到Extension文件夹内,也可以通过我们的管理器进行安装和更新

安装完controlnet的插件后,我们还需要下载其相应的模型。
下载地址:
https://huggingface.co/lllyasviel/ControlNet-v1-1/tree/main
每个controlnet模型对应的pth和yaml文件均需要下载下来。

下载的controlnet模型放在根目录下的extensionssd-webui-controlnetmodels文件夹中。

然后我们在页面中ControlNet模块中刷新便能看到和加载模型了。

然后我们可以上传一张图片,以便它读取到我们图片中的特定信息。

如果我们要读取图片中的人物姿势,可以在预处理器中选择openpose相关的预处理器,我这里选择最基本的openpose,然后在右侧的模型中选择与这个预处理器匹配的模型,然后勾选”启用”。

然后利用我们熟悉的提示词对话框,输入我们希望生成的内容的提示词,便可以生成出特定姿势的图片了。
示例:
正向提示词:
best quality,ultra-detailed,masterpiece,hires,8k,raw photo,(photorealistic:1.4),1girl,Jeans,outdoor,full body,sunglasses,
反向提示词:
NSFW, (worst quality:2), (low quality:2), (normal quality:2), lowres,normal quality,((monochrome)), ((grayscale)), skin spots, acnes,skin blemishes, age spot, (ugly:1.331), (duplicate:1.331),(morbid:1.21),(mutilated:1.21), (tranny:1.331), mutated hands,(poorly drawn hands:1.5), blurry, (bad anatomy:1.21), (badproportions:1.331), extra limbs, (disfigured:1.331), (missingarms:1.331),(extra legs:1.331), (fused fingers:1.61051),(too many fingers:1.61051), (unclear eyes:1.331), lowers, bad hands,missing fingers, extra digit,bad hands, missing fingers, (((extraarms and legs)))
当然你也可以勾选高分辨率修复之类的选项,图片尺寸比例尽量接近原图,便能生成出特定姿势的图片了。

你也可以反复生成,无论画面的其他元素怎么变化,人物的姿势永远是不会变的。

我们也可以结合高清修复、局部重绘、LoRA等其他技术手段来结合生成图片。比如我使用第二十部分中D.Va的提示词基础上加载D.Va的LoRA模型来生成。
AIGC所有方向的学习路线思维导图
这里为大家提供了总的路线图。它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。如果下面这个学习路线能帮助大家将AI利用到自身工作上去,那么我的使命也就完成了: 
AIGC工具库
AIGC工具库是一个利用人工智能技术来生成应用程序的代码和内容的工具集合,通过使用AIGC工具库,能更加快速,准确的辅助我们学习AIGC 
有需要的朋友,可以点击下方卡片免费领取!
精品AIGC学习书籍手册
书籍阅读永不过时,阅读AIGC经典书籍可以帮助读者提高技术水平,开拓视野,掌握核心技术,提高解决问题的能力,同时也可以借鉴他人的经验,结合自身案例融会贯通。

AI绘画视频合集
我们在学习的时候,往往书籍源码难以理解,阅读困难,这时候视频教程教程是就很适合了,生动形象加上案例实战,科学有趣才能更方便的学习下去。

这份完整版的学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】

正向提示词:
(masterpiece:1.2),best quality,masterpiece,highres,original,extremely detailed wallpaper,perfect lighting,(extremely detailed CG:1.2),drawing,paintbrush,1girl,d.va (overwatch),solo,whisker markings,bodysuit,brown hair,long hair,breasts,facial mark,brown eyes,looking at viewer,smile,skin tight,headphones,medium breasts,covered navel,blue bodysuit,animal print,bangs,ribbed bodysuit,cowboy shot,pilot suit,lips,gradient background,facepaint,gradient,closed mouth,
反向提示词:
NSFW, (worst quality:2), (low quality:2), (normal quality:2), lowres,normal quality,((monochrome)), ((grayscale)), skin spots, acnes,skin blemishes, age spot, (ugly:1.331), (duplicate:1.331),(morbid:1.21),(mutilated:1.21), (tranny:1.331), mutated hands,(poorly drawn hands:1.5), blurry, (bad anatomy:1.21), (badproportions:1.331), extra limbs, (disfigured:1.331), (missingarms:1.331),(extra legs:1.331), (fused fingers:1.61051),(too many fingers:1.61051), (unclear eyes:1.331), lowers, bad hands,missing fingers, extra digit,bad hands, missing fingers, (((extraarms and legs)))
点击生成,我们便可以使人物摆出我们需要的姿势了。

同样,我们也可以在图生图中使用ControlNet。直接在图生图中输入你需要参考的图片。

然后勾选”启用”ControlNet,同样也可以参考原图的姿势根据我们的提示词为我们生成需要的图片。

27.3 参数解析

控制权重:这个参数控制ControlNet在生成图像时的影响力。权重越高,ControlNet对生成图像的影响越大。可以根据需要调整这个参数,以找到最佳的效果。
引导介入时机:控制ControlNet在生成过程中介入的时间点。这个值越高,ControlNet介入得越晚。
引导终止时机:控制ControlNet在生成过程中停止引导的时间点。这个值越高,ControlNet持续引导的时间越长。
控制模式:定义ControlNet的工作方式,有三个选项。
1.**均衡:**在提示词和ControlNet之间取得平衡。
2.更偏向提示词:生成图像时更注重提示词的内容。
3.更偏向 ControlNet:生成图像时更注重 ControlNet 的内容。
缩放模式:定义输入图像如何缩放以适应生成过程,有三个选项。
1.仅调整大小:不改变图像的长宽比例,仅调整图像的大小。
2.裁剪后缩放:先裁剪图像再缩放,以适应生成过程。
3.缩放后填充空白:先缩放图像再填充空白,以保持图像的长宽比例。
批量选项:定义在批量处理图像时ControlNet的工作方式,有两个选项。
1.所有图像的所有ControlNet单元处于同一个批次:所有图像的所有ControlNet单元一次处理。
2.每张图像的每个ControlNet单元各处于一个批次:每张图像的每个ControlNet单元分别处理。
风格对齐:这个选项用于在批次中对齐图像风格,使生成的图像具有一致的风格。

不同的ControlNet预处理也会有些不同的参数调节。它们可以决定预处理器如何从图片中提取信息并生成信息图。默认参数可以应付大多数场景。
大家完全可以通过字面意思来理解。其中Resolution为预处理图像的分辨率,一般来说预处理图像并不需要太高的分辨率,以便节约资源提高处理速度。但如果你对精度有一定要求的话,可以尝试将参数调高以获得更好的效果。

使用ControlNet会额外占用一定的显存,如果你的显存不够大,可以尝试勾选”低显存模式”
勾选”完美像素模式”可以自动计算预处理器生成图片的最佳分辨率,避免因分辨率问题导致的图像模糊变形等问题。勾选这个选项后,你便不需要再手动设置预处理分辨率了。
允许预览:勾选此选项可以在生成图像的过程中实时预览生成效果,帮助用户及时调整参数以达到最佳效果。在开启”允许预览”的时候,点击预处理器右侧的爆炸按钮,便会为我们生成预处理结果的骨骼图。

Effective Region Mask:勾选此选项可以启用区域掩码功能,用于控制图像生成的特定区域。这对于需要在特定区域内进行细致控制的任务非常有用。
我们通过ControlNet生成图片的时候,Stable Diffusion还会同时生成一张骨骼图,这便是AI能通过ControlNet精准控制人物姿势的原因所在。我们可以将常用的骨骼图也保存下来。

当我们直接加载骨骼图时,我们就不需要再选择预处理器了。

27.4 ControlNet模型详解之Openpose
什么是 OpenPose?
OpenPose 是一种用于人体姿态估计的深度学习模型。它可以从图像或视频中检测出人体的关节点和肢体姿态。OpenPose 广泛应用于动作捕捉、人体行为分析和增强现实等领域。
通过上一节的学习,我们其实已经掌握了Openpose的基本用法。在这一节中,让我们来深入学习更多的Openpose的用法。
当我们使用上一节中提到的openpose最基本的预处理时,生成的骨骼图也是最基本的四肢和头部。

但如果我们需要对生成图片的手部进行精细刻画,那我们可以选择”openpose_hand”这个预处理器。

可以看到,生成人物的手指根根分明,没有错误。

我们也可以用”openpose_face”这个预处理器来控制人物的表情。

生成的图片也是非常准确的。

如果你的图像只有脸部,你也可以在预处理中选择”openpose_faceonly”

值得注意的是,由于很多动漫的画风需要,人物的脸部和身材比例并不是标准的,所以用动漫人物的照片来预处理获得真人的照片,有时候会出现奇怪比例的现象。

预处理中的”openpose_full”则可以完全刻画脸部、姿势、手指的全部信息。

生成出来的人物动作、表情都是和参考图几乎是一样的。

27.5 ControlNet模型详解之Depth
什么是 Depth 模型?
Depth 模型是 ControlNet 提供的一种控制模型,它通过分析输入图像的深度信息来生成具有深度感的图像。深度信息通常表示图像中每个像素与摄像机之间的距离。这种信息对于生成具有三维效果和立体感的图像非常有用。
Depth 模型的工作原理
1.深度图提取:预处理器会从输入图像中提取深度图。这可以通过深度传感器、结构光扫描仪或者通过算法从二维图像中估计深度来实现。
2.深度信息处理:提取的深度图被传递给 Depth 控制模型。该模型使用这些深度信息来指导图像生成过程。
3.图像生成:在图像生成过程中,Depth 模型利用深度信息调整像素的位置和颜色,以生成具有真实深度效果的图像。这使得生成的图像看起来更加立体和真实。
示例:
选择一张有纵深的图片,选择depth相关的预处理器,点击爆炸按钮,可以看到生成了一张深度图,越是接近黑色的地方越远,越是接近白色的地方越近。

选择好depth相关的模型后,搭配提示词,你可以把原图中的教堂场景生成体育场、游泳馆等任意场景。


在Stable Diffusion的ControlNet扩展中,depth模型的预处理器有五种,它们分别是:
1.depth_zoe (Zoe 深度图估算)
概述:Zoe Depth Estimation使用Zoe模型来估算图像的深度。
特点:适用于一般图像的深度估算,能够产生较为准确的深度图。
使用场景:适合需要生成较为真实和细致的深度图的应用。
2.depth_leres++ (LeReS 深度图估算++)
概述:这是LeReS模型的增强版本,提供更高精度的深度估算。
特点:比基础的LeReS模型提供更高的深度估算精度,能够捕捉更多的细节。
使用场景:适用于需要高精度深度图的场景,如详细的3D重建和虚拟现实应用。
3.depth_leres (LeReS 深度图估算)
概述:使用LeReS模型进行深度估算。
特点:提供准确的深度估算,适用于大多数图像处理任务。
使用场景:适用于一般深度图估算需求,如景深效果、3D效果生成等。
4.depth_hand_refiner (深度手部细化)
概述:专门针对手部区域进行深度估算和细化处理。
特点:能够处理和细化手部区域的深度图,生成更精确的手部深度细节。
使用场景:适用于需要对手部进行精细处理的图像,如手势识别、手部动画等。
5.depth_anything
概述:通用深度估算模型,可以处理各种类型的图像。
特点:灵活性强,适用于多种图像类型的深度估算任务。
使用场景:适用于广泛的应用场景,适合处理多样化的图像数据。
这些预处理器各有特色和应用场景,可以根据具体需求选择合适的预处理器来生成所需的深度图,从而更好地进行图像生成和处理任务。
depth也可以用于人物,比如有前后远近多个人物,或者肢体有交叠需要区分识别的画面场景。

当我们遇到类似双手交叉的场景时,使用openpose很容易出现错误的画面。

但使用depth的时候就不容易出错了。但是使用depth来生成的人物形象会比较有局限性,并不利于AI的自由发挥。你可以通过适当降低权重来弥补这个缺陷。

27.6 ControlNet模型详解之Canny
Stable Diffusion的ControlNet扩展中,Canny模型是一种重要的图像预处理器,主要用于边缘检测。Canny边缘检测器通过识别图像中的边缘,生成二值化的边缘图。这对于在生成图像过程中提供清晰的结构信息非常有用。
Canny边缘检测模型
概述:
Canny边缘检测算法由John F. Canny在1986年开发,是一种多级边缘检测算法,旨在识别图像中的边缘,同时减少噪声影响。其核心思想是在平滑图像后,通过梯度计算和非最大值抑制来检测边缘,最后通过双阈值和边缘跟踪来获得清晰的边缘图。
特点:
1.多级处理:通过平滑滤波器减少图像噪声,然后计算梯度以找到边缘强度。
2.非最大值抑制:通过保留梯度幅度局部最大值来细化边缘。
3.双阈值:使用两个阈值(高阈值和低阈值)来检测强边缘和弱边缘,并通过边缘连接保留真正的边缘。
示例:
在ControlNet中加载一张图片,预处理器和模型均选择”Canny”,点击爆炸按钮,可以看到生成了线条图。

可以通过调整提示词来生成新的图片。

Canny可以被应用在所有需要还原物体外形特征的场景中,可以识别包括动物、物体、建筑等各类物体。Canny还能让你图像中的文字类内容得以保留。

在使用ControlNet中的Canny预处理器时,有两个主要参数需要调节:低阈值(Low Threshold)和高阈值(High Threshold)。如果有些线条没有在线条图中被识别出来,我们可以调整Threshold参数来获得更好的识别效果。
使用建议
在调节低阈值和高阈值时,可以先将低阈值设为图像梯度的较小值,高阈值设为图像梯度的较大值,然后逐步微调,直到获得满意的边缘检测效果。
可以多次尝试不同的阈值组合,观察生成的效果,选择最佳参数。
这里我们就不得不提一个重要功能:线稿上色,我们可以通过Stable Diffusion将一张线稿图快速生成上色后的成图。由于很多线稿图都是白底黑线,所以我们需要根据提示选择”invert”作为预处理器,模型推荐使用”lineart”。

借助线稿上色,我们可以实现很多应用级的创作。


27.7 ControlNet模型详解之SoftEdge_HED
什么是SoftEdge_HED
SoftEdge_HED(Holistically-nested Edge Detection)是一种用于边缘检测的深度学习模型,它能够在输入图像中检测出连续且细致的边缘。HED模型通过深度卷积神经网络(CNN)来学习图像中的边缘特征,并生成高质量的边缘检测图。SoftEdge_HED在边缘检测任务中表现出色,广泛应用于图像分割、图像增强、图像修复等领域。
SoftEdge_HED模型的特点
精确的边缘检测:SoftEdge_HED模型能够捕捉到图像中的细微边缘,并生成精确的边缘检测图。
多尺度特征融合:通过使用多尺度的卷积层,SoftEdge_HED能够融合不同尺度的特征,从而提升边缘检测的准确性和完整性。
端到端训练:SoftEdge_HED模型可以通过端到端的方式进行训练,使其在训练过程中可以自动优化所有参数。
SoftEdge_HED模型可以用来生成边缘检测图,并将其作为条件输入,用于指导生成高质量的图像。使用SoftEdge_HED模型可以帮助生成更加细腻和准确的图像,特别是在需要精确控制图像细节的应用场景中。
相于Canny,SoftEdge_HED对边缘的约束相对松散一些,Canny更关注物体的内部细节,而SoftEdge_HED则仅仅将大的轮廓线条作保留,给AI自由创作提供了更大的空间。我们对比同一组输入图片和提示词用Canny和SoftEdge_HED所生成的图片的区别,可以明显的看到通过Canny生成的图片更注重内部细节的刻画,而SoftEdge则侧重主要的轮廓,包括路面的花纹细节也是如此。


SoftEdge_HED的其他相关预处理器变体都基于深度学习的边缘检测方法这个原理。
SoftEdge_HED
描述: 使用标准HED算法进行边缘检测。
优点: 精度高,能够很好地保留图像中的细节和边缘信息。
适用场景: 适用于需要精细边缘检测的图像处理任务,如图像分割、对象检测等。
SoftEdge_HEDSafe
描述: 精简保守HED算法进行边缘检测,通常会更加平滑和稳定。
优点: 在保留细节的同时,减少了过度检测的情况,避免了检测过多不必要的边缘。
适用场景: 适用于需要平衡精度和稳定性的任务,如人像处理、风景图像处理等。
SoftEdge_PiDiNetSafe
描述: 使用PiDiNet(一种高效边缘检测网络)进行边缘检测,并进行精简保守处理。
优点: PiDiNet在保持高精度的同时,更加高效,适合实时处理应用。
适用场景: 适用于对处理速度有要求,同时需要高精度边缘检测的任务。
softedge_teed
描述: 高效边缘检测方法。
优点: 在保持一定精度的同时,极大地提升了处理速度。
适用场景: 适用于需要快速处理的应用,如视频处理、实时图像分析等。
这些预处理器变体在实际应用中各有其优缺点,选择合适的预处理器取决于具体的应用需求和场景。比如在需要高精度且细节丰富的图像处理中,可以选择SoftEdge_HED或SoftEdge_HEDSafe;而在需要实时处理的应用中,可以选择SoftEdge_PiDiNetSafe或softedge_teed。
27.7 ControlNet模型详解之Scribble
Scribble模型的概述和原理
Scribble模型用于将简单的线条和涂鸦转换为更复杂和详细的图像。通过这种方式,用户可以快速绘制出草图,然后使用Scribble模型将这些草图转化为高质量的图像。Scribble模型通过接受用户输入的简单线条图或者涂鸦作为条件,结合扩散模型生成的能力,将这些简单的输入转换为细节丰富的图像。
Scribble比SoftEdge_HED更自由和灵活。我们可以通过提示词来生成和原图一样的轮船,也可以生成飞船。


我们甚至可以通过随意的涂鸦和手绘,通过提示词让Scribble来生成图片。

Scribble预处理器的区别
1. Scribble_xdog (涂鸦 – 强化边缘)
Scribble_xdog是一种预处理器,旨在提取图像中的边缘信息,并以增强的形式呈现。XDoG(eXtended Difference of Gaussians)是一种用于边缘检测的技术,能够捕捉图像中的细微边缘并加以强化,使得边缘更加明显和突出。这种预处理器非常适合用于需要清晰边缘的图像生成任务。
2. Scribble_hed (涂鸦 – 整体敷衍)
Scribble_hed 是基于HED(Holistically-Nested Edge Detection)算法的预处理器。HED是一种深度学习方法,用于检测图像中的边缘。与传统的边缘检测方法相比,HED能够更全面地捕捉图像中的所有边缘信息,并提供更高的检测精度。Scribble_hed预处理器将图像的边缘信息进行整合和简化,适用于需要整体边缘信息的图像生成任务。
3. Scribble_pidinet (涂鸦 – 像素差分)
Scribble_pidinet预处理器采用了PiDiNet(Pixel Difference Network)算法。这是一种基于像素级别差分的边缘检测方法,能够捕捉图像中的细微变化,并以像素为单位提取边缘信息。PiDiNet可以生成精细且准确的边缘图,使其非常适合于需要高精度边缘信息的图像生成任务。
除了这五种主要的ControlNet模型,还有很多有用的ControlNet模型,比如用于局部重绘的inPaint模型,用于放大工作流中增加细节的Tile模型,用于固定特征的Reference Only模型等等,随着技术的不断迭代更新,还会有更多的ControlNet模型涌现出来,我们需要在不断的实践和学习中才能充分的掌握它。但我们只要参透其本质,熟悉预处理器和模型的关系,你就能很快掌握各种ControlNet模型使用方法,并且具备能够自由去探索新的ControlNet模型的能力。
第二十八部分 Multi-ControlNet
28.1 Multi-ControlNet基本应用
什么是Multi-ControlNet
Multi-ControlNet允许你在同一个生成过程中使用多个ControlNet模型,以便在图像生成时对不同的图像特征进行精细控制。通过组合多个ControlNet,你可以更好地控制图像的生成细节,实现复杂的效果。
28.2 如何开启Multi-ControlNet
在Stable Diffusion WebUI的设置中,找到左侧边栏中的ControlNet,然后调整菜单中的Multi-ControlNet的数量即可,记得保存设置和重新加载UI。

然后我们便能在ControlNet的主界面中看到多个ControlNet的单元。

28.3 Multi-ControlNet示例
Openpose+Depth
Openpose可以识别姿势和手指,但它在双手交叉的情况下无法判断哪个手在前、哪个手在后,而Depth可以可以通过深度差异来识别。
我们先启用ControlNet单元0,通过Openpose_full预处理器来识别人物的姿势,由于姿势的优先级最高的,所以权重设置为1。

然后启用ControlNet单元1,通过depth_leres++预处理器来识别人物各部位的前后,这个的优先级较低,所以权重设置为0.6

当然我们也不能忘记输入符合这幅画内容的提示词:1girl,sitting,hand covering face,hand up,

Depth+Canny
我们也可以利用Canny的边缘检测来帮助Depth补充那些深度阴影中的细节。

或者也可以利用Openpose+Scribble_hed,让Openpose协助Scribble_hed帮助图片既有完美的轮廓又能保持姿势的准确。

28.4 基本组合原则
值得注意的是,并不是任意模型的组合都能发挥出1+1>2的效果,必须是相互能进行互补的模型才能真正的发挥更大的作用,Multi-ControlNet对显存的要求也会更高,当我们启用多个ControlNet单元时,一定要知道自己的显卡显存能不能满足要求,必要时请打开”低显存模式”。
互补性:选择不同的ControlNet模型时,确保它们在功能上是互补的。例如,可以组合使用Canny边缘检测和Depth深度估算,以同时控制图像的轮廓和深度。
权重调整:适当调整每个ControlNet单元的权重,使得生成结果更符合预期。权重过高或过低都会影响生成效果的平衡。
通过多重ControlNet的组合使用,可以实现更复杂、更精细的图像生成效果。
这份完整版的学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】

文章来源于互联网:Stable Diffusion WebUI从入门到精通(十)
5bei.cn大模型教程网










