如果你像我一样,已经在一段时间的使用和学习的过程中,将Stable Diffusion了解透彻了,就不免发现Stable Diffusion在日常使用方面仍然具有一些明显的短板。

这里就需要用到Stable Diffusion的Webui下的一些其他的插件了,今天来说一下Control Net。

Control Net是什么?

因为Stable Diffusion是一个扩散模型,图像是基于扩散模型生成的。而目前的Stable Diffusion对于图片生成的主要的控制方式只有prompt这一种。

因此,当我们需要去刻画一些精细化场景、更具体的人物动作的时候,不免会因为Stable Diffusion的随机性与我们想要获得的结果出现偏差。

就此,Control Net诞生了,Control Net是一种用于控制Stable Diffusion模型的神经网络模型。Control Net可以与任何扩散模型一起使用。

我们已知的扩散模型生成的最基本的工作形势是图生图(TXT TO Image)。也就是使用文本提示词(Prompt)作为图像生成的条件。

Control Net的诞生为其添加了另一种条件。也就是说我们可以使用“Control Net+Prompt=图片”了。

Control Net的控制形式也具有很多种,具体形式会在后文中一一进行说明。

从WebUI中安装Control Net

WebUI默认是不存在任何扩展的,因此,如果我们要在WebUI中使用Control Net,则需要自行安装。

安装 ControlNet 扩展 (Windows/Mac)

  1. 导航到 “扩展” 页面。

2. 选择 从 URL 安装 选项卡。

3. 将以下 URL 放入 扩展存储库 字段的 URL 中。

https://github.com/Mikubill/sd-webui-controlnet

单击 安装 按钮。

5. 等待说明扩展已安装的确认消息。

6. 重新启动 AUTOMATIC1111。

7. 访问 ControlNet 模型 页面。

8. 下载所有模型文件(文件名以 结尾 .pth)。

(如果不想全部下载,可以暂时下载最常用的openposecanny模型。)

9. 将模型文件放入 ControlNet 扩展的模型目录中。

stable-diffusion-webuiextensionssd-webui-controlnetmodels

重新启动 AUTOMATIC1111 webui。

如果扩展安装成功,在txt2img选项卡中看到一个名为ControlNet的新可折叠部分。

从 Web UI 更新

更新 ControlNet 扩展的最简单方法是使用 AUTOMATIC1111 GUI。

  1. 转到“扩展”页面。
  2. “已安装”选项卡中,单击“检查更新”
  3. 等待确认消息。
  4. 完全关闭并重新启动 AUTOMATIC1111 Web-UI。

Stable Diffusion——了解Control Net

至此,你应该可以在WebUI的图生图、文生图的界面中可以看到ControlNet的选单,下面我们去了解一下ControlNet的菜单部分。

Control Net菜单及参数

Stable Diffusion——了解Control Net

1. 启用(Enable)

勾选此选项后,点击 “生成” 按钮时,ControlNet 才会生效。

2. 反色模式(Invert Input Color)

将图像颜色进行反转后应用。

3. RGB 转 BGR(RGB to BGR)

把颜色通道进行反转,在 NormalMap 模式可能会用到。

4. 低显存优化(Low VRAM)

低显存模式,如果你的显卡内存小于等于4GB,建议勾选此选项。

5. 无提示词的猜测模式(Guess Mode)

也就是盲盒模式,不需要任何正面与负面提示词,出图效果随机,很有可能产生意想不到的惊喜效果!

6. 预处理器(Preprocessor)

在此列表我们可选择需要的预处理器,每个 ControlNet 的预处理器都有不同的功能,后续将会详细介绍。

7. 模型(Model)

配套各预处理器需要的专属模型。该列表内的模型必须与预处理选项框内的名称选择一致,才能保证正确生成预期结果。如果预处理与模型不致其实也可以出图,但效果无法预料,且一般效果并不理想。

8. 权重(Weight)

权重,代表使用 ControlNet 生成图片时被应用的权重占比。

9. 引导介入时机(Guidance Start(T))

