工具初探一ComfyUI
认识ComfyUI
ComfyUI 是"Graphical User Interface"(图形用户界面)的缩写,简单来说,GUI 就是你在电脑屏幕上看到的那种有图标、按钮和菜单的交互方式。ComfyUI 是GUI的一种,是一个用于构建和运行稳定扩散(Stable Diffusion)模型的图形用户界面工具。它允许用户通过直观的界面来创建模型处理流程,而无需编写复杂的代码。ComfyUI 支持多种不同的模型和算法,并且可以通过节点编辑的方式轻松地组合不同的模型组件以实现图像生成、修改和其他创意任务。
ComfyUI基础逻辑
对于ComfyUI的逻辑可以理解成由小往大的过程,即从基础的元素,到由元素组成的模块,到由模块组成的功能组,再到由功能组组成针对性的工作流。
ComfyUI核心模块
核心模块由模型加载器、提示词管理器、采样器、解码器。
模型加载器:Load Checkpoint用于加载基础的模型文件,
包含了Model、CLIP、VAE三部分
CLIP模块将文本类型的输入变为模型可以理解的latent space embedding作为模型的输入
解码器:VAE模块的作用是将Latent space中的embedding解码为像素级别的图像
采样器:用于控制模型生成图像,不同的采样取值会影响最终输出图像的质量和多样性。采样器可以调节生成过程的速度和质量之间的平衡。
Stable Diffusion的基本原理是通过降噪的方式(如完全的噪声图像),将一个原本的噪声信号变为无噪声的信号(如人可以理解的图像)。其中的降噪过程涉及到多次的采样。采样的系数在KSampler中配置:
seed:控制噪声产生的随机种子
control_after_generate:控制seed在每次生成后的变化
steps:降噪的迭代步数,越多则信号越精准,相对的生成时间也越长
cfg:classifier free guidance决定了prompt对于最终生成图像的影响有多大。更高的值代表更多地展现prompt中的描述。
denoise: 多少内容会被噪声覆盖 sampler_name、scheduler:降噪参数。
对于基础模块或深入剖析ComfyUI可以参考(图引用自【1 万字系统剖析ComfyUI | Stable Diffusion:GUI全盘点 | ComfyUI系统性教程原理篇04 | Ai+建筑】)
ComfyUI生成流程
选择模型:
在 ComfyUI 中,你需要选择一个预训练的模型来执行图像生成任务。 模型可以是 Stable Diffusion 或其他类型的图像生成模型。 你可以从 ComfyUI 的模型管理器中加载模型,或者直接在工作流中选择。构建工作流:
在 ComfyUI 的主界面上,你会看到一个空白画布,可以在这里通过拖放的方式添加节点。 你需要构建一个包含输入、处理和输出节点的工作流。添加输入节点:
Initial Image 节点用于指定一个初始图像作为输入。 如果不需要初始图像,可以直接使用文本提示作为输入。添加模型节点:
VAE Decode、VAE Encode、SD Sampler 等节点用于执行模型的前向传播。 你可以根据需要选择不同的采样方法(如 PNDM、DDIM 等)。设置条件节点:
Conditioning 节点用于设置正面提示(Positive Prompt)和负面提示(Negative Prompt)。 这些提示会影响图像生成的内容。连接节点:
使用鼠标拖拽连线将各个节点连接起来,形成一个完整的处理链。 例如,你可以将 Initial Image 连接到 Conditioning,然后连接到 SD Sampler,最后连接到 VAE Decode。调整参数:
在每个节点上,你可以调整不同的参数,比如采样步骤、引导词、图像尺寸等。 参数的选择会直接影响到生成图像的质量和内容。运行工作流:
一旦完成工作流的构建,点击运行按钮来执行整个过程。 ComfyUI 会按照你设定的顺序处理节点,并最终生成新的图像。查看和保存结果:
成功生成的图像会显示在输出节点或预览区域。 你可以保存这些图像到本地文件系统。调整和迭代:
根据生成结果,你可能需要调整参数或更改工作流来获得更好的效果。 重复上述过程直到得到满意的结果。ComfyUI优势
主要特点:
图形化界面:用户可以通过拖拽节点的方式来构建模型流程。 灵活性:支持多种不同的模型和算法,用户可以根据需要自由组合这些组件。 可扩展性:用户可以添加自定义的节点和功能,使得工具能够适应更广泛的应用场景。 社区支持:ComfyUI 拥有一个活跃的开发者和用户社区,不断有新的功能和改进被贡献进来。使用场景:
图像生成:使用稳定扩散模型生成新的图像。 图像修改:基于现有图像进行修改或变换。 实验平台:研究人员可以利用 ComfyUI 快速测试和比较不同模型的效果。ComfyUI安装
Lora
前言:对于模型微调,本质上就是对于模型各个数据的调节。而一个模型往往伴随着大量的数据,对于这些大量数据的处理是麻烦的,所以引出了高效微调PEFT (Prompt-Encoder for Fine-Tuning)下,最常见的Lora。
Lora简介
LoRA (Low-Rank Adaptation) 是一种轻量级的微调技术,特别适用于像Stable Diffusion这样的大型预训练模型。LoRA 的核心思想是在不改变原有模型权重的情况下,通过引入额外的低秩矩阵来实现对模型的有效调整。这种方法可以显著减少所需的训练资源和时间,并且通常只需要少量的数据就能达到不错的效果。
Lora 微调优势
快速适应新任务在特定领域有少量标注数据
的情况下,也可以有效地对模型进行个性化调整
,可以迅速适应新的领域或特定任务。
LoRA通过微调模型的一部分,有助于保持模型在未见过的数据上的泛化能力
,同时还能学习到特定任务的知识。
LoRA旨在通过仅微调模型的部分权重,而不是整个模型,从而减少所需的计算资源和存储空间。
Lora 代码举例
task02的微调代码
import os
cmd = """
python DiffSynth-Studio/examples/train/kolors/train_kolors_lora.py \ # 选择使用可图的Lora训练脚本DiffSynth-Studio/examples/train/kolors/train_kolors_lora.py
--pretrained_unet_path models/kolors/Kolors/unet/diffusion_pytorch_model.safetensors \ # 选择unet模型
--pretrained_text_encoder_path models/kolors/Kolors/text_encoder \ # 选择text_encoder
--pretrained_fp16_vae_path models/sdxl-vae-fp16-fix/diffusion_pytorch_model.safetensors \ # 选择vae模型
--lora_rank 16 \ # lora_rank 16 表示在权衡模型表达能力和训练效率时,选择了使用 16 作为秩,适合在不显著降低模型性能的前提下,通过 LoRA 减少计算和内存的需求
--lora_alpha 4.0 \ # 设置 LoRA 的 alpha 值,影响调整的强度
--dataset_path data/lora_dataset_processed \ # 指定数据集路径,用于训练模型
--output_path ./models \ # 指定输出路径,用于保存模型
--max_epochs 1 \ # 设置最大训练轮数为 1
--center_crop \ # 启用中心裁剪,这通常用于图像预处理
--use_gradient_checkpointing \ # 启用梯度检查点技术,以节省内存
--precision "16-mixed" # 指定训练时的精度为混合 16 位精度(half precision),这可以加速训练并减少显存使用
""".strip()
os.system(cmd) # 执行可图Lora训练
代码中定义的主要 LoRA 参数及其含义:
--lora_rank 16
: 这个参数指定了 LoRA 的秩 (r
),即低秩矩阵的大小。秩越大,模型的表达能力越强,但同时也意味着更多的参数和更长的训练时间。
--lora_alpha 4.0
: 这个参数控制 LoRA 更新的缩放因子 (lora_alpha
),影响 LoRA 调整的强度。较小的 lora_alpha
会导致较弱的更新,而较大的值则会导致更强的更新。
除了 LoRA 特有的参数之外,还有一些其他的配置选项:
--pretrained_unet_path
: 指定了预训练的 U-Net 模型的路径。
--pretrained_text_encoder_path
: 指定了预训练的文本编码器的路径。
--pretrained_fp16_vae_path
: 指定了预训练的 VAE(变分自动编码器)模型的路径,这里使用 FP16(半精度浮点数)格式。
--dataset_path
: 指定了训练数据集的路径。
--output_path
: 指定了训练完成后模型保存的目录。
--max_epochs
: 指定了最大训练轮数。
--center_crop
: 启用了中心裁剪功能,这是对输入图像进行预处理的一种方式。
--use_gradient_checkpointing
: 启用了梯度检查点技术,这是一种内存优化技巧,可以减少模型训练所需的显存。
--precision "16-mixed"
: 指定了训练时使用的精度模式,这里是混合精度训练(16-mixed
),这有助于加速训练并减少显存使用。
数据集的获取
来源类型
推荐
公开的数据平台
魔搭社区内开放了近3000个数据集,涉及文本、图像、音频、视频和多模态等多种场景,左侧有标签栏帮助快速导览,大家可以看看有没有自己需要的数据集。
其他数据平台推荐:
ImageNet:包含数百万张图片,广泛用于分类任务,也可以用于生成任务。
Open Images:由Google维护,包含数千万张带有标签的图片。
Flickr:特别是Flickr30kK和Flickr8K数据集,常用于图像描述任务。
CelebA:专注于人脸图像的数据集。
LSUN (Large-scale Scene Understanding):包含各种场景类别的大规模数据集。
使用API或爬虫获取
如果需要特定类型的内容,可以利用API从图库网站抓取图片,如Unsplash、Pexels等。
使用网络爬虫技术从互联网上抓取图片,但需要注意版权问题。
数据合成
利用现有的图形引擎(如Unity、Unreal Engine)或特定软件生成合成数据,这在训练某些类型的模型时非常有用。
最近Datawhale联合阿里云天池,做了一整套多模态大模型数据合成的学习,欢迎大家一起交流。从零入门多模态大模型数据合成
数据增强
对于较小的数据集,可以通过旋转、翻转、缩放、颜色变换等方式进行数据增强。
购买或定制
如果你的应用是特定领域的,比如医学影像、卫星图像等,建议从靠谱的渠道购买一些数据集。
如何准备高质量的数据集
明确你的需求和目标
关注应用场景:确定你的模型将被应用到什么样的场景中(例如,艺术风格转换、产品图像生成、医疗影像合成等)。
关注数据类型:你需要什么样的图片?比如是真实世界的照片还是合成图像?是黑白的还是彩色的?是高分辨率还是低分辨率?
关注数据量:考虑你的任务应该需要多少图片来支持训练和验证。
最后来一张上课睡觉梦到前十姻缘,然后梦醒被罚站的故事。
总结
工具初探一ComfyUI
认识ComfyUI
ComfyUI 是"Graphical User Interface"(图形用户界面)的缩写,简单来说,GUI 就是你在电脑屏幕上看到的那种有图标、按钮和菜单的交互方式。ComfyUI 是GUI的一种,是一个用于构建和运行稳定扩散(Stable Diffusion)模型的图形用户界面工具。它允许用户通过直观的界面来创建模型处理流程,而无需编写复杂的代码。ComfyUI 支持多种不同的模型和算法,并且可以通过节点编辑的方式轻松地组合不同的模型组件以实现图像生成、修改和其他创意任务。
ComfyUI基础逻辑
对于ComfyUI的逻辑可以理解成由小往大的过程,即从基础的元素,到由元素组成的模块,到由模块组成的功能组,再到由功能组组成针对性的工作流。
ComfyUI核心模块
核心模块由模型加载器、提示词管理器、采样器、解码器。
模型加载器:Load Checkpoint用于加载基础的模型文件,
包含了Model、CLIP、VAE三部分
CLIP模块将文本类型的输入变为模型可以理解的latent space embedding作为模型的输入
解码器:VAE模块的作用是将Latent space中的embedding解码为像素级别的图像
采样器:用于控制模型生成图像,不同的采样取值会影响最终输出图像的质量和多样性。采样器可以调节生成过程的速度和质量之间的平衡。
Stable Diffusion的基本原理是通过降噪的方式(如完全的噪声图像),将一个原本的噪声信号变为无噪声的信号(如人可以理解的图像)。其中的降噪过程涉及到多次的采样。采样的系数在KSampler中配置:
seed:控制噪声产生的随机种子
control_after_generate:控制seed在每次生成后的变化
steps:降噪的迭代步数,越多则信号越精准,相对的生成时间也越长
cfg:classifier free guidance决定了prompt对于最终生成图像的影响有多大。更高的值代表更多地展现prompt中的描述。
denoise: 多少内容会被噪声覆盖 sampler_name、scheduler:降噪参数。
对于基础模块或深入剖析ComfyUI可以参考(图引用自【1 万字系统剖析ComfyUI | Stable Diffusion:GUI全盘点 | ComfyUI系统性教程原理篇04 | Ai+建筑】)
ComfyUI生成流程
选择模型:
在 ComfyUI 中,你需要选择一个预训练的模型来执行图像生成任务。
模型可以是 Stable Diffusion 或其他类型的图像生成模型。
你可以从 ComfyUI 的模型管理器中加载模型,或者直接在工作流中选择。
构建工作流:
在 ComfyUI 的主界面上,你会看到一个空白画布,可以在这里通过拖放的方式添加节点。
你需要构建一个包含输入、处理和输出节点的工作流。
添加输入节点:
Initial Image 节点用于指定一个初始图像作为输入。
如果不需要初始图像,可以直接使用文本提示作为输入。
添加模型节点:
VAE Decode、VAE Encode、SD Sampler 等节点用于执行模型的前向传播。
你可以根据需要选择不同的采样方法(如 PNDM、DDIM 等)。
设置条件节点:
Conditioning 节点用于设置正面提示(Positive Prompt)和负面提示(Negative Prompt)。
这些提示会影响图像生成的内容。
连接节点:
使用鼠标拖拽连线将各个节点连接起来,形成一个完整的处理链。
例如,你可以将 Initial Image 连接到 Conditioning,然后连接到 SD Sampler,最后连接到 VAE Decode。
调整参数:
在每个节点上,你可以调整不同的参数,比如采样步骤、引导词、图像尺寸等。
参数的选择会直接影响到生成图像的质量和内容。
运行工作流:
一旦完成工作流的构建,点击运行按钮来执行整个过程。
ComfyUI 会按照你设定的顺序处理节点,并最终生成新的图像。
查看和保存结果:
成功生成的图像会显示在输出节点或预览区域。
你可以保存这些图像到本地文件系统。
调整和迭代:
根据生成结果,你可能需要调整参数或更改工作流来获得更好的效果。
重复上述过程直到得到满意的结果。
ComfyUI优势
主要特点:
图形化界面:用户可以通过拖拽节点的方式来构建模型流程。
灵活性:支持多种不同的模型和算法,用户可以根据需要自由组合这些组件。
可扩展性:用户可以添加自定义的节点和功能,使得工具能够适应更广泛的应用场景。
社区支持:ComfyUI 拥有一个活跃的开发者和用户社区,不断有新的功能和改进被贡献进来。
使用场景:
图像生成:使用稳定扩散模型生成新的图像。
图像修改:基于现有图像进行修改或变换。
实验平台:研究人员可以利用 ComfyUI 快速测试和比较不同模型的效果。
ComfyUI安装
Lora
前言:对于模型微调,本质上就是对于模型各个数据的调节。而一个模型往往伴随着大量的数据,对于这些大量数据的处理是麻烦的,所以引出了高效微调PEFT (Prompt-Encoder for Fine-Tuning)下,最常见的Lora。
Lora简介
LoRA (Low-Rank Adaptation) 是一种轻量级的微调技术,特别适用于像Stable Diffusion这样的大型预训练模型。LoRA 的核心思想是在不改变原有模型权重的情况下,通过引入额外的低秩矩阵来实现对模型的有效调整。这种方法可以显著减少所需的训练资源和时间,并且通常只需要少量的数据就能达到不错的效果。
Lora 微调优势
快速适应新任务
在特定领域有少量标注数据
的情况下,也可以有效地对模型进行个性化调整
,可以迅速适应新的领域或特定任务。
保持泛化能力
LoRA通过微调模型的一部分,有助于保持模型在未见过的数据上的泛化能力
,同时还能学习到特定任务的知识。
资源效率
LoRA旨在通过仅微调模型的部分权重,而不是整个模型,从而减少所需的计算资源和存储空间。
Lora 代码举例
task02的微调代码
import os
cmd = """
python DiffSynth-Studio/examples/train/kolors/train_kolors_lora.py \ # 选择使用可图的Lora训练脚本DiffSynth-Studio/examples/train/kolors/train_kolors_lora.py
--pretrained_unet_path models/kolors/Kolors/unet/diffusion_pytorch_model.safetensors \ # 选择unet模型
--pretrained_text_encoder_path models/kolors/Kolors/text_encoder \ # 选择text_encoder
--pretrained_fp16_vae_path models/sdxl-vae-fp16-fix/diffusion_pytorch_model.safetensors \ # 选择vae模型
--lora_rank 16 \ # lora_rank 16 表示在权衡模型表达能力和训练效率时,选择了使用 16 作为秩,适合在不显著降低模型性能的前提下,通过 LoRA 减少计算和内存的需求
--lora_alpha 4.0 \ # 设置 LoRA 的 alpha 值,影响调整的强度
--dataset_path data/lora_dataset_processed \ # 指定数据集路径,用于训练模型
--output_path ./models \ # 指定输出路径,用于保存模型
--max_epochs 1 \ # 设置最大训练轮数为 1
--center_crop \ # 启用中心裁剪,这通常用于图像预处理
--use_gradient_checkpointing \ # 启用梯度检查点技术,以节省内存
--precision "16-mixed" # 指定训练时的精度为混合 16 位精度(half precision),这可以加速训练并减少显存使用
""".strip()
os.system(cmd) # 执行可图Lora训练
代码中定义的主要 LoRA 参数及其含义:
--lora_rank 16
: 这个参数指定了 LoRA 的秩 (r
),即低秩矩阵的大小。秩越大,模型的表达能力越强,但同时也意味着更多的参数和更长的训练时间。
--lora_alpha 4.0
: 这个参数控制 LoRA 更新的缩放因子 (lora_alpha
),影响 LoRA 调整的强度。较小的 lora_alpha
会导致较弱的更新,而较大的值则会导致更强的更新。
除了 LoRA 特有的参数之外,还有一些其他的配置选项:
--pretrained_unet_path
: 指定了预训练的 U-Net 模型的路径。--pretrained_text_encoder_path
: 指定了预训练的文本编码器的路径。--pretrained_fp16_vae_path
: 指定了预训练的 VAE(变分自动编码器)模型的路径,这里使用 FP16(半精度浮点数)格式。--dataset_path
: 指定了训练数据集的路径。--output_path
: 指定了训练完成后模型保存的目录。--max_epochs
: 指定了最大训练轮数。--center_crop
: 启用了中心裁剪功能,这是对输入图像进行预处理的一种方式。--use_gradient_checkpointing
: 启用了梯度检查点技术,这是一种内存优化技巧,可以减少模型训练所需的显存。--precision "16-mixed"
: 指定了训练时使用的精度模式,这里是混合精度训练(16-mixed
),这有助于加速训练并减少显存使用。数据集的获取
来源类型
推荐
公开的数据平台
魔搭社区内开放了近3000个数据集,涉及文本、图像、音频、视频和多模态等多种场景,左侧有标签栏帮助快速导览,大家可以看看有没有自己需要的数据集。
其他数据平台推荐:
ImageNet:包含数百万张图片,广泛用于分类任务,也可以用于生成任务。
Open Images:由Google维护,包含数千万张带有标签的图片。
Flickr:特别是Flickr30kK和Flickr8K数据集,常用于图像描述任务。
CelebA:专注于人脸图像的数据集。
LSUN (Large-scale Scene Understanding):包含各种场景类别的大规模数据集。
使用API或爬虫获取
如果需要特定类型的内容,可以利用API从图库网站抓取图片,如Unsplash、Pexels等。
使用网络爬虫技术从互联网上抓取图片,但需要注意版权问题。
数据合成
利用现有的图形引擎(如Unity、Unreal Engine)或特定软件生成合成数据,这在训练某些类型的模型时非常有用。
最近Datawhale联合阿里云天池,做了一整套多模态大模型数据合成的学习,欢迎大家一起交流。从零入门多模态大模型数据合成
数据增强
对于较小的数据集,可以通过旋转、翻转、缩放、颜色变换等方式进行数据增强。
购买或定制
如果你的应用是特定领域的,比如医学影像、卫星图像等,建议从靠谱的渠道购买一些数据集。
如何准备高质量的数据集
明确你的需求和目标
关注应用场景:确定你的模型将被应用到什么样的场景中(例如,艺术风格转换、产品图像生成、医疗影像合成等)。
关注数据类型:你需要什么样的图片?比如是真实世界的照片还是合成图像?是黑白的还是彩色的?是高分辨率还是低分辨率?
关注数据量:考虑你的任务应该需要多少图片来支持训练和验证。
最后来一张上课睡觉梦到前十姻缘,然后梦醒被罚站的故事。