Scalable diffusion models with transformers

news2024/10/7 18:29:44

扩散模型之DiT:纯Transformer架构 - 知乎扩散模型大部分是采用 UNet架构来进行建模,UNet可以实现输出和输入一样维度,所以天然适合扩散模型。扩散模型使用的UNet除了包含基于残差的卷积模块,同时也往往采用self-attention。自从ViT之后,transformer架…icon-default.png?t=N7T8https://zhuanlan.zhihu.com/p/6410131571.introduction

基于transformer架构在扩散模型上的scalability的能力,展示了通过在VAE的潜空间中训练扩散模型的LDM的框架下构建和评估DiT,利用transformer替换UNet,其中最大的模型DiT-XL/2在ImageNet 256x256的类别条件生成达到了2.27FID。

2.Diffusion transformers

2.1 Preliminaries

在介绍DiT模型架构之前,我们先来看一下DiT所采用的扩散模型。 首先,DiT并没有采用常规的pixel diffusion,而是采用了latent diffusion架构,这也是Stable Diffusion所采用的架构。latent diffusion采用一个autoencoder来将图像压缩为低维度的latent,扩散模型用来生成latent,然后再采用autoencoder来重建出图像。DiT采用的autoencoder是SD所使用的KL-f8,对于256x256x3的图像,其压缩得到的latent大小为32x32x4,这就降低了扩散模型的计算量(后面我们会看到这将减少transformer的token数量)。另外,这里扩散过程的nosie scheduler采用简单的linear scheduler(timesteps=1000,beta_start=0.0001,beta_end=0.02),这个和SD是不同的。 其次,DiT所使用的扩散模型沿用了OpenAI的Improved DDPM,相比原始DDPM一个重要的变化是不再采用固定的方差,而是采用网络来预测方差。在DDPM中,生成过程的分布采用一个参数化的高斯分布来建模:

2.2 Diffusion Transformer design space

DiTs是新的扩散模型架构,重点是对图像的DDPM进行训练(图像的空间表示),DiT基于ViT架构。首先是一个patch embedding来将输入进行patch化,得到一系列的tokens,其中patch size属于一个超参数,直接决定了tokens的数量,影响模型的计算量。DiT的patch size有3种设置:2,4,8。token之后还要加上positional embeddings,采用非学习的sin-cos位置编码。将输入token化之后,可以像ViT一样接入transformer blocks,但是对于扩散模型,还需要在网络嵌入额外的条件信息,无论是timesteps还是类别标签,都可以采用一个embedding来进行编码,这和sd有所不同,DiT设计了四种方案来实现额外的另个embedding的嵌入:

1.In-context conditioning:将两个embeddings看成两个tokens合并在输入的tokens中,这种处理方式有点类似ViT中的cls token,实现起来比较简单,也不基本上不额外引入计算量。

2.Cross-attention block:将两个embeddings拼接成一个数量为2的序列,然后在transformer block中插入一个cross attention,条件embeddings作为cross attention的key和value;这种方式也是目前文生图模型所采用的方式,它需要额外引入15%的Gflops。

3.Adaptive layer norm(adaLN) block:采用adaLN,这里是将time embedding和class embedding相加,然后来回归scale和shift两个参数,这种方式也基本不增加计算量。

4.adaLN-Zero block:采用zero初始化的adaLN,这里是将adaLN的linear层参数初始化为zero,这样网络初始化时transformer block的残差模块就是一个identity函数;另外一点是,这里除了在LN之后回归scale和shift,还在每个残差模块结束之前回归一个scale。

上面四种嵌入,adaLN-Zero最好,DiT默认这种方式来嵌入条件embedding。DiT发现adaLN-Zero最好,但是这种方式只适合这种只有类别信息的简单条件嵌入,只需要引入一个class embedding,但对于文生图来说,条件往往是序列化的text embeddings,因此采用cross-attention通常是更合适的方式。

由于对输入进行了token化,所以在网络的最后还需要一个decoder来恢复输入的原始维度,DiT采用一个简单的linear层来实现,直接将每个token映射为pxpx2C的tensor,然后再进行reshape来得到和原始输入空间维度一样的输出,但是特征维度大小是原来的2倍,分别用来预测噪音和方差。