在理解此功能之前,我们应该先知道生成图片的 Sampling steps 采样步数功能,步数代表生成一张图片要刷新计算多少次,Guidance Start(T) 设置为 0 即代表开始时就介入,默认为 0,设置为 0.5 时即代表 ControlNet 从 50% 步数时开始介入计算。

10. 引导退出时机(Guidance End(T))

和引导介入时机相对应,如设置为1,则表示在100%计算完时才会退出介入也就是不退出,默认为 1,可调节范围 0-1,如设置为 0.8 时即代表从80% 步数时退出介入。

11. 缩放模式(Resize Mode)

用于选择调整图像大小的模式:默认使用(Scale to Fit (Inner Fit))缩放至合适即可,将会自动适配图片。
一共三个选项:Just Resize,Scale to Fit (Inner Fit),Envelope (Outer Fit)

12. 画布宽度和高度(Canvas Width 和 Canvas Height)

画布宽高设置,请注意这里的宽高,并不是指 SD 生成图片的图像宽高比。该宽高代表 ControlNet 引导时所使用的控制图像的分辨率,假如你用 SD 生成的图片是 1000x2000 分辨率,那么使用 ControlNet 引导图像时,对显存的消耗将是非常大的;我们可以将引导控制图像的分辨率设置为 500x1000 ,也就是缩放为原本图像一半的分辨率尺寸去进行引导,这有利于节省显存消耗。

13. 创建空白画布(Create Blank Canvas)

如果之前使用过 ControlNet 功能,那么将会在 ControlNet 的图像区域留有历史图片,点击该按钮可以清空之前的历史,也就是创建一张空白的画布。

14. 预览预处理结果(Preview Annotator Result)

点击该按钮可以预览生成的引导图。例如:如果使用 Canny 作为预处理器,那么点击该按钮之后,可以看到一张通过 Canny 模型提取的边缘线图片。

15. 隐藏预处理结果(Hide Annotator Result)

点击该按钮可以隐藏通过 Preview 按钮生成的预览图像窗口(不建议隐藏)

Control Net预处理器与模型

Stable Diffusion进阶教程!超详细的 ControlNet 实用入门指南

ControlNet 的使用方式非常灵活,既可以单模型应用,也可以多模型组合应用。清楚 ControlNet 的一些原理方法后,可以帮助我们更好的提升出图效果。以下通过一些示例,简要介绍 ControlNet 的实际用法。

一、ControlNet 单模型应用

1. 线稿上色

方法:通过 ControlNet 边缘检测模型或线稿模型提取线稿(可提取参考图片线稿,或者手绘线稿),再根据提示词和风格模型对图像进行着色和风格化。

应用模型:Canny、SoftEdge、Lineart。

Canny 边缘检测:

Canny 是比较常用的一种线稿提取方式,该模型能够很好的识别出图像内各对象的边缘轮廓。

使用说明(以下其它模型同理):

  1. 展开 ControlNet 面板,上传参考图,勾选 Enable 启用(如果显存小于等于 4G,勾选低显存模式)。
  2. 预处理器选择 Canny(注意:如果上传的是已经经过预处理的线稿图片,则预处理器选择 none,不进行预处理),模型选择对应的 control_v11p_sd15_canny 模型。
  3. 勾选 Allow Preview 允许预览,点击预处理器旁的?按钮生成预览。

其它参数说明:

  1. Control Weight:使用 ControlNet 生成图片的权重占比影响(多个 ControlNet 组合使用时,需要调整权重占比)。
  2. Starting Control Step:ControlNet 开始参与生图的步数。
  3. Ending Control Step:ControlNet 结束参与生图的步数。
  4. Preprocessor resolution:预处理器分辨率,默认 512,数值越高线条越精细,数值越低线条越粗糙。
  5. Canny 低阈值/高阈值:数值越低线条越复杂,数值越高线条越简单。

Canny 示例:(保留结构,再进行着色和风格化)

Stable Diffusion进阶教程!超详细的 ControlNet 实用入门指南

SoftEdge 软边缘检测:

