(2022|CVPR,非自回归,掩蔽图像生成,迭代译码)MaskGIT:掩蔽生成式图像 Transformer

MaskGIT: Masked Generative Image Transformer

公和众和号:EDPJ(进 Q 交流群:922230617 或加 VX:CV_EDPJ 进 V 交流群)

目录

0. 摘要

3. 方法

3.1 训练中的掩蔽视觉标记建模(Masked Visual Token Modeling,MVTM)

3.2 迭代解码

3.3 掩蔽设计

4. 实验


0. 摘要

生成式 Transformer 在计算机视觉社区中经历了迅速的流行增长,用于合成高保真度和高分辨率的图像。然而,迄今为止最好的生成式 Transformer 模型仍然将图像简单地视为一系列标记,并按照光栅扫描顺序(即逐行)顺序解码图像。我们发现这种策略既不是最优的,也不是高效的。本文提出了一种新颖的图像合成范式,使用双向 Transformer 解码器,我们称之为 MaskGIT。在训练期间,MaskGIT 通过关注所有方向上的标记来学习预测随机掩蔽的标记。在推理时,模型首先同时生成图像的所有标记,然后在先前生成的基础上迭代地细化图像。我们的实验证明,MaskGIT 在ImageNet 数据集上明显优于最先进的 Transformer 模型,并且将自回归解码加速了最多 64 倍。此外,我们阐明了 MaskGIT 可以轻松扩展到各种图像编辑任务,如修复、外插和图像操作。

3. 方法

3.1 训练中的掩蔽视觉标记建模(Masked Visual Token Modeling,MVTM)

让 Y = [y_i]^N_(i=1) 表示通过将图像输入 VQ 编码器获得的潜在标记,其中 N 是重新整形的标记矩阵的长度,而 M = [m_i]^N_(i=1) 是相应的二进制掩码。在训练期间,我们随机抽样一部分标记,并用特殊的 [MASK] 标记替换它们。如果 m_i = 1,则将标记 y_i 替换为 [MASK],否则,当 m_i = 0时,y_i 将保持不变。

采样过程由一个掩码调度函数 γ(r) ∈ (0,1] 参数化,执行如下: 首先,我们从 0 到 1 中抽样一个比率,然后在 Y 中均匀选择 γ(r)·N (向上取整) 个标记来放置掩码,其中 N 是长度。掩码调度显著影响图像生成的质量,将在 3.3 中讨论。 用 Y_(-M) 表示对 Y 应用 mask M 后的结果。训练目标是最小化被掩蔽标记的负对数似然: 

具体而言,我们将被掩蔽的 Y_(-M) 馈送到一个多层双向 transformer,以预测每个被掩蔽标记的概率

其中负对数似然被计算为基于地面真实 one-hot 标记和预测标记之间的交叉熵。注意与自回归建模的关键差异:MVTM 中的条件依赖有两个方向,允许图像生成利用通过关注图像中所有标记而获得的更丰富的上下文。

3.2 迭代解码

在自回归解码中,标记是基于先前生成的输出顺序生成的。这个过程是不可并行化的,因此对于图像来说非常慢,因为图像标记长度,例如 256 或 1024,通常比语言的长度大得多。我们引入了一种新颖的解码方法,其中图像中的所有标记都同时并行生成。可行性是因为 MTVM 的双向自注意力。

在理论上,我们的模型能够在一次传递中推断出所有标记并生成整个图像。我们发现这与训练任务的不一致性使其具有挑战性。在下面,介绍了提出的迭代解码。为了在推理时生成图像,我们从一个空白画布开始,所有标记都被掩蔽,即 Y^(0)_M。对于第 t 次迭代,我们的算法运行如下:

  • 预测。给定当前迭代的被掩蔽标记 Y^(t)_M,我们的模型同时预测了所有被掩蔽位置的概率,表示为 p^(t) ∈ R^(N x K)。
  • 采样。在每个被掩码位置 i,我们基于其在代码本中所有可能标记的预测概率 p^(t)_i ∈ R^K 进行标记抽样。在抽样到标记 y^(t)_i 后,其相应的预测分数被用作 “置信度” 分数,表示模型对该预测的信任程度。对于 Y^(t)_M 中的未被掩蔽的位置,我们简单地将其置信度分数设置为1.0。
  • 掩蔽调度。我们根据掩码调度函数通过 n = γ(r)·N (向上取整) 计算要掩蔽的标记数量,其中 N 是输入长度,T 是总迭代次数。
  • 掩蔽。我们通过在 Y^(t)_M 中掩蔽 n 个标记来获得 Y^(t+1)_M。 迭代 t+1 的掩码 M^(t+1) 是从以下计算的,其中 c_i 是第 i 个标记的置信度分数。

