使用Kohya_ss训练Stable Diffusion Lora

Stable Diffusion模型微调方法

Stable Diffusion主要有 4 种方式:Dreambooth, LoRA, Textual Inversion, Hypernetworks。

Textual Inversion (也称为 Embedding),它实际上并没有修改原始的 Diffusion 模型, 而是通过深度学习找到了和你想要的形象一致的角色形象特征参数,通过这个小模型保存下来。这意味着,如果原模型里面这方面的训练缺失的,其实你很难通过嵌入让它“学会”,它并不能教会 Diffusion 模型渲染其没有见过的图像内容。

Dreambooth 是对整个神经网络所有层权重进行调整,会将输入的图像训练进 Stable Diffusion 模型,它的本质是先复制了源模型,在源模型的基础上做了微调(fine tunning)并独立形成了一个新模型,在它的基本上可以做任何事情。缺点是,训练它需要大量 VRAM, 目前经过调优后可以在 16GB 显存下完成训练。

LoRA (Low-Rank Adaptation of Large Language Models) 也是使用少量图片,但是它是训练单独的特定网络层的权重,是向原有的模型中插入新的网络层,这样就避免了去修改原有的模型参数,从而避免将整个模型进行拷贝的情况,同时其也优化了插入层的参数量,最终实现了一种很轻量化的模型调校方法, LoRA 生成的模型较小,训练速度快, 推理时需要 LoRA 模型+基础模型,LoRA 模型会替换基础模型的特定网络层,所以它的效果会依赖基础模型。

Hypernetworks 的训练原理与 LoRA 差不多,与 LoRA 不同的是,Hypernetwork 是一个单独的神经网络模型,该模型用于输出可以插入到原始 Diffusion 模型的中间层。 因此通过训练,我们将得到一个新的神经网络模型,该模型能够向原始 Diffusion 模型中插入合适的中间层及对应的参数,从而使输出图像与输入指令之间产生关联关系。

硬件配置

显卡选择建议:显存在10GB以上,也就是RTX3060等级以上的GPU。

准备训练数据

图片收集

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

图片预处理

(1)裁切图片

下载图片后,要将训练图片裁切成512x512像素。你可以选择用SD WebUI自动裁切,或是手动裁切。

  1. 将要裁切的图片放到同一个目录下。
  2. 打开SD WebUI,进到Train → Preprocess images页面。
  3. 第一个字段Source directory填写原始图片的路径。
  4. 第二个字段Destination directory填写输出路径。
  5. Width和Height设置为512x512。
  6. 点击Preprocess ,图片即会自动裁切。在那之后原始图片就可以删除,只留下裁切后的图片。
(2)预先给图片上提示词(图片打标)

接着要给图片预先上提示词,这样AI才知道要学习哪些提示词。

  1. 启动SD WebUI,进入Train页面。
  2. 进入Preprocess页面,Source输入裁切图片的路径,Destination填处理后图片输出的路径。
  3. 接着勾选Create Flipped Copies,创建翻转图片提升训练数量。
  4. 然后用Stable Diffusion训练真实图片的勾选Use BLIP for caption;训练动漫人物改勾选Use DeepBooru for caption。
  5. 点击Preprocess,约几分钟后便会处理完成。输出的目录里面会含有每张图片对应的提示词txt档。
  6. 图片标注完成之后,会在图像文件夹里生成与图片同名的txt文件。点击打开txt文件,将觉得无关,多余的特征都给删除掉。

安装kohya_ss

环境准备

安装 Python 3.10,git

拉取代码

git clone https://github.com/bmaltais/kohya_ss

进入kohya_ss目录

cd kohya_ss

运行设置脚本

.\setup.bat

启动GUI

gui.bat

允许远程访问

gui.bat --listen 0.0.0.0 --server_port 7860 —headless

配置路径

需要配置以下三个目录:

  • image folder:存放训练集
  • logging folder:存放日志文件
  • output folder:存放训练过的模型

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

详细的配置如下:


​​​​​​​

配置训练参数:

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

参数说明:

  • train_batch_size:训练批处理大小,指定同时训练图像的数量,默认值1,数值越大,训练时间越短,消耗内存越多。
  • Number of CPU threads per core:训练期间每个CPU核心的线程数。基本上,数字越高,效率越高,但有必要根据规格调整设置。
  • epoch:训练周期,假设想通过10次阅读50张图片来学习。在这种情况下,1个周期是50x10=500个训练。如果是2个周期,这将重复两次,因此它将是500x2=1000次学习。对于LoRA来说,2-3个时期的学习就足够了
  • Save every N epochs:每隔N个周期保存一次,如果不需要创建中间LoRA,将值设置为与“Epoch”相同。
  • Mixed precision:指定训练期间权重数据的混合精度类型。权重数据最初以32位为单位,但如有必要,通过混合16位单位数据进行学习将节省大量内存并加快速度。fp16是精度为其一半的数据格式,bf16是设计用于处理与32位数据相同的数字宽度的数据格式。可以在fp16上获得足够高的准确度。
  • Save precision:指定要保存在LoRA文件中的权重数据的类型。float为32位,fp16和bf16为16位单元。默认值为fp16。
  • Learning rate:学习率,稍微改变权重,以融入更多的给定图片。默认值为0.0001。
  • LR Scheduler:调度器是关于如何改变学习速率的设置,默认值为cosine。

