Stable Diffusion 笔记四 ControlNet

739 阅读14分钟

ControlNet是一个用于增强图像生成过程可控性的强大工具,允许用户通过提供特定的控制图像来精确指导生成结果。

ControlNet在Stable Diffusion(SD)的基础上,锁住SD的参数,并且增加了一个可学习的分支,该分支的开头和结尾都增zero convolution(初始化参数为0),保证训练的稳定性,并且Condition的特征会叠加回SD的Decoder特征上,进而达到控制图像生成的目的。

相比于SD模型,ControlNet有两点区别:

  1. 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。
  2. ControlNet不需要重新训练SD模型,这极大的降低了可编辑图像生成领域的门槛,减少二次开发的成本。

安装

除了安装 ControlNet 插件外,还需要另外安装另外的模型与预处理器。 具体部署路径如下:

  • ControlNet插件:/extensions
  • ControlNet模型:/extensions/sd-webui-controlnet/models
  • ControlNet预处理器:/extensions/sd-webui-controlnet/annotator/downloads

ControlNet的本质是文生图,所以:使用ControlNet请优先使用txt2img这个页签。(inpaint模型除外)

训练模型(models)

有完整的模型

image.png

和预训练模型 (裁剪过的 models)

image.png

ControlNet官方存放在 huggingface上的预训练模型文件一个个都是 5 个 G 起步,这是因为它们内部都包含了 SD 那个将近 4 个 G 的 v1-5-pruned-emaonly 模型,这在 webui 环境下是没必要的。

预处理器模型(annotator)

image.png

预处理器模型需按分类目录存放,例如 body_pose_model.pthhand_pose_model.pth 应保存到 openpose 目录;而 upernet_global_small.pth 则是保存到 uniformer 目录;其他模型文件可根据关键字,找到对应存放目录。

1、人体姿势(Human Pose

openpose模型,主要控制生成照片人物的姿势
这里的姿势有身体姿势、表情、手指形态三个
可以只控制某一个或者两个,也可以三个一起控制

身体姿势
身体姿势+脸部表情
只有脸部表情
身体姿势+手指+表情
身体姿势+手指

image.png

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 线稿

image.png 模型文件: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(硬边缘检测)

image.png

  • Canny Low Threshold:检测阈值下限。取值范围1-255。
  • Canny High Threshold:检测阈值上限。取值范围1-255。

检测阈值下限和检测阈值上限的值越低,提取细节越多。

3.softEde 软边缘

image.png 模型文件:control_v11p_sd15_softedge.pth

功能:同样是提取图像轮廓,侧重于保存图像的大致轮廓,融合性比 Canny 更柔和
预处理器:带 hed 的质量要比 pid 高。带 safe 的提取细节更多但是占用的现存和处理时间也更多

4. mlsd 直线检测

模型文件:control_v11p_sd15_mlsd.pth
功能:忽略图像中的曲线,只提取曲线,适用于建筑这些直线元素较多的图像扩散。
预处理器:mlsd(M-LSD直线线条检测)

image.png

MLSD Value Threshold:直线阈值。值越低,检测的直线越多。范围 0.01-2。 MLSD Distance Threshold:距离阈值。对检测的之间进行距离筛选。取值范围 0.01-20。

5.scribbles 涂鸦

image.png

模型文件:control_v11p_sd15_scribble.pth
功能:提取图像线条信息转换为手绘涂鸦
预处理器:

  • scribble_hed (涂鸦 - 整体嵌套):生成图像轮廓,适用于重新着色或者重新设计图像
  • scribble_pidinet (涂鸦 - 像素差分):检测曲线和直线,生成的线条清晰但细节更少,生成的结果图像可能不受控制 -scribble_xdog (涂鸦 - 强化边缘):提取的细节更多,构图的还原度更高

3、空间物品

1.depth

image.png 根据我们输入的图像,预测深度信息,适用于对场景的描绘还原,保留图片的光影层次。距离越近越白,越远越黑。

  • 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 语义分割

image.png

模型文件: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 参考

image.png 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 可以更好的保留原始图像的构图。

image.png 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…