【AI绘画】ControlNet:一文搞懂Stable Diffusion最重要的插件
大家好,我是SD教程菌。当你使用 Stable diffusion 生成图像时,是否有过这种经历?提示词内容在生成结果中似乎都体现出来了,但又总不是自己想要的样子,于是陷入到无限生成(抽卡)的状态,耗费大量时间,逐渐消磨兴趣、耐性及对SD的信任。同样的文字,不同的人理解会不同,想象的画面也各不一样,机器当然也是如此,最好的办法就是“用图表达”。给SD一张参考图,让SD充分理解你的想法。俗话说,一张
大家好,我是SD教程菌。
当你使用 Stable diffusion 生成图像时,是否有过这种经历?提示词内容在生成结果中似乎都体现出来了,但又总不是自己想要的样子,于是陷入到无限生成(抽卡)的状态,耗费大量时间,逐渐消磨兴趣、耐性及对SD的信任。
同样的文字,不同的人理解会不同,想象的画面也各不一样,机器当然也是如此,最好的办法就是“用图表达”。给SD一张参考图,让SD充分理解你的想法。俗话说,一张图胜过千言万语。
Stable Diffusion 的基本工作原理就是以文字作为引导条件,生成符合条件的图像。其短板就是无法对图像细节做精准控制,例如构图、动作、面部特征、空间关系等。ControlNet 的出现弥补了这一不足,更是成为SD绘画中必须熟练掌握的工具。
本文将带你全面了解最重要的SD辅助工具 —— ControlNet
Official ControlNet Blog Post:https://huggingface.co/blog/controlnet
一、ControlNet 是什么?
ControlNet 是一种增强型神经网络模型,它在SD中通过添加额外的条件来控制图像生成。可通过**[论文]**(https://arxiv.org/abs/2302.05543)了解更多。
ControlNet 有多种控制方式供选择使用(仍在不断地扩充和更迭),帮助我们应对不同的绘画需求。例如较为常用的 Canny(边缘探测)、Depth(景深探测)、Openpose(动作探测)。
举个例子:
未使用ControlNet的情况下,即便尽量用文字描述了动作细节,生成结果依然难以掌控,甚至有些细节的描述,SD也难以理解。
使用ControlNet后(以Canny为例),通过对参考图的边缘进行探测和提取,作为生成图像的附加引导条件,很好地掌控了构图和形态,提示词也精简了很多。
下图是ControlNet的其他控制方式,可以先感觉一下它们的用途和效果。(取自论文)
二、SD-WebUI 安装 ControlNet
1. 打开 Stable Diffusion WebUI 的 Extensions 页面。
2. 选择 Install from URL 选项卡。
3. 将以下地址粘贴到 URL for extension’s repository 位置。
https://github.com/Mikubill/sd-webui-controlnet.git
4. 步骤4:点击 Install,收到提示 extension is installed 即为安装成功。
5. 步骤5:重新启动sd-webui。
6. 下载模型:模型分为SD1.5和SDXL两种版本,使用时要与Checkpoint模型版本相同。
-
ControlNet Models for SD1.5:https://huggingface.co/lllyasviel/ControlNet-v1-1/tree/main(pth 和 yaml 文件都需要下载)
-
ControlNet Models for SDXL:https://huggingface.co/lllyasviel/sd_control_collection/tree/main
-
ControlNet 模型文件名含义:
7. 模型存放路径:stable-diffusion-webui\extensions\sd-webui-controlnet\models
8. 重新启动sd webui。
显存设置
由于SDXL模型能生成更高分辨率的图像,显存占用也会更高。可根据显存情况,用记事本打开 web-ui.bat ,添加对应的 COMMANDLINE 指令。
如果显存在8GB~16GB,添加 --medvram-sdxl
@echo off`` ``set PYTHON=``set GIT=``set VENV_DIR=``set COMMANDLINE_ARGS=--medvram-sdxl --xformers`` ``call webui.bat
如果显存<8GB,添加 --lowvram-sdxl
@echo off`` ``set PYTHON=``set GIT=``set VENV_DIR=``set COMMANDLINE_ARGS=--lowvram --xformers`` ``call webui.bat
三、升级 ControlNet
方法1:在 SD-WebUI 升级
1. 打开 Extensions 页面;
2. 进入 Installed 选项卡,点击 Check for updates;
3. 等待完成;
4. 完全关闭SD-WebUI并重启。
方法2:通过控制台指令升级
在 stable-diffusion-webui/extensions/sd-webui-controlnet 路径内启动控制台,输入以下指令:
git pull
四、ControlNet 界面说明(SD-WebUI)
安装成功后,在SD-WebUI下方可以看到 ControlNet面板。
1. 导入控制素材(参考图像或蒙版)
Image Canvas:在此处添加图像,图像将被选择的预处理器处理,生成一个控制图,提供给控制模型作用于生成图像。
-
Write icon:创建一个空白画板,用作手绘。
-
Camera icon:通过相机拍照的方式输入图像。
2. 选择控制模型(Control Model)
-
Enable:ControlNet启用开关
-
Low VRAM:显存<8GB,或批处理时提示显存不足,尝试勾选它。
-
Allow Preview:允许预览预处理器的生成结果(爆炸图标是预处理按钮)。
-
Control Type:过滤器
-
Preprocessor:选择需要的预处理器,None 则不适用预处理器。
-
Model:选择控制模型。如果选择了预处理器,则控制模型要与预处理器类型一致。
3. 控制权重(Control Weight)
-
Control Weight:ContorlNet控制权重。数值越高,越接近控制素材(参考图或预处理生成图),但图像生成的发挥空间也更小。
-
Starting Control Weight:从采样的哪个阶段介入控制。比如,若设定提示词为“sitting”,但参考图像是站立的,且起始控制权重(Starting Control Weight)不为0,结果很可能不是站立的。因为采样一开始是全局控制的阶段,此时ControlNet还未发挥作用,系统会先按“Sitting”的提示进行,随后ControlNet虽会介入,但要大幅改变已生成的图像内容难度较大。
-
Ending Control Weight:从采样的哪个阶段结束控制。
4. 控制模式(Control Mode)
-
Balanced:ControlNet控制和提示词两者平衡
-
My prompt is more important:更侧重遵循提示词
-
ControlNet is more important:更侧重ControlNet
5. 尺寸调整模式(Resize mode)
-
Just Resize:仅缩放(不裁切),比例不同时,图像会出现拉伸变形。
-
Crop and Resize:通过裁切适配尺寸
-
Resize and fill:通过填充补足尺寸
五、ControlNet 预处理器和控制模型
选择适合的预处理器和正确的控制模型是使用ControlNet最重要的事。
-
Allow Preview:允许预览预处理结果,点击预处理器右侧的 “**爆炸按钮**” 进行预处理。
-
Pixel Perfect:使用文生图中设置的分辨率来预处理。
个别类型允许仅使用预处理器或控制模型,但同时使用时,模型和预处理器类型必须相同。
选用的ControlNet模型版本也必须与Checkpoint模型的版本相同。
1. Canny
Canny(https://en.wikipedia.org/wiki/Canny_edge_detector)是一款边缘探测器,用于提取参考图的边缘信息,有助于生成图像能原始参考图的构图。
Canny 预处理器:
- canny:仅一款
Canny 模型:
-
control_v11p_sd15_canny:sd15仅一款
-
diffusers_xl_canny_full:模型越大,越接近参考图,损失一些速度。
-
diffusers_xl_canny_mid:效果不错,速度适中,我习惯选它。
-
diffusers_xl_canny_small:电脑性能差的可以尝试。
-
kohya_controllllite_xl_canny:基于动漫图像训练而成,适合用于动漫或绘画风格。
-
kohya_controllllite_xl_canny_anime:特点同上,细节更多。
-
sai_xl_canny_128lora:模型小,速度慢,很少用到。
-
sai_xl_canny_256lora:同上
-
t2i-adapter_xl_canny**:模型小,速度快,但依然很少用。
-
t2i-adapter_diffusers_xl_canny**:同上
2. Depth
Depth 用于探测参考图像的景深信息。
Depth 预处理器:
-
Depth Midas:一款经典的景深探测器。(也可以用于SDv2模型)
-
Depth Leres:能获得更多的细节,也更侧重于背景。
-
Depth Leres++:Depth Leres 增强版,可以捕捉更多细节。
-
Zoe:介于 Midas 和 Leres 之间的细节水平。
-
Depth Anything:一款增强型的模型。
-
Depth Hand Refiner:用于重绘时对手的修复。
Depth 模型:
-
control_v11f1p_sd15_depth:sd15仅一款
-
diffusers_xl_depth_full:模型越大,越接近参考图,损失一些速度。
-
diffusers_xl_depth_mid:效果不错,速度适中,我习惯选它。
-
diffusers_xl_depth_small:电脑性能差的可以尝试。
-
kohya_controllllite_xl_depth_anime:偏向动漫风格。
-
kohya_controllllite_xl_depth:同上
-
sai_xl_depth_128lora:没用过
-
sai_xl_depth_256lora:没用过
-
sargezt_xl_depth:据说很难用
-
sargezt_xl_depth_faid_vidit:同上
-
sargezt_xl_depth_zeed:同上
-
t2i-adapter_diffusers_xl_depth_midas:没用过
-
t2i-adapter_diffusers_xl_depth_zoe:没用过
3. OpenPose
OpenPose(https://github.com/CMU-Perceptual-Computing-Lab/openpose)主要用于捕捉人体的骨骼姿态,而不涉及外观细节(如发型、服饰、背景等)。因此,在仅对姿态有明确要求,并希望在其他画面元素上有更大创作空间时,推荐使用 OpenPose。
Openpose 预处理器:
-
OpenPose:眼、鼻、脖、肩、肘、腕、膝和脚踝。
-
OpenPose_face:OpenPose + 面部细节
-
OpenPose_hand:OpenPose + 手和手指
-
OpenPose_faceonly:仅面部细节
-
OpenPose_full:上述所有,但基本被更优秀的 DWPose 取代。
-
DWPose:OpenPose_full 的增强版,几乎可替代上述所有。它需要独立安装:Extensions > Install form URL,URL地址如下:
https://github.com/IDEA-Research/DWPose.git
Openpose 模型:
-
control_v11p_sd15_openpose:sd15仅一款
-
kohya_controllllite_xl_openpose_anime
-
kohya_controllllite_xl_openpose_anime_v2
-
t2i-adapter_xl_openpose
-
t2i-adapter_diffusers_xl_openpose
-
thibaud_xl_openpose
-
thibaud_xl_openpose_256lora
技巧:
sd-webui-openpose-editor(GitHub - huchenlei/sd-webui-openpose-editor: Openpose editor for ControlNet. Full hand/face support.):可对生成的Openpose预处理图像进行编辑,安装URL地址如下:
https://github.com/huchenlei/sd-webui-openpose-editor.git
Magic Poser(Magic Poser Web):在线创建动作。当很难找到理想的动作参考图时,可以尝试动制作一个动作,截图后导入给Openpose。
4. Line Art(only SD1.5)
Line Art 对图像的轮廓进行重新渲染,看着似乎与Canny很类似。
Line Art 预处理器:
-
Line art anime:动漫风格线条
-
Line art anime denoise:动漫风格线条(更少的细节)
-
Line art realistic: 写实风格线条
-
Line art coarse:更粗的写实风格线条
-
lineart_standard (from white bg & black line)
Line Art 模型:
-
control_v11p_sd15_lineart
-
control_v11p_sd15s2_lineart_anim
5. MLSD
M-LSD(GitHub - navervision/mlsd: Official Tensorflow implementation of “M-LSD: Towards Light-weight and Real-time Line Segment Detection” (AAAI 2022 Oral))是一款直线轮廓探测器,适合用于如建筑、街景、室内等。
MLSD 预处理器:
- mlsd
MLSD 模型:
- control_v11p_sd15_mlsd
6. IP-adapter(Image Prompt adapter)
IP-adapter 用于将图片作为提示条件使用。它可以用来复制一张参考图像的风格、构图和人脸特征。可通过 [论文](https://arxiv.org/abs/2308.06721)或[Github主页](GitHub - tencent-ailab/IP-Adapter: The image prompt adapter is designed to enable a pretrained text-to-image diffusion model to generate images with image prompt.) 了解更多。
IP-adapter 几乎是当前最好的风格迁移工具,用途广泛,一定要掌握它。后续会有单独介绍它的文章。
IP-adapter 预处理器:
-
ip-adapter-auto
-
ip-adapter_clip_h
-
ip-adapter_pulid
-
ip-adapter_face_id_plus
-
ip-adapter_face_id
-
ip-adapter_clip_sdxl_plus_vith
-
ip-adapter_clip_g
IP-adapter 模型
-
ip-adapter_sd15
-
ip-adapter_sd15_light
-
ip-adapter-full-face_sd15
-
ip-adapter-plus_sd15
-
ip-adapter-plus-face_sd15
-
ip-adapter_sd15_vit-G
-
ip-adapter-faceid_sd15
-
ip-adapter-faceid-plusv2_sd15
-
ip-adapter-faceid-portrait-v11_sd15
-
ip-adapter_sdxl
-
ip-adapter_sdxl_vit-h
-
ip-adapter-plus_sdxl_vit-h
-
ip-adapter-plus-face_sdxl_vit-h
-
ip-adapter-faceid_sdxl
-
ip-adapter-faceid-plusv2_sdxl
-
ip-adapter-faceid-portrait_sdxl
-
ip-adapter-faceid-portrait_sdxl_unnorm
-
ip-adapter_instant_id_sdxl
7. Tile resample
Tile resample 通过网格分块重新取样,为图像添加细节。通常与 Upscaler(图像分辨率放大)一起使用,用于放大图像。
Tile 预处理器:
-
tile_resample
-
tile_colorfix+sharp
-
tile_colorfix
-
blur_gaussian
Tile 模型:
- control_v11f1e_sd15_tile
8. Reference
Reference 是一组预处理器(它没有对应的控制模型),用于生成与参考图像相似的图像。SD模型和提示词仍然会影响图像。
Reference 预处理器:
-
Reference adain:通过自适应进行风格迁移。
-
Reference only:将参考图像直接链接到注意层。
-
Reference adain + attn:以上两项组合。
9. Recolor
用于将黑白图像重新上色,较为依赖摄影或图像风格方面的提示词。
Recolor 预处理器:
-
recolor_intensity
-
recolor_luminance
Recolor 控制模型:
-
sai_xl_recolor_128lora
-
sai_xl_recolor_256lora
10. Normal maps
Normal map(法线图)用于确定图像像素的表面方向,类似浮雕的凹凸效果。
Normal map 预处理器:
-
Normal Midas:从 [Midas] depth map 计算法线图。(侧重于主体)
-
Normal Bae:使用 [normal uncertainty method] 计算法线图。(侧重整幅)
-
normal_dsine
Normal map 模型:
- control_v11p_sd15_normalbae
11. Scribble
Scribble 预处理器通过探测图像中的轮廓线,生成涂鸦图,类型如下:
Scribbles 预处理器:
-
Scribble HED:是一款边缘探测器,擅长生成人物的轮廓线。它适用于重新着色和重塑风格。
-
Scribble Pidinet: 擅长探测曲线和直线,结果与HED类似,但细节更少。
-
Scribble xdog
Scribbles 模型:
- control_v11p_sd15_scribble
12. Segmentation(only SD1.5)
Segmentation 预处理器通过不同的填充色来区分参考图像中的对象类型。[着色表](https://docs.google.com/spreadsheets/d/1se8YEtb2detS7OuPE86fXGyD269pMycAWe2mtKUj2W8/edit#gid=0)
Segmentation 预处理器类型:
-
ufade20k
-
ofade20k
-
ofcoco
-
seg_anime_face
-
mobile_sam
Segmentation 模型:
- control_v11p_sd15_seg
13. Shuffle
The Shuffle 预处理器将参考图搅拌,一般用于为生成图像提供配色方案。它有几个特点:
Shuffle 预处理器类型:
- shuffle
Shuffle 模型:
- control_v11e_sd15_shuffle
Shuffle 预处理器可以独立使用,或与Shuffle模型一起使用。它的效果是随机的,受种子影响。
14. ControlNet Inpaint
ControlNet inpaint 可以在确保整图一致性的前提下,使用高重绘幅度(Denoising)进行重绘,来获得更大的变化。(SD的图生图重绘使用高Denoising会出问题)
Inpaint 预处理器:
-
Inpaint_global_harmonious:允许使用高重绘幅度,并确保全局一致性。
-
Inpaint_only:不改变非蒙版区域。
-
Inpaint_only+lama:使用 lama 模型处理图像,通常用作移除某对象(不使用提示词)。
Inpaint 模型:
- control_v11p_sd15_inpaint
总结
上述列举的控制类型并非穷尽所有,而是涵盖了较为常用的几种。随着开发者们的不断创新与迭代,新的控制类型不断涌现,因此我们应当保持持续关注。ControlNet在Stable Diffusion 中扮演着至关重要的角色,为了充分发挥其潜力,我们需要通过大量的实践与练习来熟练掌握其应用。
本文的主要目的是让读者系统性地了解ControlNet,而关于它的各种实际操作用法,将在后续的案例操作文章中详细展示。
感兴趣的小伙伴,赠送全套AIGC学习资料,包含AI绘画、AI人工智能等前沿科技教程和软件工具,具体看这里。
AIGC技术的未来发展前景广阔,随着人工智能技术的不断发展,AIGC技术也将不断提高。未来,AIGC技术将在游戏和计算领域得到更广泛的应用,使游戏和计算系统具有更高效、更智能、更灵活的特性。同时,AIGC技术也将与人工智能技术紧密结合,在更多的领域得到广泛应用,对程序员来说影响至关重要。未来,AIGC技术将继续得到提高,同时也将与人工智能技术紧密结合,在更多的领域得到广泛应用。
一、AIGC所有方向的学习路线
AIGC所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照下面的知识点去找对应的学习资源,保证自己学得较为全面。
二、AIGC必备工具
工具都帮大家整理好了,安装就可直接上手!
三、最新AIGC学习笔记
当我学到一定基础,有自己的理解能力的时候,会去阅读一些前辈整理的书籍或者手写的笔记资料,这些笔记详细记载了他们对一些技术点的理解,这些理解是比较独到,可以学到不一样的思路。
四、AIGC视频教程合集
观看全面零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。
五、实战案例
纸上得来终觉浅,要学会跟着视频一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。
若有侵权,请联系删除
更多推荐
所有评论(0)