SD之lora训练

news2024/11/29 6:30:27

目录

为什么要训练自己的模型

SD模型微调方法

准备素材

1 确定要训练的LoRA类型

2 图片收集

3 图片预处理

4 图片标注

安装Koyha_ss

训练lora

1.准备参数和环境

2.启动训练

使用模型

1 拷贝训练过的lora模型

2 启动SD WebUI进行图像生成


为什么要训练自己的模型

训练自己的模型可以在现有模型的基础上,让AI懂得如何更精确生成/生成特定的风格、概念、角色、姿势、对象。

比如,你下载了一个人物的大模型checkpoint,但是你想生成特点的人物,比如迪丽热巴,AI大模型是不知道迪丽热巴长什么样子的,这个使用lora就派上用场了。

要注意的是,对于一些基础东西,比如长头发、短头发、黑色头发、棕色头发,这些AI 都是知道的,lora并不是做这个的。

SD模型微调方法

主要有 4 种方式:Dreambooth, LoRA(Low-Rank Adaptation of Large Language Models), Textual Inversion, Hypernetworks。它们的区别大致如下:

  • Textual Inversion (也称为 Embedding),它实际上并没有修改原始的 Diffusion 模型, 而是通过深度学习找到了和你想要的形象一致的角色形象特征参数,通过这个小模型保存下来。这意味着,如果原模型里面这方面的训练缺失的,其实你很难通过嵌入让它“学会”,它并不能教会 Diffusion 模型渲染其没有见过的图像内容。
  • Dreambooth 是对整个神经网络所有层权重进行调整,会将输入的图像训练进 Stable Diffusion 模型,它的本质是先复制了源模型,在源模型的基础上做了微调(fine tunning)并独立形成了一个新模型,在它的基本上可以做任何事情。缺点是,训练它需要大量 VRAM, 目前经过调优后可以在 16GB 显存下完成训练。
  • LoRA 也是使用少量图片,但是它是训练单独的特定网络层的权重,是向原有的模型中插入新的网络层,这样就避免了去修改原有的模型参数,从而避免将整个模型进行拷贝的情况,同时其也优化了插入层的参数量,最终实现了一种很轻量化的模型调校方法, LoRA 生成的模型较小,训练速度快, 推理时需要 LoRA 模型+基础模型,LoRA 模型会替换基础模型的特定网络层,所以它的效果会依赖基础模型。
  • Hypernetworks 的训练原理与 LoRA 差不多,目前其并没有官方的文档说明,与 LoRA 不同的是,Hypernetwork 是一个单独的神经网络模型,该模型用于输出可以插入到原始 Diffusion 模型的中间层。 因此通过训练,我们将得到一个新的神经网络模型,该模型能够向原始 Diffusion 模型中插入合适的中间层及对应的参数,从而使输出图像与输入指令之间产生关联关系。

总儿言之,就训练时间与实用度而言,目前训练LoRA性价比更高,也是当前主流的训练方法。

准备素材

1 确定要训练的LoRA类型

首先需要确定训练什么类型的Lora,类型可以有风格,概念,角色,姿势,对象等。本文以人物风格为例,讲解如何训练人物风格的LoRA模型。

2 图片收集

对于训练人物风格的LoRA,图片收集的标准大致为:

  • 数量几十张即可
  • 分辨率适中,勿收集极小图像
  • 数据集需要统一的主题和风格的内容,图片不宜有复杂背景以及其他无关人物
  • 图像人物尽量多角度,多表情,多姿势
  • 凸显面部的图像数量比例稍微大点,全身照的图片数量比例稍微小点

(补充)图片收集的渠道:

一般情况下,首先会想到去Google的图片中进行搜索,但有时候搜索到的图片分辨率较小,且质量也不是很高。这里Post其他博主推荐的一些图片的网站,仅供参考:

  • 堆糖:https://www.duitang.com
  • 花瓣:https://huaban.com
  • pinterest:https://www.pinterest.com

优质训练集定义如下

  1. 至少15张图片,每张图片的训练步数不少于100
  2. 照片人像要求多角度,特别是脸部特写(尽量高分辨率),多角度,多表情,不同灯光效果,不同姿势等
  3. 图片构图尽量简单,避免复杂的其他因素干扰
  4. 可以单张脸部特写+单张服装按比例组成的一组照片
  5. 减少重复或高度相似的图片,避免造成过拟合
  6. 建议多个角度、表情,以脸为主,全身的图几张就好,这样训练效果最好

