通过代码学习 VQ-VAE

深入理解vqvae vqvae 首次在 cv 领域提出使用 vector quantize 来构建一个离散的 codebook,与其后续的 vqgan 等工作,被认为是 ”图片的 tokenizer“。将图片编码为 token,就能与 NLP token 的形式统一起来,一起在多模态 transformer 模型中进行训练。另外,vqvae encoder 将真实图片压缩为低维特征图, decoder 将低维特征图解码为真实图片的能力,在 ldm 中也大有用武之地,可以极大地降低训练/推理成本,提升生成结果的质量。 阅读详情

VQ-VAE(Vector Quantised Variational AutoEncoder,矢量量化变分自动编码)是【1】提出的一种离散化VAE方案,近来【2】应用VQ-VAE得到了媲美于BigGan的生成模型。由此可见, VQ-VAE 有着强大的潜力,且【1】和【2】皆为DeepMind的作品,让我们通过代码来认识它,学习它。

一、简介

光看论文一知半解,需要看看它的实现。我在GitHub中找到一个很简单的代码【3】,不妨一起研究研究。以下叙述是结合【3】的实现一起叙述的。
VQ-VAE属于VAE范畴,它有着与一般VAE都有的Encoder、code(编码)和Decoder,而不同之处在于其code并不是由Encoder直接输出得到,而是经过了一个矢量量化后才得到的,其结构图如下:
在这里插入图片描述
图1 VQ-VAE结构图【3】
在这里插入图片描述
图2 VQ-VAE数据流图【1】