注意这里先进行LayerNorm,同时也引入了zero adaLN,并且decoder的linear层也采用zero初始化。 仿照ViT,DiT也设计了4种不同规模的模型,分别是DiT-S、DiT-B、DiT-L和DiT-XL,其中最大的模型DiT-XL参数量为675M,计算量Gflops为29.1(256x256图像,patch size=4时)。四个模型的具体配置如下所示:

论文重点探究了不同规模的DiT的性能,即模型的scalability能力,不同模型的性能对比如下所示:

在具体性能上,最大的模型DiT-XL/2采用classifier free guidance可以在class-conditional image generation on ImageNet 256×256任务上实现当时的sota。

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

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

相关文章

OpenAI首席科学家:ChatGPT已经出现意识,人类未来将与AI融合

OpenAI首席科学家在最近的专访中抛出了很多惊人言论。在他看来,ChatGPT背后的神经网络已经产生了意识,而且未来人类会与人工智能融合起来,出现新的形态。而他现在工作的重点,已经不是去创建那个必然会出现的通用人工智能&#xff…

webgoat-Request Forgeries 请求伪造

(A8:2013) Request Forgeries Cross-Site Request Forgeries 跨站请求伪造,又称一键攻击或会话骑乘,简称CSRF (有时发音为 sea-surf)或 XSRF,是一种恶意利用网站,其中传输未经授权的命令 来自网站信任的用…

WebDAV之π-Disk派盘 + Keepass2Android

推荐一款密码管理器,允许人们使用复杂的组合进行登录,而不必记住所有的组合。 Keepass2Android可以支持大多数安卓互联网浏览器, Android设备上同步软件,还支持通过WebDAV添加葫芦儿派盘。 Keepass2Android 目前安全方面最大的问题之一是大多数人几乎在任何地方都使用通用…

第一百六十六回 如何创建以图片为背景的页面

文章目录 1. 概念介绍2. 实现方法2.1 整体思路2.2 具体步骤 3. 示例代码4. 内容总结 我们在上一章回中介绍了WheelChoose组件相关的内容,本章回中将介绍如何创建以图片为背景的页面,闲话休提,让我们一起Talk Flutter吧。 1. 概念介绍 在实际…

SQL注入漏洞及五大手法

SQL注入漏洞 文章目录 SQL注入漏洞万能用户名 SQL注入分类两大基本类型五大手法提交参数方式注入点的位置 注入点判断SQL注入的危害sql漏洞挖掘Mysql库中的注释 SQL注入基本手法联合查询条件 报错注入group byextractvalueupdataxml 布尔盲注延时注入 案例获取cms网站后台管理员…

k8s 目录和文件挂载

k8s生产中常用的volumes挂载方式有:hostPath、pv,pvc、nfs 1.hostPath挂载 hostPath是将主机节点文件系统上的文件或目录挂载到Pod 中,同时pod中的目录或者文件也会实时存在宿主机上,如果pod删除,hostpath中的文…

字符函数和字符串函数详解

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 目录 前言 1. 字符分类函数 2. 字符转换函数 3. strlen的使用和模拟实现 3.1strlen的使用: 3.2strlen的模拟实现: 4. strcpy的使用和模拟实现 4.1strc…

YOLOv8-Cls推理详解及部署实现

目录 前言一、YOLOv8-Cls推理(Python)1. YOLOv8-Cls预测2. YOLOv8-Cls预处理3. YOLOv8-Cls推理 二、YOLOv8-Cls推理(C)1. ONNX导出2. YOLOv8-Cls预处理3. YOLOv8-Cls推理 三、YOLOv8-Cls部署1. 源码下载2. 环境配置2.1 配置CMakeLists.txt2.2 配置Makefile 3. ONNX导出4. 源码修…

网络安全深入学习第八课——代理与端口转发

文章目录 一、什么是代理二、正向代理三、反向代理四、正向和反向代理模拟复现 一、什么是代理 代理服务器英文全称是Proxy Server,其功能就是代理网络用户去取得网络信息。 形象的说:它是网络信息的中转站。在一般情况下,我们使用网络浏览…

