Stable Diffusion 训练指南 (LyCORIS) |
您所在的位置:网站首页 › lycoris乐队 › Stable Diffusion 训练指南 (LyCORIS) |
Stable Diffusion 文字生成图片的教程已经很多了。这篇文章是讲解如何用 Kohya Trainer 在 Google Colab 上训练一个 LyCORIS 模型。在读之前希望你已经至少玩过 Stable Diffusion。 理论基础这部分对于理解参数的含义很重要。但你也可以先用默认参数试玩再来阅读这部分。 Stable Diffusion 是一个由文本生成图像(text-to-image)的生成模型(Generative mode)。输入一段文字提示(prompt),输出一段匹配这段文字的图像。 训练过程中,我们先对输入的图像不断添加噪声,如下图所示。如果能把这个过程反过来,由一张完全是噪声的图像,一点点去除噪声得到原始的图像(当然是在模型以及 prompt text 的引导之下),也就完成了 text-to-image 的任务。 Forward diffusion: 对原图逐渐增加噪声 Reverse diffusion: 在模型的引导下逐渐去除噪声Stable Diffusion 能领先其他模型(比如 DALL-E)的关键在于它并非在直接在像素空间进行上述的 reverse diffusion 过程,而是在潜空间(latent space)。Latent space 大幅地将空间维度缩小到了原来的 1/48。它的工作原理像一个有损压缩算法,既能够压缩也能解压缩,虽然不保证解压结果和压缩前完全一致,但是基本上没差。这个 encode/decode 的过程也是由一个深度学习模型完成,该模型称为 VAE (Variational Autoencoder)。 Latent Diffusion Models噪音预测器(noise preditctor)由一个 U-Net 模型负责,这也是整个 Stable Diffusion 的最关键的模型。其网络结构包括一堆 ResNet 卷积矩阵和 Cross-Attention 矩阵。Stable Diffusion 包含大约 860M 参数,以 float32 的精度编码大概需要 3.4G 的存储空间。更多关于它的信息可以参考 Stable Diffusion UNET 结构。 最后,还有一个 text embedding 模型,即将一段变长的文字转换成固定维度的向量。Stable Diffusion 1.x 用的是 OpenAI 开源的 ViT-L/14 CLIP 模型,2.x 用的是 OpenClip 模型。 综上所述,Stable Diffusion 中一共有三个模型 CLIP:用于对 prompt text 进行 embedding 然后输入给 U-Net VAE: 将图像从 pixel space encode 到 latent space 以及最后 decode 回来 U-Net:迭代 denoise 所用的模型,是最关键的模型,我们主要 fine-tune 它 CheckpointCheckpoint 就是指将网络参数全部打包保存。Stable Diffusion 的 U-Net 包含约 860M 的参数,以 float32 的精度编码大概需要 3.4G 的存储空间。 LoRALoRA 指的是一种对矩阵进行近似数值分解的数学方法,同时也是一种有损压缩,可以大幅降低矩阵的参数数量。LoRA 作用于 U-Net 中的 cross-attention layers(网络结构图中的 QKV 方框)。例如,我们以其中一个矩阵为例,设 fine-tune 之前的原始权重为 ,则这一层的计算可以表达为: Fine-tune 对 产生了一些微调,这些变化记作 。 LoRA 所做的事情就是将 分解: 假设 维度为 ,那么 维度为 , 维度为 ,不难发现, 取的越小, 和 的参数量就越小,相应地, 的近似度就越差。 LyCORISLyCORIS 是对 LoRA 的增强,其实主要包含两个独立的改进: LoCon (Conventional LoRA): LoRA 只调整了 cross-attention layers,LoCon 还用同样的方法调整了 ResNet 矩阵。更多信息参见 LoCon - LoRA for Convolution Network。 LoHa (LoRA with Hadamard Product): 用 Hadamard Product 替换掉了原方法中的矩阵点乘,理论上在相同的 下能容纳更多(丢失更少)的信息。该方法来自论文 FedPara Low-Rank Hadamard Product For Communication-Efficient Federated Learning。LyCORIS 还实现了其他几种对 LoRA 改进的变体,因为很少有人用,这里不展开介绍。 感谢 LoHa,LyCORIS 的模型在 fine-tune 更多层的前提下,反而可以用更小的 ,因此输出的模型体积也更小。 如果你刚刚开始,建议无脑选择 LyCORIS 模型。本文也将会以 LyCORIS 模型讲解后面的实操步骤。 准备训练集收集整理需要训练的角色的图片,20 张以上即可。原则是: 要能清晰地体现出角色特征,例如训练集要覆盖角色的正脸、侧脸、全身、站坐姿等 在保留角色特征的基础上,其他方面尽可能 various,例如不同的角度、场景、风格等将图片正则化,缩放并裁剪到 512x512 或 512x768 或 768x512 这 3 种尺寸之一,并放置到三个不同的目录中。这步不是必须的,对于实在无法裁剪的部分图片可以跳过,但是 SD 模型本身是用 512x512 图片训练的,使用相同的尺寸能获得更好的效果。裁剪图片可以用 Birme.net。 Stable Diffusion 同一次训练中只能处理一种尺寸的图片(推理也一样)。如果你的图片并非全都是 512x512,Kohya Trainer 中已经自带了 bucketize,长宽比相同的图片会被分类到同一个 bucket 作为同一批次训练。因此,即便你做不到把图片全都统一到 512x512,最好也做到仅有少数几种长宽比。 训练集样例。注意,其中部分图片为 512x768,部分为 512x512,在 bucketize 的时候会被自动分成 2 组图片加 Tag 的过程通常是自动标注结合手动筛选,自动标注的过程在 Kohya Trainer 脚本中已经包含,因此现在只要先准备好训练集就行了。 训练推荐使用 Kohya Trainer。由于咱没有足够好的显卡(训练至少需要 6GB VRAM),无论训练还是推理都是通过 Google Colab 进行。该脚本也很好地适配了 Google Colab,完全做到了一键部署运行。 点击 “Kohya LoRA Dreambooth” 后面的 Open in Colab 按钮开启今天的旅程。 I. Install Kohya Trainer安装所需的各种依赖。 install_xformers (默认勾选)xformer 是 NVIDIA CPU 特有的一个硬件加速库,能够加速计算并减少 VRAM 使用。 mount_drive (推荐勾选)映射 Google Drive 到 /mount/ 目录,方便最后保存结果到 Google Drive II. Pretrained Model Selection下载 Stable diffusion 基础模型。 Stable Diffusion 2.x 虽然训练步数更多,但是训练集中过滤掉了 NSFW 的图片。注意:SD 1.5 和 2.x 不兼容,但基于 SD1.5 训练的模型可以用在任何一个基于 SD1.5 的 checkpoint 上。而社区的大部分二次元 Checkpoint 模型基于 SD1.5 训练。 如果你在训练二次元 waifu,建议选择基于 SD1.5 的 checkpoint 作为基础模型,例如 Anything V5、Counterfeit V3、AbyssOrangeMix3 等。 2.3. Download Available VAE (Optional)Stable Diffusion 是自带 VAE 的,这一步的含义是是否要下载一个 VAE 替换原来的 VAE 模型。三次元图更接近 SD 原始训练集,一般不需要。 二次元模型可以选择你的基础模型配套的 VAE,或者选择 notebook 中推荐的 anime.vae。 III. Data Acquisition把之前准备好的图片放到 train_data_dir(training set) 中。可以有子目录,也可以没有。例如: 12345678910$ tree /content/LoRA/train_data.├── head_and_pouch│ ├── A_125.jpg│ ├── A_144.jpg│ ...└── full_body ├── 1082561_p0.jpg ├── 17489814_p0.jpg ... 4.2. Data Annotation这一步为训练集自动生成 prompt text。脚本的注释中已经给了明确的说明: Use BLIP Captioning for: General Images Use Waifu Diffusion 1.4 Tagger V2 for: Anime and Manga-style Images建议从生成的 tags 中移除掉角色自身的特征,比如:long hair, wolf ears, wolf girl, red eyes, brown hair 等。移除掉 tag 代表着将模型将这些特征当作 general 的情况去对待,换句话说,我们希望模型输出的所有图片都带有这些特征。相反,角色本身之外的特征应当用 tag 标识出,比如角色的几件特定穿着(皮肤),相应的,在画图时也可以通过相同的 tag 来触发这些特征。 参数 undesired_tags 可以快速地做到这一点。如果你时间充裕,咱也建议你以把生成的 prompt 下载到本地,逐个人工校对一遍。 如果你想让你的模型拥有一个 tigger word(例如角色的名字),即,仅当 trigger word 出现在 prompt 中时才绘制对应的角色,那么你可以为所有生成的 prompt text 都加上这个 trigger word 并放在最前面。咱觉得这个没什么用,因此跳过。 最终得到的训练集中,每个图片都有一个对应的 .txt 或 .caption 的 prompt 12345678$ tree /content/LoRA/train_data.├── head_and_pouch│ ├── A_125.jpg│ ├── A_125.txt│ ├── A_144.jpg│ ├── A_144.txt│ ...建议将这个目录打包存放到本地/Google Drive,方便之后调参。 5.1. Model Configv2 以及 v_parameterization 需要和当前的 SD 模型相对应。SD 1.5 两个都不需要选。 123print("Model Version: Stable Diffusion V1.x") if not v2 else ""print("Model Version: Stable Diffusion V2.x") if v2 and not v_parameterization else ""print("Model Version: Stable Diffusion V2.x 768v") if v2 and v_parameterization else ""pretrained_model_name_or_path 是你要 fine-tune 的基础模型。先前在 II. Pretrained Model Selection 步骤中已经下载好了,把它的路径复制过来。vae 也同样。有时候 vae 和 U-Net 可能放在同一个 .safetensor 文件中,这时候两个路径填同一个文件就行了。 5.2. Dataset Configdataset_repeats 的含义是在每个 epoch 为训练集合内的图片迭代多少次。通常总迭代次数在 1000~3000 次就会有不错的效果,咱的建议每 500 张图片作为一个 epoch,这样就能在训练到 500、1000、1500 ... 3000 的时候分别获得 6 个模型输出,然后根据实际画图效果选取最好的那个。假设一共有 100 张训练图,那么 repeats 就可以设置为 500/100 = 5。 caption_extension 对应 4.2. Data Annotation 中生成的 prompt text 文件名后缀,一般是 .caption 或者 .txt。 resolution 一般选择 512 或 768。如果你之前已经手动裁剪并 resize 过训练集,可以在 Python 代码中设置 bucket_no_upscale = false,防止 512x512 的图片被放大。 shuffle_caption(默认 True)表示自动打乱逗号分隔的所有单词。keep_token 保留前几个标签位置不被 shuffle(默认 0),如果你有 trigger word,则根据需要调整。 5.3. LoRA and Optimizer Confignetwork_category 选择 LoCon_Lycoris。 下面 4 个参数可能是争议最多的参数(等号后的数值为咱推荐的数值): 1234network_dim = 32network_alpha = 16conv_dim = 32conv_alpha = 16解释一下: dim(有时也称为 rank)表示 LoRA/LoHa 方法中保留多少维度, 越高表示模型的参数量越大,能承载更丰富的特征,同时也更容易过拟合,通常取值范围 ,对于 LyCORIS 推荐取值 alpha 用于调整模型输出 的系数,, 越高模型越倾向于拟合更多的细节,学习速率也越快,通常取值范围 ,对于 LyCORIS 推荐取值 network 表示作用于 cross-attention 矩阵 conv 表示作用于 ResNet 卷积矩阵注意 LyCORIS 和 LoRA 的推荐配置有很大不同。LyCORIS 模型作者推荐 alpha 设置为 1(咱猜测应该是指 设置为 1),dimension |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |