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

news2024/9/22 1:19:11

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.coloradmin.cn/o/1367128.html

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

相关文章

科技云报道:“存算一体”是大模型AI芯片的破局关键?

科技云报道原创。 在AI发展历史上,曾有两次“圣杯时刻”。 第一次发生在2012年10月,卷积神经网络(CNN)算法凭借比人眼识别更低的错误率,打开了计算机视觉的应用盛世。 第二次是2016年3月,DeepMind研发的…

在anaconda中安装pytorch的GPU版本

本文前提: 1.你已经下载好了anaconda,最好是新建一个虚拟环境来安装pytorch的GPU版本,并且设置了国内镜像源; 2.了解自己电脑对应的cuda版本,可通过nvidia-smi,并下载好了cuda。 安装pytorch的GPU版本 到官网中https…

猫头虎分享已解决Bug || TypeError: Cannot read property ‘match‘ of undefined

博主猫头虎的技术世界 🌟 欢迎来到猫头虎的博客 — 探索技术的无限可能! 专栏链接: 🔗 精选专栏: 《面试题大全》 — 面试准备的宝典!《IDEA开发秘籍》 — 提升你的IDEA技能!《100天精通Golang》…

[足式机器人]Part2 Dr. CAN学习笔记 - Ch03 傅里叶级数与变换

本文仅供学习使用 本文参考: B站:DR_CAN Dr. CAN学习笔记-Ch03 傅里叶级数与变换 1. 三角函数的正交性2. 周期为 2 π 2\pi 2π的函数展开为傅里叶级数3. 周期为 2 L 2L 2L的函数展开4. 傅里叶级数的复数形式5. 从傅里叶级数推导傅里叶变换FT6. 总结 1. …

【野火i.MX6ULL开发板】利用microUSB线烧入Debian镜像

0、前言 烧入Debian镜像有两种方式:SD卡、USB SD卡:需要SD卡(不是所有型号都可以,建议去了解了解)、SD卡读卡器 USB:需要microUSB线 由于SD卡的网上资料很多了,又因为所需硬件(SD卡…

计算机配件杂谈-鼠标

目录 基础知识鼠标的发展鼠标的左右手鼠标的显示样式鼠标的移动和可见性移动可见性 现在的我们的生活工作都基本上离不开电脑了,不管是你平时玩玩游戏,上班工作等等; 今天将关于鼠标的一些小的技巧分享出来,共勉! 基础…

【MySQL】数据库之Redis的持久化

目录 一、Redis的高可用 1.1什么是高可用 1.2Redis的高可用技术 1.3持久化功能 1.4Redis持久化的方式 二、Redis的持久化之RDB 2.1RDB持久化的触发方式 触发条件 RDB持久化的触发分为手动触发和自动触发两种。 (1)手动触发 (2&…

UE5 使用动画模板创建多个动画蓝图

我们制作游戏的时候,角色会根据不同的武器表现出来不同的攻击动画,待机动画以及移动动画。如果我们在UE里面实现这个需求,是通过复制粘贴的方式修改,还是有更好的方式。 这里就需要介绍一下动画模板,我们可以将动画蓝图…

win11 如何切换用户?

第1步:打开其他用户 第2步:添加账户 第3步: 使用新用户登录

VSCode搭建 .netcore 开发环境

一、MacOS 笔者笔记本电脑上安装的是macOS High Sierra(10.13),想要尝试一下新版本的.netcore,之前系统是10.12时,.netcore 3.1刚出来时安装过3.1版本,很久没更新了,最近.net8出来了,想试一下,…

3DGS学习笔记(3D Gaussian Splatting)

3DGS学习笔记(3D Gaussian Splatting) 相关资料收集 理论推导与理解 剪月光者:《3D Gaussian Splatting for Real-Time Radiance Field Rendering》3D高斯的理论理解 Splating简介 bo233:Splatting 抛雪球法简介 论文讲解 …

Hive 的 安装与部署

目录 1 安装 MySql2 安装 Hive3 Hive 元数据配置到 MySql4 启动 Hive Hive 官网 1 安装 MySql 为什么需要安装 MySql? 原因在于Hive 默认使用的元数据库为 derby,开启 Hive 之后就会占用元数据库,且不与其他客户端共享数据,如果想多窗口操作…

C++常用库函数大小写转换

在我们在编写代码时大小写转换是基础知识,这篇博客将通过介绍C常用库函数来回顾和学习一种不一样的大小写转换 目录 一、islower/isupper函数二、tolower/toupper函数三、ASCLL码 一、islower/isupper函数 islower和isupper函数是C标准库中的字符分类函数&#xff…

[Kubernetes]5. k8s集群StatefulSet详解,以及数据持久化(SC PV PVC)

前面通过deployment结合service来部署无状态的应用,下面来讲解通过satefulSet结合service来部署有状态的应用 一.StatefulSet详解 1.有状态和无状态区别 无状态: 无状态(stateless)、牲畜(cattle)、无名(nameless)、可丢弃(disposable) 有状态: 有状态(stateful)、宠物(pet)…

万界星空科技低代码平台基本模块与优势

低代码平台(Low-Code Development Platform,LCDP)就是使用低代码的方式进行开发,能快速设置和部署的平台。低代码平台旨在简化应用开发过程,降低开发难度,缩短开发周期,并使非专业程序员&#x…

【日常记录】自动化部署与持续交付:GitHub Actions CICD

文章目录 1.背景2.具体流程2.1 在自己的项目2.2 设置GitHub token2.3 配置 workflows2.4 配置服务器SSH2.5 配置 repository secret2.6 服务器安装宝塔2.7 搭建网站 备注不知道怎么处理的一个错误 1.背景 当我们做项目的时候,如果做完了,要发布&#xff…

C#如何将本地文件上传至阿里云OSS中

要想将文件上传至OSS,那么阿里云的AccessKeyId和AccessKeySecret必不可少 一.去哪找AccessKeyId和AccessKeySecret 进入阿里云工作台,点击右上角头像,选择AccessKey管理,就能看到ID了 但是Secret目前阿里云不支持查看了&#xf…

DVWA-Hight-xss漏洞

首先来到DVWA高级模式下反射型xss漏洞处 开始测试 <script>alert(/xss/)</script> 发现直接使用js代码不行&#xff0c;被直接过滤稍微试探针对的过滤对象 发现这里针对 <script>标签会直接过滤 我们改用<img>标签试探是否过滤 发现这里针对img标签没…

ARM Cortex-Mx 权威指南笔记—SysTick定时器

前言 通过本次学习你可以学到&#xff1a; 1、什么是SysTick定时器&#xff1f; 2、Systick定时器的操作。 3、如何使用Systick定时器。 正文内容参考 ARM Cortex-Mx 权威指南笔记 9.5小节。 什么是Systick定时器 SysTick定时器是Cortex-M处理器内部集成的名为系统节拍定时…

【FPGA】分享一些FPGA数字信号处理相关的书籍

在做FPGA工程师的这些年&#xff0c;买过好多书&#xff0c;也看过好多书&#xff0c;分享一下。 后续会慢慢的补充书评。 【FPGA】分享一些FPGA入门学习的书籍【FPGA】分享一些FPGA协同MATLAB开发的书籍 【FPGA】分享一些FPGA视频图像处理相关的书籍 【FPGA】分享一些FPGA高速…