LLM - 自定义图像数据集 使用 LoRA 微调 图像生成 Flux 模型

news2024/9/24 19:22:07

欢迎关注我的CSDN:https://spike.blog.csdn.net/
本文地址:https://spike.blog.csdn.net/article/details/141638928

免责声明:本文来源于个人知识与公开资料,仅用于学术交流,欢迎讨论,不支持转载。


LoRA

在 Diffusion 图像生成框架中,使用 LoRA(Low-Rank Adaptation)微调,难点在于,需要精确控制模型参数的更新以避免破坏预训练模型的知识,同时保持生成图像的多样性和质量,这涉及到复杂的优化策略和计算资源的高效利用,以及在保持模型泛化能力的同时实现特定任务的微调,这通常需要大量的实验和调参来找到最佳的低秩矩阵和学习率,以确保模型在特定数据集上的性能提升。

LoRA 训练框架,参考 AI Toolkit by Ostris,配置开发环境:

git clone https://github.com/ostris/ai-toolkit
cd ai-toolkit
git submodule update --init --recursive
conda create -n ai-toolkit python=3.9
conda activate ai-toolkit
pip3 install torch==2.4.0 torchvision torchaudio -i https://pypi.tuna.tsinghua.edu.cn/simple

测试 PyTorch 是否安装成功,即:

python

import torch
print(torch.__version__)  # 2.4.0
print(torch.cuda.is_available())  # True
exit()

再安装其他依赖的 Python 库:

pip install -r requirements.txt

配置训练文件:

cd ai-toolkit/config/examples/
cp train_lora_flux_24gb.yaml ../.

重要参数包括 LoRA 相关参数、batch_sizelr (learning rate)、精度使用float16,即:

network:
  type: "lora"
  linear: 16
  linear_alpha: 16
train:
  batch_size: 1
  steps: 2000  # total number of steps to train 500 - 4000 is a good range
  gradient_accumulation_steps: 1
  lr: 1e-4
save:
  dtype: float16 # precision to save

修改配置文件 train_lora_flux_24gb.yaml 的相关路径:

  • folder_path:图像数据集,包括图像,以及同名的描述 (caption),数据集准备使用 Joy Caption 模型,参考
  • name_or_path:基础的 Diffusion 模型,使用 FLUX.1-dev
folder_path: "joy-caption-pre-alpha/image_datasets/yky_ori_dataset"
name_or_path: "FLUX.1-dev"

在图像数据集的描述中,第一行,加入,This is a photo of a girl named [xxx]. 强化关键词,大约 40 张图像,以及描述。

单卡运行训练脚本:

CUDA_VISIBLE_DEVICES=1 nohup python -u run.py config/train_lora_flux_24gb.yaml > nohup.out &

关于显存占用:batch_size=1 是 22892M、batch_size=4 是 32076M。如果运行错误,参考 Bug1 的解决方案。

输出文件夹,my_first_flux_lora_v1.safetensors 即最终的模型,训练 2000 steps,即:

├── [1.8K]  config.yaml
├── [164M]  my_first_flux_lora_v1.safetensors
├── [164M]  my_first_flux_lora_v1_000001000.safetensors
├── [164M]  my_first_flux_lora_v1_000001250.safetensors
├── [164M]  my_first_flux_lora_v1_000001500.safetensors
├── [164M]  my_first_flux_lora_v1_000001750.safetensors
├── [165M]  optimizer.pt
└── [4.0K]  samples

samples 是模型在训练过程中的图像变化,提示词来源于配置中的 sample/prompts 字段:

Img

在 ComfyUI 中,调用 Flux + LoRA 的效果,使用不同的 LoRA 模型权重,效果如下:
LoRA

参考:在 ComfyUI 中配置 Flux + LoRA 的组合流程优化图像属性

Bug1:

TypeError: unsupported operand type(s) for |: 'torch._C._TensorMeta' and 'NoneType'

解决:修改 ai-toolkit/toolkit/config_modules.py 文件,需要修改 2 处,即:

Union[torch.Tensor, None]  # Union[torch.Tensor | None]

参考:Error for Flux Dev Lora => TypeError: unsupported operand type(s) for |: ‘torch._C._TensorMeta’ and ‘NoneType’

Bug2:

ai-toolkit/lib/python3.9/site-packages/controlnet_aux/mediapipe_face/mediapipe_face_common.py:7: UserWarning: The module 'mediapipe' is not installed. The package will have limited functionality. Please install it using the command: pip install 'mediapipe'

解决:安装 mediapipe 包,即可。

pip install mediapipe -i https://pypi.tuna.tsinghua.edu.cn/simple

Bug3:

ontrolnet_aux/segment_anything/modeling/tiny_vit_sam.py:654: UserWarning: Overwriting tiny_vit_5m_224 in registry with controlnet_aux.segment_anything.modeling.tiny_vit_sam.tiny_vit_5m_224. This is because the name being registered conflicts with an existing name. Please check if this is not expected.
  return register_model(fn_wrapper)

解决:降低 timm 包的版本,即可。

pip show timm
pip install timm==0.9.10

其他 Flux 的 LoRA,参考 XLabs AI: https://huggingface.co/XLabs-AI

XLabs AI is a part of an international company, a product laboratory where we strive to become leaders in machine learning and neural networks. The company develops and implements revolutionary solutions, setting new standards and inspiring to achieve the impossible in the field of information technology. Our team is an open, energized, and young collective that welcomes innovative ideas and supports the initiative and creativity of our employees.

XLabs AI 是一家国际公司的一部分,也是一个产品实验室,我们努力成为机器学习和神经网络领域的领导者。公司开发并实施革命性的解决方案,树立新的标准,并且激励人们在信息技术领域实现不可能。

LoRA: https://huggingface.co/XLabs-AI/flux-lora-collection/tree/main,LoRA 模型大小是 22.4M、44.8M,最大是 359 M,主要是 Rank (置) 相关。

参考:

  • CSDN - 使用 Joy Caption 模型 描述和打标 图像数据集 (Image Caption)
  • CSDN - 在 ComfyUI 中配置 Flux + LoRA 的组合流程优化图像属性
  • Medium - Fine-tuning FLUX.1: Customizing Your AI Image Generator

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2084257.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

假设以带头结点的循环链表表示队列,并且只设一个指针指向队尾元素结点(注意不设头指针),试编写相应的置空队列、判断队列是否为空、入队和出队等算法。

typedef int Datatype; typedef struct queue {Datatype data;struct queue* next; }queue; //队列 typedef struct {queue* rear; }LinkQueue; //初始化 void queueinit(LinkQueue* ps) {ps->rear (queue*)malloc(sizeof(queue));if (ps->rear NULL){perror("err…

家里养宠物空气净化器有用吗,应该怎么挑选宠物空气净化器

养猫,无疑给了我们很多陪伴和乐趣,为我们的生活添上了无数温馨的色彩。然而,在这份甜蜜的负担中,猫毛的问题确实成为了不少铲屎官们共同的“小烦恼”。这些浮毛总能在你最不经意的时候,悄悄占领家中的每一个角落。每天…

不仅仅是文化:解决常见安全问题根源

今年,GitLab对DevSecOps专业人士的年度调查发现了一些与组织文化相关的问题,这些问题可能会阻碍工程团队和安全团队之间的更深层次协调。 大多数(58%)的安全受访者表示,他们很难让开发部门优先修复漏洞,52%的人表示,繁…

Getting AttributeError when using openAI python library

题意:“使用 OpenAI Python 库时出现 AttributeError” 问题背景: Im building a new AI chatbot utilizing the openai library and I have a gradio UI set up in one file (app.py) and a predict() function in another (trainedBot.py) Every time…

【Threejs学习】材质灯光投影

一、光源分类 环境光(AmbientLight):会均匀的照亮场景中的所有物体。无方向,不能投射阴影。平行光(DirectionalLight):沿特定方向散发的光,发出的光线都是平行的。例如太阳光,可投射阴影。点光源(PointLight)&#xf…

2024年大学生适合入手的蓝牙耳机推荐?四款开放式耳机推荐

2024年大学生入手蓝牙耳机的话,我当然是比较推荐入手开放式蓝牙耳机的。 主要是因为开放式蓝牙耳机佩戴起来真的很舒适,它的开放式设计通常是轻巧且适配贴合不同耳型的,所以既不会对耳朵造成压迫感,也适合长时间佩戴使用。 不仅…

华为AC旁挂二层组网配置详解:从DHCP部署到无线业务配置,完成网络搭建

组网需求 AC组网方式:旁挂二层组网。 DHCP部署方式: AC作为DHCP服务器为AP分配IP地址。 防火墙作为DHCP服务器为STA分配IP地址。 业务数据转发方式:直接转发。 网络拓扑图 对于旁边路直接转发,优点就是数据流量不经过AC&…

ubuntu20.04(wsl2)测试 arcface 人脸识别(计算特征向量)

1. 参考博客和代码、模型仓库: 1.1. 【C随记】collect2: error: ld returned 1 exit status错误分析与解决 1.2. Visual Studio 2022新建 cmake 工程测试 tensorRT 自带样例 sampleOnnxMNIST 1.3.报错:ModuleNotFoundError: No module named ‘ten…

