Diffusion Transformer(DiT)——将扩散过程中的U-Net换成ViT:近频繁用于视频生成与机器人动作预测(含清华PAD详解)
前言
本文最开始属于此文《视频生成Sora的全面解析:从AI绘画、ViT到ViViT、TECO、DiT、VDT、NaViT等》
但考虑到DiT除了广泛应用于视频生成领域中,在机器人动作预测也被运用的越来越多,加之DiT确实是一个比较大的创新,影响力大,故独立成本文
第一部分 Diffusion Transformer(DiT):将扩散过程中的U-Net 换成ViT
1.1 什么是DiT
1.1.1 DiT:在VAE框架之下扩散去噪中的卷积架构换成Transformer架构
在ViT之前,图像领域基本是CNN的天下,包括扩散过程中的噪声估计器所用的U-net也是卷积架构,但随着ViT的横空出世,人们自然而然开始考虑这个噪声估计器可否用Transformer架构来代替
2022年12月,William Peebles(当时在UC Berkeley,Peebles在𝕏上用昵称Bill,在Linkedin上及论文署名时用大名William)、Saining Xie(当时在纽约大学)的两人通过论文《Scalable Diffusion Models with Transformers》提出了一种叫 DiT 的神经网络结构
- 其结合了视觉 transformer 和 diffusion 模型的优点,即DiT = DDPM + ViT
- 但它把DPPM中的卷积架构U-Net换成了Transformer架构(We train latent diffusion models of images, replacing the commonly-used U-Net backbone with a transformer that operates on latent patche,至于什么是U-Net,请参见此文的2.1节)
1.1.2 Diffusion Transformer(DiT)的3个不同的条件策略
如下图所示,便是扩散transformer(DiT)的架构
- 左侧:训练条件潜在DiT模型(conditional latent DiT models), 潜在输入被分解成patch并通过几个DiT blocks处理(The input latent is decomposed into patches and processed by several DiT blocks)
本质就是噪声图片减掉预测的噪声以实现逐步复原比如当输入是一张256x256x3的图片,对图片做切patch后经过投影得到每个patch的token,得到32x32x4的Noised Latent(即加噪的图片,在推理时输入直接是32x32x4的噪声),结合当前的Timestep t、Label y作为输入
经过N个Dit Block(基于transformer)通过mlp进行输出,从而得到噪声“Noise预测”以及对应的协方差矩阵
(After the final DiT block, we need to decode our sequence of image tokens into an output noise prediction and an output diagonal covariance prediction),最后经过T个step采样,得到32x32x4的降噪后的latent
- 右侧:DiT blocks的细节,作者试验了标准transformer块的变体,这些变体通过自适应层归一化、交叉注意和额外输入token来加入条件(incorporate conditioning via adaptive layer norm, cross-attention and extra input tokens,这个coditioning相当于就是带条件的去噪),其中自适应层归一化效果最好
接下来,仔细介绍下上图右侧4个不同的条件策略(说白了,就是怎么加入conditioning)
- 自适应层归一化,即Adaptive layer norm (adaLN) block
鉴于自适应归一化层在GANs和具有U-Net骨干的扩散模型中的广泛使用,故用自适应层归一化(adaLN)替换transformer块中的标准层归一化层
不是直接学习维度方向的缩放和偏移参数和
,而是从
和类别标签
的嵌入向量之和中回归它们
Rather than directly learn dimension-wise scale and shift parameters γ and β, we regress them from the sum of the embedding vectors of t and c - adaLN-Zero block
关于ResNets的先前工作发现,将每个残差块初始化为恒等函数是有益的。例如,Goyal等人发现,在每个块中将最终批量归一化尺度因子 γ零初始化可以加速大规模训练在监督学习设置中[13]
扩散U-Net模型使用类似的初始化策略,在任何残差连接之前将每个块的最终卷积层零初始化。 作者对adaLN DiT块的修改,它做了同样的事情。 除了回归 γ和 β,还回归在DiT块内的任何残差连接之前立即应用的维度方向的缩放参数 α - 交叉注意力块
将t和c的嵌入连接成一个长度为二的序列,与图像token序列分开,transformer块被修改为:在多头自注意块之后,包含一个额外的多头交叉注意层,类似于LDM用于根据类标签进行条件处理的设计。 交叉注意力使模型增加了最多的Gflops,大约增加了15%的开销 - 上下文条件化(In-context conditionin)
将和
的向量嵌入作为两个额外的token追加到输入序列中,与图像token无异地对待它们,这类似于ViTs中的 cls token,它允许我们使用标准ViT块而无需修改。 在最后一个块之后,从序列中移除条件token。 这种方法没有新增模型多少Gflops,可忽略
1.2 DiT在视频生成领域中的应用
1.2.1 如何改造DiT,以使其可以做视频生成
当然,DiT只是用于做图像生成,如果基于其做视频生成,则需要在DiTs上做两项改造:
- 首先,需要设计一定的模型结构,用来支持不同长宽比和分辨率的视频
以保证Transformer在做Local Spatial Attention的时候,属于某帧图片的Patch只能相互之间看到自己这帧图片内的其它Patch,但不能看到其它帧图片的内容
好在根据此篇论文《Efficient Sequence Packing without Cross-contamination: Accelerating Large Language Models without Impacting Performance》可知,我们可采用“0/1 Attention Mask矩阵”来达成目标,即假设Batch内序列最大长度是8,就可以设置一个 8∗8 的0/1 Attention Mask,只有对角线正方形子Block位置全是1,其它地方都设置成0
上图左侧标为绿色的某帧三个Patch,如果看矩阵前三行,易看出,针对其它帧的Attention Mask由于都是0,所以加上Mask后就看不到其它图片(比如橙色、紫色的帧),而对于它(三个绿色patch)对应的 3∗3 都是1的Attention Mask,又可以保证三个Patch相互都能看到
如此,通过设置Attention Mask,就可以很方便地支持NaVIT导致的每帧不同分辨率和长宽比的问题 - 第二,需要把图片生成模型改成视频生成模型,本质就是加上一个时间的维度
具体而言,需要加入一个Casual Time Attention子模块
Causal Time Attention模块的作用是在生成第帧的时候,收集历史Time信息,也就是通过Attention让第
帧看到之前的比如
帧内容,这是用来维护生成视频的时间一致性的
- 最终,可以得到类似下文即将介绍的VDT的一个结构,如下图所示(图源:张俊林)
首先,把噪音Patch线性化后,并入Text Prompt Condition和Time Step Condition,一起作为Transformer的输入
其次,Transformer内部由三个子模块构成:Local Spatial Attention模块负责收集视频帧空间信息
Causal Time Attention模块负责收集历史时间信息
MLP模块负责对时间和空间信息通过非线性进行融合
1.2.2 DiT在视频生成中的典型应用:Cogvideo
// 待更
1.3 相关工作
1.3.1 比DiT更早之类似架构U-ViT:虽也带文本条件融合,但和DiT都只局限在2D图像生成
对于扩散过程中噪声估计器的选择,国外的研究者很自然的想到了用Transformer代替U-net,那国内就没人想到么?
其实早在2022年9月,清华朱军团队(背后关联的公司为生数科技,后于24年3月上旬拿到一笔数亿元的融资)就发布了一篇名为《All are Worth Words: A ViT Backbone for Diffusion Models》的论文(其一作为Fan Bao,比 DiT早提出两个多月,后被 CVPR 2023 收录),这篇论文提出了用「基于Transformer的架构U-ViT」替代基于卷积架构的U-Net
- U-ViT参数化了噪声预测网络
,它接受时间
、条件
、噪声图像
作为输入,然后预测注入到
中的噪声。按照ViT的设计方法,图像被分割成patch,并且U-ViT将所有输入(包括时间、条件和图像patch)都视为token
- 受到基于CNN的U-Net在扩散模型中的成功启发,U-ViT采用了类似的浅层和深层之间的长跳跃连接(Inspired by the success of the CNN-based U-Net in diffusion models [65], U-ViT also employs similar long skip connections between shallow and deep layers)
意思是说,的目标是像素级预测任务,对低级特征敏感。 长跳跃连接为低级特征提供了捷径,因此有助于噪声预测网络的训练
Intuitively,the objective in Eq. (1) is a pixel-level prediction task and is sensitive to low-level features. The long skip connections provide shortcuts for the low-level features and therefore ease the training of the noise prediction network - U-ViT在输出之前可选地添加一个3×3的卷积块。 这旨在防止transformer生成的图像中出现潜在的伪影(potential artifacts in images)
对比来看,两项工作在架构路线上完全一致
- 均是提出了将 Transformer 与扩散模型融合的思路
- 并且在具体的实验路径上也一致,比如采用了相同的 patch embedding、patch size;都得出了同样的结论 ——patch size 为 2*2 是最理想的
- 在模型参数量上,两者都在 50M-500M 左右的参数量上做了实验,最终都证实了 scale 特性
不过 DiT 仅在 ImageNet 上做了实验,U-ViT 在小数据集(CIFAR10、CelebA)、ImageNet、图文数据集 MSCOCO 上均做了实验。此外,相比传统的 Transformer,U-ViT 提出了一项「长连接」的技术,大大提升了训练收敛速度
1.3.2 比DiT更晚之又一个U-ViT的工作:Google Research提出Simple Diffusion
Google Research下的Brain Team,即Emiel Hoogeboom等人在2023年1月份发布的这篇论文《Simple diffusion: End-to-end diffusion for high resolution images》中,也提出了类似U-ViT的架构
如下图所示,本质上,在较低的层次,卷积层被具有自注意力的MLP块(即transformer)所取代,且通过残差连接连接起来,只有较高层次的ResBlocks使用跳跃连接(the convolutional layers are replaced by MLP blocks on levels with self-attention. These now form transformer blocks which are connected via residual connections, only the ResBlocks on higher levels use skip connections)
他们指出
- 对于加噪,应根据图像的大小进行调整,随着分辨率的增加,添加更多的噪声
- 仅将U-Net架构缩放到16×16的分辨率即可改善性能。进一步地,也同样提出了U-ViT架构,它是具有Transformer骨干的U-Net
本质上,这个U-Vision Transformer(U-ViT)架构可以看作是一个小型卷积U-Net,通过多个级别的下采样到达16 × 16的分辨率,然后经过一个大型Transformer之后,最后通过卷积U-Net进行上采样 - 为了提高性能,应添加Dropout,但不要在最高分辨率的特征图上添加
- 对于更高的分辨率,可以进行下采样而不会降低性能。最重要的是,这些结果仅使用单个模型和端到端的训练设置获得。在使用现有的蒸馏技术后,这些技术现在只需应用于单个阶段,模型可以在0.4秒内生成一张图像
1.3.3(选读) 24年11月:北大&华为提出扩散架构U-DiT(六分之一算力即可超越DiT)
Sora 的发布让广大研究者及开发者深刻认识到基于 Transformer 架构扩散模型的巨大潜力。作为这一类的代表性工作,DiT 模型抛弃了传统的 U-Net 扩散架构,转而使用直筒型去噪模型
- 鉴于直筒型 DiT 在隐空间生成任务上效果出众,后续的一些工作如 PixArt、SD3 等等也都不约而同地使用了直筒型架构
- 然而令人感到不解的是,U-Net 结构是之前最常用的扩散架构,在图像空间和隐空间的生成效果均表现不俗;可以说 U-Net 的 inductive bias 在扩散任务上已被广泛证实是有效的
因此,北大和华为的研究者们产生了一个疑问:能否重新拾起 U-Net,将 U-Net 架构和 Transformer 有机结合,使扩散模型效果更上一层楼?带着这个问题,他们提出了基于 U-Net 的 DiT 架构 U-DiT,对应的论文为《U-DiTs: Downsample Tokens in U-Shaped Diffusion Transformers》
如下图所示,左图即为DiT的原始架构(相当于DDPM + ViT的直筒型扩散架构)、中图相当于U-net版的DiT:具有Transformer骨干的U型扩散架构、右图则是本次最新的工作U-DiT
- 首先,研究者开展了一个小实验,在实验中尝试着将 U-Net 和 DiT 模块简单结合(如上图中部)——具有Transformer骨干的U型扩散架构
然而,在相似的算力比较下,U-Net 的 DiT(DiT-UNet)仅仅比原始的 DiT 有略微的提升 - 根据先前的工作,在扩散中 U-Net 的主干结构特征图主要为低频信号。由于全局自注意力运算机制需要消耗大量算力,在 U-Net 的主干自注意力架构中可能存在冗余
这时作者注意到,简单的下采样可以自然地滤除噪声较多的高频,强调信息充沛的低频。既然如此,是否可以通过下采样来消除对特征图自注意力中的冗余? - 由此,作者提出了下采样自注意力机制,在自注意力之前
首先,需将特征图进行 2 倍下采样。为避免重要信息的损失,生成了四个维度完全相同的下采样图,以确保下采样前后的特征总维度相同
随后,在四个特征图上使用共用的 Q、K、V 映射,并分别独立进行自注意力运算
最后,将四个 2 倍下采样的特征图重新融为一个完整特征图。和传统的全局自注意力相比,下采样自注意力可以使得自注意力所需算力降低 3/4
// 待更
第二部分 DiT在机器人动作预测中的典型应用:清华RDT、CogACT、PAD
2.1 预测与动作扩散器PAD:通过联合去噪同时预测未来图像和动作
2.1.1 什么是PAD
首先,DiT作为机器人的动作预测模型已经不是新鲜事了
- 如此文《RDT——清华开源的双臂机器人扩散大模型(基于DiT改造而成):先预训练后微调,支持语言、图像、动作多种输入》所述,RDT所用的扩大大模型架构便是基于DiT改造
- 且再如此文《视觉语言动作模型VLA的持续升级:从π0之参考基线Octo、OpenVLA到CogACT、TinyVLA》的第四部分所述,CogACT是VLM作为认知基础,DiT作为动作模块
而除了RDT、CogACT之外,24年11月,来自1清华大学IIIS、2上海启智研究院、3上海人工智能实验室、4加州大学伯克利分校的研究者 提出了:预测与动作扩散器PAD——作为一个统一的策略学习框架,该框架在Diffusion Transformer(DiT)架构下整合了预测和动作[20-即DiT,Scalable diffusion models with transformers]
- 其对应的论文为:Prediction with Action: Visual Policy Learning via Joint Denoising Process
- 其对应的作者为:郭延江12∗, 胡宇成13∗, 张建科1, 王彦仁14, 陈晓宇12, 陆超超3†, 陈剑宇12†
具体而言,如下图
- DDPM是根据加噪的图像做去噪生成清晰的图像,如上图图2(a)所示
- diffusion policy是根据观察图像和机器人本体状态去去噪预测机器人未来状态,如上图图2(b)所示
- 而PAD则是利用Diffusion Transformer(DiT)模型无缝合并所有模态输入,并通过联合去噪同时预测未来图像和动作,如上图图2(c)所示
此外,灵活的DiT骨干网络还允许PAD在大规模视频数据上进行联合训练,并扩展到其他机器人模态,如深度图像
2.1.2 提出背景与相关工作
最近,扩散模型[4–6,涉及DDPM、DDIM、inproved DDPM,关于这几个的模型的介绍,详见此文《图像生成发展起源:从VAE、扩散模型DDPM、DDIM到DETR、ViT、Swin transformer》]通过在大规模网络图像和视频数据集上进行训练,在视觉生成任务中取得了令人瞩目的成功[7–9,涉及Imagenet、Bridgedata v2等]
- 例如,图像编辑模型可以根据用户指令预测结果[10–12,涉及DALLE 2、ControlNet],而视频生成模型可以生成未来图像序列[13–15,涉及Imagen video、Cogvideo、Latte],这代表了对物理世界的良好理解
- 另一方面,扩散模型在机器人控制任务中也显示出有效性,通过在机器人观察条件下对动作去噪,这被称为扩散策略[16-Diffusion policy,详见此文《Diffusion Policy——斯坦福UMI所用的动作预测算法:基于扩散模型的扩散策略(从原理到其编码实现)》]
虽然扩散生成模型和扩散策略在两个领域中发挥着不同的功能,但作者相信图像预测的能力可以显著增强机器人策略学习,因为它们共享相同的基本物理法则
- 之前的工作[17–19,涉及Learning universal policies via text-guided video generation、Zero-shot robotic manipulation with pretrained image-editing diffusion models、Compositional foundation models for hierarchical planning]以现成的方式使用图像编辑模型,首先合成目标图像,然后学习目标条件策略
- 然而,这种两阶段的方法将预测和动作学习过程分离,忽视了预测和动作之间更深层的联系。这样一来,动作并没有利用预测模型中预训练的表示,这些模型编码了关于物理世界的丰富知识
故第一方面相关的工作是,针对用于具身控制的预训练,具身控制的视觉-语言预训练模型,编码了物理知识,可以从多个方面增强具身控制。首先,预训练模型可以直接作为策略,通过生成高层次计划 [37–41,涉及Do as i can, not
as i say: Grounding language in robotic affordances、Code as policies: Language model programs for embodied control] 或产生直接的低层次
比如电机控制信号[30,33,42–44]。许多研究利用预训练的大型语言模型(LLMs)和视觉语言模型(VLMs)的推理能力来创建高层次的计划,然后是运动原语
此外,一些方法通过添加动作头来调整预训练模型以发出低层次的电机控制信号
除了直接作为策略使用之外,预训练模型还可以从多个方面指导策略学习,例如提供良好的表示[45–47,涉及R3m等]、提供奖励信号[48–50,涉及 Eureka: Human-level reward design
via coding large language models]、合成目标图像[18- Zero-shot robotic manipulation with pretrained image-editing diffusion models, 51],以及预测未来序列[17-Learning universal policies via text-guided video generation]
第二方面相关的工作是:用于具身控制的扩散模型。最近,扩散模型已被采用来解决具身控制中的挑战。一部分研究集中于训练条件扩散模型,以在低维状态输入设置下,根据所需的奖励和约束引导行为合成[52–55]
Diffusion Policy[16]训练了一种基于RGB观测的视觉-运动策略,并且可以更好地表达多模态动作分布。然而,这些方法从头开始开发任务特定的策略,错过了利用互联网数据进行预训练的好处
另一部分研究利用大规模预训练的扩散模型对训练数据进行数据增强,例如GenAug[56]、ROSIE[57]和CACTI[58]
第三方面相关的工作是:Policy学习的未来预测
- 比如也有一些工作利用未来图像预测来辅助Policy学习。GR-1[36] 使用自回归transformer顺序预测未来图像和动作
相比之下,本节的PAD采用联合扩散架构,预测更准确的未来图像,可能导致改进的政策学习性能 - UniPi[17]和SuSIE [18] 采用两阶段政策学习过程,最初使用扩散生成模型预测未来图像或视频序列,随后基于这些目标图像训练逆动力学模型或低级扩散政策
与这些两阶段方法相比,PAD的方法具有明显优势。首先,虽然以前的方法利用基于CNN 的 U-net 主干的扩散模型 [23],主要设计用于图像生成并限于视觉预测,PAD的方法采用Diffusion Transformer(DiT) 架构 [20]
首先,该架构通过简单的token连接和注意力掩码机制巧妙地同时处理多种模态,使得能够同时联合预测未来和动作
其次,使用图像作为预测和动作之间的接口可能无法充分利用预训练扩散模型内部编码的特征。这些两阶段方法的有效性在很大程度上依赖于生成图像的质量。相比之下,PAD的模型在统一去噪过程中整合图像生成和机器人动作
2.2 PAD:通过联合去噪过程进行预测与行动
2.2.1 预备知识与PAD概述
首先,在模仿学习的情境下,咱们来对基于像素输入且受语言条件制约的机器人控制进行考量(We consider pixel-input language-conditioned robotic control under theimitation learning setting)
- 首先,表示一个机器人数据集
,包含
个演示
第个演示
包含一个像素输入序列
、一个自然语言指令
、机器人位姿序列
组成的机器人轨迹
- 然而,由于收集机器人数据既有风险又昂贵,
的规模将受到限制。因此,作者也考虑容易在互联网上获取的RGB 视频数据集
,
中的一个实例可以表示为
虽然 缺乏机器人动作数据,但作者提出的PAD 框架能够在机器人数据集
和视频数据集
上进行协同训练,利用大规模的
数据来增强视觉策略学习
其次,扩散模型的核心思想是不断添加高斯噪声以使样本成为高斯分布,并利用去噪过程生成数据[4-DDPM]
- 令
表示从真实数据编码的潜在样本
加噪过程逐渐在步中向
添加标准高斯噪声
,从而得到一组噪声样本
,这相当于从以下分布中采样:
其中是预定义的超参数,用于控制噪声的幅度
令,根据DDIM [5],
可以通过向
添加高斯噪声
直接获得:
- 进一步地,去噪过程从最噪声的潜在样本
开始,并逐步减少噪声以恢复带有条件
的真实样本
这基于给定条件概率的变分近似:
- 噪声估计器
被实现为一个神经网络,并被训练以逼近噪声数据分布的对数密度的梯度[22-Jonathan Ho and Tim Salimans. Classifier-free diffusion guidance, 2022],即
而对于本文的PAD 框架,该框架在联合潜在去噪过程中同时预测未来帧和动作
- 作者主要关注RGB 图像模态
和机器人动作模态
,每个机器人动作可以通过一个机器人姿态来表征,包括末端执行器的位置和旋转,以及夹爪状态
值得注意的是,该框架可以轻松扩展到额外的模态——例如,作者在实验部分中额外加入了深度图像模态,这提供了更准确的距离测量
- 且在提出的PAD 框架中,预测和动作是基于多模态当前观测进行的,包括RGB图像
、机器人姿态
、额外的深度图
(在现实世界任务中),以及自然语言指令文本
该框架同时输出相应的未来预测,
和机器人动作
「为方便大家一目了然,这三种输出,我在上面分别用了不同的字体颜色表示——即紫色的图像模态
、绿色的深度图像模态
、黄色的机器人动作模态
」
且PAD 不仅预测单一未来步骤,还可以预测个未来步骤
,这可以看作是机器人的k 步规划
比如机器人只执行第一个预测动作,然后触发一个新的预测周期。这个迭代预测和执行过程使机器人能够以闭环方式持续规划和行动
2.2.2 PAD的模型架构:选择DiT作为模型骨干然后联合去噪预测未来图像和动作
鉴于原始数据可能具有多种格式和高维度,作者首先将所有模态映射到潜在空间,并进行潜在扩散过程。根据Diffusion Transformer(DiT)[20] 中的过程,RGB 图像 最初通过预训练的、冻结的VAE[23] 编码器
处理,以获得潜在表示
。然后,通过分词器将此潜在表示转换为嵌入大小为
的token序列
类似地
- 机器人姿态
使用多层感知器(MLP)[24-Martin Riedmiller and A Lernen. Multi layer perceptron. Machine Learning Lab Special Lecture, University of Freiburg, 24, 2014]编码为
,并线性转换为具有相同嵌入大小
的token
- 如果可用,深度图像将被下采样并分词为
- 自然语言指令通过冻结的CLIP 编码器[25-Learning transferable visual models from natural language supervision,CLIP的介绍详见《AI绘画原理解析:从CLIP、BLIP到DALLE、DALLE 2、DALLE 3、Stable Diffusion(含ControlNet详解)》的第一部分] 处理,以生成文本嵌入
对于Diffusion Transformer(DiT)骨干网络,作者采用了Diffusion Transformer(DiT)[20] 作为PAD的模型骨干,这相较于以往工作中常用的U-net 骨干网络[18-Zero-shot robotic manipulation with pretrained image-editing diffusion models, 17-Learning universal policies via text-guided video generation] 提供了若干优势
- 特别是,DiT 架构通过自注意力机制有效地整合了各种模态。输入如RGB 图像、机器人姿态和附加数据——被转化为长度为
的token序列
这些来自不同模态的token序列被连接在一起,并经历一个联合的潜在去噪过程 - 此外,DiT 架构能够适应缺失的模态。例如,在缺少机器人动作的视频数据集中,DiT 的输入仅包含图像token
,作者只需将token序列扩展到组合长度
,并在自注意力块中引入注意力掩码以排除填充token
输出中仅保留有效的预测,丢弃任何填充部分
整个过程的简要示意图如下图图3 右侧所示
这一设计选择使得PAD 能够同时在仅有RGB 的视频数据集和机器人数据集上进行训练
对于联合条件生成,作者将未来观测初始化为白噪声,并旨在重建未来观测帧和期望的机器人动作,基于当前观测进行条件化,遵循与[26-Instructpix2pix: Learning to follow image editing instructions] 中类似的策略,作者在通道维度上连接条件潜变量和噪声潜变量
- 具体来说,在获得编码潜变量
后,作者将这些潜变量与噪声连接以获得条件噪声潜变量
- 例如,如果编码潜变量
的形状为
,那么
的形状将为
以表示
个未来帧,最终的潜变量
的形状为
,其他模态经历类似的过程
- 将潜在变量连接后,这些来自不同模态的条件化噪声潜在变量被tokenized为相同嵌入大小的token序列
图像潜在变量的tokenization遵循与[20-Diffusion Transformer(DiT)] 相同的切块过程,而机器人姿态的tokenization采用简单的线性投影
最后,这些token被输入到多层DiT 中,以预测未来帧的潜在表示
整体过程的示意图见下图图3
2.2.3 训练过程
// 待更
相关文章:
Diffusion Transformer(DiT)——将扩散过程中的U-Net换成ViT:近频繁用于视频生成与机器人动作预测(含清华PAD详解)
前言 本文最开始属于此文《视频生成Sora的全面解析:从AI绘画、ViT到ViViT、TECO、DiT、VDT、NaViT等》 但考虑到DiT除了广泛应用于视频生成领域中,在机器人动作预测也被运用的越来越多,加之DiT确实是一个比较大的创新,影响力大&…...
144:vue+leaflet 使用canvas绘制不同方向、不同颜色的模仿船只三角形
作者: 还是大剑师兰特 ,曾为美国某知名大学计算机专业研究生,现为国内GIS领域高级前端工程师,CSDN知名博主,深耕openlayers、leaflet、mapbox、cesium,canvas,echarts等技术开发,欢迎加微信(gis-dajianshi),一起交流。 查看本专栏目录 - 本文是第 144个示例 文章目录…...
c# 快捷键模块
文章目录 命名空间和类类成员静态成员 静态方法GenerateHotkeyIdWndProcGetWindowHandleAndSourceRegisterUnregister 静态方法(外部调用)RegisterHotKey 和 UnRegisterHotKey 委托HotKeyCallbackHandler 枚举HotkeyModifiers 应用示例 using System; us…...
npm install 安装选项 -d -s -g
在使用 npm install 时,-d、-g 和 -s 是不同的选项,它们分别代表不同的安装模式或行为。以下是它们的详细解释: 1. -d:--save-dev 含义:将包安装为开发依赖(devDependencies)。使用场景&#…...
【每日学点鸿蒙知识】worker线程数量、判断用户是否进行权限决定、图片上传类型错误、request锁释放时机、H5问题
1、HarmonyOS 怎么判断worker线程创建了几个? 因为有数量限制,所以想查询当前的worker数量,避免创建失败,还有,是同时运行的worker数量有限制,还是同一个应用能创建的worker线程有限制 1、查询当前的work…...
0xc0000020错误代码怎么处理,Windows11、10坏图像错误0xc0000020的修复办法
“0xc0000020”是一种 Windows 应用程序错误代码,通常表明某些文件缺失或损坏。这可能是由于系统文件损坏、应用程序安装或卸载问题、恶意软件感染、有问题的 Windows 更新等原因导致的。 比如,当运行软件时,可能会出现类似“C:\xx\xxx.dll …...
智能工厂的设计软件 应用场景的一个例子:为AI聊天工具添加一个知识系统 之7 附件(文档)
为AI聊天工具添加一个知识系统 Part1 人性化&去中心化 前情提要 这一次我们暂时抛开前面对“智能工厂的软件设计”的考虑--其软件智能 产品就是 应用程序。直接将这些思维方式和方法论 运用在其具体应用场景中。本文是其中的一个应用场景。 今天用了 一个新的AI助手工具…...
智能化人才招聘系统是怎样的?
随着企业规模的扩大和业务范围的拓展,人才招聘成为了企业发展的关键环节。然而,市面上的人才招聘系统琳琅满目,质量参差不齐,许多企业发现,并非所有系统都能满足他们的需求,特别是智能化的需求。今天&#…...
memcached的基本使用
memcached是一种基于键值对的内存数据库,一般应用于缓存数据,提高数据访问速度,减轻后端数据库压力。 安装 这里以Ubuntu为例,其他系统安装方法请看官方文档。 sudo apt-get update sudo apt-get install memcached启动 memca…...
【Unity3d】C#浮点数丢失精度问题
一、float、double浮点数丢失精度问题 Unity3D研究院之被坑了的浮点数的精度(一百零三) | 雨松MOMO程序研究院 https://segmentfault.com/a/1190000041768195?sortnewest 浮点数丢失精度问题是由于大部分浮点数在IEEE754规范下就是无法准确以二进制…...
机器学习中回归预测模型中常用四个评价指标MBE、MAE、RMSE、R2解释
在机器学习中,评估模型性能时常用的四个指标包括平均绝对误差(Mean Absolute Error, MAE)、均方误差(Mean Squared Error, MSE)、均方根误差(Root Mean Squared Error, RMSE)和决定系数…...
2412d,d语言中写汇编
原文 嗨,我只是想共享该要点,它展示了如何在ASM中用D编写你好. D中写汇编非常方便!这是我写的: extern(C) int main() {auto hip "hello D\n".ptr;size_t len 8;//write(1,消息,长度)asm {mov RDX, len;//缓冲长度mov RSI, hip;//消息缓冲mov EDI, 1;//Stdout文描…...
急救复试英语口语第一招:confidence
自信与内容是成功的关键 复试是每个考生面临的一道重要关卡,尤其是对于需要进行英语口语测试的同学而言,如何在有限的时间内展示自己的英语能力和综合素质,成为了一个关键问题。今天我们将从两个方面为大家分享应对复试英语口语的技巧&#…...
深入理解 pytest Fixture 方法及其应用
在 Python 自动化测试领域,pytest 是当之无愧的王者。提到 pytest,不得不说它的一大核心功能——Fixture。Fixture 的强大,让复杂的测试流程变得井井有条,让测试代码更加灵活和可复用。 那么,pytest 的 Fixture 究竟是…...
python实现自动登录12306抢票 -- selenium
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 python实现自动登录12306抢票 -- selenium 前言其实网上也出现了很多12306的代码,但是都不是最新的,我也是从网上找别人的帖子,看B站视频&…...
@RestControllerAdvice注解
RestControllerAdvice 是 Spring 4 引入的一个组合注解,它结合了 ControllerAdvice 和 ResponseBody,专门用于处理 RestController 类型的控制器中的全局异常、全局数据绑定和全局模型属性等问题。在 Spring Boot 中,RestControllerAdvice 通…...
04-微服务02
我们将黑马商城拆分为5个微服务: 用户服务 商品服务 购物车服务 交易服务 支付服务 由于每个微服务都有不同的地址或端口,相信大家在与前端联调的时候发现了一些问题: 请求不同数据时要访问不同的入口,需要维护多个入口地址…...
离线语音识别+青云客语音机器人(幼儿园级别教程)
1、使用步骤 确保已安装以下库: pip install vosk sounddevice requests pyttsx3 2、下载 Vosk 模型: 下载适合的中文模型,如 vosk-model-small-cn-0.22。 下载地址: https://alphacephei.com/vosk/models 将模型解压后放置在…...
Llama 3 后训练(三)
目录 4. 后训练 4.1 建模 图表解读 4.1.1 聊天对话格式 4.1.2 奖励建模 4.1.3 监督微调(Supervised Finetuning) 4.1.4 直接偏好优化(Direct Preference Optimization) 4.1.5 模型平均(Model Averaging&#x…...
Cobbler+kickstart实现批量全自动装机
cobbler简介 cobbler 是一个系统启动服务boot server,可以通过pxe得方式用来快速安装,重装系统,支持安装不同linux发行版和windows。这个工具是用python开发,方便小巧,15k行代码,使用简单得命令完成pxe网络安装环境…...
【Pandas】pandas Series at
Pandas2.2 Series Indexing, iteration 方法描述Series.get()用于根据键(索引标签)从 Series 中获取值Series.at用于快速访问标量值(单个元素)的访问器Series.iat用于快速访问标量值(单个元素)的访问器 …...
optimum-habana 安装 optimum安装
目录 git地址: 运行必须参数设置 git地址: https://github.com/huggingface/optimum-habana git clone 以后 cd optimum-habana pip install . 运行必须参数设置 hpu改为 cuda, output = subprocess.run("pip list | grep habana-torch-plugin",shell=True…...
AutoDL服务器深度学习使用过程
前期准备 Xshell,Xftp,Pycharm专业版 step 1:实例开机(无卡or有卡),Xshell连接 新建xshell会话: 登录指令格式为: ssh -p 38076 rootregion-1.autodl.com 在ssh -p 38076 rootregion-1.autodl.com命令中࿰…...
微信小程序:定义页面标题,动态设置页面标题,json
1、常规设置页面标题 正常微信小程序中,设置页面标题再json页面中进行设置,例如 {"usingComponents": {},"navigationBarTitleText": "标题","navigationBarBackgroundColor": "#78b7f7","navi…...
LeetCode算法题——有序数组的平方
题目描述 给你一个按非递减顺序排序的整数数组nums,返回每个数字的平方组成的新数组,要求也按非递减顺序排序。 题解 解法一:暴力解法 思路: 该题目可通过暴力解法解决,即利用for循环遍历数组,对数组每…...
【MyBatis-Plus 核心接口】BaseMapper 和 IService 深度解析
在使用 MyBatis-Plus(简称 MP)进行开发时,BaseMapper 和 IService 接口是我们老朋友了,不知道你会不会跟我一样好奇:为什么实现了 BaseMapper 或 IService 接口,我们就能轻松操作数据库?这背后有…...
SQL 建表语句详解
SQL 建表语句详解 在 SQL 中,创建表(Table)是数据库设计的基础。表是存储数据的基本单位,每个表由行和列组成。创建表的过程涉及到定义表的结构,包括列名、数据类型、约束等。本文将详细介绍 SQL 中的建表语句&#x…...
数据可视化-16. 日历图
目录 1. 日历图的概念 2. 日历图的适用场景 2.1 事件或活动的频率分析 2.2 数据的时间周期性分析 2.3 异常值检测 2.4 绩效监控 3. 日历图的缺陷 3.1 粒度受限于天数 3.2 数据密度过高时候难以解读 3.3 难以比较多个数据集 3.4 周期性较长的数据不易展示 4. 日历图…...
Docker 安装与常用命令
Docker 安装与常用命令 安装 Docker 如果您的系统尚未安装 Docker,可以使用以下命令安装 docker.io: 1. 安装命令: sudo apt install -y docker.io2、安装完成后,使用以下命令检查 Docker 是否成功安装: docker -…...
logback之自定义pattern使用的转换器
目录 (1)场景介绍 (2)定义转换器BizCallerConverter (3)logback配置conversionRule (4)测试效果 前文《logback之pattern详解以及源码分析》已经介绍了pattern,以及…...
Spring Cloud Alibaba2022之Sentinel总结
Spring Cloud Alibaba2022之Sentinel学习 Sentinel介绍 Sentinel是一个面向云原生微服务的流量控制、熔断降级组件。 Sentinel 分为两个部分: 核心库:(Java 客户端)不依赖任何框架/库,能够运行于所有 Java运行时环 …...
期末速成C++【知识点汇总完】
目录 第一章 C特点 命名空间-命名冲突 引用 new和delete 堆和栈 缺省参数 重载/隐藏/覆盖 初始化方式 第二章 面向对象的三大特征 成员变量 成员函数:构造函数和析构函数 访问权限和继承方式 空类 常const 静态static 友元friend 第三章 重…...
从 ELK Stack 到简单 — Elastic Cloud Serverless 上的 Elastic 可观察性
作者:来自 Elastic Bahubali Shetti, Chris DiStasio 宣布 Elastic Cloud Serverless 上的 Elastic Observability 正式发布 — 一款完全托管的可观察性解决方案。 随着组织规模的扩大,一个能够处理分布式云环境的复杂性并提供实时洞察的可观察性解决方…...
手机h5加桌面图标
手机h5应用1,网址浏览器添加到桌面,修改图标 关键代码 <!-- 手机h5加桌面图标 --> <!-- 安卓平台 chrome --> <link relapple-touch-icon-precomposed href<% BASE_URL %>logonew.png> <meta name"mobile-web-app-capab…...
Vue3,什么情况下数据会丢失响应式呢?
一、使用 reactive 定义的数据重新赋值 <template><h1>{{ foo.a }}</h1><h1>{{ bar.a }}</h1><button click"handleClick">点我</button> </template> <script setup> import { ref, reactive } from vuele…...
【Vim Masterclass 笔记03】S03L10 + S03L11:Vim 中的文本删除操作以及 Vim 思维习惯的培养(含 DIY 拓展知识点)
文章目录 Section 3:Vim Essentials(Vim 核心知识)S03L10 Vim 核心浏览命令同步练习点评课S03L11 Deleting Text and "Thinking in Vim" 文本的删除及 Vim 思维习惯的培养1 删除单个字符2 删除一个单词2.1 推广1:D HJK…...
《Java核心技术II》流中的filter、map和flatMap方法
filter、map和flatMap方法 filter filter通过转换产生过滤后的新流,将字符串流转化为只包含长单词的另一个流。 List words ...; Stream longWords words.stream().filter(w->w.length()>12) filter类型是Predicate(谓词,表示动作)类型对象,…...
logback之自定义过滤器
logback有两种过滤器,一种是context中的过滤器叫TurboFilter,是一个全局的过滤器,会影响所有的日志记录。另一种是Appender中的过滤器,只对所在的append有效。两者大同小异,这里我们以Appender的过滤器为例。 &#x…...
【论文阅读笔记】IceNet算法与代码 | 低照度图像增强 | IEEE | 2021.12.25
目录 1 导言 2 相关工作 A 传统方法 B 基于CNN的方法 C 交互方式 3 算法 A 交互对比度增强 1)Gamma estimation 2)颜色恢复 3)个性化初始η B 损失函数 1)交互式亮度控制损失 2)熵损失 3)平滑损失 4)总损失 C 实现细节 4 实验 5 IceNet环境配置和运行 1 下载…...
查看 GitHub 仓库的创建时间
查看 GitHub 仓库的创建时间 1. https://api.github.com/repos/{owner}/{repository}2. curl -s https://api.github.com/repos/{owner}/{repository} | jq .created_atReferences 1. https://api.github.com/repos/{owner}/{repository} REST API endpoints for repositories…...
五种被低估的非常规统计检验方法:数学原理剖析与多领域应用价值研究
在当前的数据分析实践中,研究人员往往过度依赖t检验和方差分析(ANOVA)等传统统计方法。但是还存在多种具有重要应用价值但未受到足够重视的统计检验方法,这些方法在处理复杂的实际数据时具有独特优势。本文将详细介绍五种具有重要…...
mysql重置root密码(适用于5.7和8.0)
今天出一期重置mysql root密码的教程,适用于5.7和8.0,在网上搜索了很多的教程发现都没有效果,浪费了很多时间,尝试了多次之后发现这种方式是最稳妥的,那么废话不多说,往下看: 目录 第一步&…...
【AIGC-ChatGPT职业提示词指令】职业发展的航海指南:在人生的十字路口做出明智抉择
引言 在职业发展的海洋中,每个人都会遇到需要重要抉择的时刻。这些关键节点就像航海中的分岔路口,选择不同的航线可能驶向截然不同的目的地。如何在这些关键时刻做出明智的选择,需要我们既要着眼当下的风向,也要洞察远方的航程。…...
【从零开始入门unity游戏开发之——C#篇39】C#反射使用——Type 类、Assembly 类、Activator 类操作程序集
文章目录 前言一、前置知识1、编译器2、程序集(Assembly)3、元数据(Metadata) 二、反射1、反射的概念2、反射的作用3、反射的核心Type 类3.1 Type 类介绍3.2 不同方法获取 Type3.3 获取type类型所在的程序集的相关信息 4、反射的常…...
如何启动CentOS6远程服务器和进行ssh远程登录?
如何启动CentOS 6远程服务器? 在CentOS 6中,启动远程服务器通常涉及到配置SSH服务和VNC服务,以下是详细的步骤: 配置SSH服务 确认是否安装SSH 首先需要检查系统中是否已经安装了SSH服务,打开终端并输入以下命令&am…...
面向机器学习的Java库与平台
学习Java语言中与机器学习相关的各种库与平台,了解每个库的功能,以及可以用它 们解决的问题。 实现机器学习应用时需要具备的Java环境 Weka:一个通用的机器学习平台 Java机器学习库:一系列机器学习算法 Apache Mah…...
AI大模型语音识别转文字
提取音频 本项目作用在于将常见的会议录音文件、各种语种音频文件进行转录成相应的文字,也可从特定视频中提取对应音频进行转录成文字保存在本地。最原始的从所给网址下载对应视频和音频进行处理。下载ffmpeg(https://www.gyan.dev/ffmpeg/builds/packages/ffmpeg-…...
GAN对抗生成网络(一)——基本原理及数学推导
1 背景 GAN(Generative Adversarial Networks)对抗生成网络是一个很巧妙的模型,它可以用于文字、图像或视频的生成。 例如,以下就是GAN所生成的人脸图像。 2 算法思想 假如你是《古董局中局》的文物造假者(Generator,生成器)&a…...
LeetCode - 初级算法 数组(旋转数组)
旋转数组 这篇文章讨论如何通过编程实现数组元素的旋转操作。 免责声明:本文来源于个人知识与公开资料,仅用于学术交流。 描述 给定一个整数数组 nums,将数组中的元素向右轮转 k 个位置,其中 k 是非负数。 示例: 输入: nums = [1,2,3,...
目标检测入门指南:从原理到实践
目录 1. 数据准备与预处理 2. 模型架构设计 2.1 特征提取网络原理 2.2 区域提议网络(RPN)原理 2.3 特征金字塔网络(FPN)原理 2.4 边界框回归原理 2.5 非极大值抑制(NMS)原理 2.6 多尺度训练与测试原理 2.7 损失函数设计原理 3. 损失函数设计 4. 训练策略优化 5. 后…...