AIGC初体验——Stable Diffusion(四)模型融合与训练(LoRA)

本期我们聊聊模型融合模型训练。光用别人的模型能满足一时之需,但我们想更进一步,融入个人的审美导向,就需要自己生成模型。其实不难,只要一步一步跟着做就行~
在这里插入图片描述

模型融合

模型融合按照字面意思理解就行。其优势是可以综合两个模型的特点,例如三次元和二次元的融合,可能有非常奇特的效果。我们先学习一下界面。

img

模型A,B(C):最少合并2个模型,最多合并3个模型。

自定义名称【可选】:融合模型的名字,建议把两个模型和所占比例加入到名称之中,例如“Anything_v4.5_0.5_3Guofeng3_0.5”

融合比例M:意思是模型A占(1-M)x100%, 模型B占Mx100%

融合算法:推荐用“加权和”

输出模型格式:ckpt是默认格式,safetensors格式可以理解为CKPT的升级版,可以拥有更快的AI绘图生成速度,而且不会被反序列化攻击。

**存储办精度模型:**通过降低模型的精度来减少显存占用。

复制配置文件:选择A,B 或 C即可。

嵌入VAE模型:嵌入当前的vae模型,相当于加了滤镜。缺点是会增加模型大小。

删除匹配键名的表达式的权重【可选】:可以理解为,你想删除模型内的某个元素时,可以将其键值进行匹配删除。

我们尝试合并Anything_v4.5(二次元)和3Guofeng3_0(三次元)两种风格。看看会不会有有趣的事情发生。

img

合并速度非常快,耗时为2分左右,在右侧我们已经可以看到输出后的模型路径已自动放置Stable Diffusion的主模型目录内,我们无需任何设置就已经可以加载并使用合并后的模型。

我们用同一个prompt在A,B和AB模型生成一张图片看看(为了便于比较,采用ControlNet控制画面内容):

模型A:国风,偏真人效果

img

咒语:

best_quality, masterpiece, 4K, 1girl, chinese style, hanfu, smiling, red lips, pursed lips, closed mouse, left hand down, green belts, landscape, hill, mountain, stone, tree, streams, pear blossom, birds, petals, windy, blurry foreground, blurry backgound
Negative prompt: EasyNegative, badhandv4, (easynegative:1.0), (worst quality, low quality:1.4), (lip, nose, tooth, rouge, lipstick, eyeshadow:1.4), (blush:1.2), (jpeg artifacts:1.4), (depth of field, bokeh, blurry, film grain, chromatic aberration, lens flare:1.0), (1boy, abs, muscular, rib:1.0), greyscale, monochrome, dusty sunbeams, trembling, motion lines, motion blur, emphasis lines, text, title, logo, signature, backlighting
Steps: 30, Sampler: DPM++ SDE Karras, CFG scale: 7, Seed: 1954584771, Size: 768x1024, Model hash: 3732b141fb, Model: Anything_v4.5_0.5_3Guofeng3_0.5, Clip skip: 2, ControlNet Enabled: True, ControlNet Module: depth_leres, ControlNet Model: control_depth [92c999f3], ControlNet Weight: 1, ControlNet Guidance Start: 0, ControlNet Guidance End: 1

模型B:二次元风格

img

咒语:

best_quality, masterpiece, 4K, 1girl, chinese style, hanfu, smiling, red lips, pursed lips, closed mouse, left hand down, white dress, , green belts, landscape, hill, mountain, stone, tree, streams, pear blossom, birds, petals, windy, blurry foreground, blurry backgound
Negative prompt: EasyNegative, badhandv4, (easynegative:1.0), (worst quality, low quality:1.4), (lip, nose, tooth, rouge, lipstick, eyeshadow:1.4), (blush:1.2), (jpeg artifacts:1.4), (depth of field, bokeh, blurry, film grain, chromatic aberration, lens flare:1.0), (1boy, abs, muscular, rib:1.0), greyscale, monochrome, dusty sunbeams, trembling, motion lines, motion blur, emphasis lines, text, title, logo, signature, backlighting
Steps: 30, Sampler: DPM++ SDE Karras, CFG scale: 7, Seed: 1954584771, Size: 768x1024, Model hash: 6e430eb514, Model: anything-v4.5-pruned, Clip skip: 2, ControlNet Enabled: True, ControlNet Module: depth_leres, ControlNet Model: control_depth [92c999f3], ControlNet Weight: 1, ControlNet Guidance Start: 0, ControlNet Guidance End: 1

融合模型AB

img

咒语:

best_quality, masterpiece, 4K, 1girl, chinese style, hanfu, smiling, red lips, pursed lips, closed mouse, left hand down, green belts, landscape, hill, mountain, stone, tree, streams, pear blossom, birds, petals, windy, blurry foreground, blurry backgound
Negative prompt: EasyNegative, badhandv4, (easynegative:1.0), (worst quality, low quality:1.4), (lip, nose, tooth, rouge, lipstick, eyeshadow:1.4), (blush:1.2), (jpeg artifacts:1.4), (depth of field, bokeh, blurry, film grain, chromatic aberration, lens flare:1.0), (1boy, abs, muscular, rib:1.0), greyscale, monochrome, dusty sunbeams, trembling, motion lines, motion blur, emphasis lines, text, title, logo, signature, backlighting
Steps: 30, Sampler: DPM++ SDE Karras, CFG scale: 7, Seed: 1954584771, Size: 768x1024, Model hash: 3732b141fb, Model: Anything_v4.5_0.5_3Guofeng3_0.5, Clip skip: 2, ControlNet Enabled: True, ControlNet Module: depth_leres, ControlNet Model: control_depth [92c999f3], ControlNet Weight: 1, ControlNet Guidance Start: 0, ControlNet Guidance End: 1

效果非常惊艳!利用这个方法我们能快速生成新模型,收获新的创意!

LoRA模型训练

模型训练指的是自己提供训练集,然后训练。能够实现自己所期望的风格。模型训练有一定的上手难度,所以本文将尽可能细致地讲解训练过程。模型训练有很多方法,例如Dream booth、Textual Inversion (embedding)、Hypernetwork和著名的Lora等方式。今天我们介绍LoRA模型训练方式,其它方式我们在以后再介绍。

(1)下载项目

前人栽树 ,后人乘凉 ‍♂️。我们这里出于方便直接用aki大佬的训练脚本吧!http://github.com/Akegarasu/lora-scripts

注意不要直接下zip压缩包,而是用git递归下载子模块。

git clone --recurse-submodules https://github.com/Akegarasu/lora-scripts

下载完lora-scripts后解压到合适位置,因为直接运行会报错,所以用管理员身份打开PowerShell后输入:

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned

然后输入”Y“。出于安全考虑,在脚本执行完之后将输入下述命令改回默认权限:

Set-ExecutionPolicy -ExecutionPolicy Restricted

运行install-cn.ps1脚本安装依赖。因为是国内源,下载速度应该非常快。

(2)准备训练集

完毕之后我们来准备一些图片作为训练集吧不需要太多1520张enough。

训练分辨率
训练时的分辨率 宽,高,可以是非正方形,但必须为64的整数倍。建议使用大于 512x512 且小于 1024x1024 的值,长宽比根据训练集的占比决定,一般来说方形的可以照顾到各种不同的分辨率。如果多数为长图可以使用512x768这种分辨率,如果宽图居多则可以使用768x512等。

比如笔者想训练可莉的模型(问就是玩原玩的)。首先在网上收集一些图片,一种方法是下载好图片由PS软件裁剪至统一大小(没有的话用birme工具),另一种是用SD自带的裁剪(不推荐,可能把人物主体裁剪)。然后我们前往”图片预处理“文件夹,目标是生成图片的tag(图片格式必须是png),如下所示:

img

设置源目录和目标目录(两者不同)。调整合适的长宽(必须是64倍数)。推荐选择”自动面部焦点裁剪“和”使用Deepbooru生成标签“。然后点击”preprocess“就可以开始了。生成的目录中,每个图片和标签文本一一对应。建议检查一下标签的内容,如果觉得不好可以手动修改。

img

完成后可以将将文件夹重命名为"x_{名字}“,“x”表示训练次数,例如"5_klee”。

(3)配置参数

我们配置一下参数,我们可以在PowerShell运行run_gui.ps1,打开一个网页:

img

我们来介绍一下这些参数:

底模路径:用于训练的基础模型,尽量选祖宗级别的模型练出来的LoRA会更通用。如果在融合模型上训练可能会仅仅在你训练的底模上生成图片拥有不错的效果 但是失去了通用性。可以自己抉择

什么是祖宗级别的模型? sd1.5 2.0、novelai 原版泄露模型。也就是非融合模型。融合模型比如 anything 系列融合了一大堆,orangemix系列融合了 anything 和 basil 更灵车了等等。在他们上面训练的会迁移性更差一些。

**训练数据集路径:这个必须是图片文件夹的父文件夹!**例如你在".\train\5_klee"放了很多照片,那么应该填".\train"

修改分辨率,输出目录等参数。

开启 ARB 桶,以允许使用非固定宽高比的图像来训练(简单来说就是不需要手动剪裁了)。ARB 桶在一定程度上会增加训练时间。ARB桶分辨率必须大于训练分辨率

此外还有和训练相关的参数:

img

(4)训练

我们然后开始训练吧~

建议关闭一切占显存的应用,包括SD。 可以看到GPU基本上是占满的。

