基于AE、VAE 和 VQ-VAE的图像生成

  • AE 是将数据映直接映射为数值code(确定的数值),主要用于图像压缩与还原
  • VAE是先将数据映射为分布,再从分布中采样得到数值code,主要用于图像生成
  • AQ-VAE是在原始VAE基础上多了一步Vector Quantization矢量量化操作,完成对 latents 的进一步压缩,主要用于图像生成

AE

因为AE学的只是将具体的图像X压缩为latent Z,然后解码回X‘,计算重建loss,而并不是学习一个概率分布。

AutoEncoder训练后会有严重的过拟合:当我们想从latent space中随机采样一个random vector z,然后用decoder解码为一张图像时,我们发现并不是所有的vector都可以解码为一张人脸的,而是一个具体的vector一张具体的训练集的图像存在一一对应关系。这个latent space中的vector和训练集图像严重过拟合了,无法在两个vector之间进行插值生成相似的图像。因此我们无法使用AE的Decoder生成训练集中没有见过的图像

在这里插入图片描述

假设我们训练好的AE将“新月”图片encode成code=1(这里假设code只有1维),将其decode能得到“新月”的图片;将“满月”encode成code=10,同样将其decode能得到“满月”图片。这时候如果我们给AE一个code=5,我们希望是能得到“半月”的图片,但由于之前训练时并没有将“半月”的图片编码,或者将一张非月亮的图片编码为5,那么我们就不太可能得到“半月”的图片。因此AE多用于数据的压缩和恢复,用于数据生成时效果并不理想。

在这里插入图片描述

VAE

VAE相较于AE开始学习概率分布:encoder将原图像的概率分布转化为latent sapce中的概率分布,然后decoder将latent sapce中的概率分布转化为图像的概率分布。当我们学习到了 p ( x ∣ z ) p(x|z) p(xz)以后,我们就可以从latent sapce p ( z ∣ x ) p(z|x) p(zx)中随机采样一个random vector z使用decoder解码为一张图像。

在这里插入图片描述

不将图片映射成“数值编码”,而将其映射成“分布”。还是刚刚的例子,我们将“新月”图片映射成μ=1的正态分布,那么就相当于在1附近加了噪声,此时不仅1表示“新月”,1附近的数值也表示“新月”,只是1的时候最像“新月”。将"满月"映射成μ=10的正态分布,10的附近也都表示“满月”。那么code=5时,就同时拥有了“新月”和“满月”的特点,那么这时候decode出来的大概率就是“半月”了。

在这里插入图片描述

代码层面:

Encoder、Decoder是正常的CNN或Transformer架构混用都可以。
在这里插入图片描述

在这里插入图片描述

在 输入图像 x 用 encoder 编码为latents h后,先进行一个卷积quant_conv将其映射为2部分:均值mena和方差logvar,然后使用均值和方差,在中进行采样

从技术角度来说,训练时,VAE 的工作原理如下:
(1)编码器encoder将输入样本 input img x 编码为latents h后,进行一个卷积quant_conv将其映射为2部分:均值mena和方差logvar,其中标准差 s t d = e l o g v a r = e l o g s t d std=e^{\sqrt{logvar}}=e^{logstd} std=elogvar =elogstd

(2)我们假定潜在后验分布Posterior(正态分布 x ~ P(mean, std^2) -> x = mean + std * epsilon)能够生成输入图像,并从这个分布中随机采样一个点 z : z= mena + std * epsilon,其中 epsilon 是取值很小的随机张量(下面代码中是sample)。

(3)解码器decoder将latent space的这个点z映射回原始输入图像x’

因为训练时 epsilon 是随机的,所以可以确保:input_img 编码的latent space中(即 mean)靠近的每个点都能被解码为与 input_img 类似的图像从而迫使latent space能够连续

在这里插入图片描述
在这里插入图片描述

前面说我们假设了后验分布Posterior是正态分布,那我们如何约束呢?在训练的loss中可以找到答案,VAE的loss函数不仅包含图像的重建loss,还包含了我们的Posterior分布标准正态分布KL散度loss
在这里插入图片描述
对于训练好的模型,我们可以在latent space中随机采样一些vector,然后用decoder解码为图像:
在这里插入图片描述

VQ-VAE

和VAE的区别是,他的Posterior分布是一个离散概率分布:在原始VAE基础上多了一步Vector Quantization矢量量化操作,完成对 latents 的进一步压缩。

在这里插入图片描述

具体来说,VQ-VAE维护了一个code book矩阵(是一个Learnable 的 Embedding Layer),通过计算encoder输出的latentcode book中每个向量距离,然后从code book中拿出距离最近的向量组成新的latent传入decoder,进行重建。

在这里插入图片描述

代码层面:

encoder和decoder和VAE一样:
在这里插入图片描述

构建一个learnable的embedding作为code book,对于编码后的latent z进行变形,然后与code book中每个向量计算距离。
在这里插入图片描述