杭州城市开发者社区活动:《聚力AI,共创共荣》第二期线下AI论坛活动等你来!

由中也AI共荣社主办,COC杭州城市开发者社区等多家协办的《聚力AI,共创共荣》AI论坛活动来袭! 活动围绕AI技术的创新应用,以及在实际应用落地的场景为主题展开,聚力AI,共同探讨。有机会与行业大咖进行面对面…

沙箱支付支付宝

沙箱支付支付宝 文章目录 沙箱支付支付宝一、进入沙箱应用-支付宝二、基本配置2.1 查看自己的基本信息2.2 生成自定义密钥,进行配置 三、springboot整合沙箱支付3.1 需要导入的两个相关依赖(pom.xml)3.2 需要加入的配置文件信息(a…

网站建设完成后, 行业网站如何做seo

行业网站的SEO优化是一个系统工程,涉及多个方面以确保网站能够在搜索引擎中有良好的表现。以下是行业网站SEO的详细解析: 关键词研究与布局 目标受众分析:了解目标受众的搜索习惯和需求,确定适合的关键词。使用工具来发现相关关键…

启航未来,共绘科技蓝图,2024青岛软件博览会(青岛软博会)

在金秋送爽、硕果累累的十月,青岛,这座镶嵌于黄海之滨的璀璨明珠,以其独特的海滨风光与深厚的文化底蕴,即将迎来一场科技领域的璀璨盛宴——2024青岛国际软件融合创新博览会(简称:青岛软博会)。…

C++ | Leetcode C++题解之第378题有序矩阵中第K小的元素

题目&#xff1a; 题解&#xff1a; class Solution { public:bool check(vector<vector<int>>& matrix, int mid, int k, int n) {int i n - 1;int j 0;int num 0;while (i > 0 && j < n) {if (matrix[i][j] < mid) {num i 1;j;} else…

Java 5.3 - MyBatis

#{} 和 ${} 的区别是什么&#xff1f; ${} 是 Properties 文件中的变量占位符&#xff0c;它可以用于标签属性值和 sql 内部&#xff0c;属于静态文本替换&#xff0c;比如 ${driver} 被静态替换为 com.mysql.jdbc.Driver #{} 是 sql 的参数占位符 xml 映射文件中&#xff0c…

labelImg使用

创建一个名字为data的文件夹&#xff0c;里面images文件夹存放图片&#xff1b;labels存放标注的标签文件&#xff1b;最后创建一个名为 classes.txt 的txt文件来存放所要标注的类别名称。 终端输入&#xff1a; labelImg images classes.txt images 存储图像的文件夹 classe…

【一文详解】内外网文件摆渡系统,解决网间数据安全传输问题

一、内外网文件摆渡系统的背景 数字化转型进一步推动了数据的移动&#xff0c;而随着攻击者加速利用日常生活中的数据依赖性&#xff0c;数据泄露也随之扩大。企业为保护网络安全和数据安全&#xff0c;使用网络隔离手段进行网络隔离&#xff0c;如银行内部将网络隔离为生产网…

基于FFMPEG读取摄像头图像编码为h264

1.调用ffmpeg命令采集摄像头图像 $ ffmpeg -f v4l2 -framerate 30 -video_size 1280*720 -i /dev/video0 -c:v libx264 -preset veryfast -f h264 output.h264-f v4l2: 指定输入设备采用Video4Linux2框架。   -framerate 30: 设置帧率为30。   -video_size 1280720: 设置视…

Shell 脚本入门指南

Shell 脚本入门指南 引言1.1 什么是 Shell 脚本&#xff1f;1.2 为什么学习 Shell 脚本&#xff1f; 准备工作2.1 选择和安装 Shell&#xff08;Bash&#xff09;2.2 设置脚本编辑环境&#xff08;文本编辑器&#xff09; Hello World&#xff01;基本语法4.1 变量4.2 条件判断…

【OpenCV】离散傅里叶变换

离散傅里叶变换 傅里叶变换代码实现扩展图片创建储存实部和虚部值的矩阵进行离散傅里叶变换将复数转换成振幅对数转换裁剪和重排归一化 离散傅里叶变换在图像处理中的应用参考 傅里叶变换 在图片处理中&#xff0c;傅里叶变化会将对图片的时域分析转变为频域分析。 傅里叶的基…

模型 麦肯锡七步成诗法

系列文章 分享 模型&#xff0c;了解更多&#x1f449; 模型_思维模型目录。问题到解决方案的七步跨越。 1 麦肯锡七步成诗法的应用 1.1零售业客户体验转型实践 随着消费者对购物体验的要求日益提高&#xff0c;一家零售企业面临客户流失和销售增长放缓的问题。企业管理层决定…