ControlNet是一个用于增强图像生成过程可控性的强大工具,允许用户通过提供特定的控制图像来精确指导生成结果。
ControlNet在Stable Diffusion(SD)的基础上,锁住SD的参数,并且增加了一个可学习的分支,该分支的开头和结尾都增zero convolution(初始化参数为0),保证训练的稳定性,并且Condition的特征会叠加回SD的Decoder特征上,进而达到控制图像生成的目的。
相比于SD模型,ControlNet有两点区别:
- ControlNet相比于SD,丰富了Condition的种类,总共9大类,包括Canny Edge、Canny Edge(Alter)、Hough Line、HED Boundary、User Sketching、Human Pose(Openpifpaf)、Human Pose(Openpose)、Semantic Segmentation(COCO)、Semantic Segmentation(ADE20K)、Depth(large-scale)、Depth(small-scale)、Normal Maps、Normal Maps(extended)和Cartoon Line Drawing。
- ControlNet不需要重新训练SD模型,这极大的降低了可编辑图像生成领域的门槛,减少二次开发的成本。
安装
除了安装 ControlNet 插件外,还需要另外安装另外的模型与预处理器。 具体部署路径如下:
- ControlNet插件:/extensions
- ControlNet模型:/extensions/sd-webui-controlnet/models
- ControlNet预处理器:/extensions/sd-webui-controlnet/annotator/downloads
ControlNet的本质是文生图,所以:使用ControlNet请优先使用txt2img这个页签。(inpaint模型除外)
训练模型(models)
有完整的模型
和预训练模型 (裁剪过的 models)
ControlNet官方存放在 huggingface上的预训练模型文件一个个都是 5 个 G 起步,这是因为它们内部都包含了 SD 那个将近 4 个 G 的 v1-5-pruned-emaonly 模型,这在 webui 环境下是没必要的。
预处理器模型(annotator)
预处理器模型需按分类目录存放,例如 body_pose_model.pth
和 hand_pose_model.pth
应保存到 openpose
目录;而 upernet_global_small.pth
则是保存到 uniformer
目录;其他模型文件可根据关键字,找到对应存放目录。
1、人体姿势(Human Pose
)
openpose
模型,主要控制生成照片人物的姿势
这里的姿势有身体姿势、表情、手指形态三个
可以只控制某一个或者两个,也可以三个一起控制
身体姿势
身体姿势+脸部表情
只有脸部表情
身体姿势+手指+表情
身体姿势+手指
1.控制身体姿势openpose (OpenPose 姿态)
检测人体关键点,头部,肩部,手等,
正常设置大模型和关键词
然后打开controlnet,上传自己想要生成的姿势照片
controlnet的模型选择:预处理器:openpose 模型:openpose
2.控制人物姿势和手指openpose_hand (OpenPose 姿态及手部)
检测姿态及手部 controlnet的模型选择:预处理器:openpose_hand 模型:openpose
3.控制人物表情openpose_faceonly (OpenPose 仅脸部)
只检测人脸 controlnet的模型选择:预处理器:openpose_faceonly 模型:openpose
如果你生成的照片用了Lora再用controlnet控制表情可能会导致生成出来的照片跟Lora的人不太像,因为生成出来的照片的人物五官和脸型都被controlnet影响了
4.全方面控制人物姿势dw_openpose_full (二阶蒸馏 - 全身姿态估计)
测人体全身姿态,比 openpose_full 更加准确。把人物的整体姿势、手指、表情都复刻了, controlnet的模型选择:预处理器:dw_openpose_full 模型:openpose
5.自由编辑
有时候预处理器处理出来的火柴人可能会不太准确
又或者我们需要更加细致的去调节
这时候可以再安装一个插件,
“sd-webui-openpose-editor”
6.动物姿态
animal_openpose
(OpenPose 姿态 - 动物) 是专门检测狗、马、牛等四足动物的姿势骨架,也可以用来引导生成人马等奇异生物。
需要配合模型 control_sd15_animal_openpose.safetensors
使用
7.densepose
该模型也是用来控制人物姿态的,但是和 openpose 不同,它使用不同的颜色来区别人物的各个部位,更好的是它可以判断复杂的姿势重叠,与 Depth 搭配食用效果更佳。
需要配合模型使用,Densepose 的预处理器有 2 种,densepose (pruple bg & purple torso) 和 densepose_parula (black bg & blue torso) ,前者生成紫色背景/紫色主体的预处理图,后者生成黑色背景/蓝色主体的预处理图。
2、线条轮廓
1.lineart 线稿
模型文件:control_v11p_sd15_lineart.pth
功能:提取图像构图,与 canny 相比,线条更简单。
预处理器
- lineart_anime (动漫线稿提取):适用于扩散动漫风格的图像
- lineart_anime_denoise (动漫线稿提取 - 去噪) :相较于动漫线稿提取,获得的细节更少,SD 发挥的空间更多
- lineart_coarse (粗略线稿提取):适用于写实风格使用,提取的细节少
- lineart_realistic (写实线稿提取):适用于写实风格使用,提取的细节多、
- lineart_standard (标准线稿提取 - 白底黑线反色):用于提取构图和图像层次(类似于深度),对于复刻3D或写实类人物的五官有很好的效果
2.canny 边缘检测
模型文件:control_v11p_sd15_canny.pth
功能:提取图像轮廓,能够很好的保留原始图像的构图,相比深度图,更不容易变形。
预处理器:canny(硬边缘检测)
- Canny Low Threshold:检测阈值下限。取值范围1-255。
- Canny High Threshold:检测阈值上限。取值范围1-255。
检测阈值下限和检测阈值上限的值越低,提取细节越多。
3.softEde 软边缘
模型文件:control_v11p_sd15_softedge.pth
功能:同样是提取图像轮廓,侧重于保存图像的大致轮廓,融合性比 Canny 更柔和
预处理器:带 hed 的质量要比 pid 高。带 safe 的提取细节更多但是占用的现存和处理时间也更多
4. mlsd 直线检测
模型文件:control_v11p_sd15_mlsd.pth
功能:忽略图像中的曲线,只提取曲线,适用于建筑这些直线元素较多的图像扩散。
预处理器:mlsd(M-LSD直线线条检测)
MLSD Value Threshold:直线阈值。值越低,检测的直线越多。范围 0.01-2。 MLSD Distance Threshold:距离阈值。对检测的之间进行距离筛选。取值范围 0.01-20。
5.scribbles 涂鸦
模型文件:control_v11p_sd15_scribble.pth
功能:提取图像线条信息转换为手绘涂鸦
预处理器:
- scribble_hed (涂鸦 - 整体嵌套):生成图像轮廓,适用于重新着色或者重新设计图像
- scribble_pidinet (涂鸦 - 像素差分):检测曲线和直线,生成的线条清晰但细节更少,生成的结果图像可能不受控制 -scribble_xdog (涂鸦 - 强化边缘):提取的细节更多,构图的还原度更高
3、空间物品
1.depth
根据我们输入的图像,预测深度信息,适用于对场景的描绘还原,保留图片的光影层次。距离越近越白,越远越黑。
- depth_hand_refiner(深度手部细化):一个专门用于修复手部畸形的模型。需要配合 control_v11f1p_sd15_depth 模型使用。
使用方法:生成的图像手部有问题,可以将其发生到 图生图-局部重绘 中,用画笔涂抹手部区域,上传问题图像到 ControlNet 中,预处理器选择 depth_hand_refiner,模型选择 control_v11f1p_sd15_depth,点击生成即可。
- depth_leres(LeReS 深度图估算):检测构图,细节偏少
- depth_leres++(LeReS 深度图估算++):检测构图,环境主体细节更多。
- depth_zoe(ZoE 深度图估算):主体细节少,环境细节多
2..Normal 法线贴图
提取输入图像表面的方向信息,其使用类似于深度,但是更加适用于3D图像。
模型文件:control_v11p_sd15_normalbae.pth
预处理器
- normal_bae(Bae 法线贴图提取):提取主体与环境的表面贴图,拥有更多的环境信息
- normal_midas(Midas 法线贴图提取):提取主体表面的贴图,忽略部分环境信息
应用场景
这个模型可以参考原图的明暗关系,并且还原原图的姿势
3.seg 语义分割
模型文件:control_v11p_sd15_seg.pth
功能:识别输入图像的元素,并使用颜色进行标记。
- seg_ani_face(语义分割-动漫面部):专门用于识别动漫图片
- seg_ofade20k(语义分割-OneFormer算法-ADE20k协议)
- seg_ofcoco(语义分割-OneFormer算法-COCO协议)
- seg_ufade20k(语义分割-UniFormer算法-ADE20k协议)
算法:OneFormer 优于 UniFormer。
ADE20K协议 和 COCO协议:使用两者不同的数据集进行训练,数据集的颜色标注不同。其中 ADE20K 要优于 COCO
应用场景
- 将预处理后的色块图下载放到PS后,添加新的色块,或者修改原有色块来修改原图中的元素。
- 我们可以根 语义颜色对照表 在PS中制作一张色块,将元素放在值得的位置
- 使用 Segment Anything 插件分离图像元素,用于分区重绘
4.风格约束
1.shuffle 洗牌/转换
模型文件:control_v11e_sd15_shuffle.pth
功能:将其他图片的画风转移到自己的照片上。
首先先用大模型和关键词生成一张自己喜欢的图片
固定随机数种子
然后打开controlnet将别的照片画风转移到自己的照片
用shuffle可能会影响自己原图的形状,可以稍微调整一下“引导介入时机”的参数
设置在0.2~0.3之间就差不多
先生成出来大体的形状再去改变画风
或者用两个controlnet:一个固定线稿,一个影响画风
2. reference 参考
Reference-only算法可以说是CotrolNet系列算法中的一个“异类”,它只有预处理器,没有对应的ControlNet模型,也就是说它不需要进行训练,而是一个纯算法。
Reference-only算法的预处理器能够直接使用输入的图像作为参考图 (图像提示词) 来控制SD模型的生成过程,类似于inpainting操作,从而可以生成与参考图像相似的图像。与此同时,SD模型在图像生成过程中仍会受到Prompt的约束与引导。
Reference-only算法的实现原理是通过将SD U-Net的自注意力模块与参考图像进行映射来实现的,我们先将参考图像加噪声送入U-Net中,提取在SelfAttention模块中的keys和values并与SD模型原本的特征叠加,这样一来就结合了自身特征和参考图特征,从而实现了无训练的参考图像特征作为图像提示词功能。
预处理器
-
reference_adain(仅参考输入图-自适应实例规范):通过自适应实例规范进行样式转换
-
reference_only(仅参考输入图):将参考图像直接链接到注意力层(Attention layers),即从潜空间开始影响
-
reference_adain+attn(仅参考输入图-自适应实例规范+Attention链接):以上两者组合,参考的幅度更大
一般情况下 reference_only 的参考效果会更好。 reference_only 可以更好的保留原始图像的构图。
Style Fidelity (only for "Balanced" mode):风格仿真度,仅在 控制模式为均衡 下生效。值越大越相似,但是越可能崩坏。
应用场景
- 让照片动起来,让坐着的小狗跑起来
- 还原角色,给SD一张人物角色图,它会根据人物的五官、发型还原这个人物
5.重绘类
1.inpaint 重绘
模型文件:control_v11p_sd15_inpaint.pth
功能:局部重绘也叫局部修复,和图生图中的局部重绘功能类似,但是 inpaint 重绘的地方与原图的融合度更高。
预处理器
- inpaint_global_harmonious(重绘-全局融合算法):对整张图片进行重绘,重绘后整体融合更好,但是可能会改变原图的色调
- inpaint_only(仅局部重绘):只重绘涂黑的地方
- inpaint_only+lama(仅局部重绘+大型蒙版):和仅局部重绘一样,但是生成的结果更加细致,随机对象更少,更适用于图像重绘和对象移除。
应用场景
1)更换衣服
2)图像扩充
调整输出图像分辨率512768(原图512512*),预处理器选择 inpaint_only+lama(仅局部重绘+大型蒙版) ,缩放模式选择缩放后填充空白。
2.tile 分块重采样
模型文件:control_v11f1e_sd15_tile.pth
原理:分割图像,并识别图像里的内容,进行细节填充。当提示词和识别内容不匹配时,识别内容的权重高。
功能:不改变原有构图的情况下,忽略细节并产生新的细节,通常与放大器一起使用,放大的同时增加更多的细节。
预处理器
blur_gaussian(模糊-高斯模糊):模糊图片,原图片细节更少,SD有更高的自由度
tile_colorfix(分块-固定颜色):生成的照片颜更加鲜艳
tile_colorfix+sharp(分开-固定颜色+锐化):tile_colorfix 的锐化版,图片更清晰,鲜艳
tile_resample(分块-重采样):适合模糊图片修复,细节补充
3.t2ia
t2iadapter 即 text2image adapter,腾讯出品的调整适应模型。
它的主要功能有3个:
1.将原图的颜色模糊成马赛克再重新生成图片
2.提取素描的线稿,生成真人照片(这个不好用,直接用lineart就行)
3.参考原图风格,生成相似风格的照片
- t2ia_color_grid(文本到图像自适应控制-色彩像素化)
预处理器
t2ia_color_grid(文本到图像自适应控制-色彩像素化) 对应模型 t2iadapter_color_sd15v1.pth。
它会将参考图像缩小64倍,然后将其扩展回原始大小,其作用是提取图像的主要颜色,不保留构图。适用于需要固定整体颜色时使用。
-
t2ia_sketch_pidi(文本到图像自适应控制-草绘边缘像素差分) t2ia_sketch_pidi(文本到图像自适应控制-草绘边缘像素差分) 对应模型 t2iadapter_sketch_sd14v1.pth。
它可以提取图像的大体轮廓,适用于需要固定图像主要构图结构时使用。 -
t2ia_style_clipvision(文本到图像自适应控制-风格迁移) 预处理器 t2ia_style_clipvision(文本到图像自适应控制-风格迁移) 对应模型 t2iadapter_style_sd14v1.pth。
它会将输入图像转换为 clip 视觉嵌入,其中包含输入图像内容和风格的信息。会参考输入图像的颜色构图以及其它细小的元素,因此它的参考会比 Reference 更强。
4.InstructP2P 指导图生图 (特效)
模型文件:control_v11e_sd15_ip2p.pth
功能:根据指令修改局部元素,保持其它元素不变,用于环境背景天气修改以及单独修改人物,使用的频率不高。
语法:make it on xxx/mait it xxx/make he xxx
预处理器:无
6.其他
1.ip-adapter 垫图
IP-Adapter是腾讯研究院出品的一个新的ControlNet模型,旨在使预训练的文本到图像扩散模型能够生成具有图像提示的图像。
IP-Adapter,它的全称是 Text Compatible Image Prompt Adapter for Text-to-Image Diffusion Models,翻译成中文就是:用于文本到图像扩散模型的文本兼容图像提示适配器,名字有些长,读起来也很拗口。不过我们可以简单的理解就是图片提示或者垫图。
预处理器:
-
ip-adapter_clip_sd15:适用于 Stable Diffusion 1.5 模型。
-
ip-adapter_clip_sdxl:适用于 Stable Diffusion XL 模型。
-
ip-adapter_face_id:适用于面部风格迁移
-
模型有: ip-adapter_sd15:适用于Stable Diffusion 1.5。 ip-adapter_sd15_plus:适用于 Stable Diffusion 1.5,更细粒度的提示,生成图片和原画更接近。 ip-adapter_xl:适用于 Stable Diffusion XL。
应用场景
画风迁移
2. recolor 重上色
模型文件:ioclab_sd15_recolor.pth
功能:该模型可以保持图片的构图,它只会负责上色,图片不会发生任何变化。
预处理器
- recolor_luminance:调节“图像亮度”以去色。提取图像特征信息时注重颜色的亮度,目前大部分情况下这个效果更好。
- recolor_intensity:调节“图像强度”以去色,提取图像特征信息时注重颜色的饱和度。
3.Revision
revision是一种使用图像来提示SDXL的方法,因此它只对SDXL模型有效,简单地理解就是revision具备prompt的功能,可以单独使用,也可以结合文字prompt附加使用。 初次使用revision会下载一个名为“clip_g.pth”的模型,保存的路径在“\stable-diffusion-webui\extensions\sd-webui-controlnet\annotator\downloads\clip_vision”文件夹下面
参考:zhuanlan.zhihu.com/p/693290537 zhuanlan.zhihu.com/p/640637930 www.zhihu.com/question/58…