img

训练完成后在output文件夹下可以看到许多模型:

img

我们来试试效果吧~

注意提示词要加上lora插件**lora:klee:1**

高级教程:

学习率与优化器设置

学习率设置

UNet和TE的学习率通常是不同的,因为学习难度不同,通常UNet的学习率会比TE高 。

img

如图所示,我们希望UNet和TE都处于一个恰好的位置(绿色部分),但是这个值我们不知道

如果UNet训练不足,那么生成的图会不像,UNet训练过度会导致面部扭曲或者产生大量色块。TE训练不足会让出图对Prompt的服从度低,TE训练过度则会生成多余的物品。

总学习步数 = (图片数量 * 重复次数 * epoch)/ 批次大小

以UNet学习率为1e-4为例,一般来说图片较少的时候训练人物需要至少1000步,训练画风则需要至少2500步,训练概念则需要至少3000步。这里只是最低的步数,图片多则需要更多步数。学习率更大可以适当减少步数,但并非线性关系,使用两倍的学习率需要使用比之前步数的一半更多的步数。

决定学习率和步数的最好方法是先训练,再测试。一般比较好的初始值为UNet使用1e-4,TE使用5e-5

学习率调整策略(lr_scheduler)

推荐使用余弦退火cosine。如果开启预热,预热步数应该占总步数的5%-10%。

如果使用带重启的余弦退火cosine_with_restarts,重启次数不应该超过4次。

批次大小 (batch_size)

Batch size 越大梯度越稳定,也可以使用更大的学习率来加速收敛,但是占用显存也更大。

一般而言 2 倍的 batch_size 可以使用两倍的 UNet 学习率,但是TE学习率不能提高太多。

优化器

这里只介绍最常用的三种:

  • AdamW8bit:启用的int8优化的AdamW优化器,默认选项。
  • Lion:Google Brain发表的新优化器,各方面表现优于AdamW,同时占用显存更小,可能需要更大的batch size以保持梯度更新稳定。
  • D-Adaptation:FB发表的自适应学习率的优化器,调参简单,无需手动控制学习率,但是占用显存巨大(通常需要大于8G)。使用时设置学习率为1即可,同时学习率调整策略使用constant。需要添加"–optimizer_args decouple=True"来分离UNet和TE的学习率。(这些设置训练UI都会帮你自动处理)

网络设置网络结构(LoRA/LoCon/LoHa/DyLoRA)

不同网络结构对应不同的矩阵低秩分解方法。LoRA 是老祖宗,只控制模型中的线性层和1x1卷积层,后续的不同网络结构都是在 LoRA 的基础上进行改进。

LyCORIS 对其进行改进,添加了其他几种算法:

  • LoCon 加入了对卷积层 (Conv) 的控制
  • LoHa(哈达玛积)和 LoKr(克罗内克积)
  • IA3

理论上来说 LyCORIS 会比 LoRA 拥有更加强的微调效果,但是也更加容易过拟合

需要注意的是,不同的网络结构一般需要对应不同的 dim 以及学习率。

网络大小

网络大小应该根据实际的训练集图片数量和使用的网络结构决定

img

上表中值为我自己的角色训练推荐值,训练画风和概念需要适当增加 Linear 部分大小。推荐值并非对各个不同的数据集都是最优的,需要自己实验得出最优。Conv 的大小最好不要超过8。

网络Alpha(network_alpha)

alpha在训练期间缩放网络的权重,alpha越小学习越慢,关系可以认为是负线性相关的。

一般设置为dim/2或者dim/4。如果选择1,则需要提高学习率或者使用D-Adapation优化器。

高级设置

Caption 相关

caption dropout

网上关于这几个caption dropout的说明少之又少,甚至作者在文档里面也没有包含这些参数,只能在代码注释里面找到说明。但是caption dropout在某些情况下对模型性能有提升,所以拿出来讲一下。

caption_dropout_rate:丢弃全部标签的概率,对一个图片概率不使用caption或class token

caption_dropout_every_n_epochs:每N个epoch丢弃全部标签。

caption_tag_dropout_rate:按逗号分隔的标签来随机丢弃tag的概率。如果使用DB+标签的训练方法训练画风,推荐使用这个参数,能够有效防止tag过拟合,一般选择0.2-0.5之间的值训练人物则无需开启

token 热身

两个token热身相关的参数。

token_warmup_min:最小学习的token数量,token_warmup_step: 在多少步后达到最大token数量。

token_warmup可以理解为另一种形式的caption dropout,但是如果不随机打乱token,则只会学习前面N个token。本人并未实测过启用这两个参数的效果,有兴趣可以自行实验。

噪声相关

噪声偏移(noise_offset)

在训练过程中加入全局的噪声,改善图片的亮度变化范围(能生成更黑或者更白的图片)。

