交作业:微博搜索话题 #优设每日作业# 进入话题页即可发布作业
上一篇文章我们分享了 ControlNet 三维类控制:
今天我们将围绕着 ControlNet 的对象类控制进行讲解,废话不多说,进入今天的正题吧!
对象类包括OpenPose(姿态)和Segmentation(语义分割)两种,主要用于控制场景中的对象。
原计划今天分享的内容可以提前两天发布,但由于整理Segmentation(语义分割)的颜色对照表花费了一些时间。
本着授之以鱼不如授之以渔的想法,今天最后我会简单分享一下我是如何整理Segmentation的颜色对照表的。
OpenPose(姿态)是鹿友们最常用的功能,顾名思义,它可以帮助我们控制对象的动作、手势等。我个人由于不常生成人物图,所以用得很少。
随着SD的更新,OpenPose新增了很多预处理器。截至2024年5月31日,共有9款预处理器:
但其实大体可以分为三类:第一类是openpose类,包括早期的openpose、full、hand、faceonly、face,以及后面新增的dw openpose full:
其中,使用dw_pose需要首先下载dw-ll_ucoco_384.onnx和yolox_l.onnx这两个预处理模型,并将它们放入ControlNet对应的openpose预处理器模型文件夹中:
这类预处理器的特点是通过提取图片中对象的骨架图,从而达到控制姿态的效果。
虽然openpose类有5种预处理器,但从名字就可以分清它们各自控制的范围:
其中,我们着重对比一下openpose_full和dw_openpose_full。这两款预处理器都可以提取姿态、手部和脸部的所有信息。
通过这张对比图可以看到,dw_openpose_full在手部的提取上更加精准,而openpose_full在手部细节上有所缺失:
就这个案例而言,dw_openpose_full生成的图也会比openpose_full更准确一些:
最新版的ControlNet将openpose-editor插件整合在一起,因此在骨架类openpose的预处理结果预览框中,会有一个编辑按钮:
可以手动编辑骨架或者以参数的方式微调骨架。如果你对openpose识别出来的骨架不满意,可以使用这个功能进行调整:
接下来是densepose类,对应的预处理器有densepose和densepose _parula:
使用这类预处理器需要首先下载densepose_r50_fpn_dl.torchscript到ControlNet对应的densepose预处理器模型文件夹中:
并且下载controlnetFor_v10.safetensors模型到ControlNet的模型文件夹中:
这类预处理器与openpose最大的区别在于,它提取出来的是轮廓,能够处理姿态中重叠的部分。
densepose和densepose_parula的区别在于,densepose生成的是紫色背景和主体,而densepose_parula生成的是黑色背景和蓝色主体:
两种预处理器对比,我感觉也无法评判好坏:
下面是两种openpose和两种densepose生成图的对比。个人感觉在这个案例中,还是dw_openpose_full更胜一筹:
最后一种是animal_openpose,这也是新增的预处理器。严格说来,它也算作openpose类,提取的是骨架图。
但由于它是专门针对四足动物的预处理器,所以我把它单独提出来分享:
使用它需要首先下载rtmpose-m_simcc-ap10k_pt-aic-coco_210e-256x256-7a041aa1_20230206.onnx到ControlNet对应的openpose预处理器模型文件夹中:
然后再将control_sd15_animal_openpose_fp16.pth下载到对应的ControlNet模型文件夹中:
下方就是原图,预处理结果以及生成图的对比:
Segmentation(语义分割)可以将图片提取为色块图,看起来像我们在三维软件中渲染的对象ID图,但其实有很大区别。
Segmentation处理的色块图色值是有严格定义的,不同的色值代表着不同的物体:
Segmentation中有4个预处理器,其中anime_face是新增的处理动漫面部的预处理器:
要使用它,需要下载UNet.pth预处理器到对应的anime face segment预处理器文件夹中:
下面是anime face segment生成图的效果。说实话,我没用过这个预处理器,就生成效果而言,也不太确定它的应用场景:
剩下的三个预处理器分别是ofade20k、ufade20k和ofcoco,其中of和uf分别代表oneformer和uniformer两种算法,ade20k和coco是两种数据集。
所以,通过名字可以理解,ade20k数据集使用了of和uf算法训练了两种预处理模型,而coco只使用了of算法。
通过对比图可以看到,由于训练集的不同,语义分割的颜色色值差异比较大:
两种训练集的颜色对照表文后我也会分享给大家:
根据官方文档解释,coco是ControlNet1.1新增的,ade20k支持150种颜色,coco有182种颜色:
但我自己整理coco语义分割颜色对照表时,只找到133个对象,通过OneFormer的在线版也看到coco的对象数量是133,不知道官方文档是否有误:
另外,有一个有意思的点我想和大家讨论一下。大家都知道,当我们手动上传一张根据颜色对照表绘制的色块图时,预处理器需要选择“无”。
因此,我推测ControlNet模型可以同时识别coco和ade20k两个数据集的颜色。换言之,当我们自己绘制色块时,可以混合使用两个对照表的颜色:
在所有ControlNet的预处理结果预览框内,都有一个photopea的编辑按钮:
需要科学上网,点击后会打开一个类似在线版的PS:
虽然在其他预处理器中也有这个功能,但在Segmentation中,我觉得用它更加实用。例如,现在想要在场景中加一个人物,可以直接拖入一张人物照片:
抠出来:
填充成色块:
再导出png:
加载到ControlNet里点击生成,这里就多了一个人物:
再接下来是三种预处理器生成效果图的对比。我个人觉得还是要根据实际需求来选择使用哪种预处理器:
最后来说说我是如何制作颜色对照表的吧。首先,我是不懂代码的,所以制作过程中用了很多取巧的方法。
对于ade20k这个颜色对照表,外网有现成的,我只是做了整理和翻译:
coco的颜色对照表在外网没有找到现成的,所以花了些功夫。首先,coco的训练集是开源的,可以直接在官网下载2017年的数据集:
解压后会得到一个JSON文件,用记事本打开它:
在ChatGPT的帮助下,我知道可以从categories字段找到训练集里的所有类别:
于是,我搜索并复制这个字段后的所有内容:
把它们在新的文本文档中简单整理大概成这样:
然后再复制到Excel中初步整理成表格,现在对象的名称有了,但在官方资料中我没有找到与颜色相关的信息:
所以我的方法是用现有的预处理器模型反推颜色。我先将这些对象名称使用SD的"从文本框或文件载入提示词"的功能批量生成图片:
再用coco预处理模型将它们转换成色块图。这里我使用了ComfyUI进行批量处理并保存预处理结果图:
然后将这些色块图批量导入PS,根据表格中的名称吸取图片中对应的色块HEX色值,再复制到表格中:
这个过程可能会比较麻烦,因为我们首先通过SD批量生成图,有些生成图不理想会导致色块图不易分辨。
例如,我在生成火车时,生成图总是火车内部的图,不便于语义分割,可能需要单独生成图并单独调整:
当所有图片的HEX色值都弄好以后,再批量复制到ChatGPT,让它帮我统一转换成RGB色值:
最后,将这些RGB数值填入表格中,再用ChatGPT告诉的方法,把表格中的RGB数值转化成填充色:
以上就是我制作coco训练集颜色对照表的方法了。当然,最后少了验证的环节,133个对象全部验证确实太花时间。各位鹿友在实际使用过程中遇到任何问题也可以告诉我。
如果觉得对自己有所帮助,请不要吝啬自己的一键三连,你们的支持对我很重要,谢谢!
欢迎关注「野鹿志」的微信公众号:
学完这篇教程的人还在学…
非特殊说明,本站 UiiiUiii.com 上的教程均由本站作者及学员原创或翻译,原作品版权归属原作者,转载请联系 @优优教程网 授权。
转载时请在文首注明,来源 UiiiUiii.com 及教程作者,并附本文链接。谢谢各位编辑同仁配合。UiiiUiii 保留追究相应责任的权利。
发表评论 快来秀出你的观点