解码算法在 T 步中合成一幅图像。 在每次迭代中,模型同时预测所有标记,但仅保留最有信心的标记。其余的标记被掩蔽并在下一次迭代中重新预测。 掩蔽比例逐步减小,直到在 T 次迭代内生成所有标记。在实践中,掩蔽标记是通过温度退火(temperature annealing)随机抽样以鼓励更多的多样性,并且我们将在 4.4 中讨论其效果。图 2 说明了我们解码过程的示例。它在 T = 8 次迭代中生成一幅图像,每次迭代的未掩蔽标记在网格中突出显示,例如,当 t - 1 时,我们仅保留 1 个标记并掩蔽其余的标记。  

3.3 掩蔽设计

我们发现掩蔽设计显著影响图像生成的质量。我们通过掩蔽调度函数 γ(·) 对掩蔽过程进行建模,该函数计算给定潜在标记的掩蔽比例。如前所述,该函数在训练和推理中均被使用。在推理时,以解码进展 0/T, 1/T, ..., (T-1)/T 作为掩蔽比例。在训练中,我们在 [0, 1) 中随机采样一个比率 r 以模拟各种解码场景。

BERT 使用固定的掩蔽比例为 15% [11],即始终掩蔽 15% 的标记,这对于我们的任务是不适当的,因为我们的解码器需要从头生成图像。因此,需要新的掩蔽调度。在讨论具体方案之前,我们首先考察了掩蔽调度函数的性质。首先,对于 r ∈ [0, 1], γ(·) 需要是一个在 0 到 1 范围内的连续函数。其次,γ(·) 应该相对于 r (单调) 递减,并且满足 γ(·) → 1 和 γ(·) → 0。第二个属性确保了我们解码算法的收敛性。

这篇论文考虑了常见的函数并进行简单的转换,使其满足特定属性。图 8 可视化了这些函数,它们被分为三组:(注:国外凹凸的定义与国内相反)

  • 线性函数是一个直接的解决方案,每次掩蔽相同数量的标记。
  • 凹函数捕捉到图像生成遵循从少到多信息流的直觉。一开始,大多数标记都被掩蔽,因此模型只需要对其感到自信的少数正确预测。到最后,掩蔽比例急剧下降,迫使模型做出更多的正确预测。在这个过程中,有效信息在增加。凹函数家族包括余弦(cosine)、平方(square)、立方(cubic)和指数函数(exponential)。
  • 凸函数相反,实现了一个从多到少的过程。模型需要在最初的几次迭代中完成绝大多数标记。该家族包括平方根(square root)和对数函数(logarithmic)。

我们在 4.4 中以实证方法比较了上述的掩蔽调度函数,发现余弦函数在我们所有的实验中表现最佳。 

4. 实验

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

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

相关文章

Java课程设计个人博客

目录 引言:在此说明在本次课设过程中所遇到的困难! 一、项目搭建的问题 Q1:Web项目应用啥么编译器编写? Q2:如何创建Web项目(MAVEN)? Q3:Tomcat服务器开头控制台显示乱码如何解决? Q4:Tomcat服务器怎么设置项目的…

代码随想录算法训练营第三十天|总结、332.重新安排行程、51.N皇后、37.解数独

代码随想录 (programmercarl.com) 总结 332.重新安排行程 欧拉通路和欧拉回路: 欧拉通路:对于图G来说,如果存在一条通路包含G的所有边,则该通路称为欧拉通路,也称欧拉路径。欧拉回路:如果欧拉路径是一条…

了解什么是UV纹理?

在线工具推荐: 3D数字孪生场景编辑器 - GLTF/GLB材质纹理编辑器 - 3D模型在线转换 - Three.js AI自动纹理开发包 - YOLO 虚幻合成数据生成器 - 三维模型预览图生成器 - 3D模型语义搜索引擎 什么是UV? UV 是与几何图形的顶点信息相对应的二维纹理坐…

Spring见解 1.2 IOC

2.3.Spring的IOC解决程序耦合 2.3.1.创建工程 2.3.1.1.pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:sc…

人工智能图像生成的道德利弊

目录 一、我们应该关注人工智能图像吗&#xff1f;二、利用人工智能增强创造力的积极作用三、版权和剽窃问题四、对就业和劳动力动态的影响五、无意识的偏见和影响六、负责任地前行 人工智能&#xff08;AI&#xff09;发展迅速&#xff0c;尤其是近年来。据估计&#xff0c;超…

密码学:一文读懂非对称密码体制

文章目录 前言非对称密码体制的保密通信模型私钥加密-公钥解密的保密通信模型公钥加密-私钥解密的保密通信模型 复合式的非对称密码系统散列函数数字签名数字签名满足的三个基本要求先加密还是先签名&#xff1f;数字签名成为公钥基础设施以及许多网络安全机制的基础什么是单向…

js数组循环,当前循环完成后执行下次循环

前言 上图中&#xff0c;点击播放icon&#xff0c;图中左边地球视角会按照视角列表依次执行。u3D提供了api,但是我们如何保证在循环中依次执行。即第一次执行完成后&#xff0c;再走第二次循环。很多人的第一思路就是promise。对&#xff0c;不错&#xff0c;出发的思路是正确的…

新颖度爆表。网络药理学+PPI+分子对接+实验验证

