以下是一些提升 Stable Diffusion 模型训练效果的方法:
在传统深度学习时代,凭借生成器与判别器对抗训练的开创性哲学思想,GAN(Generative adversarial networks)可谓是在生成式模型中一枝独秀。同样的,在AIGC时代,以SD模型为代表的扩散模型接过GAN的衣钵,在AI绘画领域一路“狂飙”。与GAN等生成式模型一致的是,SD模型同样学习拟合训练集分布,并能够生成与训练集分布相似的输出结果,但与GAN相比,SD模型训练过程更稳定,而且具备更强的泛化性能。这些都归功于扩散模型中核心的前向扩散过程(Forward Diffusion Process)和反向扩散过程(Reverse Diffusion Process)。在前向扩散过程中,SD模型持续对一张图像添加高斯噪声直至变成随机噪声矩阵。而在反向扩散过程中,SD模型进行去噪声过程,将一个随机噪声矩阵逐渐去噪声直至生成一张图像。具体流程与图解如下所示:前向扩散过程(Forward Diffusion Process)→ \rightarrow图片中持续添加噪声反向扩散过程(Reverse Diffusion Process)→ \rightarrow持续去除图片中的噪声SD模型的加噪和去噪图解【1】扩散模型的基本原理
我们了解了训练中的加噪和去噪过程,SD训练的具体过程就是对每个加噪和去噪过程进行计算,从而优化SD模型参数,如下图所示分为四个步骤:从训练集中选取一张加噪过的图片和噪声强度(timestep),然后将其输入到U-Net中,让U-Net预测噪声(下图中的Unet Prediction),接着再计算预测噪声与真实噪声的误差(loss),最后通过反向传播更新U-Net的参数。完成U-Net的训练,我们就可以用U-Net对噪声图片进行去噪,逐步重建出有效图像的Latent Feature了!在噪声图上逐步减去被U-Net预测出来的噪声,从而得到一个我们想要的高质量的图像隐特征,去噪流程如下图所示:【3】语义信息对图片生成的控制SD模型在生成图片时,需要输入prompt,那么这些语义信息是如何影响图片的生成呢?答案非常简单:注意力机制。在SD模型的训练中,每个训练样本都会对应一个标签,我们将对应标签通过CLIP Text Encoder输出Text Embeddings,并将Text Embeddings以Cross Attention的形式与U-Net结构耦合,使得每次输入的图片信息与文字信息进行融合训练,如下图所示:
train_text_encoder:是否在SD模型训练时对Text Encoder进行微调,如果设置为true,则对Text Encoder进行微调。lr_scheduler:设置学习率调度策略,可以设置成linear,cosine,cosine_with_restarts,polynomial,constant(default),constant_with_warmup,adafactor。如果不单独指定,择默认会使用constant学习率调度策略。lr_warmup_steps:在启动学习率调度策略前,先固定学习率训练的步数。debug_dataset:训练时对数据进行debug处理,不让破损数据中断训练进程。in_json:读取数据集json文件,json文件中包含了数据名称,数据标签,数据分桶等信息。train_data_dir:读取本地数据集存放路径。dataset_repeats:整个数据集重复训练的次数,也可以理解为每个epoch中,训练集数据迭代的次数。(经验分享:如果数据量级小于一千,可以设置为10;如果数据量级在一千与一万之前,可以设置为5;如果数据量级大于一万,可以设置为2)shuffle_caption:当设置为true时,对训练标签进行打乱,能一定程度提高模型的泛化性。