Stable Diffusion教程!ControlNet 对象类控制及语义颜色对照表

时间:2024-06-25
B站视频:av1205373790
类别:AIGC
水平:入门
设计师入站必刷的宝藏频道,掌握设计真本领与AI并肩 👉 立即点击

当视频无法加载时请刷新页面,
或前往PC获得最佳体验。

Stable Diffusion教程!ControlNet 对象类控制及语义颜色对照表

教程作者: 野鹿志(授权转载)

交作业:微博搜索话题 #优设每日作业# 进入话题页即可发布作业

一、关于教程

上一篇文章我们分享了 ControlNet 三维类控制:

今天我们将围绕着 ControlNet 的对象类控制进行讲解,废话不多说,进入今天的正题吧!

二、教程分享

01 前言

对象类包括OpenPose(姿态)和Segmentation(语义分割)两种,主要用于控制场景中的对象。

原计划今天分享的内容可以提前两天发布,但由于整理Segmentation(语义分割)的颜色对照表花费了一些时间。

本着授之以鱼不如授之以渔的想法,今天最后我会简单分享一下我是如何整理Segmentation的颜色对照表的。

02 OpenPose(姿态)

OpenPose(姿态)是鹿友们最常用的功能,顾名思义,它可以帮助我们控制对象的动作、手势等。我个人由于不常生成人物图,所以用得很少。

随着SD的更新,OpenPose新增了很多预处理器。截至2024年5月31日,共有9款预处理器:

Stable Diffusion教程!ControlNet 对象类控制及语义颜色对照表

但其实大体可以分为三类:第一类是openpose类,包括早期的openpose、full、hand、faceonly、face,以及后面新增的dw openpose full:

Stable Diffusion教程!ControlNet 对象类控制及语义颜色对照表

其中,使用dw_pose需要首先下载dw-ll_ucoco_384.onnx和yolox_l.onnx这两个预处理模型,并将它们放入ControlNet对应的openpose预处理器模型文件夹中:

Stable Diffusion教程!ControlNet 对象类控制及语义颜色对照表

这类预处理器的特点是通过提取图片中对象的骨架图,从而达到控制姿态的效果。

虽然openpose类有5种预处理器,但从名字就可以分清它们各自控制的范围:

Stable Diffusion教程!ControlNet 对象类控制及语义颜色对照表

其中,我们着重对比一下openpose_full和dw_openpose_full。这两款预处理器都可以提取姿态、手部和脸部的所有信息。

通过这张对比图可以看到,dw_openpose_full在手部的提取上更加精准,而openpose_full在手部细节上有所缺失:

Stable Diffusion教程!ControlNet 对象类控制及语义颜色对照表

就这个案例而言,dw_openpose_full生成的图也会比openpose_full更准确一些:

Stable Diffusion教程!ControlNet 对象类控制及语义颜色对照表

最新版的ControlNet将openpose-editor插件整合在一起,因此在骨架类openpose的预处理结果预览框中,会有一个编辑按钮:

Stable Diffusion教程!ControlNet 对象类控制及语义颜色对照表

可以手动编辑骨架或者以参数的方式微调骨架。如果你对openpose识别出来的骨架不满意,可以使用这个功能进行调整:

Stable Diffusion教程!ControlNet 对象类控制及语义颜色对照表

接下来是densepose类,对应的预处理器有densepose和densepose _parula:

Stable Diffusion教程!ControlNet 对象类控制及语义颜色对照表

使用这类预处理器需要首先下载densepose_r50_fpn_dl.torchscript到ControlNet对应的densepose预处理器模型文件夹中:

Stable Diffusion教程!ControlNet 对象类控制及语义颜色对照表

并且下载controlnetFor_v10.safetensors模型到ControlNet的模型文件夹中:

Stable Diffusion教程!ControlNet 对象类控制及语义颜色对照表

这类预处理器与openpose最大的区别在于,它提取出来的是轮廓,能够处理姿态中重叠的部分。

densepose和densepose_parula的区别在于,densepose生成的是紫色背景和主体,而densepose_parula生成的是黑色背景和蓝色主体:

Stable Diffusion教程!ControlNet 对象类控制及语义颜色对照表

两种预处理器对比,我感觉也无法评判好坏:

Stable Diffusion教程!ControlNet 对象类控制及语义颜色对照表

下面是两种openpose和两种densepose生成图的对比。个人感觉在这个案例中,还是dw_openpose_full更胜一筹:

Stable Diffusion教程!ControlNet 对象类控制及语义颜色对照表

最后一种是animal_openpose,这也是新增的预处理器。严格说来,它也算作openpose类,提取的是骨架图。

但由于它是专门针对四足动物的预处理器,所以我把它单独提出来分享:

Stable Diffusion教程!ControlNet 对象类控制及语义颜色对照表

使用它需要首先下载rtmpose-m_simcc-ap10k_pt-aic-coco_210e-256x256-7a041aa1_20230206.onnx到ControlNet对应的openpose预处理器模型文件夹中:

Stable Diffusion教程!ControlNet 对象类控制及语义颜色对照表

然后再将control_sd15_animal_openpose_fp16.pth下载到对应的ControlNet模型文件夹中:

Stable Diffusion教程!ControlNet 对象类控制及语义颜色对照表

下方就是原图,预处理结果以及生成图的对比:

Stable Diffusion教程!ControlNet 对象类控制及语义颜色对照表

03 Segmentation (语义分割)

Segmentation(语义分割)可以将图片提取为色块图,看起来像我们在三维软件中渲染的对象ID图,但其实有很大区别。

Segmentation处理的色块图色值是有严格定义的,不同的色值代表着不同的物体:

Stable Diffusion教程!ControlNet 对象类控制及语义颜色对照表

Segmentation中有4个预处理器,其中anime_face是新增的处理动漫面部的预处理器:

Stable Diffusion教程!ControlNet 对象类控制及语义颜色对照表

要使用它,需要下载UNet.pth预处理器到对应的anime face segment预处理器文件夹中:

Stable Diffusion教程!ControlNet 对象类控制及语义颜色对照表

下面是anime face segment生成图的效果。说实话,我没用过这个预处理器,就生成效果而言,也不太确定它的应用场景:

Stable Diffusion教程!ControlNet 对象类控制及语义颜色对照表

剩下的三个预处理器分别是ofade20k、ufade20k和ofcoco,其中of和uf分别代表oneformer和uniformer两种算法,ade20k和coco是两种数据集。

所以,通过名字可以理解,ade20k数据集使用了of和uf算法训练了两种预处理模型,而coco只使用了of算法。

通过对比图可以看到,由于训练集的不同,语义分割的颜色色值差异比较大:

Stable Diffusion教程!ControlNet 对象类控制及语义颜色对照表

两种训练集的颜色对照表文后我也会分享给大家:

Stable Diffusion教程!ControlNet 对象类控制及语义颜色对照表

Stable Diffusion教程!ControlNet 对象类控制及语义颜色对照表

根据官方文档解释,coco是ControlNet1.1新增的,ade20k支持150种颜色,coco有182种颜色:

Stable Diffusion教程!ControlNet 对象类控制及语义颜色对照表

但我自己整理coco语义分割颜色对照表时,只找到133个对象,通过OneFormer的在线版也看到coco的对象数量是133,不知道官方文档是否有误:

Stable Diffusion教程!ControlNet 对象类控制及语义颜色对照表

另外,有一个有意思的点我想和大家讨论一下。大家都知道,当我们手动上传一张根据颜色对照表绘制的色块图时,预处理器需要选择“无”。

因此,我推测ControlNet模型可以同时识别coco和ade20k两个数据集的颜色。换言之,当我们自己绘制色块时,可以混合使用两个对照表的颜色:

Stable Diffusion教程!ControlNet 对象类控制及语义颜色对照表

在所有ControlNet的预处理结果预览框内,都有一个photopea的编辑按钮:

Stable Diffusion教程!ControlNet 对象类控制及语义颜色对照表

需要科学上网,点击后会打开一个类似在线版的PS:

Stable Diffusion教程!ControlNet 对象类控制及语义颜色对照表

虽然在其他预处理器中也有这个功能,但在Segmentation中,我觉得用它更加实用。例如,现在想要在场景中加一个人物,可以直接拖入一张人物照片:

Stable Diffusion教程!ControlNet 对象类控制及语义颜色对照表

抠出来:

Stable Diffusion教程!ControlNet 对象类控制及语义颜色对照表

填充成色块:

Stable Diffusion教程!ControlNet 对象类控制及语义颜色对照表

再导出png:

Stable Diffusion教程!ControlNet 对象类控制及语义颜色对照表

