在StableDiffusion中说起VAE时,我们在谈论什么?
接触StableDiffusion 稍微深入一点的话就会碰到VAE这个概念,而如果不去了解潜在扩散模型背后的模型结构并在社区中摸索一段时间的话,对于VAE和VAE相关的一堆pt ckpt文件肯定会一头雾水。所以这篇文章就讲解一下VAE以及VAE在stable diffusion中的具体使用。
VAE模型介绍
VAE (Variational Auto-Encoder 变分自动编码器)模型有两部分,分别是一个编码器和一个解码器,常用于AI图像生成

在潜在扩散模型(Latent Diffusion Models)组成中就有VAE模型的身影
这里放一张自己总结的stable diffusion 模型推理流程图

其中编码器(encoder)被用于把图片转换成低维度的潜在表征,转换完成后的潜在表征将作为U- Net
模型的输入.
反之,解码器(decoder)将把潜在表征重新转回图片形式.
在潜在扩散模型的训练过程中,编码器被用于取得图片训练集的潜在表征(latents),这些潜在表征被用于前向扩散过程(每一步都会往潜在表征中增加更多噪声).
在推理生成时,由反向扩散过程生成的 denoised latents 被VAE
的解码器部分转换回图像格式.
所以说 ,在潜在扩散模型的推理生成过程中我们只需用到VAE的解码器部分.
WebUI中的VAE
那些比较流行预训练的模型一般都是内置了训练好的VAE模型的,不用我们再额外挂载也能做正常的推理生成(挂载后生成图像的效果会有一点点细微的区别),此时VAE pt
文件的作用就像HDR
,增加一点点图片色彩空间之类的一些自定义模型
可如果一些预训练模型文件不内置VAE(或训练他们自己的VAE,此时通常会在他们的模型发布说明中告诉你从哪得到他们的VAE)。我们就必须给它找一个VAE
挂载上去,用来将推理时反向扩散最后生成的 denoised latents 转换回图像格式,否则webui里最后生成输出给我们的就是类似彩噪的潜在表征(latents),此时VAE pt
文件的作用就像解压软件 ,为我们解压出肉眼友好可接受的图像.
做了张图来直观地说明展示下

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
挂载使用VAE模型文件
webUI中有两种挂载VAE模型文件的方法
- 改名为 <model 前缀>.vae.pt 和 model 放一起
- 将VAE文件 放到 VAE 文件夹然后在设置中选择


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

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