VAEGAN:理解 VAE 与 GAN【图像生成】

news2024/11/25 7:08:23

标准VAE(Variational Autoencoder)的原理:

在autoencoder模型中,我们加入一个编码器,它能帮我们把图片编码成向量。然后解码器能够把这些向量恢复成图片。

标准自编码器

我们现在获得了一个有点实际用处的网络了。而且我们现在能训练任意多的图片了。如果我们把这些图片的编码向量存在来,那以后我们就能通过这些编码向量来重构我们的图像。我们称之为标准自编码器。

 但是,我们想建一个产生式模型,而不是一个只是储存图片的网络。现在我们还不能产生任何未知的东西,因为我们不能随意产生合理的潜在变量。因为合理的潜在变量都是编码器从原始图片中产生的。

这里有个简单的解决办法。我们可以对编码器添加约束,就是强迫它产生服从单位高斯分布的潜在变量。正式这种约束,把VAE和标准自编码器给区分开来了。现在,产生新的图片也变得容易:我们只要从单位高斯分布中进行采样,然后把它传给解码器就可以了

这里有一些使用VAE好处,就是我们可以通过编码解码的步骤,直接比较重建图片和原始图片的差异,但是GAN做不到。

另外,VAE的一个劣势就是没有使用对抗网络,所以会更趋向于产生模糊的图片。

VAEGAN的原理

我们知道 VAE 可以实现从原始分布编码到一个 normal 的分布,再从 normal 的分布解码回原始分布的功能,然后这个解码用到的 decoder 就可以单独被提取出来作为生成器使用。但是,VAE 有一个很大的问题就是,解码产生的图片往往都比较模糊。那为什么产生的图片会模糊?我会在之后学习 VAE 的过程中再去研究,目前我们只是知道,VAE 产生的图片是容易模糊的。于是就出现了 VAEGAN,它的作用,就是给 VAE 加上了 GANs 的架构, 通过判别器使得 VAE 产生的图片变得清晰。因此我们可以理解为,VAEGAN 就是利用 GANs 去提升了 VAE 的图片生成质量。

 我们来说明一下这个架构。首先输入一张真实图像X𝑖𝑛,通过一个 encoder 变成一个 normal 的分布 z,然后 z 再输入到 decoder 中产生生成图像X𝑜𝑢𝑡这时 VAE 希望X𝑜𝑢𝑡与X𝑖𝑛 之间的 loss 越小越好,但是 loss 小不见得图片就清晰,于是X𝑜𝑢𝑡又会被放入一个判别器中, 去让判别器判断输入的图片属于P𝑑𝑎𝑡𝑎还是P𝐺,这样最终X𝑜𝑢𝑡就会与X𝑖𝑛不仅相似还清晰。

而关于 VAEGAN,有趣的一点是,我们不仅可以用 GANs 来提升 VAE,也可以用 VAE 来 提升 GANs。如果是被用作后者的话,“GANVAE”其实就等效为 CycleGAN 的一部分,如下图 所示。

 这两者的差别在于,把 X encode 成 z 的过程是放在生成器的前面还是后面,如果放在前面,就是 VAEGAN;如果放在后面,就是 CycleGAN。

VAEGAN的变种

上一节的 VAEGAN 存在一个问题,就是 Encoder 编码出的 z 不一定完全符合我们期望的 normal z 的样式,也就是编码出的 z 和我们输入的 z 可以存在细微的不同,但是通过生成器的处理,它们产生的输出都能够骗过判别器。 为了解决这一问题 VAEGAN 提出了一个变种,它改变了判别器,使得判别器能更精细的鉴别输入图像的种类,共包括三个种类:真实图片,重构图片,与生成图片。

其中重构图片与生成图片的差异是,重构图片X𝑟𝑒𝑐是真实图片通过 encoder 与 decoder 之后产生的图片 ,如下图所示:

而生成图片X𝑔仅仅是一个初始分布 z 通过 decoder 之后产生的图片 ,如下图所示:

 于是现在X𝑟𝑒𝑐与X𝑔的差异能够被判别器学到,又因为生成器是共用的,那为了消除这种 差异只能让输入 z 接近一致,也就是 encoder 编码出的 z 不断逼近我们给定的输入 z,最终几乎完全一样。结果证明,这种模型在实验中比 VAEGAN 有少量的提升。

VAE(Variational Autoencoder)的原理 - Shiyu_Huang - 博客园

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

mulesoft Module 4 quiz解析

mulesoft Module 4 quiz1. What is NOT part of a Mule 4 event?2. A Database connector is configured to select rows from a Mysql database.3. What is the minimue required configuration in a flow for a Mule application to compile?4. What is the purpose of the…

Qt读写Excel文件与QXlsx的使用

最近项目比较忙,许久没写博客了,想着还是需要定期整理下学到的和用到的新东西,才有沉淀。刚好最近使用Qt时需要读取excel文件的数据,于是在github找了一个开源库QXlsx,Star数还比较多,应该靠谱,…

【CV】第 2 章:使用本地二进制模式的内容识别

🔎大家好,我是Sonhhxg_柒,希望你看完之后,能对你有所帮助,不足请指正!共同学习交流🔎 📝个人主页-Sonhhxg_柒的博客_CSDN博客 📃 🎁欢迎各位→点赞…

MPLS隧道——PE与CE之间运行不同路由协议的情况分析