SoftEdge 可以理解为是 ControlNet1.0 中 HED 边缘检测的升级版。ControlNet1.1 版本中 4 个预处理器按结果质量排序:SoftEdge_HED > SoftEdge_PIDI > SoftEdge_HED_safe > SoftEdge_PIDI_safe,其中带 safe 的预处理器可以防止生成的图像带有不良内容。相较于 Canny,SoftEdge 边缘能够保留更多细节。

SoftEdge 示例:(保留结构,再进行着色和风格化)

Stable Diffusion进阶教程!超详细的 ControlNet 实用入门指南

Lineart 精细线稿提取:

Lineart 精细线稿提取是 ControlNet1.1 版本中新增的模型,相较于 Canny,Lineart 提取的线稿更加精细,细节更加丰富。

Lineart 的预处理器有三种模式:lineart_coarse(粗略模式),lineart_realistic(详细模式),lineart_standard(标准模式),处理效果有所不同,对比如下:

Stable Diffusion进阶教程!超详细的 ControlNet 实用入门指南

Lineart 示例:(保留结构,再进行着色和风格化)

Stable Diffusion进阶教程!超详细的 ControlNet 实用入门指南

2. 涂鸦成图

方法:通过 ControlNet 的 Scribble 模型提取涂鸦图(可提取参考图涂鸦,或者手绘涂鸦图),再根据提示词和风格模型对图像进行着色和风格化。

应用模型:Scribble。

Scribble 比 Canny、SoftEdge 和 Lineart 的自由发挥度要更高,也可以用于对手绘稿进行着色和风格处理。Scribble 的预处理器有三种模式:Scribble_hed,Scribble_pidinet,Scribble_Xdog,对比如下,可以看到 Scribble_Xdog 的处理细节更为丰富:

Stable Diffusion进阶教程!超详细的 ControlNet 实用入门指南

Scribble 参考图提取示例(保留大致结构,再进行着色和风格化):

Stable Diffusion进阶教程!超详细的 ControlNet 实用入门指南

Scribble 手动涂鸦示例(根据手绘草图,生成图像):

也可以不用参考图,直接创建空白画布,手绘涂鸦成图。

Stable Diffusion进阶教程!超详细的 ControlNet 实用入门指南

3. 建筑/室内设计

方法:通过 ControlNet 的 MLSD 模型提取建筑的线条结构和几何形状,构建出建筑线框(可提取参考图线条,或者手绘线条),再配合提示词和建筑/室内设计风格模型来生成图像。

应用模型:MLSD。

建筑/室内设计风格模型下载:

  1. https://civitai.com/?query=Interior
  2. https://civitai.com/?query=building

MLSD 示例:(毛坯变精装)

Stable Diffusion进阶教程!超详细的 ControlNet 实用入门指南

4. 颜色控制画面

方法:通过 ControlNet 的 Segmentation 语义分割模型,标注画面中的不同区块颜色和结构(不同颜色代表不同类型对象),从而控制画面的构图和内容。

应用模型:Seg。

Seg 语义参考: https://docs.qq.com/sheet/DYmtkWG5taWxhVkx2?tab=BB08J2

Stable Diffusion进阶教程!超详细的 ControlNet 实用入门指南

Seg 示例:(提取参考图内容和结构,再进行着色和风格化)

Stable Diffusion进阶教程!超详细的 ControlNet 实用入门指南

如果还想在车前面加一个人,只需在 Seg 预处理图上对应人物色值,添加人物色块再生成图像即可。

Stable Diffusion进阶教程!超详细的 ControlNet 实用入门指南

5. 背景替换

方法:在 img2img 图生图模式中,通过 ControlNet 的 Depth_leres 模型中的 remove background 功能移除背景,再通过提示词更换想要的背景。

应用模型:Depth,预处理器 Depth_leres。

要点:如果想要比较完美的替换背景,可以在图生图的 Inpaint 模式中,对需要保留的图片内容添加蒙版,remove background 值可以设置在 70-80%。

Depth_leres 示例:(将原图背景替换为办公室背景)

Stable Diffusion进阶教程!超详细的 ControlNet 实用入门指南

6. 图片指令

方法:通过 ControlNet 的 Pix2Pix 模型(ip2p),可以对图片进行指令式变换。

