Comfyui基础认知
定义
ComfyUI 是一个基于“节点”工作流的 AI 图像生成工具。
如果把常用的 AI 绘图软件比作一台“全自动洗衣机”,你只需按一个按钮,它自动完成所有步骤。那么 ComfyUI 就是一套“乐高积木”,你需要自己挑选积木(节点),把它们连接起来,设计出一套专属的流水线,最终生成图像。
功能
Comfyui最开始确实只是一个图像生成工具,但是随着生态的一步步的繁荣壮大,功能也越发的丰富,甚至很多简单的功能即使不使用模型完全依靠丰富的插件即可完成。
- 图片生成与修改
这是comfyui最基础的功能,比较常见的就是文生图、图生图、局部重绘、高清放大、图像扩展等多种功能。
- 视频生成
ComfyUI 是目前 AI 视频生成最灵活的平台,如果说算上丰富的API调用的话,也可以说最强大的视频生成平台。
比较常见的功能有图生视频,文生视频,视频插针,动作迁移,数字人迁移等多种功能
- 音乐生成
comfyui也同样包含音乐生成的功能,基本上开源的音乐项目都会进行适配。虽然和闭源平台的效果有不小的差距,但是通过API调用也可以生成不错的作品。相对于很多平台高昂的包月制度来讲,按次收费的api服务对于使用频率较低的用户可以说是非常友好。
- 3D模型生成
3D模型生成在comfyui中也是可以实现的,只不过这类项目比较小众,对专业知识的需求比较高,所以目前来说资料相对较少。
优势
- 极高的自由度与可控性
在 ComfyUI 中,你可以精确控制每一个环节。你可以让图片经过很多个不同的处理步骤,每一步都可以单独调整参数。它是目前实现复杂工作流的唯一真神。
- 强大的社区生态
无缝支持新架构:每当新模型架构出现,ComfyUI 往往在几天内就能通过更新原生节点或简单插件完美支持,而无需等待软件大版本更新。
原生 ComfyUI 只有基础功能,但所有高级功能都来自社区开发的“自定义节点”。这些节点是由全球开发者用 Python 编写的独立功能模块,每个节点解决一个具体问题。
工作流生态丰富,很多大神将复杂的参数调整、节点连接逻辑保存下来,变成一张图片或一个 JSON 文件。拖入到工作流之中就可以获得整套流程。
- 速度最快,显存占用最低
ComfyUI 的代码优化极佳。同样的显卡,使用 WebUI 上可能爆显存或者跑得很慢,在 ComfyUI 上就有可能流畅运行,甚至生成速度提升 30%-50%。
劣势
虽然comfyui有这么多的优势,但是同样也有不好的地方,不过我认为这并不是问题,反而这些问题属于正常现象。
- 学习门槛高
和其他有着更加简单使用界面的软件相比,界面面里,满屏的连线、方框、参数,像极了复杂的电路图。这不仅是使用习惯的转换,同样是思维模式的变化。从告诉AI你要做什么,变成你需要一个详细的流程思路,而AI只负责最核心的运算。但是这是一个很正常的情况,就像我们修图使用美图秀秀但是专业人员会使用PS。普通人剪辑视频只需要一个剪映,可能在很多人眼里剪映已经属于专业的剪辑软件了。但是,依旧会有更专业的人员使用PR、达芬奇等更加专业的软件。同样的道理,更加专业的软件带来更多的使用技巧和更加细致的可控性,comfyui入门难这是所有专业软件的共同特点。
- 依赖和插件兼容性问题
丰富的生态环境,也造成了很多难以规避的问题,作为一个全球开发者共同构建的生态环境,很难说不出现兼容性问题。这也算是成也萧何,败也萧何,基本上所有的开源项目都会有这种类似的情况。这也更加体现了一个优秀的整合包的重要性,虽然不可能完全避免兼容性问题,但是可以减少出问题的概率和维护的时间成本。
- 对硬件配置的要求较高
虽然comfyui的优化很好,但是作为一个专业工具来讲,使用门槛肯定还是有的。不管是什么专业软件,基本上都会有自己的使用门槛,这没有办法避免的。
基础模型文件分类
大模型是我们运行工作的核心,假如把Comfyui比作一个人的话,软件本体就是躯干,插件就是代表了不同功能的肢体器官,连线是人体的神经脉络,而大模型就是最关键的大脑。就像人的大脑也有不同的分区一样,一个完整的大模型也不是由单独的一部分构成。
扩散模型
既然要使用comfyui我们不得不提到的一个名称,因为在comfyui中我们正常使用的图片模型和视频模型基本上都属于扩散模型。因为这类模型训练是通过正向扩散来构建训练数据,所以被称之为扩散模型。其实可以理解为通过展示破坏的过程,然后让模型学会还原的能力。这个还原的过程称之为反向去噪,这也是实现图像生成和视频生成的核心原理。
正向扩散
这里以图片进行举例,正向扩散就是为一张清晰的图片进行不断的添加噪点,直到最后变成一张杂乱无章完全由噪点构成的图片,从而训练反向预测的能力。
反向去噪
反向去噪就是通过提示词引导模型一步步去噪的过程,开始先给模型一个完全由噪点构成的原始噪声,然后再通过一步一步降噪来预测提示词描绘的画面应该是什么样子的。这里的原始噪声就相当于原材料,提示词是制作要求,最后推理出来的图片为结果。
完整模型结构
一个完整的扩散模型应该包含三部分,分别是负责去噪的主干模型,文本编码模型和潜空间编解码模型。
- 主干模型(由UNET加载器加载):
负责最核心的功能,也就是负责进行去噪的这个过程。因为在最初的SD时代,这一部分的模型架构为UNET所以采用UNET加载器加载。即使新模型的模型架构已经发生了改变,也没有出现专门的加载器,而是由unet加载其进行兼容。
- 文本编码模型(由CLIP加载器加载):
负责将提示词等文字信息转化为引导信号,可以理解为这是一个用来翻译的词典,把人类的语言翻译成对应大模型可以理解计算机语言。和主干模型都采用unet加载器加载同理,clip加载器也是对新模型架构进行了兼容。
- 潜空间编解码模型(由VAE加载器加载):
我们模型进行去噪的过程是在潜空间内完成的,这主要目的是为了减少计算所占用的资源。这个可以理解为针对图片起一个压缩和放大的作用。如果需要把图像传入潜空间,就需要使用VAE进行编码(可以理解为压缩),我们最终生成的图片输出出来就需要使用VAE进行解码(可以理解为放大)。
这么说可能比较抽象,我这里用SD的VAE模型进行举例。
假如我需要一个512512分辨率的图像,如果直接计算这张图片就需要计算:512512*3=786432个数据。因为每种颜色都由光的三原色构成,也就是每个像素格都包含红绿蓝三个通道的信息。
但是在潜空间内运行的时候并不是直接运算这么多的数据,通过VAE编码会进行三次向下采样,也就是512→256→128→64,然后就变成了64644=16384个数据,这里的4是四个通道,这个数字是根据模型架构人为设定的,因为在研究过程中发现4个通道的潜空间可以在满足视觉信息保留的情况下同时保证压缩率,和上边颜色的三个通道不是一个概念。同时这也是我们设置的图像大小必须满足边长为8或16的倍数的原因。
文生图工作流举例
我们先拿一个最简单最基础的工作流举例。这里是两个文生图的工作流,除了模型加载部分以外完全一样。
使用不同的模型加载器的原因主要看使用的是什么类型的模型。我们上也提到,一个完整的模型除了降噪功能的主干模型以外,还要有文本编码模型(clip)和潜空间编解码模型(vae)。
但是我们目前比较常见的模型这三个部分是分开的,也就是要使用这个模型需要分别加载这三个模型文件。也就是我们第二个工作流这里的样子,分别使用到了UNET加载器、加载clip和加载VAE。目前官方发布模型,一般都是以分片模型的形式进行发布,这种分片模型并不能直接在Comfyui中直接使用。这类分片模型不仅每个部分独立存放,每个部分甚至会拆分成多个模型文件,我们使用的模型其实都是由comfyui或者其他社区大佬整合适配的版本。
但是也有将这三个模型整合成一个模型文件的版本,这种模型文件就需要使用到checkpoint加载器来进行加载了,也就是我们第一个工作流的方案。但是目前来说使用checkpoint加载器的频率其实是在逐渐降低的,在SD时期基本上以这类模型为主,现在除了一些第三方微调的AIO版本模型以外基本上都是分开加载了。
模型存放地址
那既然使用了不同的加载器,这些模型存放的地址肯定也是有所区别。虽然都是在comfyui的模型目录(models文件夹)内,但是所属的子文件夹有所不同。
模型目录:..\Leopard-cat-meow-ComfyUI-v3-01\ComfyUI\models
由unet加载器加载的模型
这类模型主要存放于unet文件夹和diffusion_models文件夹。
这里有两个目录,主要是一个社区规范性方案。因为新模型采用的架构已经不属于unet架构了,所以才有了diffusion_models文件夹。但是实际使用上,这两个文件夹的作用是一样的,unet加载器会同时识别这两个文件夹的模型。只不过新模型放入diffusion_models文件夹,而SD模型放入unet文件夹更符合社区规范性建议。
unet:
..\Leopard-cat-meow-ComfyUI-v3-01\ComfyUI\models\unet
diffusion_models:
..\Leopard-cat-meow-ComfyUI-v3-01\ComfyUI\models\diffusion_models
由clip加载器加载的模型
这类模型主要存放于clip文件夹和text_encoders文件夹。
这里依旧是两个文件夹,和unet加载的主干模型情况一致。加载clip节点也会同时识别这两个文件夹的模型。同样新模型的文本编码模型放进text_encoders文件夹更符合社区规范性建议。
clip:
..\Leopard-cat-meow-ComfyUI-v3-01\ComfyUI\models\clip
text_encoders:
..\Leopard-cat-meow-ComfyUI-v3-01\ComfyUI\models\text_encoders
由VAE加载器加载的模型
这类模型存放的文件夹只有一个vae文件夹。
因为即使模型在不断的迭代升级,但是vae模型的核心架构并没有发生改变。所以这里并没有对老旧情况进行建议性区分。
Vae
..\Leopard-cat-meow-ComfyUI-v3-01\ComfyUI\models\vae
由checkpoint加载器加载的模型
这类模型一定要存放在checkpoint文件夹内,checkpoint加载器只能识别到这一个文件夹,存放位置出错无法识别到你的模型。
checkpoint
..\Leopard-cat-meow-ComfyUI-v3-01\ComfyUI\models\checkpoint
Lora模型
除了上边讲到的基础模型外,Lora模型的使用频率也非常的高。Lora模型也叫做微调模型,它可以在原本大模型的计算矩阵上叠加增量起到调整输出效果的作用。最常见的功能就是:固定特定风格、固定特定IP形象、强化特定概念以及物体和降低模型采样步数的加速Lora。
这类模型都存放在loras文件夹。
loras
..\Leopard-cat-meow-ComfyUI-v3-01\ComfyUI\models\loras
模型存放建议
这些模型存放的文件夹都是支持子文件夹分类存放的,这些种类里边除了clip和vae种类较少以外都建议对模型进行分类。如果经常使用基本上都有模型越来越多的情况,分类存放也方便使用的时候选择查找。