SD之lora训练

目录

为什么要训练自己的模型

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.mzph.cn/news/208746.shtml

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

相关文章

webpack该如何打包

1.我们先创建一个空的大文件夹 2.打开该文件夹的终端 输入npm init -y 2.1.打开该文件夹的终端 2.2在该终端运行 npm init -y 3.安装webpack 3.1打开webpack网址 点击“中文文档” 3.2点击“指南”在点击“起步” 3.3复制基本安装图片画线的代码 4.在一开始的文件夹下在创建一…

案例061:基于微信小程序的互助学习系统

文末获取源码 开发语言&#xff1a;Java 框架&#xff1a;SSM JDK版本&#xff1a;JDK1.8 数据库&#xff1a;mysql 5.7 开发软件&#xff1a;eclipse/myeclipse/idea Maven包&#xff1a;Maven3.5.4 小程序框架&#xff1a;uniapp 小程序开发软件&#xff1a;HBuilder X 小程序…

django与数据库交互关于当前时间的坑

背景 在线上服务中使用时间进行数据库操作时发现异常&#xff0c;而在本地环境无法成功复现此问题&#xff0c;导致难以进行故障排查。 核心问题 view.py class XxxViewSet(viewsets.ModelViewSet):queryset Xxx.objects.with_status().order_by("status", &quo…

【数据结构】插入排序,希尔排序,选择排序,堆排序,冒泡排序

1.插入排序 思路&#xff1a;插入排序将一个数插入一个有序的数组里面&#xff0c;将这个数和数组元素挨着比较&#xff0c;直到他插入到合适的位置。 动画演示&#xff1a; 步骤&#xff1a;1.定义一个变量tmp保存要插入的数据 2.在循环中用tmp和有序数组中的元素比较&#…

学习pytorch18 pytorch完整的模型训练流程

pytorch完整的模型训练流程 1. 流程1. 整理训练数据 使用CIFAR10数据集2. 搭建网络结构3. 构建损失函数4. 使用优化器5. 训练模型6. 测试数据 计算模型预测正确率7. 保存模型 2. 代码1. model.py2. train.py 3. 结果tensorboard结果以下图片 颜色较浅的线是真实计算的值&#x…

国产化软件突围!怿星科技eStation产品荣获2023铃轩奖“前瞻优秀奖”

11月11日&#xff0c;2023中国汽车供应链峰会暨第八届铃轩奖颁奖典礼在江苏省昆山市举行。怿星科技凭借eStation产品&#xff0c;荣获2023铃轩奖“前瞻智能座舱类优秀奖”&#xff0c;怿星CEO潘凯受邀出席铃轩奖晚会并代表领奖。 2023铃轩奖“前瞻智能座舱类优秀奖” 铃轩奖&a…

el-table 跨页多选

步骤一 在<el-table>中:row-key"getRowKeys"和selection-change"handleSelectionChange" 在<el-table-column>中type"selection"那列&#xff0c;添加:reserve-selection"true" <el-table:data"tableData"r…

队列排序:给定序列a,每次操作将a[1]移动到 从右往左第一个严格小于a[1]的元素的下一个位置,求能否使序列有序,若可以,求最少操作次数

题目 思路&#xff1a; 赛时代码&#xff08;先求右起最长有序区间长度&#xff0c;再求左边最小值是否小于等于右边有序区间左端点的数&#xff09; #include<bits/stdc.h> using namespace std; #define int long long const int maxn 1e6 5; int a[maxn]; int n; …

阿里云磁盘在线扩容

我们从阿里云的控制面板中给硬盘扩容后结果发现我们的磁盘空间并没有改变 注意&#xff1a;本次操作是针对CentOS 7的 &#xfeff;#使用df -h并没有发现我们的磁盘空间增加 #使用fdisk -l发现确实还有部分空间 运行df -h命令查看云盘分区大小。 以下示例返回分区&#xf…

eve-ng镜像模拟设备-信息安全管理与评估-2023国赛

eve-ng镜像模拟设备-信息安全管理与评估-2023国赛 author&#xff1a;leadlife data&#xff1a;2023/12/4 mains&#xff1a;EVE-ng 模拟器 - 信息安全管理与评估模拟环境部署 references&#xff1a; EVE-ng 官网&#xff1a;https://www.eve-ng.net/EVE-ng 中文网&#xff1…

嵌入版python作为便携计算器(安装及配置ipython)

今天用别的电脑调试C&#xff0c;需要计算反三角函数时发现没有趁手工具&#xff0c;忽然想用python作为便携计算器放在U盘&#xff0c;遂想到嵌入版python 懒得自己配可以直接下载&#xff0c;使用方法见第4节 1&#xff0c;下载embeddable python&#xff08;嵌入版python&…

图的邻接链表储存

喷了一节课 。。。。。。。、。 #include<stdio.h> #include<stdlib.h> #define MAXNUM 20 //每一个顶点的节点结构&#xff08;单链表&#xff09; typedef struct ANode{ int adjvex;//顶点指向的位置 struct ArcNode *next;//指向下一个顶点 …

C++ 内存分区模型

目录 程序运行前 代码区 全局区 程序运行后 new 在堆区开辟数据 delete释放堆区数据 堆区开辟数组 内存分区模型 栈&#xff08;Stack&#xff09; 堆&#xff08;Heap&#xff09; 全局/静态存储区&#xff08;Global/Static Storage&#xff09; 常量存储区&am…

使用 Axios 进行网络请求的全面指南

使用 Axios 进行网络请求的全面指南 本文将向您介绍如何使用 Axios 进行网络请求。通过分步指南和示例代码&#xff0c;您将学习如何使用 Axios 库在前端应用程序中发送 GET、POST、PUT 和 DELETE 请求&#xff0c;并处理响应数据和错误。 准备工作 在开始之前&#xff0c;请…

电子学会C/C++编程等级考试2021年09月(五级)真题解析

C/C++等级考试(1~8级)全部真题・点这里 第1题:抓牛 农夫知道一头牛的位置,想要抓住它。农夫和牛都位于数轴上,农夫起始位于点N(0<=N<=100000),牛位于点K(0<=K<=100000)。农夫有两种移动方式: 1、从X移动到X-1或X+1,每次移动花费一分钟 2、从X移动到2*X,每…

Navicat 技术指引 | 适用于 GaussDB 分布式的自动运行功能

Navicat Premium&#xff08;16.3.3 Windows 版或以上&#xff09;正式支持 GaussDB 分布式数据库。GaussDB 分布式模式更适合对系统可用性和数据处理能力要求较高的场景。Navicat 工具不仅提供可视化数据查看和编辑功能&#xff0c;还提供强大的高阶功能&#xff08;如模型、结…

「Python编程基础」第7章:字符串操作

文章目录 一、回顾二、新手容易踩坑的引号三、转义字符四、多行字符串写法五、注释六、字符串索引和切片七、字符串的in 和 not in八、字符串拼接九、转换大小写十、合并字符串join()十一、分割字符串split()十二、字符串替换 replace()十三、字符串内容判断方法十四、字符串内…

Qt使用Cryptopp生成HMAC-MD5

近期项目中HTTPS通讯中&#xff0c;token需要使用HMAC-MD5算法生成&#xff0c;往上找了一些资料后&#xff0c;仍不能满足自身需求&#xff0c;故次一记。 前期准备&#xff1a; ①下载Cryptopp库&#xff08;我下载的是8.8.0 Release版本&#xff09;&#xff1a;Crypto Li…

基于ResNet模型的908种超大规模中草药图像识别系统

中草药药材图像识别相关的实践在前文中已有对应的实践了&#xff0c;感兴趣的话可以自行移步阅读即可&#xff1a; 《python基于轻量级GhostNet模型开发构建23种常见中草药图像识别系统》 《基于轻量级MnasNet模型开发构建40种常见中草药图像识别系统》 在上一篇文章中&…

RocketMQ-RocketMQ高性能核心原理(流程图)

1.NamesrvStartup 2.BrokerStartup 3. DefualtMQProducer 4.DefaultMQPushConsumer