应用模型:ip2p,预处理器选择 none。

要点:采用指令式提示词(make Y into X),如下图示例中的 make it snow,让非洲草原下雪。

Pix2Pix 示例:(让非洲草原下雪)

Stable Diffusion进阶教程!超详细的 ControlNet 实用入门指南

7. 风格迁移

方法:通过 ControlNet 的 Shuffle 模型提取出参考图的风格,再配合提示词将风格迁移到生成图上。

应用模型:Shuffle。

Shuffle 示例:(根据魔兽道具风格,重新生成一个宝箱道具)

Stable Diffusion进阶教程!超详细的 ControlNet 实用入门指南

8. 色彩继承

方法:通过 ControlNet 的 t2iaColor 模型提取出参考图的色彩分布情况,再配合提示词和风格模型将色彩应用到生成图上。

应用模型:Color。

Color 示例:(把参考图色彩分布应用到生成图上)

Stable Diffusion进阶教程!超详细的 ControlNet 实用入门指南

9. 角色三视图

方法:通过 ControlNet 的 Openpose 模型精准识别出人物姿态,再配合提示词和风格模型生成同样姿态的图片。

应用模型:OpenPose。在 ControlNet1.1 版本中,提供了多种姿态检测方式,包含:openpose 身体、openpose_face 身体+脸、openpose_faceonly 只有脸、openpose_full 身体+手+脸、openpose_hand 手,可以根据实际需要灵活应用。

Stable Diffusion进阶教程!超详细的 ControlNet 实用入门指南

OpenPose 角色三视图示例:

要点:上传 openpose 三视图,加载 charturner 风格模型( https://civitai.com/?query=charturner ),添加提示词保持背景干净 (simple background, white background:1.3), multiple views

Stable Diffusion进阶教程!超详细的 ControlNet 实用入门指南

10. 图片光源控制

方法:如果想对生成的图片进行打光,可以在 img2img 模式下,把光源图片上传到图生图区域,ControlNet 中放置需要打光的原图,ControlNet 模型选择 Depth。

应用模型:Depth。

要点:图生图中的所有参数和提示词信息需要与原图生成时的参数一样,具体原图参数可以在 PNG Info 面板中查看并复制。

示例:

Stable Diffusion进阶教程!超详细的 ControlNet 实用入门指南

二、ControlNet 多模型组合应用

ControlNet 还支持多个模型的组合使用,从而对图像进行多条件控制。ControlNet 的多模型控制可以在设置面板中的 ControlNet 模块中开启:

Stable Diffusion进阶教程!超详细的 ControlNet 实用入门指南

1. 人物和背景分别控制

方法:设置 2 个 ControlNet,第一个 ControlNet 通过 OpenPose 控制人物姿态,第二个 ControlNet 通过 Seg 或 Depth 控制背景构成。调整 ControlNet 权重,如 OpenPose 权重高于 Depth 权重,以确保人物姿态被正确识别,再通过提示词和风格模型进行内容和风格控制。

应用模型:OpenPose、Seg(自定义背景内容和结构)、Depth。

示例:

Stable Diffusion进阶教程!超详细的 ControlNet 实用入门指南

2. 三维重建

方法:通过 Depth 深度检测和 Normalbae 法线贴图模型,识别三维目标。再配合提示词和风格模型,重新构建出三维物体和场景。

应用模型:Depth、Normalbae。

示例:

Stable Diffusion进阶教程!超详细的 ControlNet 实用入门指南

3. 更精准的图片风格化

方法:在 img2img 图生图中,通过叠加 Lineart 和 Depth 模型,可以更加精准的提取图像结构,最大程度保留原图细节,再配合提示词和风格模型重新生成图像。

应用模型:Lineart、Depth。

示例:

Stable Diffusion进阶教程!超详细的 ControlNet 实用入门指南

4. 更精准的图片局部重绘

方法:在 img2img 图生图的局部重绘中,通过叠加 Canny 和 Inpaint 模型,可以更加精准的对图像进行局部重绘。

应用模型:Canny、Inpaint。

示例:

Stable Diffusion进阶教程!超详细的 ControlNet 实用入门指南