①初识ComfyUI
1.GUI是“图形用户界面”(Graphical User Interface)的缩写。它是一种使用图形元素如图标、按钮和窗口等来帮助用户与软件或操作系统进行交互的用户界面类型。通过GUI,用户可以使用鼠标点击或者触摸屏幕来操作这些图形元素,从而执行命令或者操作数据,而不需要通过纯文本命令来进行交互。
2.GUI的分类(分为官方和第三方)
主流GUI
3.ComfyUI:
ComfyUI 是GUI的一种,是基于节点工作的用户界面,主要用于操作图像的生成技术,ComfyUI 的特别之处在于它采用了一种模块化的设计,把图像生成的过程分解成了许多小的步骤,每个步骤都是一个节点。这些节点可以连接起来形成一个工作流程,这样用户就可以根据需要定制自己的图像生成过程。
优势:
模块化和灵活性:ComfyUI 提供了一个模块化的系统,用户可以通过拖放不同的模块来构建复杂的工作流程。这种灵活性允许用户根据自己的需求自由组合和调整模型、输入、输出、和其他处理步骤。
可视化界面:ComfyUI 提供了直观的图形界面,使得用户能够更清晰地理解和操作复杂的 AI 模型和数据流。这对没有编程背景的用户特别有帮助,使他们能够轻松构建和管理工作流程。
多模型支持:ComfyUI 支持多个不同的生成模型,用户可以在同一平台上集成和切换使用不同的模型,从而实现更广泛的应用场景。
调试和优化:通过其可视化界面,ComfyUI 使得调试生成过程变得更简单。用户可以轻松地追踪数据流,识别并解决问题,从而优化生成结果。
开放和可扩展:ComfyUI 是一个开源项目,具有高度的可扩展性。开发者可以根据需要编写新的模块或插件,扩展系统功能,并根据项目需求进行定制。
用户友好性:尽管其功能强大,但 ComfyUI 仍然保持了用户友好性,即使对于复杂任务,也能以相对简单的方式完成,使其成为生成式 AI 工作流程管理的有力工具。
4.基础逻辑:
②安装及浅尝ComfyUI工作流
根据步骤完成带LoRA和不带LoRA的工作流样例
可以清晰的看到两者画风不同,可见带LoRA的ComfyUI会与训练好的LoRA模型的风格保持一致,该工作流简化了很多操作,并且图像质量也有明显提升,然后我自己简单调整了prompt效果比之前的好了很多
③LoRA微调的原理
1.原有的参数+改动的量=新的参数
微调的本质:改动的量(我们想提升的点)
把模型的部分能力放大,但是保留大模型的其他能力
2.全量微调:把每个参数通过学习的过程进行改动
3.PEFT(更高效的微调)——LoRA
当改动的量太多时,很多模型原本具备的比较强的能力消失——模型能力的遗忘
由于冗余信息的存在,全量微调中看似改变了很多变量,但实际上它的改动所带来的价值是有限的
D中清晰的标明了冗余信息的例子
4.LoRA微调的实质:利用矩阵和线性代数,将学习w等价为学习a和b,学习更少的参数就能达到学习原来大量参数的效果(通俗易懂的解释)
k可调节,k越小,学习参数越小,k越大,学习参数越大
优点:节省大量的显存空间和资源
5.每个参数的作用:
pretrained_unet_path: 这是指定预训练UNet模型的路径。如果你希望使用一个已经训练好的UNet模型作为基础模型,可以提供这个路径。如果你想从头开始训练一个新的UNet模型,那么你可以忽略此参数或将其设置为None。
pretrained_text_encoder_path: 指定预训练文本编码器的路径。这通常是一个基于Transformer或其他类似架构的模型,用于将文本转换成向量表示。同样,如果你想要从头开始训练新的文本编码器,可以忽略或者设置为None。
pretrained_fp16_vae_path: 指定预训练VAE模型的路径。VAE(变分自编码器)是一种生成模型,常用于图像生成任务。如果你有一个已有的VAE模型并且想用它来初始化你的模型,可以提供该路径。
lora_rank: 设置LoRA的秩(rank),影响模型的复杂度和性能。LoRA(局部低秩补丁)是一种用于微调大模型的技术,通过引入局部低秩近似来减少计算成本。更高的秩可能会提高性能但增加计算负担;较低的秩则可能降低性能但节省资源。
lora_alpha: 设置LoRA的alpha值,控制微调的强度。较大的alpha值意味着更大的微调力度,可能导致更好的性能,但也有可能导致过拟合。
dataset_path: 指定用于训练的数据集路径。你需要提供一个有效的数据集路径,以便模型可以从其中获取训练样本。
output_path: 指定训练完成后保存模型的路径。这是你希望将训练后的模型保存到的位置。
max_epochs: 设置最大训练轮数为1。这意味着模型将在数据集上进行一次完整的迭代后停止训练。你可以根据需要调整这个值,以决定模型应该训练多久。
center_crop: 启用中心裁剪,用于图像预处理。中心裁剪是一种常见的图像预处理技术,它会从图像的中心开始裁剪出指定大小的部分。这对于将不同尺寸的图像标准化到同一尺寸非常有用。例如,在训练神经网络时,我们通常需要所有输入图像具有相同的尺寸。
use_gradient_checkpointing: 启用梯度检查点,节省显存。梯度检查点是一种优化策略,可以在反向传播过程中节省内存。它通过存储中间激活而不是整个前向传递的计算图来实现这一点。当模型很大且批次大小较大时,这种方法特别有用。
precision: 设置训练时的精度为混合16位精度(half precision)。混合精度训练使用两种浮点格式:FP16和FP32。FP16用于大多数权重和激活,而FP32用于某些层和计算,以保持数值稳定性。这种策略可以显著减少GPU内存消耗,从而允许更大规模的模型训练或更大的批次大小。
④尝试LoRA微调
1.替换数据集
因为一开始是想做自己喜欢的画风,所以我选择自己创建一个数据集,于是我在魔搭上上传了自己的数据集(一开始我还不是这个方案,我以为上传个文件夹就好了,但是文件格式不一样,导致经历了重重报错,个中苦难暂且不提),但是数据集对于prompt的工作量太大了,考虑到时间问题,只能放弃,只上传了image(好吧其实是我不懂怎么搞prompt,对代码小白也太难了)
so我选择了plan B,下载了个魔搭的数据集
中间还经历了一个报错
下载完文件发现人家上传的是IMAGE ……(如此细节)
最后功夫不负有心人,成果还是不错滴
最满意的一张哈哈 (虽然细节还是有点迷惑?)
八图就不放了,可能因为导入了太多数据集,画风有点混乱
其实本来还想试试把这个替换数据集后的LoRA模型代入ComfyUI看一看是什么效果,不过因为搞不懂那个地址怎么弄只能遗憾放弃了
最后做个简单的小总结:本次夏令营真的学到了很多东西,感觉很有乐趣!虽然有很多困难(论经历报错的九九八十一难,有些解决了,有些还是有疑惑,有机会做个汇总哈哈)不过作为纯代码小白对自己还是很满意的!
总结
### 文章总结:探索ComfyUI与LoRA微调#### 初识ComfyUI
- **GUI定义**:图形用户界面(Graphical User Interface),通过图形元素如图标、按钮和窗口等与用户交互。
- **ComfyUI简介**:基于节点的GUI,专注于图像生成技术,采用模块化设计,将图像生成过程分解为多个节点,用户可自由定制工作流程。
#### ComfyUI的优势
1. **模块化和灵活性**:用户可通过拖放模块构建复杂工作流程。
2. **可视化界面**:直观操作,便于非编程背景用户理解和操作AI模型。
3. **多模型支持**:集成和切换不同模型,实现广泛应用场景。
4. **调试和优化**:简化调试过程,优化生成结果。
5. **开放和可扩展**:开源项目,支持开发者编写新模块或插件。
6. **用户友好性**:即使复杂任务也能简单完成。
#### 安装及体验ComfyUI工作流
- **工作流样例**:体验了带LoRA和不带LoRA的工作流,发现带LoRA的样例图像质量更高,且风格一致。
- **自定义调整**:通过调整prompt,进一步优化了图像效果。
#### LoRA微调的原理
- **微调本质**:在原有参数基础上进行改动,放大模型部分能力同时保留其他能力。
- **全量微调与PEFT**:全量微调改动所有参数,但可能导致模型能力遗忘;PEFT中的LoRA通过矩阵和线性代数,以少量参数达到类似效果,节省显存。
- **LoRA参数详解**:包括预训练模型路径、LoRA秩和alpha值、数据集路径等,这些参数影响模型的复杂度和性能。
#### 尝试LoRA微调
- **数据集替换**:原计划使用自定义数据集,但因prompt工作量大且时间有限,最终选择下载魔搭数据集。
- **挑战与解决**:遇到文件格式和报错问题,通过调整方案最终成功生成图像。
- **成果展示**:展示了微调后的图像成果,并对画风和细节进行了评价。
- **未来展望**:计划将微调后的LoRA模型代入ComfyUI,但因技术限制未能实现。
#### 总结
- **夏令营收获**:尽管遇到诸多困难,但作为代码小白,通过不断尝试和学习,成功体验了ComfyUI和LoRA微调,收获颇丰,感受到编程的乐趣。