【5.1】全自动写真

全自动写真 ControlNet 图生图 lora模型 蒙版处理 图像修复 图像放大
本文介绍了一种全自动写真生成的技术实现方法,旨在保持参考人物的脸部和姿势不变,同时改变其他部分。首先,通过分割算法(如SAM模型)制作脸部蒙版,确保脸部不被重绘,并使用ControlNet控制姿势。接着,通过图生图技术结合Lora模型调整写真风格,并引入节点优化提示词权重插值,确保与WebUI的效果一致。随后,利用ControlNet中的OpenPose和Lineart控制姿态,并通过背景去除节点优化线条约束。最后,通过ControlNet的Inpaint功能修复脸部边缘,使融合更自然,并加入放大功能提升图像质量。整个流程通过多个节点和技术的结合,最终实现了高质量的写真生成。
文章内容
思维导图
常见问题
社交分享

需求:给出参考人物,脸部不变,姿势不变,其他全部变,如下图,左侧为参考图,右侧为全自动出图

实现思路:

1、需求为脸部不变:需要把脸部遮住,出图时不被重绘

2、需求为姿势不变:需要用ControlNet控制姿势

3、其他全变:正常图生图即可

分步实现:

1、制作蒙版遮住脸部

制作蒙版是把脸部蒙版精准抠出,我们需要通过分割算法把脸部自动抠出,这里用到可以分割一切的seg(segment anything)

节点官网:https://github.com/storyicon/comfyui_segment_anything

根据官网示例可以看到,通过这个sam模型可以很方便的制作出一个脸部模型:

比葫芦画瓢,于是,小姐姐的脸完美扣出来了:

边缘羽化处理,这里通过FeatheredMask节点

节点网址:https://github.com/shadowcz007/comfyui-mixlab-nodes

通过FeatheredMask节点完美实现对边缘的羽化处理,如下图可以看到边缘明显不那么锐利:

2、图生图并加入lora控制写真风格

加载对应的大模型和lora,这里主要注意lora要和大模型相互匹配,通过lora模型的说明上可以看到使用什么大模型,如下图,冰雪奇缘这里用的麦橘V7

这里属于基础部分,我就直接放流程图了,参数调节根据lora模型要求填写即可

但是!这里依然有有一些细节需要注意,如果我们选择的适用于webui的提示词和参数配置的lora模型,我们需要用**webui的提示词权重插值的方法,**否则出的图和lora模型的表现有一定的差距。

啥意思呢,讲人话,就是目前大部分lora模型给出的效果图以及提示词都是从webui上得出得结论,但并不一定适用于comfyui,两种方式对提示词编码时的权重插值是有差异的,这也是经常有小伙伴通过ComfyUI还原WebUI时经常发现不能完美还原的一个非常非常重要的原因。

因此为了保证完美还原,这里又引入了一个节点:

节点网址:https://github.com/BlenderNeko/ComfyUI_ADV_CLIP_emb

这个节点允许我们把权重插值方法改为A1111,也就是WebUI的提词权重插值方式,如下图:

根据上面接上,我们把之前的流程再重新修改,于是如下图:

可以看出两张图是有明显差别的,第一次的图明显锐化比较严重,第二次就好很多了。

到这里,SD基础设置中的前半部分就ok了,后边就是对蒙版内容和现在的采样器进行结合

这里可以加入一点噪声,让重绘幅度大一些

如上图,我们生成测试一下,发现遮罩部分完美把脸部迁移了,背景也重绘了,目前达到我们的效果。

剩下的就交给ControlNet来处理吧。

3、ControlNet控制姿态

这里主要用了openpose和lineart来控制人物的姿态和脸型,确保生成的图正好被遮罩覆盖

用到了comfyui_controlnet_aux,和ComfyUl-Advanced-ControlNet

这里发现背景中的线条也被识别了,对我们重绘背景不利,因此需要先把背景去除,再进行线条约束

这里用到的是背景去除节点,节点官网:https://github.com/Loewen-Hob/rembg-comfyui-node-better

可以看到只需要一个节点就把背景去掉了,将此节点的输出接到之前的HED lines节点的输入上就可以了。

把他加到线条预处理之前就可以了

然后就是控制姿态了,加上openpose试一下:

把两个ControlNet串联后接入到采样器就可以啦,先看下生成效果:

到这里,其实按需求来讲就已经ok了,但实际出图不是非常完美,因此我们再进行优化

4、修补

修图主要是对脸部边缘部分进行修复,使其融合的更自然,这里用到了ControlNet中的inpaint,我们只需要让其对蒙版和原图的衔接部位进行重绘即可,控制好幅度应该可行。

于是,ControlNet中仍然需要再串联一层inpaint:

如上图,把inpaint串联上去,我们再看下效果吧:

基本上完美还原了

5、放大

考虑到原图像素可能一般,这里加一个放大功能,比较基础,就直接放流程图了

当然,这里用的sd放大会经过重采样会和原图略有区别,就和美颜后一样,这个可以通过调节降噪幅度自行调节到自己想要的程度。

最终出图效果:

最后,流程图全貌

如果有启发可以点左下角有启发,让我知道哦;如果想互动可以点右下角写留言与我互动

点我跳转目录合集

思维导图生成中,请稍候...

问题 1: 如何确保在生成图片时脸部保持不变?
回答: 使用分割算法(如SAM模型)制作脸部蒙版,并通过FeatheredMask节点对蒙版边缘进行羽化处理,确保脸部在生成图片时不被重绘。

问题 2: 如何控制生成图片中人物的姿势不变?
回答: 使用ControlNet工具,结合openpose和lineart来控制人物的姿态和脸型,确保生成的图片与参考图的姿势一致。

问题 3: 如何确保生成的图片风格与参考图一致?
回答: 加载与参考图风格匹配的大模型和LoRA模型,并通过调整提示词权重插值方法(如使用A1111插值方式)来保证风格的一致性。

问题 4: 如何处理背景线条对生成图片的干扰?
回答: 使用背景去除节点(如rembg-comfyui-node-better)先去除背景,再进行线条约束,避免背景线条影响生成效果。

问题 5: 如何修复脸部边缘与背景的融合问题?
回答: 使用ControlNet中的inpaint功能,对蒙版和原图的衔接部位进行重绘,控制好幅度以使脸部边缘与背景融合更自然。

问题 6: 如何提高生成图片的分辨率?
回答: 使用SD放大功能对图片进行放大,并通过调节降噪幅度来控制放大后的图片质量,使其更清晰。

问题 7: 为什么在使用ComfyUI时,生成的图片与WebUI的效果有差异?
回答: 这是因为ComfyUI和WebUI在提示词编码时的权重插值方法不同。可以通过引入特定节点(如ComfyUI_ADV_CLIP_emb)将权重插值方法改为WebUI的方式来解决。

问题 8: 如何确保生成的图片背景与参考图不同?
回答: 在生成图片时,通过图生图的方式对背景进行重绘,同时使用ControlNet控制人物姿态和脸部不变,确保只有背景发生变化。

问题 9: 最终生成图片的效果如何?
回答: 最终生成的图片在保持脸部、姿势不变的同时,背景和其他部分都进行了重绘,整体效果自然且符合需求。

问题 10: 整个生成流程的关键步骤有哪些?
回答: 关键步骤包括:制作脸部蒙版、控制姿势、图生图并加入LoRA控制风格、使用ControlNet控制姿态、修复脸部边缘融合、放大图片以提高分辨率。