ComfyUI:从入门到精通
对于这篇文章,我想开始挑战,让初学者更容易在开源空间内进行高级图像生成。我意识到在 20 分钟内完成这项任务相当繁重。
我们将介绍该领域的最新动态、哪些开源模型和工具很受欢迎、了解扩散的工作原理,并深入研究 LoRA、ControlNets 和 IP 适配器等关键技术。
我们还将探索不同的用例以及如何将各种技术应用于每种用例。
最后,我们将使用 Flux 创建一个室内设计师,该设计师会拍摄卧室的图像并生成不同的设计。你可以在下面看到它的样子。
如果你热衷于快速上手,可以跳过介绍直接进入构建。
1、简介
这部分适合所有人,即使你不想深入研究使用自定义图像生成的技术细节。
我们将介绍图像生成、发布的开源和专有模型、可用的技术、一些用例和构建成本。
我在我的常用存储库中收集了一系列资源和信息,你稍后可以在这里找到。
1.1 图像生成式AI
如果你完全了解生成图像,应该进行一些研究。
过去几年,这个领域出现了一些重大创新。
但这不仅仅是你现在可以用提示生成高质量的图像,而且还涉及新技术如何让你精确控制这些图像中的品牌、产品美学和个性化风格等方面。
开源社区在过去几年中一直非常忙碌。我们将介绍不同的用例以及这项技术是如何变化的。
1.2 封闭与开源模型
我们应该首先了解的是这个领域可用的 AI 模型以及您应该专注于使用哪些模型进行构建。
可能最古老且使用最广泛的是 Stable Diffusion 1.5。它背后有一个庞大的社区并且完全开源,这意味着你可以在其上构建商业 API。
2024 年,Black Forest Labs 发布了 Flux,作为 MidJourney 等闭源系统的竞争对手。
Flux Schnell 是完全开源的,具有商业许可,但更受欢迎的 Flux Dev 不是。这并不意味着你不能将 Flux Dev 的输出用于商业用途,但你不能在模型之上构建系统并出售它。
你可以在上方看到我关于不同流行模型的涂鸦,注意它们是否是开源的并且具有商业许可。如果想要整个列表,请查看此处。
现在,虽然你可能想直接跳转到 Flux 进行所有项目,但请记住,模型可用时间越长,围绕它构建的工具和资源就越多。
Stable Diffusion 1.5 和 Stable Diffusion XL 拥有一些最大的社区,已经开发了许多工具和技术。在开始构建之前,不要完全忽视它们。
1.3 图像用例
在这个领域中可能存在很多用例。
几天前,几张AI生成的图像在 LinkedIn 上流传,它们显然非常真实,人们看不出区别。这些图像是由这位创作者在 ComfyUI 中根据一位女性度假照片的微调 LoRA 创建的。
现在,可能性不止于此。
你将看到我在下面列出的一些常见用例,以及它们对应的潜在技术。
我这里有一个更有条理的表格。
但是,我们所做的是将不同的工具组合在一起以适应不同的工作流程。你经常会看到人们将 ControlNet 与 IP 适配器和其他 LoRA 一起使用。
1.4 ComfyUI 与替代方案
现在,要构建高级生成图像应用程序,我们需要查看可用的工具。
我相信有很多商业选择,但也有很多开源选择。这些在各方面都更好,因为它们拥有更大的社区来推动创新,而且它们是免费的。
迄今为止发布的最强大软件是 ComfyUI。
ComfyUI 是一个基于节点的可视化 GUI,可让你完全控制扩散过程,使其成为创建自定义生成图像甚至视频的绝佳选择。
然而,许多人认为 ComfyUI 不必要地复杂,所以让我们快速探索一些替代方案:
许多替代方案的问题在于它们可能具有限制性,而且现在已经过时。例如,A111 是比较知名的 UI 之一,但目前它不支持较新的 Flux 模型。
ComfyUI 有一个学习曲线,学习基础知识可能需要几天时间,但任何技术人员都应该掌握它。
如果你仍然觉得 ComfyUI 过于复杂,那么一个不错的替代方案是 SwarmUI,它建立在 ComfyUI 之上并提供简化的 UI。
无论你选择哪种工具,本文对于理解技术仍然有用。
1.5 高级图像生成的经济学
如果你是利益相关者,让我们简要谈谈使用 ComfyUI 等工具进行构建的成本。
要有效运行这些工具,你需要良好的硬件,包括具有高 VRAM 的 GPU,这需要一点投资。
或者,你可以租用云 GPU(我们都这样做),但这可能会很快增加成本。最便宜的选项起价约为每小时 0.60 美元,具体取决于你的设置。
尽管成本高昂,但这仍然可能比聘请外部顾问来构建、部署和维护工作流程更好。让你的团队内部学习不仅可以节省长期成本,还可以在内部培养专业知识。
话虽如此,获得高质量的结果并不容易。这项技术正在迅速发展,网络上有很多过时的节点和工作流程。它也相当技术性,因此没有合适技能的团队可能会遇到困难。
投资学习你可以用它做什么仍然是件好事。
2、技术细节
让我们深入了解更多技术内容,以便我们了解图像生成的工作原理。我们还将设置 ComfyUI 并探索其布局,同时介绍 LoRA、ControlNets 和 IP 适配器等关键技术。
在本节结束时,我们将构建室内设计师工作流程,这是一个相当简单的用例。
2.1 图像生成的工作原理
图像生成与计算机视觉不同,尽管有一些重叠。计算机视觉专注于识别和分析图像的内容。
如果你有兴趣探索计算机视觉用例,请查看我一年前写的一篇文章。
另一方面,图像生成属于生成式 AI 类别。它是关于创建内容,而不是分析或解释内容。这个领域的主要模型类型是 GAN 和扩散模型。
本文重点介绍扩散模型,这是 ComfyUI 的主要选择,但如果您愿意,有几种资源可用于深入研究这个领域。
我想提一下,当我们用扩散模型生成图像时,我们从随机噪声开始,模型逐步对其进行细化,直到形成连贯的图像。这个过程由我们的提示(嵌入)指导:
有些人称之为用噪音创造艺术。
这里有多个部分发挥着重要作用。
我们有基础模型本身,即 CLIP 模型,它将我们的提示转换为模型可以使用的东西(即嵌入),以及一个自动编码器,它可以解码过程的输出,为我们提供可以使用的最终图像。
在使用 MidJourney 等更高级的 UI 时,你不会参与此过程,但在 ComfyUI 中,你可以拥有更多控制权。
2.2 设置 ComfyUI
现在这部分很棘手。如果你有好的硬件,那么只需将其安装在你的计算机上即可。你可以查看适用于 Windows 和 Mac 的指南。
但是,在没有 GPU 的 MacBook 上使用 ComfyUI 会很慢。如果你像我一样没有耐心,你需要一个 GPU。
有几种可用的选项,我在这里概述了它们。
我不想推荐任何特定的,但有些可以在几分钟内让你启动并运行,这在开始时是理想的。不幸的是,这将花费每小时约 0.99 美元,这相当昂贵。
一旦你每天使用它,我建议寻找更好、更具成本效益的选择。我从来没有热衷于拥有高端硬件,但这肯定正在改变。
2.3 布局
我假设你已经找到了运行 ComfyUI 的方法,但如果没有,你只是想尝试下一部分的画布,请转到此处。这个网站将让你免费运行更简单的东西(虽然你会被排成队列,所以速度可能会很慢)。
一旦你看到面前一片空白的黑屏,你可能会感到畏惧。不过,它很容易上手,你不需要知道这个工具的每个部分就可以使用它。
需要了解的关键是,左键双击可让你搜索要添加到工作流程中的节点:
要加载模型,你只需找到节点 Load Checkpoint
(加载检查点) 。
要使用“加载检查点”节点加载模型,首先需要下载它们并将它们放在模型目录中才能访问它们。这同样适用于其他模型,如 LoRA、ControlNets 等(稍后我们会介绍)。
你需要将所有使用的模型放在 ComfyUI 模型目录中。
如果使用的是托管服务提供商(如上面的托管服务提供商),它通常会帮助你加载这些初始模型。
还应该知道,可以使用 JSON 文件轻松下载和上传工作流。你只需在画布中粘贴工作流的 JSON 即可。
如果需要安装或更新自定义节点,则需要访问 ComfyUI 管理器。对于由于缺少节点而引发错误的工作流,可以在管理器中搜索并安装或更新它们。
在开始我们的用例之前,我们将介绍一个用于稳定扩散的简单工作流和另一个用于 Flux 的简单工作流。
2.4 关键构建块
我想将图像生成的工作原理与此部分联系起来,以便它有意义。
你可能会认为这个过程不必要地复杂,但我们设置整个过程是有原因的,因此我们可以在以后需要时将其分解并做一些非常酷的事情。
我们将添加的第一个节点是加载检查点(如上所述):
这是加载模型(检查点)及其相关组件的关键节点,例如 CLIP 模型,它是一个文本编码器,可将我们的提示解释为模型可以理解的内容。
它还为我们提供了嵌入在检查点中的 VAE(变分自动编码器),它在编码过程中将图像压缩到潜在空间中,并在解码过程中将它们扩展回全分辨率。
你可以单独加载所有这些,我们稍后将为 Flux 执行此操作。
显然,检查点是管道的骨干。对您来说可能很新奇的是直接处理 CLIP 和 VAE,它们在使用 MidJourney 等更高级系统时是隐藏的。
如果您感到不知所措,请不要担心,很快就会明白。
之后,我们需要通过搜索获取两个 CLIP 文本编码(提示)节点。我们需要一个用于正提示,另一个用于负提示:
这应该很明显,但在一个提示中,输入想要的内容,在第二个提示中,输入不想要的内容。
如果右键单击这些节点,可以更改它们的颜色和标题,使它们更容易区分:
我们还将直接将 CLIP 模型链接到提示。该模型将文本转换为向量(数学表示),指导模型如何塑造图像。
接下来,我们需要添加一个空潜在图像节点。此节点在潜在空间中创建一个充满随机噪声的“空”潜在图像,这将是扩散过程的起点:
可以设置要通过此节点生成的图像的尺寸和批量大小。
所有这些节点到位后,我们还将添加 KSampler:
KSampler 协调整个去噪过程,即它将随机噪声转换为我们生成图像的潜在表示。
你可以保留此设置,但可能需要设置随机种子。
确保将模型、正负提示和潜在图像连接到 KSampler(见上图)。
如果你愿意,可以使用自定义采样器,但对于你的第一次,最好坚持使用开箱即用的东西。
所有这些节点到位后,我们需要将 KSampler 生成的最终潜在表示解码为全分辨率图像。
VAE 解码节点将处理此问题,因此请务必也添加该节点:
为了在流程完成后保存图像,我们将添加 ComfyUI 提供的“保存图像”节点。
完成的工作流程将如下所示:
你只需按“队列”即可运行工作流程。
图像将出现在“保存图像”节点中:
由于我在“空潜在图像”节点中将批处理大小设置为 4,因此我有四张图像。根据你使用的模型,图像可能看起来不同。
我们将在下一节介绍检查点的工作原理。
这是你第一次加载 ComfyUI 时通常会获得的标准初学者工作流程。
如果想使用 Flux 模型,则需要进行一些调整。
首先,分别加载模型、CLIP 和 VAE。你还需要两个 CLIP 模型和 FluxGuidance 节点。
下面是一个可以遵循的 Flux 示例:
Flux 旨在使用标准 CLIP 模型和 T5 语言模型标记器来读取提示,这就是为什么我们在这里加载两个 CLIP 模型而不是一个。据说这就是 Flux 具有出色提示跟随性的原因。
FluxGuidance 不是必需的,但它可以帮助文本编码器将图像生成“推”得更远一些,使其更符合提示。它应该可以提高模型遵循提示的效果
你可以将其设置为 1.0 到 100,可以尝试一下。
现在,从这里开始,如果你有兴趣了解更多基础知识,我推荐这个教程。这个工具的妙处在于你可以真正控制你想要的图像生成方式。
2.5 模型检查点和 LoRA
正如我们在介绍基础知识时看到的那样,如果你使用任何 ComfyUI 托管服务,你可能会在添加加载检查点节点时看到一些可用的模型:
如果你在本地安装了 ComfyUI,则需要找到文件夹 models\checkpoints
,将所需的模型放入其中,然后重新加载 UI 以在下拉列表中查看它们。
如果你是 ComfyUI 的新手,可能想知道如何找到这些模型以及将哪种文件放在那里。在寻找模型时,你可以使用 HuggingFace 和 Civitai。
请参阅下图了解如何通过 Civitai 查找检查点,方法是转到模型页面,然后过滤 Checkpoint:
模型非常大。如果你不知如何处理,我在这里收集了一些流行的检查点。你要查找的文件将以 .safetensors
作为文件扩展名。
找到所需的文件后,下载并将其放在 ComfyUI 中的 models\checkpoints\
目录中。是的,这将花费相当多的时间,具体取决于你的硬件和连接。
这将我们带到下一个主题:LoRA。
LoRA 的尺寸要小得多,可以连接到不同的检查点。它们是模型的微调附加组件。将基础模型(检查点)视为建造房屋的蓝图。LoRA 就像添加自定义油漆而不改变房屋本身的结构。
每个 LoRA 都附带自己的说明,因此请务必阅读模型页面以了解如何使用它。有时你需要在提示中使用触发词或其他关键字才能使其正常工作。
添加 LoRA 非常简单。找到一个你喜欢的——就像我们寻找检查点一样——下载它,并将其粘贴到 models\loras\
目录中。如果重新加载 ComfyUI,应该可以在 Load LoRA 节点的下拉列表中看到它。
注意:你可以微调自己的 LoRA,但目前需要自己挖掘资源。
请参阅下图,了解如何简单地添加 Load LoRA 节点、设置 lora_name
(基于我下载的 LoRA),然后将其连接到 Checkpoint 和 CLIP 模型:
如果我们查看之前的 Flux 工作流程,添加 AmateurPhoto LoRA 将产生如下所示的完成的工作流程:
这里唯一的变化是 LoRA 节点,现在它具有模型和通过它的 CLIP。如果我们运行它,我们会看到我们现在用这个 LoRA 得到了一只更加逼真的熊猫。
有许多基于不同模型的流行 LoRA。是的,LoRA 需要与基础模型兼容,你不能混合它们。这意味着如果你使用 Flux Dev 作为基础,需要寻找专门针对 Flux Dev 的 LoRA。
3、关键技术(你想要使用)
就像我们刚刚经历的那样,基础知识涉及使用普通检查点模型以及 LoRA 进行样式设计。但这个领域如此伟大的原因在于除此之外还有更多的可能性。
本部分是关于 ControlNets 和 IP 适配器。
ControlNet 和其他调节模型允许你根据图像的边缘、深度图、涂鸦或姿势更精确地指导图像生成过程。
你可以看到我在下面使用 Canny Edge、深度图和姿势测试一些处理狗图像的选项:
有几种输入选项,但你需要能够正确处理这些输入的特定模型来生成图像。
例如,如果我们将狗的 Canny Edge 与兼容的 ControlNet 模型一起使用,则生成的图像将遵循轮廓,同时可以自由解释其他所有内容,例如颜色和纹理。
这就是为什么选择一个背后有庞大社区的基础模型很重要,这样你就有大量优秀的 ControlNet 模型可供选择。
另一方面,IP 适配器模型可以被认为是单图像 LoRA。它们将样式从参考图像转移到新图像。因此,IP 适配器可让你传输样式、合并图像并模仿面部等元素。
我收集了一些 ControlNets 和 IP 适配器指南,这些指南有助于理解基础知识。我还包含了各方面的流行模型,按基本模型组织,位于同一存储库中。
除了这两种技术之外,还有更流行的技术,例如修复、修复、升级和分割。我发现这些更容易掌握。
可以在下面看到我为每种技术组织的表格:
有些技术并不总是需要特定的模型,但为了获得良好的结果,建议使用一个模型。
不过,这项技术让我们可以做一些非常酷的事情。
你可以将品牌风格和徽标转移到新图像上,可以将产品放入新生成的具有不同节日主题的图像中,以用于社交媒体,可以将公司照片变成卡通。
我在这里的同一个存储库中收集了一些用例和相关技术。这个领域有很多创造力,我们将在未来几年内看到它的发展。
对于本文中的用例,我们需要查看可用的工具,因为我想使用 Flux。
3.1 Flux 工具
正如我之前提到的,我们仅限于每个基本模型可用的 ControlNets 和 IP 适配器。这些可以由原始创建者或社区创建。
由于 Flux 于 2024 年发布,因此它没有与 Stable Diffusion 1.5 相同的社区支持。但是,Flux 仍然有一些非官方选项。你可以在此处查看相同的存储库以探索其中的一些。
话虽如此,2024 年 11 月,Flux 的创建者 Black Forest Labs 发布了一些名为 Flux Tools 的新模型,以帮助使用 FLUX.1 控制和引导图像。
这些工具是 Flux 的官方 ControlNet 和 IP 适配器模型。总共发布了四个新模型:Canny、Depth、Fill 和 Redux。
现在,我不知道我是否会建议你使用这些模型来构建生产用例,因为它们的结果质量可能不如 SD 1.5 或 SDXL 的 ControlNets。我对此做了一些研究,社区发现与他们合作很困难,因为他们仍然不可靠。
但我还是决定为接下来要创建的室内设计师工作流程选择一个。如果你没有得到想要的结果,不要气馁,继续构建。
4、构建室内设计师
我已经完成了这个工作流,你可以在这里找到。你可以简单地加载并运行它,但这个练习的目的是让你自己学习。
我们将使用深度图,以便模型了解家具和空间应该是什么样子。
为了测试成品,我将获取一个通用的卧室图像。见下图:
我们将立即查看结果,以便你了解使用简单的工作流程可以实现什么:
我在这里只是在添加一些通用 LoRA 以从基础图像中获取这些图像时提示。
我相信人们会在某个时候开始根据以前的工作构建室内设计师 LoRA。这对当前的设计师来说也是一个可怕的可能性,但希望他们能利用它来发挥自己的优势。
4.1 创建深度图
我们需要做的第一件事是在 ComfyUI 中加载一个新的空白画布,并确保你有足够的 VRAM 来运行此工作流程。
我建议使用 24GB 的 VRAM 和 48GB 的 RAM(取决于你是否添加 LoRA)。
接下来,我们需要添加加载图像节点以及 AIO Aux 预处理器节点。此节点将帮助预处理图像以获得精明或深度。
可以在下面看到我测试 canny 和深度的示例:
解释一下,这些图像将帮助我们生成遵循深度图或 canny 边缘的 AI 图像。你可以使用特定的深度和 canny 节点,但我更喜欢使用 DepthAnythingv2 预处理器来获取深度,如上所示。
可以在此处选择使用 canny 而不是深度,但我发现官方的 Canny Flux 模型并不是那么好。
如果你想将 canny 与 Flux 一起使用,请查看这个非官方模型列表,你可以尝试这些模型。
在我们继续之前,可以删除 canny 边缘处理器。
4.2 模型
从这里开始,我们将按照之前对 Flux 执行的相同步骤进行操作。添加加载扩散模型、DualCLIPLoader 和加载 VAE 节点。
记住双击左键以搜索这些节点:
对于“加载扩散模型”节点,你需要一个名为 flux1-depth-dev
的新模型。如果尚未下载,可以在此处找到它。如果使用的是canny图像,则需要 flux1-canny-dev 模型。
请记住,这些模型是专门为处理深度和canny图像而设计的。没有它们,你将无法以相同的方式控制输出。
对于 CLIP 模型,需要两个模型。请参阅图片了解哪些模型需要用到它们 — 它们与我们之前用于简单的 Flux 工作流程的模型相同。可以在此处找到它们。
如果缺少任何内容,你将收到错误,并且需要找到缺少的模型并将其放在正确的文件夹中。不必在这里使用两个 CLIP,但建议这样做。
4.3 提示
接下来,需要设置正提示和负提示(尽管 Flux 似乎忽略了负提示)。
你需要指定想要的设计,因此提示非常重要。去看看人们如何提示设计空间:
如果你想使用此工作流程,应该能够加载我的确切提示。
4.4 连接深度图
接下来,我们将添加一个我们以前没有使用过的新节点,称为 Instruct Pix to Pix Conditioning。此节点有助于对图像到图像转换任务进行调节,并对生成的图像进行精确控制。
可以在这里改用 ControlNet 节点,但我没有尝试。
我们将深度图像连接到标有“像素”的端口,然后将其余节点连接到该端口。
请参见下图以确保你操作正确:
从这里开始,我们可以按照与之前工作流程相同的步骤,将所有节点连接到 KSampler:
我设置了一个随机种子并将步骤增加到 40,这应该可以提高生成图像的质量。
我们在这里还使用 VAE Encode 节点。虽然这不是绝对必要的,但我使用原始图像的尺寸作为潜在值,这有助于稍微提高质量。
你可以从这里运行它:
你应该在“保存图像”节点中看到新图像。我还在这里添加了一个 LoRA:
有关如何查找 LoRA,请参阅上一节。对于此示例,我使用的是非常流行的 iPhone Photo LoRA。
现在,我建议尝试使用不同的图像、提示和 LoRA,看看你可以实现什么。提示非常重要,所以不要低估它的重要性。
可以向上滚动以再次查看我的结果。
5、结束语
从这里开始,你最好在此基础上进行构建,也许可以获取图像,然后使用视觉模型分析布局并根据用户的要求自动执行提示。
当你充分利用提示和深度图来解释内部时,将获得最佳结果。
你可能还希望将此工作流程部署为 API,以使其更易于使用。我一定会在以后的文章中介绍这一点。
原文链接:Learn to Build Advanced AI Image Applications
汇智网翻译整理,转载请标明出处