【Stable Diffusion】 训练方法篇

一、四种模型训练方法简介

Stable Diffusion 有四种训练模型的方法:Textual Inversion、Hypernetwork、LoRA 和 Dreambooth 。它们的训练方法存在一定差异,我们可以通过下面对比来评估使用哪种训练方式最适合你的项目。

如果你知道模型中已经可以产生你想要的东西,例如,某种风格,或者已经 "在里面 "的特定名人,你可以使用这个模型,但是当你发现模型里面没有你要的人或者给严重错误标识了,那你就可以收集这种人物的样本图像,创建一个 Embedding训练,并使用对应关键字标识出来。

1、Textual Inversion

Textual Inversion(也称为 Embedding)是一种使用文本提示来训练模型的方法。它根据模型引用给定的图像并选择最匹配的图像。你做的迭代越多越好,能够在保持图像质量的同时,快速生成大量图像。这种方法对计算资源要求较低,适用于需要快速生成大量高质量图像的场景。

特点:

  • 生成的模型文件小,大约几十KB
  • 通常适用于转换图像风格
  • 使用时不需要加载模型,只需要在提词中embeddings中的关键tag
  • 本地训练时对计算资源要求不高
  • 可以通过生成的PT文件覆盖在原有基础上继续训练
  • 模型关键字尽量是不常见的词语
  • 推荐训练人物

训练时关键参数设定:

  • learning_rate: 0.05:10, 0.02:20, 0.01:60, 0.005:200, 0.002:500, 0.001:3000, 0.0005
  • number of vectors per token:按图片数量设置(图片数量小于10设置为2,10-30张设置范围2~3,40-60张设置范围5~6,60-100张设置范围8-12,大于100张设置范围12~16)
  • max_train_steps: 3000(起步3000步)

2、Hypernetwork

Hypernetwork 是一种使用神经网络来生成模型参数的方法。它可以用来从模型内部找到更多相似的东西,使得生成为近似内容图像, 如果你想训练人脸或特定的风格,并且如果你想用Hypernetwork生成的 "一切 "看起来都像你的训练数据,那么Hypernetwork是一个不错的选择。你不能生成混合训练的图像,比如一组非常不同风格各异的猫。不过,你可以使用超网络进行绘画,将不同的训练数据纳入一个图像,改变图像的整个输出。

特点:

  • 生成的模型文件比Embedding大,大约几十MB
  • 通常训练艺术风格
  • 推荐训练画风

训练时关键参数设定:

  • learning_rate: 0.000005:1000,0.0000025:10000,0.00000075:20000,0.0000005:30000,0.00000025:-1
  • prompt template file: 对应风格类型文件可以编辑只留下一个 [fileword],[name] 在那里,删除多余的描述

3、Lora

Lora【Low-Rank Adaptation of Large Language Models】的缩写,是一种使用少量图像来训练模型的方法。与 Dreambooth 不同,LoRA 训练速度更快:当 Dreambooth 需要大约二十分钟才能运行并产生几个 GB 的模型时,LoRA 只需八分钟就能完成训练,并产生约 5MB 的模型,推荐使用kohya_ss GUI 进行lora训练。

特点:

  • 模型大小适中,8~140MB
  • 使用时只需要加载对应的lora模型,可以多个不同的(lora模型+权重)叠加使用
  • 可以进行lora模型其他模型的融合
  • 本地训练时需要显存适中,>=7GB
  • 推荐训练人物

4、Dreambooth

Dreambooth 是一种使用少量图像来训练模型的方法,是一种基于深度学习的图像风格转换技术。它可以将一张图片的风格应用到另一张图片上,以生成新的图像,Dreambooth 的一个优点是它可以生成高质量的艺术作品,而无需用户具备专业艺术技能。

特点:

  • 模型文件很大,2-4GB
  • 适于训练人脸,宠物和物件
  • 使用时需要 加载模型
  • 可以进行模型融合,跟其他模型文件融合成新的模型
  • 本地训练时需要高显存,>=12GB
  • 推荐训练人物*画风

