首页 > 其他分享 >关于Stable diffusion的各种模型,看这篇就可以了!

关于Stable diffusion的各种模型,看这篇就可以了!

时间:2024-07-30 17:26:40浏览次数:13  
标签:diffusion 训练 模型 这篇 VAE Stable Lora

大家好,这里是《Stable diffusion小白入门》系列的第3篇,主要是帮大家梳理下Stable diffusion里面的各种模型,模型在Stable diffusion中占据着至关重要的地位,不仅决定了出图的风格,也决定了出图质量的好坏。

但在第一次接触SD的时候,我就被里面的模型搞到头大,不仅有多种模型后缀,模型之间也有很多种类型,如果是新手小白的话,在这一步就很容易被搞晕。而在本期文章,技术巫帮你系统梳理了SD的模型,相信不管是对于小白还是老手,都会有一定帮助!

一、从模型后缀说起

为了更好地理解模型,让我们先从模型的后缀说起。

在Stable diffusion中,有两种比较常见的模型后缀,分别是 .ckpt 和 .safetensors 。

.ckpt 的全称是 checkpoint,中文翻译就是检查点,这是 TensorFlow中用于保存模型参数的格式,通常与 .meta 文件一起使用,以便恢复训练过程。

简单理解的话,.ckpt模型就好比我们打游戏时,每通过一关时对这一关的一个“存档”,因为你在训练模型时也是如此,没办法保证能一次就训练成功,中途是有可能因为各种因素失败的,所以可能在训练到20%时就存一次档,训练到40%时又存一次档,这也是为什么它叫 checkpoint 的一个原因。

在提到.ckpt 模型时,我想顺便补充下.pt 模型,前面提到,.ckpt 是TensorFlow 用于保存模型参数的格式,而 .pt 则是 PyTorch保存模型参数的格式。TensorFlow 和 PyTorch都是比较出名的深度学习框架,只不过一个是Google发布的,另外一个是Facebook发布的。

PyTorch 保存模型的格式除了.pt 之外,还有 .pth 和.pkl。.pt 和 .pth 之间并没有本质的差别,而.pkl 只是多了一步用Python的 pickle 模块进行序列化。

讲完了 .ckpt 模型,那么就该说说 .safetensors 模型了。

之所以有 .safetensors 模型,是因为 .ckpt 为了让我们能够从之前训练的状态恢复训练,好比从50%这个点位重新开始训练,从而保存了比较多的训练信息,比如模型的权重、优化器的状态还有一些Python代码。

这种做法有两个问题,一是可能包含恶意代码,因此不建议从未知或不信任的来源下载并加载.ckpt 模型文件;二是模型的体积较大,一般真人版的单个模型的大小在7GB左右,动漫版的在2-5GB之间。

而 .safetensors 模型则是 huggingface 推出的新的模型存储格式,专门为Stable Diffusion模型设计。这种格式的文件只保存模型的权重,而不包含优化器状态或其他信息,这也就意味着它通常用于模型的最终版本,当我们只关心模型的性能,而不需要了解训练过程中的详细信息时,这种格式便是一个很好的选择。

由于 .safetensors 只保存模型的权重,没有代码,所以会更安全;另外由于保存的信息更少,所以它的体积也比 .ckpt 小,加载也更快,所以目前是比较推荐使用 .safetensors 的模型文件。

总的来说,如果你想在某个SD模型上进行微调,那还是得用 .ckpt 模型;但如果你只关心出图结果,那么使用 .safetensors 模型会更好!

二、从模型分类讲起

在Stable diffusion中,模型主要分为五大类,分别是Stable diffusion模型、VAE模型、Lora模型、Embedding模型以及Hypernetwork模型。

2.1 Stable diffusion大模型

这类模型俗称“底模”,对应下面这个位置。

这类模型代表了Stable diffusion的一个知识库,比如说我们训练大模型用的全是二次元的图片,那么它最终生成的图片效果也会趋于二次元;而如果训练的时候用的是真人图片,则最终出图效果则趋于真人。

