【CVPR 2023】 All are Worth Words: A ViT Backbone for Diffusion Models

All are Worth Words: A ViT Backbone for Diffusion Models, CVPR 2023

论文:https://arxiv.org/abs/2209.12152

代码:https://github.com/baofff/U-ViT

解读:U-ViT: A ViT Backbone for Diffusion Models - 知乎 (zhihu.com)

All are Worth Words : A ViT Backbone for Diffusion Models_通街市密人有的博客-CSDN博客

摘要

文中首次使用U-Net建模score-based model (即diffusion model),后续DDPM ,ADM ,Imagen 等许多工作对U-Net进行了一系列改进。目前,绝大多数扩散概率模型的论文依然使用U-Net作为主干网络。

ViT在各种视觉任务中显示出了前景,而基于CNN的U-Net在扩散模型中仍然占主导地位。论文设计了一种简单通用的基于ViT的架构(命名为U-ViT),用于使用扩散模型生成图像。U-ViT的特征是将包括时间、条件和噪声图像块在内的所有输入视为令牌,并在浅层和深层之间使用长跳跃连接。本文在无条件和类条件图像生成以及文本到图像生成任务中评估U-ViT,其中U-ViT即使不优于类似大小的基于CNN的U-Net,也具有可比性。特别是,在生成模型的训练过程中,在没有访问大型外部数据集的方法中,具有U-ViT的潜在扩散模型在ImageNet 256×256上的类条件图像生成中实现了2.29的FID得分,在MS-COCO上的文本到图像生成中达到了5.48的FID得分。实验结果表明,对于基于扩散的图像建模,长跳跃连接是至关重要的,而基于CNN的U-Net中的下采样和上采样算子并不总是必要的。
 

U-ViT网络结构

网络结构 

U-ViT是图像生成中扩散模型的一个简单通用的主干,延续了ViT的方法,将带噪图片划分为多个patch之后,将时间t,条件c,和图像patch视作token输入到Transformer block,同时在网络浅层和深层之间引入long skip connection,可选地在输出之前添加一个3×3卷积块。

网络细节

对U-ViT中的关键因素进行了系统的实证研究。在CIFAR10[36]上进行消融,在10K生成的样本上每50K训练迭代评估FID得分,并确定默认实现细节。 

The way to combine the long skip branch

组合长跳跃分支的方法。直观上理解,扩散概率模型中的噪声预测网络是像素级别的预测任务,对low-level feature敏感,long skip connection为连接low-level feature提供了快捷方式,所以有助于网络的训练。 对于网络主分支的特征h_m \in R^{B,L,D}和来自long skip connection的特征 h_s \in R^{B,L,D} ,其中B为batch_size,L为token 数目,D为每一个token的长度。作者探究了以下5种融合 h_m,h_s 的方式。

long skip connection对于图像生成的FID分数是至关重要的。第(1)种方式最好。 

The way to feed the time into the network

将时间输入网络的方式。考虑了两种将t输入网络的方法。

(1) 将其视为令牌token,如图1所示。
(2) 将层归一化后的时间合并到transformer块中,类似于U-Net中使用的自适应组归一化。

将时间视为令牌的第一种方式比AdaLN表现得更好。

The way to add an extra convolutional block after the transformer

在transformer块之后添加额外卷积块的方法。考虑两种方法在transformer块之后添加额外的卷积块。

(1) 在线性投影后添加一个3×3卷积块,将标记嵌入映射到图像块,如图1所示。
(2) 在该线性投影之前添加一个3×3卷积块,该块需要首先将令牌嵌入的1D序列h \in R^{L*D}重新排列为形状为 H/P\times W/P\times D的2D特征,其中P是patch大小。
(3) 与丢弃额外卷积块的情况进行比较。

在线性投影后添加3×3卷积块的第一种方法的性能略好于其他两种选择。

Variants of the patch embedding

patch嵌入的变体。考虑了patch嵌入的两种变体。

(1) 原始patch嵌入采用线性投影,将patch映射到令牌嵌入。
(2)使用3×3卷积块的堆栈,然后是1×1卷积块,将图像映射到令牌嵌入。

原始的patch嵌入表现更好。

Variants of the position embedding

位置嵌入的变体。考虑位置嵌入的两种变体。

(1) 在原始ViT中提出的一维可学习位置嵌入,本文的默认设置。
(2) 二维正弦位置嵌入,它是通过级联位置(i,j)处的patch的i和j的正弦嵌入而获得的。

一维可学习位置嵌入表现更好。

深度、宽度和patch大小的影响

通过研究深度(即层数)、宽度(即隐藏层大小D)和patch大小对CIFAR10的影响,展示了U-ViT的缩放性。随着深度(即层数)从9增加到13,性能有所提高。尽管如此,UViT并没有像50K训练迭代中的17次那样从更大的深度中获益。类似地,将宽度(即隐藏层大小)从256增加到512可以提高性能,并且进一步增加到768不会带来增益;将patch大小从8减小到2提高了性能,并且进一步减小到1不会带来增益。请注意,要获得良好的性能,需要像2这样的小patch大小。假设这是因为扩散模型中的噪声预测任务是低级别的,需要小patch,不同于高级别的任务(例如分类)。由于使用小的patch大小对于高分辨率图像来说是昂贵的,首先将它们转换为低维潜在表示[54],并使用U-ViT对这些潜在表示进行建模。

实验

设置 

数据集。对于无条件学习,考虑包含50K训练图像的CIFAR10和包含162770张人脸训练图像的CelebA 64×64。对于类条件学习,考虑64×64、256×256和512×512分辨率的ImageNet[12],它包含来自1K个不同类的1281167个训练图像。对于文本到图像学习,我们考虑256×256分辨率的MS-COCO[40],其中包含82783个训练图像和40504个验证图像。每张图片都有5个图像标注。

高分辨率图像生成。对于256×256和512×512分辨率的图像,遵循潜在扩散模型(LDM)。首先使用Stable Diffusion2[54]提供的预训练图像自编码器,将它们分别转换为32×32和64×64分辨率的潜在表示。然后,使用所提出的U-ViT对这些潜在的表示进行建模。

文本到图像学习。在MS-COCO上,使用稳定扩散之后的CLIP文本编码器将离散文本转换为嵌入序列。然后将这些嵌入作为令牌序列馈送到U-ViT中。

训练。使用AdamW优化器,所有数据集的权重衰减为0.3。对大多数数据集使用2e-4的学习率,除ImageNet 64×64使用3e-4。在CIFAR10和CelebA 64×64上训练了500K次迭代,批量大小为128。在ImageNet 64×64和ImageNet 256×256上训练300K迭代,在ImageNet 512* 512上训练500K迭代,批量大小为1024。在batchsize=256的MS-COCO上训练1M次迭代。

U-ViT配置变体

无条件和类条件图像生成

将U-ViT与基于U-Net的先验扩散模型进行了比较。还与GenViT进行了比较,后者是一种较小的ViT,不使用长跳跃连接,并包含了标准化层之前的时间。如表1所示,U-ViT在无条件CIFAR10和CelebA 64×64上与U-Net相当,同时性能远优于GenViT。

表3进一步表明,在使用相同采样器的不同采样步骤下,U-ViT优于LDM。请注意,U-ViT也优于VQ-Diffusion,后者是一种离散扩散模型[1],采用transformer作为主干。

 在图4中,在ImageNet 256×256和ImageNet 512×512上提供了选定的样本,在其他数据集上提供了随机样本,这些样本具有良好的质量和清晰的语义。

MS-COCO上的文本到图像生成 

在标准基准数据集MS-COCO上评估了用于文本到图像生成的U-ViT。 

表4所示,U-ViT-S在生成模型的训练过程中,在不访问大型外部数据集的情况下,已经在方法中实现了最先进的FID。通过将层数从13层进一步增加到17层,U-ViT-S(Deep)甚至可以实现5.48的更好FID。 

图6显示了使用相同随机种子生成的U-Net和U-ViT样本,以进行公平比较。发现U-ViT生成了更多高质量的样本,同时语义与文本匹配得更好。例如,给定文本“棒球运动员向球挥动球棒”,U-Net既不会生成球棒也不会生成球。相比之下,我们的U-ViT-S生成的球具有更少的参数,而我们的U-ViT-S(Deep)进一步生成击球。我们假设这是因为文本和图像在U-ViT的每一层都有交互,这比只在跨越注意力层交互的U-Net更频繁。

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ELK 处理 SpringCloud 日志

在排查线上异常的过程中,查询日志总是必不可缺的一部分。现今大多采用的微服务架构,日志被分散在不同的机器上,使得日志的查询变得异常困难。工欲善其事,必先利其器。如果此时有一个统一的实时日志分析平台,那可谓是雪…

CAN 通信-底层

本文主要以rockchip的rk3568平台基础,介绍can 控制器、硬件电路和底层驱动。 rk3568 CAN 控制器 概览 CAN(控制器区域网络)总线是一种稳健的车载总线标准,它允许微控制器和设备在没有主机计算机的应用中相互通信。它是一个基于消息的协议,最初是为了在汽车中多路…

计算机毕业设计 it职业生涯规划系统的设计与实现 Javaweb项目 Java实战项目 前后端分离 文档报告 代码讲解 安装调试

🍊作者:计算机编程-吉哥 🍊简介:专业从事JavaWeb程序开发,微信小程序开发,定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事,生活就是快乐的。 🍊心愿:点…

validator库的使用详解

TOC 基本使用 前言 在做API开发时,需要对请求参数的校验,防止用户的恶意请求。例如日期格式,用户年龄,性别等必须是正常的值,不能随意设置。以前会使用大量的if判断参数的值是否符合规范,现在可以使用val…

串的基本操作(数据结构)

串的基本操作 #include <stdlib.h> #include <iostream> #include <stdio.h> #define MaxSize 255typedef struct{char ch[MaxSize];int length; }SString;//初始化 SString InitStr(SString &S){S.length0;return S; } //为了方便计算&#xff0c;串的…

ctfshow-web12(glob绕过)

打开链接&#xff0c;在网页源码里找到提示 要求以get请求方式给cmd传入参数 尝试直接调用系统命令&#xff0c;没有回显&#xff0c;可能被过滤了 测试phpinfo&#xff0c;回显成功&#xff0c;确实存在了代码执行 接下来我们尝试读取一下它存在的文件&#xff0c;这里主要介…

Factory-Method

Factory-Method 动机 在软件系统中&#xff0c;经常面临着创建对象的工作&#xff1b;由于需求的变化&#xff0c;需要创建的对象的具体类型经常变化。如何应对这种变化&#xff1f;如何绕过常规的对象创建方法(new)&#xff0c;提供一种“封装机制”来避免客户程序和这种“具…

Go 并发编程

并发编程 1.1 并发与并⾏ 并⾏与并发是两个不同的概念&#xff0c;普通解释&#xff1a; 并发&#xff1a;交替做不同事情的能⼒并⾏&#xff1a;同时做不同事情的能⼒ 如果站在程序员的⻆度去解释是这样的&#xff1a; 并发&#xff1a;不同的代码块交替执⾏并⾏&#xf…

蓝桥杯每日一题2023.10.11

子串分值和 - 蓝桥云课 (lanqiao.cn) 题目描述 题目分析 以下为50分方法&#xff08;暴力枚举&#xff09; 第一层循环枚举其长度&#xff0c;第二层循环枚举其左端点&#xff0c;k代表右端点&#xff0c;&#xff08;将每一种子串一一枚举出来&#xff09;算出从左端点到右…

新手教程!制作电子期刊的必备网站

随着数字时代的到来&#xff0c;电子期刊已经成为一种重要的阅读方式。无论是为了学习、工作还是娱乐&#xff0c;电子期刊都以其方便、快捷、多样化的特点&#xff0c;越来越受到人们的欢迎。 对于想要制作电子期刊的新手来说&#xff0c;首先需要找到一些专业的工具来制作电子…

JavaScript和Java的区别是什么?

目录 一、不同的公司开发的不同产品。 二、使用的方向不同 三、对象不同 四、HTML文档中采用的标识不同 五、语言类型不同 六、在浏览器中所执行的方式不同 七、代码格式不同 八、所采取的变量是不同 九、联编方式不一样 十、对图文操作方式不一样 很多初学者看到Jav…

Flink session集群运维

1、集群job manager挂了 kubectl describe pod session-deployment-only-84b8d674c7-ckl9w -n flink kubectl get pod -n flink -owide kubectl describe pod session-deployment-only-84b8d674c7-ms758 -n flink 两个job manager都挂了 准备重新部署集群 删除操作(删除fli…