​软考-高级-信息系统项目管理师教程 第四版【第20章-高级项目管理-思维导图】​

软考-高级-信息系统项目管理师教程 第四版【第20章-高级项目管理-思维导图】 课本里章节里所有蓝色字体的思维导图

解决 win11 vmware 中centos 网络不能访问外网

解决 win11 vmware 中centos 网络不能访问外网 1、进入win11 高级设置,找到centos 虚拟机使用的网卡 2、看网卡的其他属性 3、按照红圈部分,配置成一样的就行 4、进入到虚拟机配置中,配置成如图一样的NAT模式 5、再进入编辑 -》虚拟网络编辑…

30道高频Vue面试题快问快答

面试中的快问快答 快问快答的情景在面试中非常常见。 在面试过程中,面试官通常会使用快问快答的方式来快速评估面试者的基础知识、思维能力和反应速度。 这种情景下,面试官会提出一系列简短的问题,并期望面试者能够迅速做出回答或提供简洁明…

仿真实现lio_sam建图和ndt_matching定位

文章目录 一、仿真环境二、lio_sam建图1.修改配置文件2.开始建图 三、ndt_matching定位1.新建启动文件2.启动 总结 一、仿真环境 使用现有开源的仿真环境—从零开始搭建一台ROS开源迷你无人车,作者已经配置好小车模型以及gazebo环境,imu频率已改为200HZ…

Leetcode—2586.统计范围内的元音字符串数【简单】

2023每日刷题&#xff08;二十二&#xff09; Leetcode—2586.统计范围内的元音字符串数 实现代码 class Solution { public:int vowelStrings(vector<string>& words, int left, int right) {int ans 0;for(int i left; i < right; i) {string s words[i];i…

原子化 CSS 真能减少体积么?

前言 最近看到这样一篇文章&#xff1a;《要喷也得先做做功课吧&#xff1f;驳Tailwind不好论》 个人觉得说的还是有一定道理的&#xff0c;就是该作者的语气态度可能稍微冲了点&#xff1a; 不过他说的确实有道理&#xff0c;如果这种原子化工具真的如评论区里那帮人说的那么…

苹果手机的警示!电子产品无线升级=救命的机会

大家日常使用手机都知道&#xff0c;手机系统和软件三天两头就收到更新提醒。 只要用户手机联网&#xff0c;就可以想更新就更新&#xff0c;觉得原本使用顺手也可以不更新。 可各大厂商的初衷是好的&#xff0c;希望改善系统的一些bug问题&#xff0c;也会给我们带来一些全新功…

强化学习中的基本术语

0.引言 本篇文章主要介绍强化学习中最基本的术语&#xff08;不包含具体算法&#xff09;&#xff0c;主要提供给刚入门强化学习的朋友们&#xff0c;让大家快速掌握一些基本术语&#xff0c;之后对看强化学习算法内容有着更好地理解。 1.基本术语 1.1.state 中文称为“状态…

基于ssm企业人事管理系统

功能如图所示 摘要 基于SSM&#xff08;Spring SpringMVC MyBatis&#xff09;框架的企业人事管理系统是一种高效、可定制化的人力资源管理解决方案。该系统整合了现代企业的人力资源需求&#xff0c;提供了一套功能丰富的工具&#xff0c;用于管理员工信息、薪资、考勤、招聘…

C语言--typedef的使用

前言 在C语言中使用结构体时必须加上struct这个关键字,那有没有办法省略这个呢?要想达到这个目的就 需要用到关键字typedef,顾名思义”类型定义”。 typedef 数据类型 新的别名; 它是用来操作数据类型。其主要作用有两个: 1.给一个较长较复杂的类型取一个简单的别名。 2.给类…

python 之字典的相关知识

文章目录 字典的基本特点&#xff1a;1. 定义2. 键唯一性3. 可变性4. 键的类型 基本操作&#xff1a;字典的创建1. 花括号 {}2. dict() 构造函数3. 键值对的 dict() 构造函数使用 zip() 函数创建字典&#xff1a;注意事项访问字典中的值修改和添加键值对删除键值对 字典方法&am…