万能换背景工作流 V4 更新,产品人像通用,改变光效保留细节
在本文中,我将介绍我对 ComfyUI 换背景工作流的最新改进。
过去几个月,我发布了多个更新,比如用了 IC-Light 和基于 Flux 的 ControlNet 提升效果。但最近,我开发了一个更快速、更强大的版本。
概述与新功能
在之前的 ComfyUI 版本中,IC-Light 和基于 Flux 的 ControlNet 可以帮助主体融入新背景。虽然效果不错,但这些方法速度慢且资源消耗大。更新后的工作流提高了效率与真实感,实现了更快的处理速度和更自然的结果。
主要改进:
- 速度与效率:更新的工作流使用 SDXL checkpoint和 10 个采样步骤,基础任务仅需约 6GB 显存。但在使用基于 Flux 的checkpoint实现增强效果时需要额外的显存。这种效率与性能的平衡确保了更快的结果,同时保持高质量。
- 自然融入背景:利用 SDXL 的精简版本改变主体的光影,使主体与新背景更自然地融合,同时保留重要的纹理细节。
- 改进的遮罩与细节迁移:借助更好的遮罩工具和细节迁移节点,即使是复杂的主体特征(如头发和服装)也能得以保留。
工作流示例 1:人像换背景
让我们从人像换背景开始。这是上传的图片。
首先,我使用这个工作流移除背景,并将主体重新定位到我们定义的新画布上。
轮胎和脚撑的某些部分被移除,因为它们将被沙地填充,新的背景设置在沙漠中。
接下来,通过使用 10 个采样步骤的 SDXL checkpoint的精简版本,我们可以改变主体光影并将其与新背景融合。在这个过程中,大部分主体细节得以保留,而这只需约 6GB 的 显存。
剩下的三个节点组使用基于 Flux 的checkpoint量化版本以及相同的 SDXL 进一步增强结果。
工作流示例 2:产品摄影换背景
现在,我们来看另一个例子:产品摄影,具体来说是替换 Dr Pepper 软饮料罐的背景。目标是将产品融入新的环境,同时保留细节。
这是用于换背景的上传图片。
我移除了背景和罐子的一些部分,因为希望这些部分在新背景中看起来被埋在冰中。
我将产品重新定位为平放状态,然后仅使用 SDXL 模型的精简版本生成新的背景。
最后,使用 Flux 模型获得了更佳的结果。
工作流下载与模型安装
模型:
- realvisxlV50_v50LightningBakedvae: https://www.liblib.art/modelinfo/8618d7c6ea5248c5821547cdb5ddd624
- diffusion_pytorch_model_promax: https://hf-mirror.com/xinsir/controlnet-union-sdxl-1.0/tree/main
- BiRefNet: https://myaiforce.com.cn/BiRefNet
- Big lama Remover: https://myaiforce.com.cn/big-lama-remover
基础版工作流 (1-7节点组):https://www.liblib.art/modelinfo/8d3df7d490f34df9b3d136fdfff2c959
发电解锁完整版工作流和更多其它工作流:https://afdian.com/p/b55f349acce011ef999052540025c377
节点组 1:加载模型和设置参数
工作流的第一步是设置基础模型和参数。这是移除背景过程的准备阶段,同时确保整个工作流中各个节点的兼容性。
具体步骤:
- 加载 SDXL checkpoint:首先加载 SDXL 精简版。
- 设置提示词:提示词是关键步骤。例如在人像场景中,需要明确提及“金发”、“黑色皮裤”和“白色摩托车”等颜色细节。提示词越详细,模型越能理解主体的具体要求。
- 加载 Flux checkpoint:在此组中,我们还加载了 Flux 微调checkpoint(例如 fluxRealistic),该模型有助于生成理想背景。同时配对了两个 LoRA:一个用于加速图像生成,另一个用于增强背景的清晰度。
- 加载 ControlNet:选择最新的全能 ControlNet,并通过其下方的节点设置 ControlNet 类型。
节点组 2:移除背景与遮罩优化
设置好模型和参数后,接下来进行移除背景,同时尽可能保留细节,尤其是复杂区域(如头发)。
具体步骤:
- 调整图像尺寸:首先,通过 “scale_to_side” 参数限制图像大小,确保显卡不会超载。根据需要可调整 “scale_to_length” 参数来匹配特定分辨率。
- 移除背景:使用 “BiRefNet” 节点将主体与背景分离。对于复杂边缘(如凌乱的头发),启用 “process_detail” 选项以避免丢失重要细节。
- 遮罩优化:背景移除后,使用 “Image Comparer” 和 “Preview Bridge” 等节点微调边缘,确保主体与新背景之间没有明显接缝。
节点组 3:主体定位与画布定义
移除背景完成后,进入主体定位和画布定义阶段。此节点组定义了主体在场景中的摆放位置。
具体步骤:
- 画布设置:基于 “ImageBlend” 节点定义画布。调整主体大小,并通过一系列滑块定位主体在画布上的位置。
- 最终调整:主体现已定位于场景中,确保其与新背景比例协调。可通过滑块调整大小、水平位置和垂直位置。
节点组 4:使用 SDXL 生成新背景
这个组使用 SDXL ControlNet 生成新背景,新背景专为匹配主体设计,与其无缝融合。
推荐使用 dpmpp_sde 采样器搭配 RealvisXL 精简版,以快速实现高质量效果。
生成的新背景看起来不错,但主体可能会出现细节错误。幸运的是,这些问题可以通过细节恢复解决,同时保留光影效果。这将在下一组中进行处理。
节点组 5:细节迁移
移除背景后的细节恢复是确保主体无缝融入新环境的关键步骤。ComfyUI 中的 Detail Transfer 节点设计用于从一张图像向另一张图像传递重要细节,是保留纹理、边缘和其他复杂特征的核心工具。以下是详细步骤:
具体步骤:
- 设置目标和来源图像
- Detail Transfer 节点需要两个关键输入:目标图像和来源图像。目标图像是需要增强或恢复的图像,来源图像则包含希望传递的细节。
- 来源图像通常是第三组生成的灰色背景图像,此图像中主体已与原始背景分离,但可能仍包含关键细节(如头发、纹理和边缘),这些细节在最终输出中不可或缺。
- 遮罩不需要的细节
- 为了仅传递主体细节而非原始背景(如灰色背景),需要使用遮罩。遮罩可将细节传递聚焦于主体,排除不必要的背景信息。
- 通常在移除背景过程中创建遮罩,然后输入到 Detail Transfer 节点的 mask 端口中,确保细节恢复仅限于主体的边缘和表面纹理。
- 选择正确的目标图像
- 你可能会问,“应选择哪张图像作为目标图像?”
- 一个合理的选择是第四组生成的图像(主体已定位于新背景中)。但问题在于:尽管使用了 Canny ControlNet 检测和保留主体边缘,但 ControlNet 并不完美。有时会有多余像素出现在主体原始边缘之外。此时需要修整主体边缘以移除这些多余像素。
- 修整主体边缘
- 使用 Big Lama Remover 节点将主体与背景分离。
- 主体干净分离后,使用 ImageCompositeMasked 节点将主体粘贴回新背景,同时修整掉 Canny 边缘之外的多余像素。
- 修整后的图像(无多余像素)成为 Detail Transfer 过程的目标图像。
- 传递细节
- 清理后的目标图像准备就绪后,可以继续 Detail Transfer。节点会将细节(如纹理)从来源图像(灰色背景图像)传递到目标图像(清理后的边缘图像)。
- 三种主要传递模式:
- Add Mode:将来源的细节添加到目标中,增强光影和纹理。
- Overlay Mode:覆盖来源细节到目标上,通常会产生更强烈的高光和阴影效果。
- Soft Light Mode:提供更柔和的效果,将来源细节与目标更细腻地融合。
- 可尝试这些模式,找到最适合项目的效果。
- 调整细节传递
- “blur_sigma” 参数微调传递的细节量。
- 替代方法:直接粘贴原始主体
- 如果更倾向于保留所有原始细节而无需重新光照调整,可直接使用 ImageCompositeMasked 节点将原始主体粘贴到新背景上。
- 这种方法保留了所有原始细节,但不会调整主体光照以匹配新背景。
- 选择最佳版本:图像输入切换
- 生成两种版本后(调整光影后的主体与原始粘贴的主体),可使用 Image Input Switch 节点比较两个版本,并选择最适合场景的版本。
- 然后通过 AutoAdjust 节点调整所选版本的颜色、亮度和对比度,确保主体无缝融入背景。
节点组 6:使用 SDXL 重绘主体以调整光照
在此节点组中,我们调整主体的光照,使其与新背景无缝融合。
- 扩展主体遮罩:略微扩大主体遮罩,以实现与背景的平滑过渡。
- Canny ControlNet:在调整光照的同时,保持主体边缘清晰。
- SDXL 重绘:重绘主体以匹配新背景的光照。
- 细节损失:重绘过程中可能会略微削弱一些细节,但将在下一节点组中恢复。
此节点将主体准备好,以更好地与背景融合,最终细节将在后续步骤中恢复。
节点组 7:细节迁移(精细化)
此节点组重新处理细节迁移过程,进一步优化结果,确保主体能够平滑地融入新背景。细节恢复方法与第五组类似。
节点组 8:基于 Flux 的背景重绘
在此组中,我们使用第一组加载的 Flux checkpoint对背景进行重绘,确保主体与周围环境无缝融合。
- 选择基础图像:通过“图像输入切换”节点选择两个基础图像之一:
- 图像 1:来自第五组的结果。
- 图像 2:来自最近一组的结果。选择将用于背景重绘的图像。
- 定义重绘的遮罩:
- 反转主体遮罩:将第三组的主体遮罩反转,生成需要重绘的区域。
- 扩展遮罩:使用“Mask Fix”节点略微扩展主体遮罩,确保重绘区域不覆盖主体。通过调整“erode_dilate”参数实现。
- 调整遮罩并平滑过渡:
- 预览遮罩:通过“Mask Fix”节点预览遮罩,并调整需要保护的区域(不会被重绘的区域)。
- 调整参数:修改“fill_holes”(设置为 0 检查是否有空隙)和“模糊”值,使重绘区域与保护区域之间过渡更加自然。
- 绕过 KSampler:在继续之前,使用“Fast Bypasser”节点绕过 KSampler,以防止其干扰重绘过程。
- 通过桥接预览优化遮罩:
- Preview Bridge节点进一步优化遮罩。确保将“restore_mask”选项设置为“always”,以便在编辑时保持遮罩激活。
- 手动调整:使用遮罩编辑器绘制并优化区域:
- 重点处理边缘区域(例如头发和轮胎周围),避免破坏关键边缘。
- 涂抹脚撑等元素以移除它们或优化背景融合。
- 最终调整:优化遮罩后,激活 KSampler 并重新运行工作流。
- 检查结果并根据需要调整,例如让轮胎更深地陷入沙地,以获得更真实的效果。
此步骤确保背景被重绘以匹配新场景,同时保持主体与环境之间的平滑过渡。
节点组 9:使用 SDXL 重绘主体以调整光照
在此组中,我们使用 SDXL 重绘主体,调整光照并使其与背景融合。相比 Flux,SDXL 在主体轮廓处理上提供了更高的控制。
- 重绘主体:使用上一组(第五组)生成的修改后主体图像指导重绘过程。
- 选择遮罩:选择两种遮罩之一进行重绘。如果您希望遮罩匹配修改后的主体遮罩,将其设置为“True”。如果未在“Preview Bridge”节点中进行修改,则设置为“False”。
- 优化遮罩:略微扩展并模糊遮罩,以确保主体边缘的平滑过渡。
- 光照调整:SDXL 调整光照,确保主体以一致的高光和阴影自然地融入新背景。
节点组 10:最终细节与颜色恢复
在最后一步中,我们专注于恢复主体的细节和颜色,以实现精致且逼真的效果。
- 选择用于细节恢复的目标图像:
- 图像 3:来自第八组(基于 Flux 的重绘)。
- 图像 4:来自第九组(SDXL 主体重绘)。
- 恢复颜色:使用“Image Blend”节点调整颜色。恢复仅限于通过 “layer_mask” 端口传递的遮罩,该遮罩来自早期组的修改主体遮罩。为确保平滑融合,略微模糊遮罩,避免颜色恢复与背景之间出现生硬的过渡。
- 控制不透明度:保持不透明度为100。此处降低不透明度可能导致问题,因此最好保持全强度以实现最准确的颜色恢复。
- 自然融合:为避免过度饱和或颜色失衡,我们将恢复颜色的图像与原始未修改图像进行混合。“blend_percentage” 参数允许您控制最终图像依赖恢复颜色与原始图像的比例。调整此参数可以微调最终效果,使其自然且和谐。
结论
ComfyUI 的换背景替换工作流不仅更快、更高效,还提供了更强的控制,能够将主体完美地融入新环境。通过使用SDXL checkpoint、基于 Flux 的节点以及详细的背景与主体优化技术,此工作流能够以最小的努力实现高质量、自然的效果。