训练时关键参数:

  • 高学习率和过多的训练步骤将导致过度拟合(换句话说,无论提示如何,模型只能从训练数据生成图像)。
  • 低学习率和过少的步骤会导致学习不足,这是因为模型无法生成训练过的概念。
  • 物件:400步,2e-6
  • 人脸:1500步,1e-6或2e-6
  • Training Steps Per Image (Epochs):(根据你图片的数量设定,大概值为你想训练的总步数/图片数量)
  • Sanity Sample Prompt: 是否过度训练参数设定,我们可以加上一些特征从而去判断训练过程中是否出现过度拟合如填入 person of XX red hair (说明:XX替换为你的关键字,我们在这里加入了红头发的特征,如果出训练输出图像出现了非红头发此时我们就知道过度拟合了,训练过度了)

二、VAE编解码器该如何应用

1、VAE模型原理介绍

VAE(Variational Auto-Encoder 变分自动编码器)模型有两部分,一个编码器和一个解码器。

在潜在扩散模型(Latent Diffusion Models)组成中就有VAE模型的身影

其中编码器(encoder)被用于把图片转换成低维度的潜在表征,转换完成后的潜在表征将作为U- Net 模型的输入

反之,解码器(decoder)将把潜在表征重新转回图片形式

在潜在扩散模型的训练过程中,编码器被用于取得图片训练集的潜在表征(latents),这些潜在表征被用于前向扩散过程(每一步都会往潜在表征中增加更多噪声)

在推理生成时,由反向扩散过程生成的 denoised latents 被VAE解码器部分转换回图像格式

所以说 ,在潜在扩散模型的推理生成过程中我们只需用到VAE的解码器部分

2、WebUI中的VAE

那些比较流行预训练的模型一般都是内置了训练好的VAE模型的,不用我们再额外挂载也能做正常的推理生成(挂载后生成图像的效果会有一点点细微的区别),此时VAE pt文件的作用就像HDR,增加一点点图片色彩空间之类的一些自定义模型

可如果一些预训练模型文件不内置VAE(或训练他们自己的VAE,此时通常会在他们的模型发布说明中告诉你从哪得到他们的VAE)。我们就必须给它找一个VAE挂载上去,用来将推理时反向扩散最后生成的 denoised latents 转换回图像格式,否则webui里最后生成输出给我们的就是类似彩噪的潜在表征(latents),此时VAE pt文件的作用就像解压软件,为我们解压出肉眼友好可接受的图像

3、VAE模型文件获取

社区在用的流行 VAE 文件:

  • SD 官方VAE https://huggingface.co/stabilityai/sd-vae-ft-mse-original
  • NovelAI Leak的 animevae.pt
  • WD 的 VAE https://huggingface.co/hakurei/waifu-diffusion-v1-4/tree/main/vae

4、挂载使用VAE模型文件

webUI中有两种挂载VAE模型文件的方法

  • 改名为 <model 前缀>.vae.pt 和 model 放一起
  • 将VAE文件 放到 VAE 文件夹然后在设置中选择

5、VAE文件在模型训练时一般要卸载

VAE在训练过程中自行学习,随着模型的训练,不同版本的模型实际表现可能会有所不同,如果有需求可以通过移除VAE文件的方式阻止VAE自行学习。

 

对于很多刚学习AI绘画的小伙伴而言,想要提升、学习新技能,往往是自己摸索成长,不成体系的学习效果低效漫长且无助。

如果你苦于没有一份Lora模型训练学习系统完整的学习资料,这份网易的《Stable Diffusion LoRA模型训练指南》电子书,尽管拿去好了。

包知识脉络 + 诸多细节。节省大家在网上搜索资料的时间来学习,也可以分享给身边好友一起学习。

由于内容过多,下面以截图展示目录及部分内容,完整文档领取方式点击下方微信卡片,即可免费获取!

img

img

img

篇幅有限,这里就不一一展示了,有需要的朋友可以点击下方的卡片进行领取!

 

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

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

相关文章

Git系列:git add 被忽视的操作技巧

&#x1f49d;&#x1f49d;&#x1f49d;欢迎莅临我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…

【Python探索之旅】元组