由于这类模型包含的素材非常多,训练的时间也非常长,所以体积也比较大,一般在2GB以上,后缀的话就是上面提到的 .ckpt 和 .safetensors

2.2 VAE模型

VAE全称Variational autoenconder,中文叫变分自编码器,这种模型可以简单理解为起到一个滤镜的效果。在生成图片的过程中,主要影响的是图片的颜色效果。

一般来讲,在生成图片时,如果没有外挂VAE模型,生成的图片整体颜色会比较暗淡;而外挂了VAE模型的图片整体颜色会比较明亮。

注:左边是没有使用VAE生成的图片,右边是使用VAE生成的图片

不过需要注意的是,有一些大模型在训练的时候就已经嵌入了VAE的效果,所以即使没有使用VAE效果,出图的效果也不会那么暗淡。

另外,有时候使用VAE反倒会出现一个不好的效果,比如在最后一刻变成一张蓝色废图,这时候就需要把外挂VAE改成自动(Automatic)即可

注:像这种即为蓝色废图

2.3 Lora模型

Lora模型想必大家都经常看到了,LoRA的英文全称为Low-Rank Adaptation of Large Language Models,直译为“大语言模型的低阶适应”。这是一项由微软研究人员提出的大语言模型微调技术,简单来说,它的作用是让这些庞大的模型变得更加灵活和高效,能够在特定任务上进行优化(比如对样式进行一些修改),而不需要从头开始训练整个模型。

比如像下面这个Lora模型,就是在大模型的基础上增加一些森林水母发光的效果(就是我们不必为了增加这个效果,重新训练我们的大模型,因为训练大模型花费时间很长,通过Lora就可以提高效率)

需要注意的是,Lora模型并不能单独使用,它必须与前面的大模型一起使用!

另外,由于Lora训练的图片较少,比如上面的Lora就是用100+图片训练的,所以它的体积一般不会很大,一般在几十到几百MB之间,这样大大节省了磁盘的占用量。

最后,有些Lora模型启用是需要触发词的(也就是在提示词那里加上这个触发词),比如上面的Lora触发词就是 jellyfishforest

2.4 Embedding模型

Embedding模型也称为textual inversion,即文本反转。在Stable Diffusion中,Embedding模型使用了嵌入技术以将一系列输入提示词打包成一个向量,从而提高图片生成的稳定性和准确性。

简单来说,如果我们要通过SD生成火影里面的鸣人形象,我们需要好几个提示词来进行描述,比如什么外形,穿什么颜色的衣服,而Embedding就是将这一系列提示词打包成为一个新的提示词,假设叫鸣人。

这样后续我们只要引入这个 Embedding模型,然后输入鸣人提示词,就会生成我们想要的鸣人形象,提高了写提示词的效率!

由于Embedding模型只是将提示词整合了,所以它的体积非常小,一般在几十到几百KB之间。

举个例子,比如像这个 Embedding 模型,它描绘了一位叫Caroline Dare的美女

当我们输入触发词时,就会生成类似的美女

虽然生成的图片不是一模一样,因为这跟你使用的底模有关,但是比较明显的特征是一致的,比如白头发

2.5 Hypernetwork模型

Hypernetwork可以翻译为“超网络”,它是一种基于神经网络的模型,可以快速生成其他神经网络的参数,常应用于Novel AI的Stable Diffusion模型中。

Hypernetwork可以用来对模型进行微调,比如在Stable Diffusion这样的图像生成模型中,通过插入一个小型的超网络来修改输出风格,而不改变原始模型的核心结构

这个模型的作用其实和Lora模型功能有点重叠,所以在实际使用中,我个人用得比较少。

三、模型的剪枝

大家在下载模型的时候,可能还会看到两个版本,一个版本带 pruned,另外一个版本是带 pruned-emaonly,比如下面这个[1]

这是因为大模型在训练的时候会保存两组不同类型的权重:第一组取的是最后一次的权重,也就是只带 pruned 的模型

标签:diffusion,训练,模型,这篇,VAE,Stable,Lora
From: https://blog.csdn.net/HJS123456780/article/details/140789227