3 图片预处理

这里主要介绍对于图像分辨率方面的预处理。有些人也说,不用裁剪了,让AI自己去适配。

收集的图片在分辨率方面尽量大一些,但也不要太大。如果收集到的图片过小,可以使用超分辨率重建的方式将图片的方式扩大;然后将所有图片都裁剪成512x512像素大小(虽然SD2.x支持了768x768的输入,但考虑到显存限制,这里选择裁剪到512x512)。

对于超分辨率重建,可以使用SD WebUI中Extra页面中进行分辨率放大。详情请参考:https://ivonblog.com/posts/stable-diffusion-webui-manuals/zh-cn/features/upscalers/

对于裁剪到固定尺寸,现提供如下的裁剪方法:

  • birme站点批量裁剪后批量下载,优势是可以自定义选取
  • 使用SD WebUI自动裁切,或是手动裁切。详情请参考:https://ivonblog.com/posts/stable-diffusion-webui-manuals/zh-cn/training/prepare-training-dataset/

4 图片标注

这里图片标注是对每张训练图片加以文字的描述,并保存为与图片同名的txt格式文本。

我们将使用神经网络来为我们完成艰苦的工作,而不是自己费力地为每个图片进行标注。这里用到的是一个名为BLIP的图像标注模型。模型的标注并不完美,但后面经过人工的微调也足以满足我们的目的。

标注工具可以使用SD WebUI中自带的图像标注功能。详细使用请参考:https://ivonblog.com/posts/stable-diffusion-webui-manuals/zh-cn/training/prepare-training-dataset/中的预先给图片上提示词章节。

也可以使用一个工具:BooruDatasetTagManager

图片标注完成之后,会在图像文件夹里生成与图片同名的txt文件。点击打开txt文件,将觉得无关,多余的特征都给删除掉。

强调:

每个txt中记得加上关键标记,如我这里是训练迪丽热巴,那我都加上关键词dlrb,后面使用这个来触发lora

至此,训练数据集准备完成。

安装Koyha_ss

目前网上有很多训练LoRA的项目

1.koyha_ss_GUI:https://github.com/bmaltais/kohya_ss

2.LoRA_Easy_Training_Scripts:https://github.com/derrian-distro/LoRA_Easy_Training_Scripts

3.秋叶大佬的:https://github.com/Akegarasu/lora-scripts

本文介绍的是koyha_SS_Gui,windows的安装

这个安装简单,照着git步骤来就可以了,目前代码中默认torch是支持cuda118的,这个需要注意自己的显卡了。

1.git clone https://github.com/bmaltais/kohya_ss.git
2.cd kohya_ss
3..\setup.bat
#选择1,进行安装

安装过程可能报错,哈哈,一步步来解决。

运行:

gui.ps1 --listen 127.0.0.1 --server_port 7861 --inbrowser --share

训练lora

1.准备参数和环境

需要配置以下三个目录:

  • image:存放训练集
  • log:存放日志文件
  • model:存放训练过的模型

首先在image文件夹中新建一个名为100_{{name}}的文件夹,100用来表示单张图片训练100次。然后将之前标注好的训练数据都放入名为100的文件夹中。

由于之前准备的训练数据集是真人风格的,故这里可以选择真人风格的基座大模型:chilloutmix_NiPrunedFp32Fix.safetensors

详细的配置如下:

随后配置训练参数:

系统提供了很多可以调节的参数,比如batchsize,learning rate, optimizer等等。大家可以根据自己实际情况进行配置。

2.启动训练

当路径以及训练参数都配置好之后,点击入下图所示的启动按钮即可启动训练。训练的日志可在终端中查看。

使用模型

1 拷贝训练过的lora模型

当训练并测试完LoRA之后,就可以与基座大模型结合在一起进行特定风格的使用了。在使用之前需要先把训练过的LoRA模型拷贝到SD WebUI对应的保存LoRA模型的文件夹中,对应的路径为stable-diffusion-webui/models/Lora。

2 启动SD WebUI进行图像生成

1. 启动SD WebUI界面,首先选择基座大模型,由于本示例是写实风,故这里选择写实风的基座大模型:chilloutmix_NiPrunedFp32Fix.safetensors

2. 输入正向prompt,并在最后输入 <lora:训练的模型名称:权重> 来调用训练过的LoRA模型。这里记得加入dlrb,关键词

3. 输入反向prompt

4. 设定超参

5. Generate

即可使用训练过的LoRA模型进行特定任务的图像生成。

复制:全流程讲解如何使用Kohya_ss自定义训练LoRA - 知乎 ,加入自己的理解和排版

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

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

相关文章

来聊聊java8的数值流

简介 java8为我提供的简单快捷的数值流计算API&#xff0c;本文就基于几个常见的场景介绍一下数值流API的使用。 基础示例 我们以一个食物热量计算的功能展开演示&#xff0c;如下所示&#xff0c;可以看到Dish类它记录了每一个食物的名称、热量、类型等信息: public class…

百科词条可以删除吗?如何删除自己的百度百科?

近日&#xff0c;小马识途营销顾问接到不少客户删除自己百科词条的咨询&#xff0c;有不少人自己并没有去建立百科词条&#xff0c;但是网上已经有了&#xff0c;有的信息不正确&#xff0c;甚至有的信息是负能量的&#xff0c;对当事人自己造成一定的困扰&#xff0c;所以寻求…

【Proteus仿真】【51单片机】光照强度检测系统

文章目录 一、功能简介二、软件设计三、实验现象联系作者 一、功能简介 本项目使用Proteus8仿真51单片机控制器&#xff0c;使共阴数码管&#xff0c;PCF8591 ADC模块、光敏传感器等。 主要功能&#xff1a; 系统运行后&#xff0c;数码管显示光传感器采集光照强度值&#xff…

在线测试http接口,为您解析最佳测试方法

您是否正在寻找一种方便、高效且可靠的方法来测试您的http接口&#xff1f;在这篇文章中&#xff0c;我们将为您介绍在线测试http接口的最佳方法&#xff0c;帮助您确保您的接口在各种情况下都能正常运行。 什么是http接口&#xff1f; 在开始介绍如何测试http接口之前&#x…

json精讲

本文介绍json的规范及javascript和java对数据的交换读取 1. json介绍1.1 json简介1.2为什么使用 JSON&#xff1f; 2. json规范2.1基础规范2.2 key值为-字符串、数字、布尔值2.3 key值为对象Object2.4 key值为数组2.5 json本身就是一个数组 3.javascript操作json3.1 javascript…

git 本地有改动,远程也有改动,且文件是自动生成的配置文件

在改动过的地方 文件是.lock文件&#xff0c;自动生成的。想切到远程的分支&#xff0c;但是远程的分支也有改动过。这时候就要解决冲突&#xff0c;因为这是两个分支&#xff0c;代码都是不一样的&#xff0c;要先把这改动的代码提交在本地或者提交在本分支的远程才可以切到其…

freeswitch webrtc video_demo客户端进行MCU的视频会议

系统环境 一、编译服务器和加载模块 二、下载编译指定版本video_demo 三、配置verto.conf.xml 1.修改配置文件 2.重新启动 四、MCU通话测试 1.如何使用video_demo 2.测试结果 五、MCU的通话原理及音频/视频/布局/管理员等参数配置 附录 freeswitch微信交流群 系统环境 lsb_rel…

lv11 嵌入式开发 IIC(下) 20

目录 1 Exynos4412下IIC控制器介绍 1.1 总览 1.2 特征 1.3 工作框图 1.4 其他内容介绍 1.5 四种工作模式寄存器流程 2 IIC寄存器详解 2.1 概述 2.2 控制寄存器 2.3 状态寄存器 2.4 地址寄存器 2.5 数据寄存器 2.6 其他寄存器 3 MPU06050 3.1 简介 3.2 MPU6050主…

【已解决】解决UbuntuKali无法进行SSH远程连接

目录 Ubuntu20.04配置SSH远程连接Kali Linux配置SSH远程连接 Ubuntu20.04配置SSH远程连接 首先更新安装包 sudo apt-get update 下载SSH服务 sudo apt install openssh-server 查看SSH服务 service ssh status 打开 /etc/ssh/sshd_config文件修改配置文件 将PermitRootLog…