元组的作用 遍历 修改 元组运算符 索引和切片 加法运算符 重复运算符 比较运算符 完结撒花 前言 元组(tuple)是一种静态的(immutable)或者说是不可变(unchangeable)的数据结构&#xff0c;里面的元素按照一定的顺序排列。它是静态的&#xff0c;所以元组里的元素不能被…

刷代码随想录有感(65):回溯算法——组合问题

题干&#xff1a; 代码&#xff1a; class Solution { public:vector<vector<int>> res;vector<int> tmp;void backtracking(int n, int k, int start){if(tmp.size() k){res.push_back(tmp);return;}for(int i start; i < n; i){tmp.push_back(i);bac…

从入门到精通:.gitlab-ci.yml文件的完整指南

欢迎来到我的博客&#xff0c;代码的世界里&#xff0c;每一行都是一个故事 从入门到精通&#xff1a;.gitlab-ci.yml文件的完整指南 前言.gitlab-ci.yml文件概述stagesimagesbefore_script和after_scripttagsonly和exceptonly关键字except关键字 artifacts使用方式产物路径其他…

【案例】使用Vue实现标题项元素上下移动

效果图 效果说明 每一组数据只能在对应的二级类目中进行上下移动&#xff0c;当点击上移图标的时候【左边的】会将当前元素与上一个元素交换位置&#xff0c;当点击的元素为该组的第一个元素时&#xff0c;将提示已经是第一项了并且不能进行移动&#xff1b;当点击下移图标的时…

LeetCode494:目标和

题目描述 给你一个非负整数数组 nums 和一个整数 target 。 向数组中的每个整数前添加 ‘’ 或 ‘-’ &#xff0c;然后串联起所有整数&#xff0c;可以构造一个 表达式 &#xff1a; 例如&#xff0c;nums [2, 1] &#xff0c;可以在 2 之前添加 ‘’ &#xff0c;在 1 之…

JavaScript基础(七)

isNaN //用来判断一个变量是不是一个非数字 不是来判断是不是number类型&#xff0c;而是判断当前值能不能转为number类型&#xff0c;OK&#xff1f;懂了。 还有同学不明白&#xff0c;来看实例: <script> //isNaN(非数字)→true &#xff08;数字&#xff09;→fal…

动画:3dmax

动画制作流程&#xff1a;模型 -> 骨骼&#xff08;Bone/Biped&#xff09; -> 蒙皮&#xff08;Skin/Bone Pro&#xff09; -> 动画 1.基础 1.1创建bones骨骼 骨骼分为2种&#xff0c;一种是bones另一种是biped。它们的区别是用bones需要自己创建骨骼系统&#xff0…

UV:展uv

1.3dmax 选中物体 修改器列表选中“UV展开” 打开UV编辑器 断开圆圈 同理断开瓶底 展开侧面 剥离 拉直 排列 纹理盘格 用于查看排列位置 渲染UV模板 PS图片 将不要的部分填充为黑色 复制图片 删除多余 保存图片 添加材质球和位图 按M打开材质球编辑器 重置UV 将uv变为初始…

文献检索神器分享:一键筛选顶刊论文,还能免费下载全文!

我是娜姐 迪娜学姐 &#xff0c;一个SCI医学期刊编辑&#xff0c;探索用AI工具提效论文写作和发表。 信息爆炸的时代&#xff0c;文献是根本读不完。一个关键词能搜出来几万篇&#xff0c;而且有些结论还是完全相反的&#xff0c;到底该读哪些&#xff1f; 第一步的文献筛选很重…

基于多传感器的智能小区安防系统设计与实现-设计说明书

设计摘要&#xff1a; 本设计是基于多传感器的智能小区安防系统的设计与实现。系统主要包括烟雾和温度传感器、人体红外传感器、OLED显示屏、WiFi模块和按键控制等组件。通过这些组件的协作&#xff0c;实现了火灾检测、人员监测、数据显示和远程控制等功能。 首先&#xff0…

C#实现多线程的几种方式

前言 多线程是C#中一个重要的概念&#xff0c;多线程指的是在同一进程中同时运行多个线程的机制。多线程适用于需要提高系统并发性、吞吐量和响应速度的场景&#xff0c;可以充分利用多核处理器和系统资源&#xff0c;提高应用程序的性能和效率。 多线程常用场景 CPU 密集型任务…