找到距离 latent 最近的向量 组成新的latent z_q,与原始的latent z 相加。
在这里插入图片描述

VQ-VAE的loss包含2部分,一个是图像重建的rec_loss,一个是学习embedding code bookquant_loss.

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/293809.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

放心安全国产主食冻干猫粮有哪些牌子?分享十大放心猫粮国产名单

近几年,冻干猫粮在宠物圈内非常流行,许多品牌都推出了冻干猫粮。在所有的猫食品中,冻干无疑是最具营养、动物蛋白含量最高的食品之一。冻干作为现在宠物圈最火的猫食品,受到了众多猫友们的喜爱和追捧。但有些铲屎官在选择冻干猫粮…

仿悬赏猫任务平台源码 悬赏任务系统源码 带支付接口

源码介绍 最新仿悬赏猫任务平台源码 悬赏任务系统源码 带支付接口, 全新开发悬赏任务系统,功能齐全,包含接任务,发布任务, 店铺关注,置顶推荐,排行榜,红包大厅,红包抽奖…

一些问题/技巧的集合(仅个人使用)

目录 第一章、1.1)前端找不到图片1.2)1.3)1.4) 第二章、2.1)2.2)2.3) 第三章、3.1)3.2)3.3) 第四章、4.1)4.2)4.3) 友情提…

MT6739/MTK6739安卓核心板规格参数_MTK平台核心板定制

安卓核心板采用联发科 MT6739 平台开发设计,搭载开放的智能 Android 操作系统。它集成 GPU PowerVR GE8100 570MHz,集成了 BASEBAND、UMCP、PMU 等核心器件,支持 2.4G5G 双频 WIFI(可支持 1*1 MIMO)、BLUETOOTH 近距离无线传输技术&#xff0…

12 数列的新顺序

分组后反转 #include <iostream> using namespace::std; using std::cout; using std::cin; int main() {int l,n;cin >> l;int nums[l];for(int i0; i<l; i){cin >> nums[i];}cin >> n;int t;for(int i0; i<l/n; i){for(int j0; j<n/2; j)…

蓝牙物联网与嵌入式开发如何结合?

蓝牙物联网与嵌入式开发可以紧密结合&#xff0c;以实现更高效、更智能的物联网应用。以下是一些结合的方式&#xff1a; 嵌入式开发为蓝牙设备提供硬件基础设施和控制逻辑&#xff1a;嵌入式系统可以利用微处理器和各种外设组成的系统&#xff0c;为蓝牙设备提供硬件基础设施和…

web网页端使用webSocket实现语音通话功能(SpringBoot+VUE)

写在前面 最近在写一个web项目&#xff0c;需要实现web客户端之间的语音通话&#xff0c;期望能够借助webSocket全双工通信的方式来实现&#xff0c;但是网上没有发现可以正确使用的代码。网上能找到的一个代码使用之后只能听到“嘀嘀嘀”的杂音 解决方案&#xff1a;使用Jso…

JMeter常见错误分析

&#x1f4e2;专注于分享软件测试干货内容&#xff0c;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff01;&#x1f4e2;交流讨论&#xff1a;欢迎加入我们一起学习&#xff01;&#x1f4e2;资源分享&#xff1a;耗时200小时精选的「软件测试」资…

LTspice 电路仿真软件教程--基础篇

本文要干什么 介绍LTspice电路仿真软件的基础使用教程。 主角是谁&#xff0c;他有啥牛掰的地方 LTspice是一款高性能Spice III仿真软件、原理图采集和波形查看器&#xff0c;集成增强功能和模型&#xff0c;简化了开关稳压器的仿真。与常规Spice仿真器相比&#xff0c;我们…

计算机存储术语: 扇区,磁盘块,页

扇区(sector) 硬盘的读写以扇区为基本单位。磁盘上的每个磁道被等分为若干个弧段&#xff0c;这些弧段称之为扇区。硬盘的物理读写以扇区为基本单位。通常情况下每个扇区的大小是 512 字节。linux 下可以使用 fdisk -l 了解扇区大小&#xff1a; $ sudo /sbin/fdisk -l Disk …

3.[BUUCTF HCTF 2018]WarmUp1

1.看题目提示分析题目内容 盲猜一波~ &#xff1a; 是关于PHP代码审计的 2.打开链接&#xff0c;分析题目 给你提示了我们访问source.php来看一下 大boss出现&#xff0c;开始详细手撕~ 3.手撕PHP代码&#xff08;代码审计&#xff09; 本人是小白&#xff0c;所以第一步&…

Spring中你一定要知道的afterPropertiesSet()

文章目录 功能源码 功能 初始化bean执行的回调方法其一&#xff0c;它不像PostConstruct一样可以有多个&#xff0c;只能调用一次&#xff1b;它执行的时机是在PostConstruct之后&#xff0c;从它的名称也可以看出&#xff0c;他是在属性填充完&#xff0c;也就是bean初始化完…