今天给同学们分享一篇生信文章“The convergent application of metabolites from Avena sativa and gut microbiota to ameliorate non-alcoholic fatty liver disease: a network pharmacology study”&#xff0c;这篇文章发表在J Transl Med期刊上&#xff0c;影响因子为7.…

现阶段鸿蒙开发薪资高于传统开发岗位的30%~50%

近期&#xff0c;多家互联网公司发布了多个和鸿蒙系统有关的岗位。 11月10日&#xff0c;网易更新了高级/资深Android开发工程师岗位&#xff0c;职位要求参与云音乐多端多os的产品&#xff08;Android、鸿蒙等&#xff09;研发迭代。11月8日&#xff0c;美团发布了鸿蒙高级工…

Docker简述与基础部署详解

docker官网&#xff1a;https://www.docker.com docker中文库:https://www.docker.org.cn/ Docker是一种开源的容器化平台&#xff0c;用于轻松打包、交付和运行应用程序。Docker的主要优势在于它提供了一种轻量级、可移植、自包含的容器化技术&#xff0c;使得应用程序及其所…

一次因线程池使用不当造成生产事故OOM

美好的一天从bug结束 某日当我点开熟悉的界面&#xff0c;一个又一个请求失败的提示赫然出现在屏幕上&#xff0c;不会是昨晚上线的代码有问题吧&#xff1f; 吓得我急忙按F12查看了响应——"exception":"java.lang.OutOfMemoryError","message"…

过滤器和拦截器

上篇文章我们学习了 Session 认证和 Token 认证&#xff0c;这篇我们来学习一下过滤器和拦截器&#xff0c;过滤器和拦截器在日常项目中经常会用到。 一、过滤器 1.1、理论概念 过滤器 Filter 是 JavaWeb 三大组件&#xff08;Servlet、Filter、Listener&#xff09;之一&am…

react-native下载图片到本地相册

需求 点击右上角下载icon&#xff0c;可以将当前图片下载并保存到本地相册。 下载的图片&#xff1a; 流程 下载图片的本质其实是&#xff0c; 固定需要下载的页面内容和样式 》将其放在当前页面不可见区域 》点击下载按钮 》穿一个ref给native&#xff0c;会自动拉起手机系…

2024最新外贸建站:ChemiCloud主机购买使用及自建外贸独立站教程

随着电商平台竞争的加剧&#xff0c;许多外贸从业者意识到减少对平台依赖的重要性&#xff0c;并选择搭建自己的外贸独立站来获得更多的控制权和灵活性。即使是没有建站基础的新手&#xff0c;也可以通过学习建站来实现这一目标。下面是一个适用于新手的外贸建站教程&#xff0…

【Java】设计模式之保护性暂停

设计模式之保护性暂停 Guarded Suspension&#xff0c;这个设计模式&#xff0c;主要用在一个线程等待另一个线程的执行结果&#xff08;发请求等待响应&#xff09; 有一个结果需要从一个线程传递到另一个线程&#xff0c;传递只进行一次&#xff0c;用设计模式保护性暂停。 …

46 WAF绕过-信息收集之反爬虫延时代理池技术

目录 简要本章具体内容和安排缘由简要本课具体内容和讲课思路简要本课简要知识点和具体说明演示案例:Safedog-默认拦截机制分析绕过-未开CCSafedog-默认拦截机制分析绕过-开启CC总结&#xff1a; Aliyun_os-默认拦截机制分析绕过-简要界面BT(防火墙插件)-默认拦截机制分析绕过-…

小米汽车的占用网络是什么

大家好啊&#xff0c;我是董董灿。 昨天小米汽车开了发布会&#xff0c;一下子喜提十几个热搜。 就在人们纷纷猜测&#xff0c;小米汽车的定价会不会延续小米极致性价比风格时。 雷总的一句"电池成本都不下于十几万"&#xff0c;瞬间把人们对于小米汽车定价的幻想拉…

CMake入门教程【核心篇】静态库 (.a, .lib)

😈「CSDN主页」:传送门 😈「Bilibil首页」:传送门 😈「动动你的小手」:点赞👍收藏⭐️评论📝 文章目录 概述创建静态库添加静态库到你的项目完整代码示例实战使用技巧与注意事项总结与分析概述 静态库在C++开发中扮演着重要的角色。它们通常以.a(在Unix-like系统

新手练习项目 4:简易2048游戏的实现(C++)

名人说&#xff1a;莫听穿林打叶声&#xff0c;何妨吟啸且徐行。—— 苏轼《定风波莫听穿林打叶声》 Code_流苏(CSDN)&#xff08;一个喜欢古诗词和编程的Coder&#xff09; 目录 一、效果图二、代码&#xff08;带注释&#xff09;三、说明 一、效果图 二、代码&#xff08;带…

MYSQL篇--索引高频面试题

mysql索引 1什么是索引&#xff1f; 索引说白了就是一种数据结构&#xff0c;可以协助快速查询数据&#xff0c;以及更新数据库表中的数据&#xff0c;更通俗的来说索引其实就是目录&#xff0c;通过对数据建立索引形成目录&#xff0c;便于去查询数据&#xff0c;而mysql索引…
最新文章