目录 PE和CE之间运行OSPF路由协议 Ospf的Dmian ID(还原属性) Ospf的Sham Link属性 OSPF的DN置位与VPN Router Tag PE和CE之间运行BGP路由协议 AS号替换功能 BGP的SoO属性 PE和CE之间可以不同部署不同的路由协议,部署不同的路由协议会存…

量子笔记:多比特量子门

目录 0. 前言 2. 量子多重H门 3. 量子SWAP门 4. 量子CNOT门(CX门):受控非门 5. 量子CY和CZ门 6. 量子C*门 6.1 受控S门 6.2 受控H门 6.3 受控Z旋转门 6.4 受控X旋转门 6.4 受控Y旋转门 7. 量子托佛利门(CCNOT门) 8. 量子弗雷德…

【Linux】Linux中的gcc/g++编译器的使用

💬推荐一款模拟面试、刷题神器 、从基础到大厂面试题:👉点击跳转刷题网站进行注册学习 目录 一、编译的过程 1、预处理阶段 1.1预处理的工作——头文件展开、去注释、宏替换、条件编译 1.2外部定义宏(-D选项) 1.…

记一次网络安全应急响应流程

0x01 事件分析 网站源码被篡改,攻击者一定获取到了权限,那么接下来的思路就是推测攻击者入侵手段,找到业务脆弱点,对服务器进行全方位排查,找到攻击者留下来的痕迹并进行分析处理。 2.1 信息收集 与客户简单沟通后&…

【C++】动态联编、delete/free【有无析构】的使用,虚析构

文章目录动态联编的条件:联编的概念:1. 动态联编:2. 静态联编:静态联编时确认了那些属性:结论:基类指针和派生类指针访问虚函数结论:delete和free的使用条件:1. 没有析构函数时&…

由一个按键程序引发的思考(上)

说起按键程序,只要会单片机的肯定都很熟悉。一般开始学习单片机的时候,入门程序基本都是LED灯和按键。那么这个按键程序有什么特别的吗,还需要专门去思考吗?如果我刚开始学单片机的时候也会这么想,但是随着项目的积累&…

微信早安消息推送(大升级版-企业微信)

微信早安消息推送(企业微信) 在微信公众号推送的基础上的一个升级 新增图文、疫情状况等 可以修改头像 、 昵称 效果展示 更多资讯 源代码获取 → 薇信公粽号“Cloud技术栈”,回复“企业微信推送” ———————————————————…

【贪心算法-LeetCode3:无重复字符的最长子串(Java实现)】

无重复字符的最长子串一、题目描述1.题目内容2.样例二、解决方案1.算法流程1)分析2)算法流程2.Java代码1)核心代码2)完整测试代码个人社区:https://bbs.csdn.net/forums/smile 个人主页:https://blog.csdn.…

STM32G070RBT6基于STM32CubeMX创建定时器中断控制LED闪烁

STM32G070RBT6基于STM32CubeMX创建定时器中断控制LED闪烁📍相关篇《【硬件开源电路】STM32G070RBT6开发板》🌺配置内容演示: 📚功能介绍 📑通过STM32CubeMX配置定时器1和定时器3分别作为两个led的定时闹钟。这里作为…

单片机原理及应用实验一交通信号系统(基于Proteus仿真)

1.实验内容与要求 交通信号系统是保障交通安全高效的重要设施。51单片机价格低廉、体积小、低功耗、抗干扰性好等优点,适用于交通信号系统中,本实验利用51单片机IO口的开关量的输入输出功能及内部CPU运算功能,设计一个简易的交通信号灯系统&…

生成.keystore 安卓签名

需要有openssl.exe和keytool.exe支持 signapk.jar手动签名命令 java -jar signapk.jar pl.x509.pem pl.pk8 smartrecord_3.5.8.apk smartrecord_3.5.8-signed.apk除了直接使用signapk.jar签名外,还可以将签名文件生成keystore文件,然后配置编译器给apk进…

数据分析 | Pandas 200道练习题,每日10道题,学完必成大神(5)

文章目录前期准备1. 将create Time列设置为索引2. 生成一个和df长度相同的随机数DataFrame3. 将上一题生成的DataFrame与df合并4. 生成的新的一列new值为salary列减去之前生成的随机数列5. 检查数据中是否含有空值6. 将salary类型转换成浮点数7. 计算salary 大于10000的次数8. …

多线程之线程池

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录前言一、什么是线程池二.为什么要有线程池引入:为什么从池子里取,比创建线程速度要快什么是用户态,什么是内核态最终结论&#xf…

aws 负载均衡clb/nlb/alb

目录 概述 传统负载均衡器(Classic Load Balancer) DNS解析 健康检查(Health Check) 监听器(Listeners) 连接耗尽(Connection Draining) 粘性会话/会话关联(Sticky Sessions/…

(四)手写简单版MyBatis框架

文章目录环境搭建第一步:资源⼯具类第二步:定义SqlSessionFactoryBuilder类第三步:定义SqlSessionFactory类第四步:定义JDBC事务管理器第五步:定义数据源类第六步:定义MyMappedStatement类第七步&#xff1…

基于遗传算法卡车无人机旅行推销员问题(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

Leetcode刷题111. 二叉树的最小深度

给定一个二叉树,找出其最小深度。 最小深度是从根节点到最近叶子节点的最短路径上的节点数量。 说明:叶子节点是指没有子节点的节点。 示例 1: 输入:root [3,9,20,null,null,15,7] 输出:2 示例 2: 输入…