加载到ControlNet里点击生成,这里就多了一个人物:

Stable Diffusion教程!ControlNet 对象类控制及语义颜色对照表

再接下来是三种预处理器生成效果图的对比。我个人觉得还是要根据实际需求来选择使用哪种预处理器:

Stable Diffusion教程!ControlNet 对象类控制及语义颜色对照表

04 颜色对照表制作方法

最后来说说我是如何制作颜色对照表的吧。首先,我是不懂代码的,所以制作过程中用了很多取巧的方法。

对于ade20k这个颜色对照表,外网有现成的,我只是做了整理和翻译:

Stable Diffusion教程!ControlNet 对象类控制及语义颜色对照表

coco的颜色对照表在外网没有找到现成的,所以花了些功夫。首先,coco的训练集是开源的,可以直接在官网下载2017年的数据集:

Stable Diffusion教程!ControlNet 对象类控制及语义颜色对照表

解压后会得到一个JSON文件,用记事本打开它:

Stable Diffusion教程!ControlNet 对象类控制及语义颜色对照表

在ChatGPT的帮助下,我知道可以从categories字段找到训练集里的所有类别:

Stable Diffusion教程!ControlNet 对象类控制及语义颜色对照表

于是,我搜索并复制这个字段后的所有内容:

Stable Diffusion教程!ControlNet 对象类控制及语义颜色对照表

把它们在新的文本文档中简单整理大概成这样:

Stable Diffusion教程!ControlNet 对象类控制及语义颜色对照表

然后再复制到Excel中初步整理成表格,现在对象的名称有了,但在官方资料中我没有找到与颜色相关的信息:

Stable Diffusion教程!ControlNet 对象类控制及语义颜色对照表

所以我的方法是用现有的预处理器模型反推颜色。我先将这些对象名称使用SD的"从文本框或文件载入提示词"的功能批量生成图片:

Stable Diffusion教程!ControlNet 对象类控制及语义颜色对照表

再用coco预处理模型将它们转换成色块图。这里我使用了ComfyUI进行批量处理并保存预处理结果图:

Stable Diffusion教程!ControlNet 对象类控制及语义颜色对照表

然后将这些色块图批量导入PS,根据表格中的名称吸取图片中对应的色块HEX色值,再复制到表格中:

Stable Diffusion教程!ControlNet 对象类控制及语义颜色对照表

这个过程可能会比较麻烦,因为我们首先通过SD批量生成图,有些生成图不理想会导致色块图不易分辨。

例如,我在生成火车时,生成图总是火车内部的图,不便于语义分割,可能需要单独生成图并单独调整:

Stable Diffusion教程!ControlNet 对象类控制及语义颜色对照表

当所有图片的HEX色值都弄好以后,再批量复制到ChatGPT,让它帮我统一转换成RGB色值:

Stable Diffusion教程!ControlNet 对象类控制及语义颜色对照表

最后,将这些RGB数值填入表格中,再用ChatGPT告诉的方法,把表格中的RGB数值转化成填充色:

Stable Diffusion教程!ControlNet 对象类控制及语义颜色对照表

以上就是我制作coco训练集颜色对照表的方法了。当然,最后少了验证的环节,133个对象全部验证确实太花时间。各位鹿友在实际使用过程中遇到任何问题也可以告诉我。

如果觉得对自己有所帮助,请不要吝啬自己的一键三连,你们的支持对我很重要,谢谢!

欢迎关注「野鹿志」的微信公众号:

Stable Diffusion教程!ControlNet 对象类控制及语义颜色对照表

学完这篇教程的人还在学…

2 收藏 1

非特殊说明,本站 UiiiUiii.com 上的教程均由本站作者及学员原创或翻译,原作品版权归属原作者,转载请联系 @优优教程网 授权。

转载时请在文首注明,来源 UiiiUiii.com 及教程作者,并附本文链接。谢谢各位编辑同仁配合。UiiiUiii 保留追究相应责任的权利。

复制本文链接
img

发表评论 快来秀出你的观点

还可以输入 800 个字
yzm
 
 
加载更多评论
没有更多评论了

优优教程网 365 天打卡计划

点击 #优设每日作业# 进入微博超话页面,上传并发布你的练习作业,话题微博格式【 优优教程网365打卡计划 – DAY 01 】,优秀作业将有机会被 @优优教程网 官方微博转发点评。

/

支持键盘 ← → 键翻阅图片