相关文章

  • Stable diffusion小白入门第2课:文生图精讲
    大家好,这里是《Stablediffusion小白入门》系列的第2篇,在上一篇——Stablediffusion小白入门第1课:软件安装及介绍,我们成功安装了Stablediffusion软件,而今天,我们将深入了解Stablediffusion的文生图功能,让你也能生成满意的图片!AI工具SD整合包、各种模型插件、提示词、AI人......
  • Stable Diffusion|用AI制作电商产品视觉
    今天分享一个用StableDiffusion制作“电商视觉海报”和“电商产品视觉”的小分享,以双十一为例,这个分享或许可以给你提供一些创作灵感,也有可能可以帮助你更高效的完成视觉海报的制作。1双十一视觉在开始之前,需要先准备一张双十一的字体图片。(图片来自网络,如有侵权,请联......
  • stable diffusion 入门教程
    sd基础工作原理&入门输入提示词后有文本编码器将提示词编译成特征向量,vae编码器将特征向量传入潜空间内,特征向量在潜空间内不断降噪,最后通过vae解码器将降噪之后的特征向量解码成一个个像素组成的图片一般选中默认vae模型解码编码的模型CLIP值越大,提前停止的越快,我们提......
  • Stable Diffusion 提示词攻略
    一、提示词作用提示词所做的工作是缩小模型出图的解空间,即缩小生成内容时在模型数据里的检索范围,而非直接指定作画结果。提示词的效果也受模型的影响,有些模型对自然语言做特化训练,有些模型对单词标签对做特化训练,那么对不同的提示词语言风格的反应就不同。二、提示词内容......
  • 计算机毕业设计实现流程,看这篇就够了(1.2w字超详细流程)
    计算机专业毕业设计实现流程 目录如何完成毕业设计选题提交毕业设计任务书完成系统分析和系统设计完成项目编码工作撰写论文项目答辩 1.完成毕业设计选题选题的类型计算机毕业相关的设计最近几年类型比较多的题目为:XX管理系统、XX网站建设、XX小程序设计与实现、XX公......
  • mitk-diffusion
    DWIDenoisingThisviewprovidesseveralmethodstodenoisediffusion-weightedimages.Simplyselecttheimagetodenoiseandpressthestartbutton.Thedefaultparametersshouldworkrelativelywell.TheNLMmethodisbyfartheslowest。该视图提供了几种对......
  • 使用“stable_baselines3”时如何重置“gymnasium”环境?
    我想为我的体育馆环境播种。从官方文档来看,我的做法是-importgymnasiumasgymenv=gym.make("LunarLander-v2",render_mode="human")observation,info=env.reset(seed=42)但是,stable_baselines3似乎不需要从用户端重置,如下面的程序所示-importgymnasi......
  • 昇思25天学习打卡营第24天|生成式-Diffusion扩散模型
    打卡目录打卡理解扩散模型环境设置DiffusionModel简介扩散模型实现原理Diffusion前向过程Diffusion逆向过程训练算法总结U-Net神经网络预测噪声构建Diffusion模型准备函数和类位置向量ResNet/ConvNeXT块Attention模块组归一化条件U-Net正向扩散(core)......
  • stable diffusion中的UNet2DConditionModel代码解读
    UNet2DConditionModel总体结构图片来自于https://zhuanlan.zhihu.com/p/635204519stablediffusion运行unet部分的代码。noise_pred=self.unet(sample=latent_model_input,#(2,4,64,64)生成的latenttimestep=t,#时刻tencoder_hidden_states=pro......
  • python基本语法三天速成系列day1(看完这篇你就会)
    注释注释是代码非常重要的一部分,它的主要作用有:解释代码目的:注释可以说明代码段或函数的目的和功能,帮助其他开发者快速理解代码的意图。复杂逻辑说明:对于复杂的算法或业务逻辑,通过注释可以解释这些逻辑是如何工作的,降低后续维护的难度。提高可读性:良好的注释可以使代码结......