最近在尝试进行 FLUX.1 的 LoRA 训练,以前没有 SD1.5 和 SDXL 的训练经验,网上看到 FLUX.1 的 LoRA 炼起来效果比较好,就试了几种方案来看看效果。这个文章更多是介绍如何使用 ComfyUI 来进行 LoRA 的训练,一些训练的参数我也还在调试中,后面会陆续更新。
训练 LoRA 的过程大体包括以下步骤:
数据集
选择图像
在进行 LoRA 训练的时候,数据集也就是用于训练模型的图像,个人认为是模型训练中最重要的部分,需要花大量的时间进行整理、清洗、标注等,好的图像能带来更佳的生成效果,比如可以参考以下这些要素。如果是针对人物的 LoRA,目前看起来 10-30 张图片就够了。
- 分辨率: 原始图片的分辨率最好为 1024 x 1024 或以上,后期有需要可以转换为 512 x 512。
- 比例: 在 Flux.1 上训练时,可以使用 1:1 的比例,还可以添加其他比例的图片来增加多样性。
- 清晰度: 尽量使用清晰的图像。
- 多样性: 使用不同的角度、光线和服装,使模型更加灵活。
标注
选择好图片后,我们还需要对图片进行标注。如果只是制作人物的 LoRA,标注倒不是必须的,看网上的评论,FLUX.1 对人物能很好地处理,有时仅仅简单的使用一两个单词反而能得到更好的效果,所以我这边也做了多个 LoRA 来对比一下(无标注、简单标注、复杂标注),对比结果可以看后面的测试模型部分。
简单标注
你可以使用一个触发词加人物的特征,比如 satomiishihara, a woman.
,其中 satomiishihara 为触发词(trigger)。
复杂标注
我使用的是 ComfyUI 里面的 Joy Caption 节点来进行复杂标注的操作,它利用的是 Meta 的 Llama 模型来对图片进行描述,更佳符合自然语言的表达。这个节点来自于 Comfyui_CXH_joy_caption 这款插件,链接里面有详细的中文安装指南和工作流文件。以下图为例,可以看到它生成的标注非常详细,我们可以在前面添加触发词。当然,你可以对生成的字段进行修改,在图片不多的情况下,每个标注都可以再修改一下,以这个为例,我最后改为了 satomiishihara, a photograph of a women with long...
,其中 satomiishihara 为触发词。
这个是最终的文件结构,每张图片(来自于互联网)对应一个 txt 的标注文件,保持文件名一致。
训练工具
目前能进行 FLUX.1 LoRA 训练的方式已经有不少了,云端的服务也有一些,比如这些网站:http://Replicate.com,Fal.ai,http://Civitai.com,RunPod 等等。它们基本上都有设置好的模版,上传好图片并进行一些简单的设置就可以生成 LoRA了。当然这些都是需要付费的,并且也可能失去了对 LoRA 进行更精细的调整。对这部分感兴趣的,可以自行搜索下哈。
本地训练的话也有一些工具可以进行操作了,比如下面这些。其中前面两个需要在本地安装 Python 环境以及相应的依赖,ai-toolkit 需要使用 HuggingFace 账号的阅读权限并下载 20GB 多的 fp16 FLUX-Dev 模型,相对来说不是很方便。而 Kohya‘s GUI 的话,关于 sd3-flux.1 的分支目前还没正式上线,并且不时地更新,所以后期的本地部署可能也要做调整。而 ComfyUI-FluxTrainer 是利用 ComfyUI 工作流的方式来训练模型,并且可以使用 fp8 等模型,它的本质虽然也是基于 Kohya 的代码,但是这个插件的作者比较勤奋,制作了比较多的 ComfyUI 的插件,他也会根据 Kohya 的更新来做相对的调整,那么我们后期就不太需要做太多的调整,只要使用他的工作流就可以进行本地训练了。所以这篇文章会具体介绍如何使用这个 ComfyUI 的插件来进行 FLUX.1 LoRA 的训练。
要使用 FLUXTrainer 这个插件的话,在 ComfyUI Manager 里面搜索名字安装后重启即可,工作流可以在这里下载 ComfyUI-FluxTrainer/examples,插件作者也经常会更新这个工作流的。
工作流设置
我们先来看下工作流的图片设置部分,这里可以设置图像数据集的文件夹地址以及触发词(如 satomiishihara),我使用的是 16GB 的 RTX4080 显卡,所以主要还是使用 512 像素的图像。如果你还有其他像素的图像,也可以在这里进行添加,我这里是将它们绕过了(紫色部分)。batch_size 和 num_repeat 可以根据自己的需求进行修改。
这里是模型的选择,以及采样的时候需要用到的参数,这个可以根据自己平时跑 FLUX.1 工作流的设置,我一般会用 fp8 的模型,如果选择了 fp8 模型,那么在后面保存 LoRA 的时候也要选择 fp8 格式的。
接下来是整个训练过程最重要的参数设置,左边部分是选择相应的优化器(Optimizer),Adafactor 相对来说对显存的要求更低一点,16GB 及以下显存的可以选择 Adafactor。右边部分则是更多参数的设置,其中比较重要的是训练学习率(learning_rate)、总的训练步数(max_train_steps) 以及下面的保存类别(save_dtype)。训练学习率我一般就直接用默认的 0.0004(4e-4),更精细的话可以用 0.0001(1e-4)。训练步数我一般是用图片的张数乘上 100,比如我这次使用了 20 张参考图,所以使用 2000 这个步数,但是有时步数越高可能得到的结果并不是最好的,效果可以看后面的模型测试部分。
另外如果你的显存低于 16GB 的话,可以将 split_mode
设为 true,并且在最底部的额外参数部分填上 train_blocks=single
。这个设置下,我的显存只要占用约 8GB,当然训练时间变长了,我的电脑上面差不多是不打开 split_mode
的三倍左右。
进行了这么多的设置以后,我们基本上可以跑工作流了,在这之前,如果你的显卡不是特别好,需要将后面的 Flux Train Validate 节点以及对应的图片展示节点都屏蔽掉,在我 16GB 显存的情况下,打开 Flux Train Validate 会经常出现爆显存的情况,导致训练失败又要重新开始。你可以根据自己的情况做相应地调整。如果你决定不使用 Flux Train Validate ,那么在整个工作流最右边的图片保存节点区域也要屏蔽掉。
现在可以生成 LoRA 了,以我的电脑配置(RTX4080 16GB 显存,64GB 内存),2000 步数,在不打开 split_mode
的时候,使用 fp8 模型进行训练,需要大概 50-60 分钟(显存占用约 14.5GB),打开 split_mode
的话差不多 3 个多小时(显存占用约 8GB)。
模型测试
FLUXTrainer 的工作流其实已经包含了对模型的测试,也就是使用上面说的 Flux Train Validate 节点来生成效果图,但是由于我显卡不够,所以我是额外做了一个工作流来进行一些对比。对比图针对的是下面这 4 种情况,我们来看看它们的效果吧。
- 不使用 LoRA
- 无标注
- 简单标注
- 复杂标注
我们先来看一下模型在不同步数下的表现,使用的是简单标注这个模型。个人认为在 1000 步的时候效果就出来了,更高的步数反而使得生成的图片开始变得有些模糊,人物的脸部变得僵硬,特别是笑容消失了。对比其他两个模型(无标注、复杂标注),得到的结果也是差不多了,所以后续的对比都是使用 1000 步的模型。
我们再来看一下 4 种情况下在 1000 步的效果,比较出乎意料的是使用复杂标注的效果反而没有其他两种情况好,比如在第三张图片上,虽然它能保存一部分人物的特征,但是出来的结果仍旧是动漫风格的,我个人觉得是复杂标注里面过多的特征描述反而束缚了模型的发挥,其实 FLUX.1 已经非常聪明了,在训练的时候它已经知道图片的很多特征,没有必要继续进行过多的描述。相对来说,我觉得最好的是简单标注的效果,同样在第三张图片中,简单标注相比无标注表现地更自然一些。以 satomiishihara, a woman.
这个标注为例,我的理解是 FLUX.1 在训练的时候,能够将触发词 satomiishihara 和 woman 关联起来,同时又没有过多特征描述的干扰,所以能保持模型的灵活性。
小结
以我目前有限的模型训练结果来说,如果是进行人物的 LoRA 训练,进行 1000 步左右的训练就能得到比较好的效果,同时可以采用简单标注或者无标注的形式,过多的标注反而可能影响模型的发挥。
我后续也会做一些其他参数的调整,来优化模型的训练,并进行相应的比较分析。
码字不易,如果你觉得这篇文章对你有所帮助,麻烦点个赞哦。
为了帮助大家更好地掌握 ComfyUI,我在去年花了几个月的时间,撰写并录制了一套ComfyUI的基础教程,共六篇。这套教程详细介绍了选择ComfyUI的理由、其优缺点、下载安装方法、模型与插件的安装、工作流节点和底层逻辑详解、遮罩修改重绘/Inpenting模块以及SDXL工作流手把手搭建。
由于篇幅原因,本文精选几个章节,详细版点击下方卡片免费领取
一、ComfyUI配置指南
- 报错指南
- 环境配置
- 脚本更新
- 后记
- …
二、ComfyUI基础入门
- 软件安装篇
- 插件安装篇
- …
三、 ComfyUI工作流节点/底层逻辑详解
- ComfyUI 基础概念理解
- Stable diffusion 工作原理
- 工作流底层逻辑
- 必备插件补全
- …
四、ComfyUI节点技巧进阶/多模型串联
- 节点进阶详解
- 提词技巧精通
- 多模型节点串联
- …
五、ComfyUI遮罩修改重绘/Inpenting模块详解
- 图像分辨率
- 姿势
- …
六、ComfyUI超实用SDXL工作流手把手搭建
- Refined模型
- SDXL风格化提示词
- SDXL工作流搭建
- …
由于篇幅原因,本文精选几个章节,详细版点击下方卡片免费领取