智能优化算法应用:基于郊狼算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于郊狼算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于郊狼算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.郊狼算法4.实验参数设定5.算法结果6.参考文献7.MA…

思科最新版Cisco Packet Tracer 8.2.1安装

思科最新版Cisco Packet Tracer 8.2.1安装 一. 注册并登录CISCO账号二. 下载 Cisco Packet Tracer 8.2.1三. 安装四. 汉化五. cisco packet tracer教学文档六. 正常使用图 前言 这是我在这个网站整理的笔记,有错误的地方请指出&#xff0c;关注我&#xff0c;接下来还会持续更新…

【数据结构第 6 章 ③】- 用 C 语言实现邻接表并简单介绍十字链表和邻接多重表

目录 一、邻接表 1.1 - ALGraph.h 1.2 - ALGraph.c 1.3 - Test.c 二、十字链表 三、邻接多重表 一、邻接表 邻接表&#xff08;Adjacency List&#xff09;是图的一种链式存储结构。在邻接表中&#xff0c;对图中每个顶点建立一个单链表&#xff0c;第 i 个单链表中的结…

使用ssm框架进行mapper或者service单纯测试时报错问题处理

问题 使用注解方式配置好ssm后&#xff0c;无法在测试中单独测试mapper层和service层。效果如下&#xff1a; 解决 关闭配置类中的EnableWebMvc 再次运行&#xff0c;即可完成测试。

【WPF 按钮点击后异步上传多文件code示例】

前言: WPF中按钮点击事件如何执行时间太长会导致整个UI线程卡顿&#xff0c;现象就是页面刷新卡住&#xff0c;点击其他按钮无反馈。如下是进行异步执行命令&#xff0c;并远程上传文件的代码。 ![异步上传文件](https://img-blog.csdnimg.cn/direct/20c071929b004dcf9223dee2…

postgresql安装部署(docker版本)

1.在线部署 创建数据库存储目录 mkdir /home/pgdata创建容器 docker run --name postgresql --restartalways -d -p 5432:5432 -v /home/pgdata:/var/lib/postgresql/data --shm-size10g -e POSTGRES_PASSWORD密码 postgis/postgis:12-3.2-alpine–name为设置容器名称 -d表…

第 375 场 LeetCode 周赛题解

A 统计已测试设备 模拟&#xff1a;记录当前已测试设备数量 class Solution { public:int countTestedDevices(vector<int> &batteryPercentages) {int res 0;int s 0;for (auto x: batteryPercentages) {if (x - s > 0) {res;s;}}return res;} };B 双模幂运算 …

NR Channel raster和Sync raster

NR中&#xff0c;由于信道带宽可能非常大&#xff0c;如果UE按照channel Raster进行同步信号搜索&#xff0c;需要的时间很长&#xff0c;且非常耗电&#xff1b;因而NR引入了Synchronization raster的概念&#xff0c;同步信号按照Sync Raster放置。 ARFCN 频点号对应Channel…

java--DateTimeFormatter、Period、Duration

1.DateTimeFormatter 2.LocalDateTime提供的格式化、解析时间的方法 3.Period(一段时期) 可以用于计算两个LocalDate对象相差的年数、月数、天数。 4.Duration(持续时间) 可以用于计算两个时间对象相差的天数、小时数、分数、秒数、纳秒数&#xff1b;支持LocalTime、LocalDa…

【Spring】依赖注入之属性注入详解

前言&#xff1a; 我们在进行web开发时&#xff0c;基本上一个接口对应一个实现类&#xff0c;比如IOrderService接口对应一个OrderServiceImpl实现类&#xff0c;给OrderServiceImpl标注Service注解后&#xff0c;Spring在启动时就会将其注册成bean进行统一管理。在Co…

【小沐学Python】Python实现WebUI网页图表(gradio)

文章目录 1、简介2、安装3、基本测试3.1 入门代码3.2 组件属性3.3 多个输入和输出组件3.4 图像示例3.5 聊天机器人3.6 模块&#xff1a;更灵活、更可控3.7 进度条 结语 1、简介 https://www.gradio.app/ Gradio是用友好的网络界面演示机器学习模型的最快方法&#xff0c;因此…