结合 图1、图2 叙述其工作流程

  1. 输入x,其数据结构为[B,3,32,32],由于【3】采用了CIFAR10作为训练集,因此输入参数如此,B是batch的数量;
  2. 经过Encoder,得到 Z e ( x ) Z_e(x) Ze​(x), 其结构为 [B, C=D, H, W],其中C是指编码器的Conv网络输出的Channels 的数量,而D是指矢量量化中矢量的维度,也就是后续查表(Embedding)所存储矢量的维度,另外,H,W表示输入图像经编码器处理后的长和宽,本例中,编码器输入是32 * 32,输出时为8 * 8,即H=8, W=8;
  3. 将 Z e ( x ) Z_e(x) Ze​(x) 变形为 [B * H * W, D],即每一个图片有 H*W 个编码,每个编码是D维,计算这些编码(B * H * W)与 Embedding 中 K 个矢量(在【3】中 K=512,表示矢量量化编码的矢量个数)之间的距离,通过最近邻算法构成如下映射:
    q ( z = k ∣ x ) = { 1 for  k = arg ⁡ min ⁡ j ∥ Z e ( x ) − e j ∥ 2 0 otherwise ( 1 ) q(z=k|x)=\left\{ \begin{matrix} 1 & \text{for } k=\arg\min_j \Vert Z_e(x)-e_j\Vert_2 \\ 0 & \text{otherwise} \\ \end{matrix}\right. \qquad (1) q(z=k∣x)={ 10​for k=argminj​∥Ze​(x)−ej​∥2​otherwise​(1)
    公式(1)表示当输入为 x x x 时, z = k z=k z=k 的概率是 :1)当 k k k 是矢量序列 { e 1 , e 2 , ⋯   , e K } \{e_1,e_2,\cdots,e_K\} { e1​,e2​,⋯,eK​}中与 Z e ( x ) Z_e(x) Ze​(x) 最近的矢量的下标时,条件概率为1;2)否则为0。这里的矢量距离度量采用常见的欧拉距离 ∥ ⋅ ∥ 2 \Vert \cdot \Vert_2 ∥⋅∥2​,公式(1)便是最近邻算法的实现。
    z q ( x ) = e k  where  k = arg ⁡ min ⁡ j ∥ Z e ( x ) − e j ∥ 2 ( 2 ) z_q(x)=e_k \ \text{where} \ k=\arg\min_j \Vert Z_e(x)-e_j\Vert_2 \qquad(2) zq​(x)=ek​ where k=argjmin​∥Z
vqvae详细解释 模型综述 # VQ-VAE(Vector Quantised - Variational AutoEncoder)首先出现在论《Neural Discrete Representation Learning》 作为一个自编码器,VQ-VAE的一个明显特征是它编码出的编码向量是离散的,换句话说,它最后得到的编码向量的每个元素都是一个整数,这也就是“Quantised”的含义,我们可以称之为“量子化”(跟量子力学的“量子”一样,都包含离散化的意思)。 明明整个模型都是连续的、可导的,但最终得到的编码向量却是离散 阅读详情

相关推荐

详解VQVAE:Neural Discrete Representation Learning

详解VQVAE:Neural Discrete Representation Learning 一些具有挑战性的任务,如few-shot learning,严重依赖从原始数据学习的表示,但在无监督的方式下训练的通用表示的有用性仍然远远不是主流方法。 极大似然和重构误差是训练像素域无监督模型的两个常用目标,但它们的有用性取决于特征所用于的特定应用。 目标:实现一个模型,在潜在空间中保留数据的重要特征,同时优化最大似然。最好的生成模型(通过对数似然度量)将是那些没有潜在功能但具有强大解码器的模型

justBeHerHero 1万+

深入探讨 VQ-VAE:理解变分量化自动编码器

VQ-VAE代表"Variational Quantized Variational Autoencoder",是一种生成模型,通常用于处理高维数据,如图像和音频。它的设计灵感来自于变分自动编码器(VAE)和量化方法,结合了它们的优点,使得 VQ-VAE 能够生成高质量的数据,并在数据表示上引入离散性。VQ-VAE 是一种强大的生成模型,结合了变分自动编码器和量化方法的优点。它在图像和音频生成、数据压缩和生成性对抗网络等领域具有广泛的应用。

DeepViewInsight的博客 7016

手把手教你用VAE实现图像压缩:从AE到VQ-VAE的完整代码解析

本文通过完整代码解析,手把手教你从基础自编码器(AE)到变分自编码器(VAE),最终实现向量量化变分自编码器(VQ-VAE)的图像压缩引擎。文章深入探讨了感知图像压缩的核心技术,并解释了这些模型如何为后续的潜在扩散模型(LDM)等先进AIGC应用奠定基础。

weixin_29055137的博客 112

VAE(Variational Autoencoder)简单记录

经常遇到它,然而每次小补之后又忘了,害,干脆开一篇慢慢记录一下吧。VAE -> VQVAE, 主要是加了Vector Quantization本文会不断更新…

andy dennis的博客 813

【VQ-VAE代码实战】Neural Discrete Representation Learning

基于神经网络的,离散的表征学习本篇博客主要分析一个开源的VQVAE代码,帮助更好的理解VQVAE。注意代码有所修改和注释,在正文中给出。代表工作如Stable Diffusion,DALLE和VQGAN。现在很多预训练的大模型都用到VQVAE。【VQ-VAE论文精读+代码实战】Neural Discrete Representation Learning变分自动编码器 (VAEs) 可以被认为是神经网络除最后一层之外的所有功能,即特征提取或分离数据。

zik的博客 1847

Generating Diverse Structure for lmage lnpainting With Hierarchical VQ-VAE CVPR 2021 代码测试教程

Generating Diverse Structure for lmage lnpainting With Hierarchical VQ-VAE CVPR 2021 代码测试教程

机器学习深度学习业余选手 308

Zephyr、FreeRTOS 和 RT-Thread

你是…更适合用嵌入式新手,刚接触 RTOSFreeRTOS(入门简单)IoT 项目开发,需要 BLE/WiFi/MQTTZephyr(协议全)想快速构建可部署的产品Zephyr(模块统一)只做单个任务或简单状态机控制FreeRTOS(轻量)做平台化、持续集成、自动测试Zephyr(CI 支持强)

is0815的博客 2246

CATIA高效设计:自定义快捷键全攻略

本文详细介绍了如何在CATIA中自定义快捷键以提升设计效率。通过减少鼠标依赖、优化工作流程和减轻手腕疲劳,合理设置快捷键可显著提高建模速度。文章提供了从基础设置到高级配置的全流程指南,包括解决冲突、推荐方案及外设扩展建议,帮助用户快速掌握CATIA高效设计技巧。

weixin_42648844的博客 585

Android开发中StateFlow与LiveData的5个关键区别及实战避坑指南

本文深度解析了Android开发中StateFlow与LiveData的5个核心区别,包括设计哲学、生命周期管理、值更新策略、线程模型及协程生态整合。通过实战代码对比,为开发者在现代MVVM架构下的状态管理选型提供清晰的决策指南和避坑建议,帮助构建更健壮、可测试的应用。

weixin_29012677的博客 403

(二)MS-MPI多机通信

1.关于MPI多机通信 一台计算机处理数据的能力是有限的,MPI的主要作用就是用来实现并行计算机,即将多台主机联机,实现大规模、高性能的计算机机群。我们知道一台计算机同时运行多个进程时,由于计算机资源是共享的,多个进程都会占用一些资源,每个进程运行的效率就会降低,比如当一台计算机同时跑着多个大型应用时会变得非常卡顿。所谓多机通信,可以理解为将本应该在同一台主机上运行的多个进程分配到多台主机上,以往...

xinwuya_的博客 4392

新能源充电桩充电枪口标准

建立的标准确保了新能源汽车充电的安全性、兼容性和效率,促进了新能源汽车产业的发展。

网络安全的研究者、新能源行业的追求者 4689

科研党必备:5个高效查找论文开源代码的宝藏网站(附实战技巧)

本文为科研工作者推荐5个高效查找论文开源代码的宝藏网站,包括ResearchCode和PapersWithCode等工具,提供实战技巧如进阶搜索语法和代码质量评估体系,帮助快速定位高质量实现并提升复现效率。特别分享隐藏代码库的检索方法和智能工作流配置,助力科研党高效完成论文复现。

weixin_28829629的博客 402

MATLAB实战:纯电动汽车动力性仿真从入门到精通(附完整代码)

本文提供了一份基于MATLAB的纯电动汽车动力性仿真从入门到精通的实战指南。通过理论建模与代码实战相结合,详细讲解了如何构建行驶阻力模型、驱动力平衡方程,并利用MATLAB脚本完整实现了最高车速、加速时间和最大爬坡度三大核心性能指标的仿真计算。文章附有完整代码,帮助工程师快速掌握纯电动汽车动力性仿真的核心技能,为设计与优化提供高效的数字工具。

weixin_29074409的博客 369

YOLOv12创新改进 | 全网独家创新篇、小目标检测改进 | AAAI 2025 | 引入HS-FPN中的HFP和SDP创新点,从频域增强小目标特征,淘汰FPN进行升级,助力YOLOv12有效涨点

本文提出了HS-FPN(高频和空间感知特征金字塔网络),通过HFP(高频感知)模块增强小目标特征,SDP(空间依赖感知)模块捕获像素间空间依赖关系。实验在AI-TOD等小目标数据集上验证了该方法的有效性,相比FPN显著提升检测性能。文章详细介绍了HS-FPN的网络结构、核心代码实现及在YOLOv12中的应用方法,并提供多种改进版本的yaml配置文件,为小目标检测任务提供了有效的解决方案。

Ai缝合怪、助力小伙伴高效发论文 338

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

上一篇: 混合高斯聚类的一种实现方法
下一篇: 从 PixelCNN 到 Gated PixelCNN,再到 Conditional Gated PixelCNN
田神
博客等级 码龄17年 217粉丝 33原创
评论 5
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值