如果需要开启,推荐设置值为0.1同时需要增加学习步数作为网络收敛更慢的补偿

多分辨率/金字塔噪声 multires_noise_iterations、multires_noise_discount

多分辨率/金字塔噪声相关参数。iteration设置在6-8,再高提升不大。discount设置在0.3-0.8之间,更小的值需要更多步数。

其他一堆参数

  • CLIP_SKIP CLIP模型使用倒数第N层的输出,需要与底模使用的值保持一致,如果是基于NAI的二次元模型,应当使用2。如果是SD1.5等真实模型应当使用1。生成时也应该使用同样的值。
  • Min-SNR-γ 发表于今年CVPR23上的一种加速扩散模型收敛的方法。不同样本批次的学习难度不同导致梯度方向不一致所以收敛慢,于是引入根据信噪比调整学习率比重。 设置在5左右的值是实验效果比较好的,但是注意优化器使用D-Adaptation的时候不适用,因为学习率是优化器控制的。
  • 数据增强相关 数据增强是在训练时实时对图片做变换的方法,可用于防止过拟合,能用的一共有四种: color_aug, flip_aug, face_crop_aug_range, random_crop。 其中只有翻转(flip_aug)能和cache latent兼容,因为latent可以直接翻转。 四种都不推荐使用,因为裁剪图片的两种cropping方法都会导致tag对应不上。color_aug无法启用cache latent导致训练慢,得不偿失。翻转的flip_aug在图像不对称的情况下表现差,会导致无法正确生成人物不对称的特征(刘海、发饰等)。
  • max_grad_norm 限制模型更新梯度的大小,改善数值稳定性。梯度的范数超过这个值将会被缩放到这个大小,一般来说无需设置
  • gradient_accumulation_steps 梯度累积步数,用于在小显存上模拟大batch size的效果。如果显存足够使用4以上的batch size就没必要启用
  • log_with、wandb_api_key 选择logger类型,可选tensorboard或者wandb。使用wandb需要指定api key。
  • prior_loss_weight DB训练当中先验部分的权重,控制正则化图像的强度,论文中使用的是1的值,如无特殊情况无需更改
  • debug_dataset 不训练模型,仅输出训练集元数据和训练参数信息,可以用来检查各项设置是否正确。
  • vae_batch_size cache lantent的时候VAE编码器的batch size,和训练效果无关。一般来说使用2-4可以加速一点cache latent的过程。因为VAE编码器本身参数量比较小,实测在Linux机器上8G的显卡也能开启4。Windows下系统占用显存较多,显存小于10G不建议开启。

关于AI绘画技术储备

学好 AI绘画 不论是就业还是做副业赚钱都不错,但要学会 AI绘画 还是要有一个学习规划。最后大家分享一份全套的 AI绘画 学习资料,给那些想学习 AI绘画 的小伙伴们一点帮助!

对于0基础小白入门:

如果你是零基础小白,想快速入门AI绘画是可以考虑的。

一方面是学习时间相对较短,学习内容更全面更集中。
二方面是可以找到适合自己的学习方案

包括:stable diffusion安装包、stable diffusion0基础入门全套PDF,视频学习教程。带你从零基础系统性的学好AI绘画!

需要的可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】

1.stable diffusion安装包 (全套教程文末领取哈)

随着技术的迭代,目前 Stable Diffusion 已经能够生成非常艺术化的图片了,完全有赶超人类的架势,已经有不少工作被这类服务替代,比如制作一个 logo 图片,画一张虚拟老婆照片,画质堪比相机。

最新 Stable Diffusion 除了有win多个版本,就算说底端的显卡也能玩了哦!此外还带来了Mac版本,仅支持macOS 12.3或更高版本

在这里插入图片描述

2.stable diffusion视频合集

我们在学习的时候,往往书籍源码难以理解,阅读困难,这时候视频教程教程是就很适合了,生动形象加上案例实战,一步步带你入坑stable diffusion,科学有趣才能更方便的学习下去。

在这里插入图片描述

3.stable diffusion模型下载

stable diffusion往往一开始使用时图片等无法达到理想的生成效果,这时则需要通过使用大量训练数据,调整模型的超参数(如学习率、训练轮数、模型大小等),可以使得模型更好地适应数据集,并生成更加真实、准确、高质量的图像。

在这里插入图片描述

4.stable diffusion提示词

提示词是构建由文本到图像模型解释和理解的单词的过程。可以把它理解为你告诉 AI 模型要画什么而需要说的语言,整个SD学习过程中都离不开这本提示词手册。

在这里插入图片描述

5.AIGC视频教程合集

观看全面零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。

在这里插入图片描述

实战案例

纸上得来终觉浅,要学会跟着视频一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。
在这里插入图片描述
这份完整版的学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值