标签
是否付费
描述
创建时间 4
收藏夹
原链接
创建时间 3
创建时间 5
收藏类型
Tags
简悦
创建时间 1
Origin
zhuanlan.zhihu.com
创建时间 2
Cubox 深度链接
更新时间
前言:朋友你好
又见面了,还是直奔主题。
上两期内容分别介绍了如何搭建 sdui 与调参。如果能够熟练掌握前两门功课,恭喜你已经迈入了 ai 绘画的门槛。
通过前面的学习,想必你已经可以通过 prompt 产出高质量且较为符合心意的图片,再分享几张作者的得意之作。
图片虽美,但是,在深度使用之后你会发现,想让 AI 绘制出自己满意的图片并不容易,甚至多次调整提示词(Prompt)也生成不出来我们想要的图片。以上的完美作品都是需要不断调整泡泡玛特(prompt)才能碰运气生成出来的。很随机。
那么你是否想要通过手绘板粗略几笔画出轮廓、或者放个样例图就能生成呢?
这时你需要一个大杀器
ControlNet
,SD
搭配上ControlNet
之后,就可以做到精准控图了,先来看看几个ControlNet
能做到的效果:想要在 sdui 中使用这项功能吗?下面进入主题
一、在 SDWEBUI 中安装插件
自动安装
安装这个插件很简单,在 stable-diffusion-
webui
页面上找到 Extensions
-> Install from URL
,输入插件的 git 地址 https://github.com/Mikubill/sd-webui-controlnet.git
,点击 Install
即可:等待 loading 结束后,页面底部会出现
Installed into xxx. Use Installed tab to restart.
提示,这时再依次找到 Extensions
-> Installed
-> Apply and restart UI
重启 webui
:重启完成后,就可以在
txt2img
和 img2img
中看到会多出来一个 ControlNet
选项,这样插件就安装完成了:手动安装
- 从 WebUI extension for ControlNet 下载源码:
下载方式
clone 成功后把你下载的源码放到
stable-diffusion-webui/extensions/
目录。至此 controlnet 安装完成
二、安装模型
插件安装完成之后,还需要配置一下
ControlNet
的专属模型(注意:不要跟 SD
的模型搞混了)。在此之前,先来了解一下 ControlNet
的绘画流程:用户提供一张参考图,
ControlNet
根据指定的模式对参考图进行预处理,得到一张新图,作为另一张参考图。根据提示词(Prompt),结合前面的(1 张 或 2 张)参考图,进行图像绘制。
注意:这步别急着动手,别急着动手,别急着动手,下面有体积更小的模型。⚠️⚠️⚠️
上述流程的两个阶段,对应用到的模型有两种,以下是它们的下载地址:
网速比较快,懒人
网速,磁盘空间够大模型可以直接下载
插件的 models 目录:stable-diffusion-webui-webui-controlnet。
其中
- 预处理器模型(
annotator
)为:huggingface.co/lllyasviel/…
- 预训练模型(
models
)为:huggingface.co/lllyasviel/…
tips:ControlNet 官方存放在 huggingface 上的预训练模型文件一个个都是 5 个 G 起步,这是因为它们内部都包含了 SD 那个将近 4 个 G 的 v1-5-pruned-emaonly 模型,这在 stable-diffusion-webui 环境下是没必要的,这时我们可以使用专门裁剪过的预训练模型文件,体积会少很多:
网速比较慢,空间小,喜欢捣鼓的人
注:预训练模型(为裁剪过的
models
):huggingface.co/webui/Contr…打开预处理器模型(
annotator
)网址,将需要用到的模型下载下来后,保存到插件的 annotator
目录下:tips:预处理器模型需按分类目录存放,例如
body_pose_model.pth
和 hand_pose_model.pth
应保存到 openpose
目录;而 upernet_global_small.pth
则是保存到 uniformer
目录;其他模型文件可根据关键字,找到对应存放目录。插件的
annotator
目录:stable-diffusion-webui\extensions\sd-webui-controlnet\annotator
。而预训练模型(
models
),需要将用到的模型下载下来后,保存到插件的 models
目录下:stable-diffusion-webui-webui-controlnet。
tips:一般把所有
control_xxx.safetensors
文件下载下来保存到本地 models 目录下即可,如果你觉得模型文件太多,磁盘空间占用太大,也可以按需下载。三、使用
sd-webui-controlnet
插件和模型文件(预处理器模型、预训练模型)都安装完成之后,再重启一次 webui
就可以正常使用 ControlNet
功能了。勾选
Enable
让 ControlNet 生效,那个 Preprocessor 和 Model 就是你刚才下载的那些模型。下了这么多模型,你是不是会好奇,什么情况用哪种模型呢?
简单介绍一下不同 PreProcessor
- ControlNet with User Scribbles
control_sd15_scribble
你可以直接新建白画布,在上边画线条。模型将你画的作为输入,获得对应的输出。
- ControlNet with Canny Edge
control_sd15_canny
是你提供一张图片,预处理器使用 Canny 边缘检测可以给你提取出边缘线,使用这个边缘线作为输入,控制生成对应的输出。
- ControlNet with HED Maps
control_sd15_hed.pth
是你提供一张图片,预处理器获得对应的 HED 边缘检测(软边缘),使用这个边缘线作为输入,控制生成对应的输出。
- ControlNet with M-LSD Lines
control_sd15_mlsd.pth
是你提供一张图片,预处理器使用 M-LSD 线检测,使用这个边缘线作为输入,控制生成对应的输出。
- ControlNet with Human Pose
control_sd15_openpose.pth
是使用你提供的图片获得对应的姿势骨架图作为输入并生成对应的结果。
- ControlNet with Depth
control_sd15_depth.pth
是你提供一张图片,预处理器会获得对应的使用 Midas 深度估计作为输入,使用使用 Midas 深度估计图生成输出图片。
- ControlNet with Normal Map
control_sd15_normal
传入一张图片,生成对应的法线贴图。法线贴图看中间那张图,左边看起来是红色的,右边看起来是蓝色的,上边看是绿色的,下边看是紫色的。
四、示例(参考自:AI - AI 绘画的精准控图 (ControlNet))
1、人体姿势(
Human Pose
)根据
civitai
网站上的 Deliberate
模型案例,生成一张牛奶工的图片:现在我们希望 AI 绘制出来的牛奶工他是坐着的,这时,就可以用上
ControlNet
选项了。展开 ControlNet
选项之后,把 Enable
勾上使其生效,之后,指定 openpose
所需的预处理器模型(Preprocessor)和预训练库模型(Model):注:如果你使用的是 8G 以下显存(或者想获取更大的批量大小),可以把
Low VRAM
勾上。 github.com/lllyasviel/…ControlNet
选项配置完成后,其它保持不变,点击 “Generate” 按钮重新生成,这时绘制出来的牛奶工的姿势就跟我们提供的参考图基本一致了:注:图中牛奶工的小腿摆向与骨架图中的小腿摆向不符,不过整体效果已经很不错了,相信后续
ControlNet
能优化好这一点。你也可以看到,
SD
同时还生成出了一张骨架图,这骨架图是在 ControlNet
的预处理阶段生成的。而且 openpose
主要依据的参考图就是这张骨架图,也就是说,当我们手上有现成的骨架图时,完全可以直接将骨架图作为参考图,跳过预处理阶段(设为 “none”),直接进入绘图阶段。有兴趣的可以动手试试,效果是一样的:2、重新着色和风格化(
Canny Edge
、HED Boundary
)如果你希望对现有的图片重新着色或换一种风格,可以使用
ControlNet
以下两个模型,它们的主要区别是边缘检测算法不同:Canny Edge
模型:采用 Canny 边缘检测算法
HED Boundary
模型:采用 HED(Holistically-Nested Network) 边缘检测算法
下面我们就分别采用这两种模型来试试,这是
Canny Edge
模型:这是
HED Boundary
模型:可以直观看到,两种模型生成的
边缘检测图
不同,从而最终绘制出来的图片细节上也有差别(注意看小女孩头发上的 3 个反光点),至于哪个更好,看个人感觉吧,我觉得 HED Boundary
模型好一点。关于这两种边缘检测算法的说明,可以查看以下文章了解:- 边缘检测的三种算法介绍:zhuanlan.zhihu.com/p/35694372
- 边缘检测之 HED:zhuanlan.zhihu.com/p/43600043
3、草图绘制(Scribbles
)
使用
Scribbles
模型,可以根据草图(涂鸦)绘制出精美的图片,对于那些没有学过美术或者没有绘画天赋的人来说,简直太棒了。提示词(Prompt):hot air balloon
如果你懒得自己画草图,也可以将一张现成的作品交给
ControlNet
,由它帮你画,注意,此时的预处理器模型换成了 fake_scribble
(从成品图中提取出草图),而预训练模型还是 control_scribble-fp16
(根据草图绘制作品):注:这里是我唯一一处勾选了
Low VRAM
的地方,因为在进行提取草图的预处理阶段,控制台报了显存不足的错误,此时草图也就没能提取成功,勾选 Low VRAM
之后,一切就正常了。4、建筑物绘制(M-LSD Lines
)
如果你希望是对建筑物进行重新上色和风格化,可以使用
M-LSD
模型:5、语义分割绘制(
Semantic Segmentation
)Semantic Segmentation
语义分割是一种深度学习算法,重点关注 语义
一词,这种算法将一个标签或类别与图像联系起来,被用来识别形成不同类别的像素集合。这么说有点抽象,我们先直接使用这个模型,看会生成出什么东西:注意:如果语义分割图没有生成出来,请查看控制台是否有报错,另外,检查一下
upernet_global_small.pth
是否有保存到 extensions\sd-webui-controlnet\annotator\uniformer
目录。因为 SD
自己也有一个 models\uniformer
目录,如果你前面没有手动放置好 upernet_global_small.pth
模型文件,那么在用到 Semantic Segmentation
模型时,SD
会自动帮你下载一个到它自己的 models\uniformer
目录,这是个大坑,不过还好,这种情况控制台会报错,可以排查到这个问题。可以看到,预处理阶段生成了一张花花绿绿的图片,这就是语义分割图,这图中的每一种颜色都代表了一类物品,比如紫色(#cc05ff)代表床(bed),橙黄色(#ffc207)代表垫子(cushion),金黄色(#e0ff08)代表台灯(lamp),
ControlNet
的 Semantic Segmentation
模型使用的是 ADE20K
协议,这些颜色值都可以在下面网址中找到对应的含义:既然如此,那我们可以反向操作,修改某个物品的颜色,替换最终生成出来的图中的某样物品,比如把台灯(#e0ff08)换成花(#ff0000):
注:跟
openpose
直接提供骨架图一样,这里我们直接提供了语义分割图,所以预处理器选择 “none”。另外,注意此处我固定了 Seed 的值,这样最终生成出来的图片能跟上面的例子保持基本一致。可以看到,最终绘制出来的图中,床边的台灯被替换成了花。
6、三维制图(
Depth
、Normal Map
)如果你希望能对图中 3D 物体比较细致的把控,可以使用
ControlNet
提供的以下 2 种模型:Depth
模型:从原图中提取深度图,能较好的掌握复杂的三维结构层次,并将其复现。
Normal Map
模型:从原图中提取 3D 物体的法线向量,绘制的新图与原图的光影效果完全相同。
下面我们就使用相同提示词(Plaster statue of Abraham Lincoln),分别采用这两种模型来试试,这是
Depth
模型:这是
Normal Map
模型:相比于
Depth
模型,Normal Map
模型能更好的保留几何形状,并且有更多的细节信息,注意看男人头发的形状。注:建议
Depth
模型用于 3D 场景,Normal Map
模型用于 3D 物体。7、换头换衣服:参考:https://zhuanlan.zhihu.com/p/619953336
假设我有一张觉得拍脸还不错的照片,但是衣服太土或者背景太杂怎么办?
以这张图为例
脸感觉照得还不错,但是衣服或者背景我不满意,又或者头发颜色我想换下,
首先 stable diffuison 选择 chilloutmix 模型。
然后在图生图蒙版界面打开选择的这张图
把脸用蒙版锁定
注意(请细心点把脸涂掉即可,头发不用管,尽量不要涂到非脸部分,以免影响最终效果
这里要注意
(1)蒙版模糊调高,我这里是 30,调高可以模糊掉边界,看起来更自然
(2) 选择重绘非蒙版内容
(3)选择全图重绘
(4)预留像素无所谓,因为是全图绘制,随便填
(5)宽长比和原图尽量保持一致
(6)重绘程度 0.7-0.8 都可以
然后打开 controlnet
这里用到两个功能
一个 openpose,一个 canny
首先打开 openpose,把图丢进去
预览看下,然后打开 canny 模式,再把图丢进去
然后 canny 的设置要注意
权重放低,我这里是 0.5,然后下面这个尽量拉高(越高细节越少,越低细节保留越多),我们不需要保留原图细节,所以拉高
基本工作做完了,这时候再 tag 栏输入自己想要的效果,我这里示范一个,例如我想改成猫装效果:
prompt:
(8k, RAW photo, best quality, masterpiece:1.2), (realistic, photo-realistic:1.37), ultra-detailed, original, (masterpiece), (illustration), (extremely fine and beautiful), perfect detailed, photorealistic, (beautiful and clear background:1.25), (depth of field:0.7), (1 cute girl with (cat ear and cat tail:1.2) stands in the garden:1.1), (cute:1.35), (detailed beautiful eyes:1.3), (beautiful face:1.3), casual, silver hair, silver ear, (blue hair:0.8), (blue ear:0.8), long hair, coat, short skirt, hair blowing with the wind, (blue eye:1.2), flowers, (little girl:0.65),
(8k, RAW 照片,最佳质量,杰作: 1.2),(逼真,照片逼真: 1.37),超细节,原创,(杰作),(插图),(非常精细和美丽),完美细节,照片逼真,(美丽和清晰的背景: 1.25),(景深: 0.7),(1 个可爱的女孩 (猫耳朵和猫尾巴: 1.2) 站在花园里: 1.1),(可爱: 1.35),(细节美丽的眼睛: 1.3),(美丽的脸: 1.3),随意,银发,银耳朵,(蓝色的头发: 0.8),(蓝色的耳朵: 0.8),长发,外套,短裙,被风吹着的头发,(蓝眼睛: 1.2),花,(小女孩: 0.65),
看看效果:
好了赶快动手画起来吧