LR Scheduler取值说明:

  • adafactor:一边学习,一边根据情况自动调整学习率以保存VRAM
  • constant:学习率从头到尾都没有变化
  • constant_with_warmup:从0的学习率开始,在热身时逐渐向学习率的设定值增加,在主学习时使用学习率的设置值。
  • cosine:在绘制余弦曲线时,逐渐将学习率降低到0
  • cosine _with_restarts:多次重复余弦
  • linear:线性,从学习率设置开始,并向0线性下降
  • polynomial:多项式,与线性行为相同,但减少起来有点复杂

完整的训练参数参考:

LoRA training parameters · bmaltais/kohya_ss Wiki · GitHubContribute to bmaltais/kohya_ss development by creating an account on GitHub.icon-default.png?t=N7T8https://github.com/bmaltais/kohya_ss/wiki/LoRA-training-parameters

适配Intel显卡

kohya_ss最新版本在Linux/WSL上添加Intel ARC GPU支持与IPEX支持

  • Mixed precision选择BF16
  • Optimizer选择AdamW(或任何其他非8位)
  • CrossAttention选择SDPA

 

运行setup.sh:

./setup.sh --use-ipex

运行gui.sh:

./gui.sh --use-ipex

 

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

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

相关文章

day18_多线程

今日内容 零、 复习昨日 一、作业 二、线程安全的集合 三、死锁 四、线程通信 五、线程池 零、 复习昨日 见晨考 一、线程安全[重点] 1.0 线程不安全 当前线程的数据被其他线程修改 1.1 线程安全 临界资源:共享资源(同⼀个对象),一次只可以有一个线程操…

数字化时代,VR虚拟展厅为企业带来全新商机

临近年关,各个行业都想在年关将至之时冲一波销量,各种婚博会、家博会、车展会多不胜数。但是线下展会终归是场地有限,因此为了扩大受众范围,同时节约一定宣传成本,实现全球范围的展示和推广,不少企业都会选…

python基础练习题库实验八

文章目录 前言题目1代码 题目2代码 题目3代码 总结 前言 🎈关于python小题库的这模块我已经两年半左右没有更新了,主要是在实习跟考研,目前已经上岸武汉某211计算机,目前重新学习这门课程,也做了一些新的题目 &#x…

【星海出品】SDN neutron (五) openvswitch

1、ovs-vswitchd组件是交换机的主要模块,运行在用户态,其主要负责基本的转发逻辑、地址学习、外部物理端口绑定等。还可以运用OVS自带的ovs-ofctl工具采用openflow协议对交换机进行远程配置和管理。 2、ovsdb-server组件是存储OVS的网桥等配置、日志以及…

Flume(一)【Flume 概述】

前言 今天实在不知道学点什么好了,早上学了3个多小时的 Flink ,整天只学一门技术是很容易丧失兴趣的。那就学点新的东西 Flume,虽然 Kafka 还没学完,但是大数据生态圈的基础组件也基本就剩这倆了。 Flume 概述 生产环境中的数据一…

基于opencv+tensorflow+神经网络的智能银行卡卡号识别系统——深度学习算法应用(含python、模型源码)+数据集(二)

目录 前言总体设计系统整体结构图系统流程图 运行环境模块实现1. 训练集图片处理1)数据加载2)图像处理 2. 测试图片处理1)图像读取2)图像处理 相关其它博客工程源代码下载其它资料下载 前言 本项目基于从网络获取的多种银行卡数据…

半平面求交 - 洛谷 - P3194 [HNOI2008] 水平可见直线

欢迎关注更多精彩 关注我,学习常用算法与数据结构,一题多解,降维打击。 往期相关背景点击前往 题目大意 题目链接 https://www.luogu.com.cn/problem/P3194 在直角坐标系中给定一些直线,然后从Y轴无穷大处往0处看,…

iis特殊字符的轉義問題解決

今天發現有個問題,部分圖片的靜態資源帶有號,導致無法直接在瀏覽器獲取圖片,百度了一下,修改了注冊表,發現沒什麽軟用,最後找到一篇博客,解決了 解決

WorkPlus私有化部署的即时通讯软件,企业内部沟通协作的利器

随着企业的成长和信息科技的进步,团队协作变得越来越关键。为了更好地促进团队之间的信息共享和沟通,企业内部对聊天软件的需求也在不断增加。 WorkPlus是一个支持海量用户和高并发的私有化部署即时通讯能力,支持纯内网,内外网混…

服务号转订阅号如何操作

服务号和订阅号有什么区别?服务号转为订阅号有哪些作用?一、文章推送的篇数不同服务号在文章的推送篇数上是有所限制的(每月推4次)订阅号则每天可推送一篇文章。二、定义不同服务号主要是为关注用户提供服务使用的;订阅…

数据结构-数型查找

二叉排序树(BST) 二叉排序树,又称二叉查找树(BST,Binary Search Tree) 一颗二叉树或者是空二叉树,或者是具有如下性质的二叉树: 左子树上所有结点的关键字均小于根结点的关键字&…

Axure9 基本操作(一)

产品经理零基础入门(四)Axure 原型图教程,2小时学会_哔哩哔哩_bilibili Axure 9 从入门到精通全集,自学必备_哔哩哔哩_bilibili 1. 页面对应页面个数,概要对应每个页面的具体内容 2. 文件类型 3. 备用间隔改为5分钟 …