SD中的VAE,你不能不懂
什么是VAE?
VAE,即变分自编码器(Variational Autoencoder),是一种生成模型,它通过学习输入数据的潜在表示来重构输入数据。
在Stable Diffusion 1.4 或 1.5 模型中,通过VAE对模型进行部分更新,以提升模型渲染眼睛的能力。通过这种更新,模型在生成图像时能够更准确地捕捉和再现眼睛的细节,从而提高整体图像的真实感和质量。
VAE 由两部分组成:编码器和解码器。编码器将输入数据映射到一个潜在空间,解码器则从这个潜在空间重构数据。
我需要VAE吗?
实际上,你无需安装 VAE 文件即可运行 Stable Diffusion,你使用的任何模型(无论是 v1、v2 还是自定义)都已具有默认 VAE。
当人们说下载和使用 VAE 时,他们指的是使用它的改进版本。
当模型训练器使用其他数据进一步微调模型的 VAE 部分时,就会发生这种情况。在这种情况下,并不需要发布整个的大模型,只需要发布其中的VAE部分即可。
使用VAE有什么效果?
VAE(变分自编码器)的改进通常意味着它能够更精确地从潜在空间解码图像,尤其是在处理精细细节方面,比如眼睛和文本的渲染。
在 Stable Diffusion 模型的上下文中,改进的 VAE 解码器可以更有效地捕捉和再现图像中的微妙特征,这对于生成高质量的图像至关重要。
Stability AI 发布了两种微调的 VAE 解码器变体,分别是:
- EMA(指数移动平均线):这是一种统计方法,通常用于平滑时间序列数据。在机器学习中,EMA 有时用于模型参数的更新,以实现更稳定的训练过程。
- MSE(均方误差):这是一种常用的误差度量方式,用于衡量模型预测值与实际值之间的差异。在自动编码器的上下文中,MSE 可以作为优化目标,帮助模型学习更准确地重构输入数据。
这两种变体可能对应于不同的训练策略或目标函数,旨在优化 VAE 解码器的性能,特别是在渲染细节方面。选择哪一种变体可能取决于特定的应用场景和所需的输出质量。
使用这些微调的 VAE 解码器变体,可以期望在生成的图像中看到以下改进:
- 更清晰的文本:文本的边缘和字母形状可以更加锐利和准确。
- 更真实的眼睛渲染:眼睛的细节,如虹膜、瞳孔和反射,可以更加精细和逼真。
下面是一些对比的例子:

那么应该使用哪个呢?
Stability AI 对于 256×256 分辨率图像的评估指出,使用 EMA(指数移动平均线)的 VAE 解码器生成的图像在细节上更加清晰,而使用 MSE(均方误差)的解码器生成的图像则在视觉上更为平滑。
在Stable Diffusion v1.4 和 v1.5 在 512×512 分辨率图像的测试中,可以观察到在某些情况下,尤其是在人脸在图像中占比较小的时候,眼睛的渲染质量有所提升。但是到文本渲染方面并没有太多改善。
所以总结一下,新的 VAE 更新至少不会降低模型的性能,它要么提升了渲染质量,要么保持原有水平。
EMA(指数移动平均线)和 MSE(均方误差)这两种微调的 VAE 解码器变体与 Stable Diffusion v2.0 模型是兼容的。尽管在 v2.0 版本中,它们可能带来的改进效果相对较小,因为 v2.0 本身在渲染眼睛方面已经表现得相当出色。
我应该使用 VAE 吗?
使用 VAE(变分自编码器)的决定确实取决于你对当前结果的满意度以及你对细节改进的追求程度。
- 如果对结果已经满意:如果你使用的应用或技术,如 CodeFormer 面部修复,已经能够达到你期望的图像质量,特别是在眼睛等细节部位,那么你可能不需要额外引入 VAE 来进一步提升效果。
- 追求所有可能的改进:如果你追求每一个可能的性能提升,哪怕是微小的改进,那么使用 VAE 可能是一个值得考虑的选项。
如何使用VAE?
下载
目前,Stability 发布了两个改进的 VAE 版本。以下是直接下载链接。
安装
如果你用的是webUI。那么将下载的 VAE 文件放在目录中:'stablediffusion-webui/models/VAE'即可。
Linux 和 Mac OS用户
为方便起见,请在 Linux 或 Mac OS 的 stable-diffusion-webui 目录下运行以下命令,会自动下载并安装 VAE 文件。
wget https://huggingface.co/stabilityai/sd-vae-ft-ema-original/resolve/main/vae-ft-ema-560000-ema-pruned.ckpt -O models/VAE/vae-ft-ema-560000-ema-pruned.ckpt
wget https://huggingface.co/stabilityai/sd-vae-ft-mse-original/resolve/main/vae-ft-mse-840000-ema-pruned.ckpt -O models/VAE/vae-ft-mse-840000-ema-pruned.ckpt
在webUI中使用VAE
要在 AUTOMATIC1111 GUI 中使用 VAE,请单击左侧的“设置”选项卡,然后单击“VAE”部分。
在 SD VAE 下拉菜单中,选择要使用的 VAE 文件。

如果你的页面没有这个选项,那么可以到设置->user interface->quick settings list中把sd_vae加上即可:

SD中的VAE,你不能不懂的更多相关文章
- LcdTools如何实现PX01读取SD中BIN文件并通过端口发出去
在实际应用中我们会碰到需要下载很大容量固件,比如TP固件几百K大小BIN文件,这种情况下用LcdTools写初始化代码的方式实现就不大现实:此时我们可以通过PX01 SD来实现. 首先,把需要操作的B ...
- android 根据SD卡中图片路径读取并显示SD中的图片——源代码
package com.guo; import java.io.File; import android.app.Activity; import android.graphics.Bitmap; i ...
- 从MediaStorehe和sd中删除媒体文件
参考资料:http://www.sandersdenardi.com/querying-and-removing-media-from-android-mediastore/ 从媒体表中删除: pri ...
- Go语言中怎样判断数据类型_不懂的木匠_新浪博客
要判断数据类型,可以用Go的空接口: 建一个函数t 设置参数i 的类型为空接口,空接口可以接受任何数据类型 func t(i interface{}) { //函数t有一个参数i switch i ...
- 【记录】尝试用android-logging-log4j去实现log输出内容到sd卡中的文件的功能
[背景] 折腾: [记录]给Android中添加log日志输出到文件 期间,已经试了: [记录]尝试用android中microlog4android实现log输出到文件的功能 但是不好用. 然后就是 ...
- 转-Android 之 使用File类在SD卡中读取数据文件
如果需要在程序中使用sdcard进行数据的存储,那么需要在AndroidMainfset.xml文件中 进行权限的配置: Java代码: <!-- 在sd中创建和删除文件的权限 --> ...
- SD从零开始67-70 后勤信息系统中的标准分析, 信息结构, 信息的更新规则, 建立统计数据
SD从零开始67 后勤信息系统中的标准分析 标准分析中的报表Reporting in Standard Analyses 标准分析为高质量的表达和分析LIS中的数据基础提供了大量的功能: 当你决定了一 ...
- 浅谈android中的目录结构
之前在android游戏开发中就遇到本地数据存储的问题:一般情形之下就将动态数据写入SD中存储,在没有SD卡的手机上就需另作处理了;再有在开发android应用的过程中,总要去调试APP,安装时又想去 ...
- Android从网络某个地址下载文件、写入SD卡
首先创建一个HttpDownloader类,获取下载文件的网络地址,将文件下载下来以String流的方式返回: public String download(String urlStr){ //url ...
- android中常用的读取文件的用法如下
1. 从resource的raw中读取文件数据: String res = ""; try{ //得到资源中的Raw数据流 InputStream in = getResource ...
随机推荐
- Unity 热更--AssetBundle学习笔记 1.0【AB包资源加载工具类的实现】
工具类封装 通过上文中对AB包加载API的了解和简单使用,对AB包资源加载的几种方法进行封装,将其写入单例类中,如代码展示. 确保每个AB资源包只加载一次: 在LoadAssetBundleManag ...
- JDK源码阅读-------自学笔记(十六)(java.util.Random随机数类)
Random类简介 如果使用Math.random()计算过于复杂的话,我们可以使用例外一种方式得到随机数,即Random类,这个类是专门用来生成随机数的,并且Math.random()底层调用的就是 ...
- ChannelInboundHandlerAdapter 类
在 ChannelInboundHandlerAdapter 类中,除了 channelActive 和 channelRead 方法之外,还有其他方法用于处理不同类型的入站事件.以下是这些方法的解释 ...
- Chart.js (v2.9.4)--如何像高版本一样支持skipNull
项目开发中,用到Chart.js展示图表,用起来也非常方便,配置很灵活,很好用,给个数据集,设置一些配置值,实例化一个Chart出来,图表就非常丝滑地展现出来了. 但是作为开发人员都知道的一个真理,永 ...
- MyBatis延迟加载策略详解
延迟加载就是在需要用到数据的时候才进行加载,不需要用到数据的时候就不加载数据.延迟加载也称为懒加载. 优点:在使用关联对象时,才从数据库中查询关联数据,大大降低数据库不必要开销. 缺点:因为只有当需要 ...
- 解密Prompt系列30. LLM Agent之互联网冲浪智能体
这一章我们介绍能自主浏览操作网页的WebAgent们和相关的评估数据集,包含初级任务MiniWoB++,高级任务MIND2WEB,可交互任务WEBARENA,多模态WebVoyager,多轮对话Web ...
- HTML——input之单选按钮
在 HTML 中,把 <input> 标签的 type 属性设置为 radio 可以表示单选按钮.具体语法格式如下: <input type="radio" /& ...
- 根据raft协议动画总结raft协议的特点
raft动画地址 1. 1事务提交的时候如果已经被一台follower(A)获取到了,此时leader(L)挂掉,然后其它follower跟A一起选举leader基本上都是A会被选举成功,然后不管1事 ...
- Android 12(S) ALooper AHandler AMessage(二)
来写个demo试试看到底是ALooper AHandler AMessage是怎么运行的,源文件以及Android.bp如下: // EvenHandler.h #ifndef __MESSAGE_T ...
- C++笔记(2)拷贝构造函数
拷贝构造函数是一种特殊的构造函数,它在创建对象时,是使用同一类中之前创建的对象来初始化新创建的对象. 如果在类中没有定义拷贝构造函数,编译器会自行定义一个.如果类带有指针变量,并有动态内存分配,则它必 ...