基于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.

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

STM32的以太网外设+PHY(LAN8720)使用详解(1):ETH和PHY介绍

0 工具准备 1.野火 stm32f407霸天虎开发板 2.LAN8720数据手册 3.STM32F4xx中文参考手册1 以太网外设(ETH) 1.1 以太网外设(ETH)简介 STM32F4系列MCU内部集成了一个以太网外设(ETH),可以通过介…

DRF之引入

目录 一、web应用模式 【1】前后端混合开发 【2】前后端分离 二、API接口 三、接口测试工具:Postman 四、RESTful API规范 【1】什么是RESTful 【2】RESTful API的规范 2.1 数据的安全保障 2.2 接口特征表现 2.3 多数据版本共存 2.4 数据即是资源&#…

2024年PMP考试新考纲-PMBOK第七版-项目管理原则真题解析

从战争中学习战争。对于参加2024年PMP考试的小伙伴来说,最有效的学习方式是这样地:①阅读了教材(PMBOK6、7和敏捷),了解基本概念;②反复刷近期的PMP考试真题,查漏补缺。 为此,华研荟…

华为云Stack 8.X流量模型分析(三)

三、VPC内部二层流量模型分析 1.不同宿主机下虚拟机互访 VM1发送arp请求,arp报文根据流表到达br-tun,br-tun给予VM1到达VM2的MAC信息。此时arp报文不出宿主机(Host1); **注意:**br-tun内的信息是由管理平…

2023年PMP证书的含金量有多高?对于企业来说有多大的价值?

PMP含金量更多的是“敲门砖”作用,公司招聘的门槛 当然现在PMP管理模式也很热门,各大企业都有引进改良应用在公司的项目上,之前在校友群里面大家在讨论PMP 的作用也有说到这一点,给大家看看吧。 至于为什么PMP认证从国外引进大陆…

尺寸公差分析与尺寸链计算软件-DTAS3D到底能给我们带来哪些价值?

【技能】DTAS3D能给我们带来哪些价值? DTAS3D是一款高度集成的公差分析软件,旨在为产品开发团队提供准确的建议,从而放心地将设计发布给制造部门。下面是DTAS3D的关键价值和应用: 1.与三维CAD无缝集成: DTAS3D与三维CAD软件 (CATIA、NX、Cr…

如何进行USB丢弃攻击?

USB丢弃攻击,类似于一场表演艺术,您需要构建一个引人入胜的故事,激发目标的好奇心,让他们忽略基本的安全意识,插入您精心准备的USB设备! 本文章仅限娱乐,请勿模仿或进行违法活动! 一、选择放置…

提示“由于找不到mfc140u.dll,无法继续执行代码”如何解决?

在计算机使用过程中,我们经常会遇到一些错误提示,其中之一就是找不到某个动态链接库文件,比如mfc140u.dll。这个问题可能会导致某些应用程序无法正常运行或打开。 一、关于找不到mfc140u.dll文件造成会的问题 mfc140u.dll是Visual C中的一个…

深眸科技以AI+3D视觉技术引领技术创新,赋予工业自动化新的活力

随着工业4.0和智能制造时代的到来,3D机器视觉在工业各领域的应用越来越重要。这种技术改变了传统工业的生产方式,为现代工业带来了更高的生产效率和更精确的质量控制,广泛涉及物体识别、产品检测、尺寸测量、视觉引导定位等环节。 在工业领域…

Qt制作定时关机小程序

文章目录 完成效果图ui界面ui样图 main函数窗口文件头文件cpp文件 引言 一般定时关机采用命令行模式&#xff0c;还需要我们计算在多久后关机&#xff0c;我们可以做一个小程序来定时关机 完成效果图 ui界面 <?xml version"1.0" encoding"UTF-8"?>…

微信小程序开发系列-02注册小程序

上一篇文章&#xff0c;创建了一个最小的小程序&#xff0c;但是&#xff0c;还有3个疑问没有弄清楚&#xff0c;还是基于demo1工程&#xff0c;这篇文章继续探索。 当前的目录结构是否是完备的呢&#xff1f;&#xff08;虽然小程序可以运行起来&#xff09;app.js文件内容还…

蓝桥杯2019年10月青少组Python程序设计省赛真题

1:有n个人围成一个圈,按顺序排好号然后从第一个人开始报数(从1到3报数),报到3的人退出圈子,然后继续从1到3报数,直到最后留下一个人游戏结束,问最后留下的是原来第几号输人描迹:输人一个正整数n 输出描迹:输出最后留下的是原来的第几号 [样例输人] [样例输出] 2: 3、 […

tomcat和nginx自定义404错误页面

nginx 编辑nginx配置文件 vim /www/server/nginx/nginx.conf server{listen 80;error_page 404 /404.html;location /404.html{root /home/liu/html/error-html;} }在家目录下创建一个html/error-html目录&#xff0c;用于存放错误页面 在error-html目录下创建404.html&a…

ElasticSearch学习篇9_文本相似度计算方法现状以及基于改进的 Jaccard 算法代码实现

背景 XOP亿级别题库的试题召回以及搜题的举一反三业务场景都涉及使用文本相似搜索技术&#xff0c;学习此方面技术以便更好的服务于业务场景。 目前基于集合的Jaccard算法以及基于编辑距离的Levenshtein在计算文本相似度场景中有着各自的特点&#xff0c;为了优化具体的计算时…

Springboot整合JPA 多表关联:一对一 代码搭建

1.配置关联关系 2.配置关联操作 2.1单向 Student package com.jmj.springDataApp.pojo;import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor;import javax.persistence.*;Data Entity Table(name "tb_student") AllArgsCon…

【什么是泛型,有什么好处】

✅什么是泛型&#xff0c;有什么好处 ✅典型回答✅泛型是如何实现的✅什么是类型擦除&#xff1f;&#x1f4dd;C语言对泛型的支持&#x1f4dd;泛型擦除的缺点有哪些&#xff1f; ✅对泛型通配符的理解&#x1f4dd;泛型中上下界限定符 extends 和 super 有什么区别&#xff1…

基于ssm二手车交易平台的设计论文

摘 要 进入21世纪网络和计算机得到了飞速发展&#xff0c;并和生活进行了紧密的结合。目前&#xff0c;网络的运行速度以达到了千兆&#xff0c;覆盖范围更是深入到生活中的角角落落。这就促使二手交易网站的发展。二手交易网站可以实现远程购物&#xff0c;远程选择喜欢的商品…

RocketMQ高级原理:深入剖析消息系统的核心机制

一、基础概念&#xff1a; 1. 消息模型 RocketMQ基于Producer、Broker、Consumer三部分构建。其中&#xff0c;Producer负责生成消息&#xff0c;Consumer处理消息&#xff0c;而Broker则承担消息存储的角色。Broker服务器可以存储多个Topic的消息&#xff0c;并支持消息在不同…

2000-2023年逐年最大NDVI数据集(500m)

2000-2023年逐年最大DNVI数据集&#xff08;500m&#xff09; 植被指数&#xff08;NDVI, Normalized Difference Vegetation Index&#xff09;可以准确反映地表植被覆盖状况。目前&#xff0c;NDVI时序数据已经在各尺度区域的植被动态变化监测、土地利用/覆被变化检测、宏观植…

Java 面试 多线程遇到的问题,如何处理

问题描述 某服务在运行过程中抛出了 RejectedExecutionException。 配置参数&#xff1a; corepoolsize 50, maxpoolsize 50&#xff0c; workqueue 为 SynchronousQueue 现象&#xff1a; 当新的task被拒绝时&#xff0c;pool size未达到配置值50. Caused by: java.util.conc…