扩散模型DiT:纯Transformer架构替换传统的U-Net主干

DiT原文: https://arxiv.org/abs/2212.09748 Code:https://github.com/facebookresearch/DiT Huggingface:https://huggingface.co/spaces/wpeebles/DiT

DiT扩散模型,出自谢赛宁与Sora研发之一威廉·皮波尔斯合著的一篇论文《Scalable diffusion models with transformers》,它不仅将 Transformer 成功应用到了扩散模型上,还深入探究了transformer架构在扩散模型上的scalability能力。

核心思想:提出了一种新的(可扩展)扩散模型架构,称为 DiT,该架构使用 Transformer 替换了传统的 U-Net 主干。

扩散模型大部分是采用UNet架构来进行建模,UNet可以实现输出和输入一样维度,所以天然适合扩散模型。扩散模型使用的UNet除了包含基于残差的卷积模块,同时也往往采用self-attention。自从ViT之后,transformer架构已经大量应用在图像任务上,随着扩散模型的流行,也已经有工作尝试采用transformer架构来对扩散模型建模,这篇文章我们将介绍Meta的工作DiTScalable Diffusion Models with Transformers,它是完全基于transformer架构的扩散模型,这个工作不仅将transformer成功应用在扩散模型,还探究了transformer架构在扩散模型上的scalability能力其中最大的模型DiT-XL/2在ImageNet 256×256的类别条件生成上达到了SOTA(FID为2.27)

DiT基本沿用了ViT的设计,如下图所示,首先采用一个patch embedding来将输入进行patch化,即得到一系列的tokens。其中patch size属于一个超参数,它直接决定了tokens的数量,这会影响模型的计算量。DiT的patch size共选择了三种设置:𝑝=2,4,8。注意token化之后,这里还要加上positional embeddings,这里采用非学习的sin-cosine位置编码。

将输入token化之后,就可以像ViT那样接transformer blocks了。但是对于扩散模型来说,往往还需要在网络中嵌入额外的条件信息,这里的条件包括timesteps以及类别标签(如果是文生图就是文本,但是DiT这里并没有涉及)。要说明的一点是,无论是timesteps还是类别标签,都可以采用一个embedding来进行编码。DiT共设计了四种方案来实现两个额外embeddings的嵌入,具体如下:

  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默认都采用这种方式来嵌入条件embeddings。

虽然DiT发现adaLN-Zero效果是最好的,但是这种方式只适合这种只有类别信息的简单条件嵌入,因为只需要引入一个class embedding;但是对于文生图来说,其条件往往是序列的text embeddings,采用cross-attention方案可能是更合适的。 由于对输入进行了token化,所以在网络的最后还需要一个decoder来恢复输入的原始维度,DiT采用一个简单的linear层来实现,直接将每个token映射为𝑝×𝑝×2𝐶的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(256×256图像,patch size=4时)。

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

虽然DiT看起来不错,但是只在ImageNet上生成做了实验,并没有扩展到大规模的文生图模型。而且在DiT之前,其实也有基于transformer架构的扩散模型研究工作,比如U-ViT,目前也已经有将transformer应用在大规模文生图(基于扩散模型)的工作,比如UniDiffuser,但是其实都没有受到太大的关注。目前主流的文生图模型还是采用基于UNet,UNet本身也混合了卷积和attention,它的优势一方面是高效,另外一方面是不需要位置编码比较容易实现变尺度的生成,这些对具体落地应用都是比较重要的。

FunAudioLLM –阿里通义音频生成大模型

FunAudioLLM:https://github.com/FunAudioLLM
CosyVoice开源仓库:https://github.com/FunAudioLLM/CosyVoice
CosyVoice在线体验:https://www.modelscope.cn/studios/iic/CosyVoice-300M
SenseVoice开源仓库:https://github.com/FunAudioLLM/SenseVoice
SenseVoice在线体验:https://www.modelscope.cn/studios/iic/SenseVoice

人类对自身的研究和模仿由来已久,在我国2000多年前的《列子·汤问》里就描述了有能工巧匠制作出会说话会舞动的类人机器人的故事。声音包含丰富的个体特征及情感情绪信息,对话作为人类最常使用亲切自然的交互模式,是连接人与智能世界至关重要的环节。近日,阿里通义实验室发布并开源了语音大模型项目FunAudioLLM,旨在深化人类与大型语言模型(LLMs)之间的自然语音交互体验。这一框架的核心是两个创新模型:SenseVoiceCosyVoice

CosyVoice【TTS】 致力于自然语音生成,支持多语言、音色和情感控制,在多语言语音生成、零样本语音生成、跨语言声音合成和指令执行能力方面表现卓越。

  • 多语言合成:采用了总共超15万小时的数据训练,支持中英日粤韩5种语言的合成,合成效果显著优于传统语音合成模型。
  • 极速音色模拟:仅需要3~10s的原始音频,即可生成模拟音色,甚至包括韵律、情感等细节。在跨语种的语音合成中,也有不俗的表现。
  • 富文本或自然语言的细粒度控制:支持以富文本或自然语言的形式,对合成语音的情感、韵律进行细粒度的控制,合成音频在情感表现力上得到明显提升。

SenseVoice 则专注于高精度多语言语音识别ASR、情感辨识和音频事件检测。

  • 多语言识别:采用超过40万小时数据训练,支持超过50种语言,识别效果上优于Whisper模型,中文与粤语上提升50%以上。
  • 富文本识别:
    • 具备优秀的情感识别,能够在测试数据上达到和超过目前最佳情感识别模型的效果。
    • 支持声音事件检测能力,支持音乐、掌声、笑声、哭声、咳嗽、喷嚏等多种常见人机交互事件进行检测。
  • 推理速度:SenseVoice-Small模型采用非自回归端到端框架,推理延迟极低,10s音频推理仅耗时70ms,15倍优于Whisper-large。

应用场景

基于SenseVoice和CosyVoice模型,FunAudioLLM可支持较多的人机交互应用场景,例如音色情感生成的多语言语音翻译、情绪语音对话、互动播客、有声读物等。

同音交传:模拟音色与情感的多语言翻译

通过结合SenseVoice、LLMs以及CosyVoice,我们可以无缝地进行语音到语音的翻译(S2ST)。需要注意的是,原始录音在文本中会以粗体显示。这种集成化的方法不仅提升了翻译的效率和流畅性,而且通过感知语音中的情感和语调,它能够在译文中复现原始语音的情感色彩,让对话的交流更加真实和动人。

无论是多语种的会议通译、跨文化的交流沟通,还是为非母语者提供即时语音翻译服务,这一技术都将大大缩小语言差距和沟通中的信息减损。

强情感交互的语音对话

通过融合SenseVoice、大型语言模型(LLMs)和CosyVoice,能够支持开发一款情感语音聊天应用程序。

当SenseVoice解析出情绪/情感/咳嗽等副语言信息后,大模型输出相对应的反馈情绪,并由CosyVoice合成出适当的声音情绪,从而完成舒适自然的对话交互过程。在以下示例中,用户和助手的所有对话内容均由CosyVoice合成。

专属AI博客电台

通过将SenseVoice、基于LLM的具有实时世界知识的多代理系统和CosyVoice整合,我们能够创造一个互动式播客电台。

在这样的播客中,SenseVoice利用其高精度多语言语音识别功能,实时捕捉AI播客和用户的对话,甚至能够辨识环境音效和情感。LLM多代理系统则能够处理SenseVoice提供的语音数据,实时更新世界知识库,确保话题和信息的及时性和准确性。

在交互中,用户可以随时打断AI播客的对话,引导主题方向等,CosyVoice将用于生成AI播客的语音,具备多种语言、音色和情感的控制能力,为听众带来丰富多彩的听觉体验。

有声读物

借助LLMs出色的分析能力,可对书籍内容进行结构化并识别其中的情感,再与CosyVoice的语音合成技术结合,我们能够实现具有更高表现力的有声读物。

LLMs深入理解文本,捕捉每一个情感波动和故事弧线,而CosyVoice则将这些情感细腻地转化为语音,带有特定的情绪色彩和强调,为听众提供一个不仅丰富多彩而且情感充沛的听觉体验。

这样的有声读物不再是单一无变化的朗读,而是一场充满情感与生动表达的听觉盛宴,让每个故事和角色都栩栩如生。

技术原理解析

CosyVoice

CosyVoice是一款基于语音量化编码的语音生成大模型。它对语音进行离散化编码,并依托大模型技术,实现自然流畅的语音生成体验。与传统语音生成技术相比,CosyVoice具有韵律自然、音色逼真等特点。CosyVoice支持多达5种语言,同时还支持以自然语言或富文本形式对生成语音进行情感等维度的细粒度控制。研究团队提供了基模型CosyVoice-300M、经过SFT微调后的模型CosyVoice-300M-SFT、以及支持细粒度控制的模型CosyVoice-300M-Instruct,可满足不同场景下的使用需求。

生成语音客观指标:

研究团队分别在开源中文数据集Aishell3以及英文数据集LibriTTS上,通过语音识别测试了合成音频的内容一致性。通过与原始音频以及最近大火的ChatTTS对比,可以发现CosyVoice的合成音频在内容一致性上更高,并且没有很少存在幻觉额外多字的现象。CosyVoice很好地建模了合成文本中的语义信息,达到了与人类发音人相当的水平。此外,通过对合成音频进行重打分,能够进一步降低识别的错误率,甚至在内容一致性和说话人相似度上超越人类。

情感控制能力:

研究团队还使用预训练的情感分类模型评价了CosyVoice的情感控制能力,主要包括高兴/悲伤/生气/害怕/反感等5种高表现力的语音情感。
测试结果表明,CosyVoice-300M本身具备一定从文本内容中推断情感的能力,经过细粒度控制训练的模型CosyVoice-300M-Instruct在情感分类中的得分更高,具备更强的情感控制能力。

SenseVoice

SenseVoice是一个基础语音理解模型,具备多种语音理解能力,涵盖了自动语音识别(ASR)、语言识别(LID)、情感识别(SER)以及音频事件检测(AED)。

该模型旨在提供全面的语音处理功能,从而支持构建更复杂的语音交互系统。

SenseVoice-Small是一款仅含编码器的轻量级基础语音模型,设计用于快速语音理解。

它可以快速处理语音数据,并在有需要时迅速做出响应,适用于对延迟敏感的应用场合,如实时语音交互系统。SenseVoice-Large则是一个包含编码器和解码器的大型基础语音模型。这个版本的SenseVoice专注于更精确的语音理解,拥有对更多语言的支持能力。它适合于对识别精度有更高要求的场景,可以处理更复杂的语音输入,并生成更为准确的结果。

多语言语音识别性能

研究团队在开放源数据集上比较了SenseVoice和Whisper的多语言识别性能和推理效率,包括AISHELL-1、AISHELL-2、Wenetspeech、Librispeech和Common Voice。

推理效率评估是在A800机器上进行的。SenseVoice-Small采用非自回归端到端架构,由此带来的推理延迟极低——相比之下,它比Whisper-Small快7倍,比Whisper-Large快17倍。

语音情感识别性能

SenseVoice也可以用于离散情绪识别,目前支持的情绪类型包括高兴、悲伤、愤怒和中性。团队在7个流行的情绪识别数据集上对其进行了评估。即使没有对目标语料库进行微调,SenseVoice-Large都能在大多数数据集上达到或超越最新的最佳结果(SOTA)。

音频事件检测性能

SenseVoice-Small与SenseVoice-Large模型都能在语音中检测音频事件,包括音乐、掌声和笑声。

SenseVoice-Large模型除了能够预测音频事件的类型,还能精准识别事件发生的起始和结束位置。

与之相比,SenseVoice-Small模型虽然仅能预测音频中发生的事件类型(仅限于一个事件),但它能够检测到更多种类的事件,诸如在人机互动过程中可能出现的咳嗽、打喷嚏、呼吸和哭泣等。

目前,与SenseVoice和CosyVoice相关的模型已在ModelScope和Huggingface上开源,同时在GitHub上发布了相应的训练、推理和微调代码。

torchrun-torch多机多卡分布式训练命令

https://pytorch.org/docs/stable/elastic/run.html

torchrun 提供了作为 torch.distributed.launch 的功能的超集,并具有以下附加功能:

  1. Worker failures are handled gracefully by restarting all workers.
    通过重新启动所有工作进程来优雅地处理工作进程故障。
  2. Worker RANK and WORLD_SIZE are assigned automatically.
    工作器 RANK 和 WORLD_SIZE 自动分配。
  3. Number of nodes is allowed to change between minimum and maximum sizes (elasticity).
    允许节点数量在最小和最大大小之间变化(弹性)。

torchrun 是setup.py中 entry_points 配置中声明的主模块torch.distributed.run的Python控制台脚本。它相当于调用 python -m torch.distributed.run 。

torchrun启动单机多卡DDP并行训练:

启动方式:

  • 使用 torchrun 命令来启动程序
  • torchrun –standalone –nproc_per_node=gpu XXX.py
  1. --standalone 代表单机运行
  2. --nproc_per_node=gpu 代表使用所有可用GPU。等于号后也可写gpu数量n,这样会使用前n个GPU

如果想要进一步指定要运行的 GPU,可以通过 CUDA_VISIBLE_DEVICES 设置GPU可见性,比如:

CUDA_VISIBLE_DEVICES=2,3 torchrun –standalone –nproc_per_node=gpu multi_gpu_torchrun.py

多机多卡

torchrun –nproc_per_node=4 –nnodes=3 –node_rank=0 –master_addr=192.168.0.101 –master_port=29500 test_mpi.py

1.指定每个节点(机器)上的进程数,这里是4个。意味着每个机器将启动4个进程来参与分布式训练。 –nproc_per_node=4 【一般设置为为节点GPU数量】

2.指定总共的节点数,这里是3个。意味着总共有3个机器参与分布式训练。

--nnodes=3

3.指定当前节点(机器)的排名,这里是0。排名从0开始,用于在分布式环境中区分不同的节点。

--node_rank=0 【0代表主节点】

4.指定主节点的IP地址,这里是192.168.0.101(更根据实际修改)。主节点用于协调分布式训练过程。

--master_addr=192.168.0.101

5.指定主节点的端口号,这里是29500。主节点使用指定的端口来与其他节点进行通信。

–master_port=29500

6.单机运行

--standalone

Mamba模型解读

论文地址: Mamba: Linear-Time Sequence Modeling with Selective State Spaces

代码: https://github.com/state-spaces/mamba

     天下苦 Transformer 久矣!整整7年了,一个理论上一点也不漂亮,纯粹靠着模型堆砌和工程上的大力出奇迹,统治了整个NLP 领域和如今大模型的发展。然而,它的局限性日益凸显,计算量的庞大,数据和算力需求越来越让凡人仰望。俱往矣,数风流人物,还看今朝。Mamba 模型的破土而出,让我们看到了结束这一切的曙光,也是为什么引起 A1 界广泛兴奋的原因,尤其是它回归时空序列建模,从中寻找灵感并将其与新型注意力机制结合的思路很有启发。
    原文较为晦涩,网上技术文章虽然不少,但一方面写文章的人照本宣科念经的比较多,自己压根没懂,导致读的人反而怀疑自己的智商;另一方面看到网上很多吃瓜群众跟着瞎起哄What l can say, Mamba out!你连它是啥都不知道,嘴都没亲一下,就 OUTOUT 啥?

它其实是用一个李指数映射代替了 Transformer 的非线性状态方程。估计大部分人连啥是“李指数”都没听说过。那这个模型到底是什么来头?凭什么能对transformer 的江湖地位形成挑战?原理是什么,与 RNN 等模型的联系是那些?为什么说它是用流体力学的思想指导了时序建模?牛逼之处和未来发展的看点在哪里?子日:知之为知之,不知为不知,是知也。

首先我们快速回顾一下 transformer 的本质缺陷。然后从传统的序列数据状态空间模型讲起补充所需的知识。接着重点讲解 Mamba 模型的核心原理、技术细节和真正精髓。然后通过实验体会它的牛逼效果以及代码实现。最后是总结和展望。

一、Transformer 的死穴

Transformer 结构的核心是自注意力机制层,甭管是encoder,还是 decoder,序列数据都先经过位置编码后喂给这个模块。

这里有个天然的缺陷,就是自注意力机制的计算范围仅限于窗口内,而无法直接处理窗口外的元素。像极了古语所说:两耳不闻窗外事,一心只读圣贤书。某种程度上造成视野狭窄,信息孤立,缺乏全局观一样,这种机制无法建模超出有限窗口的任何内容,看不到更长序列的世界。
于是有人说了,那增加窗口长度不就行了,没毛病,理论上可行。但对不起,这样会导致计算复杂度随着窗口长度的增加呈平方增长0(n^2),因为每个位置的计算都需要与窗口内的所有其他位置进行比较,如右图所示。

本质上说,它这是通过位置编码,把序列数据空间化,然后通过计算空间相关度反向建模时序相关度。这个过程中忽视了数据内在结构的细腻关联关系,而是采取了一种一视同仁的暴力关联模式,好处是直接简单,但显然参数效率低下,兄余度高,训练起来不易。那怎么办呢?俗话说:魔鬼的归魔鬼,天使的归天使。明明是时序数据,非要用空间化实现注意力机制。这在当年是为了充分利用 GPU的并行能力,非常有效,但并不是万能的。本质上说还是有问题的。让长序列数据建模回归传统,某种程度上说,这是整个SSM 类模型思考问题的初衷和视角。而 mamba 是其中的佼佼者。因此,咱们先从时序状态空间模型开始讲起。

二、时序状态空间模型 SSM

Mamba是基于结构化状态空间序列模型(SSMs)的,这是2021年提出的工作,算是火了两年了。需要补充读这篇文章。

实际上还是旧瓶装新酒,模型还是时序的,本身就是个 RNN 模型。我们用下面这三幅图来讲清它是怎么来的,长什么样,又怎么用。

实际上就是个RNN模型,但现在不是用神经网络实现这个模型,而是用状态方程,线性代数实现数学建模

1.连续空间的时序建模

很多实际问题都能用左图所示的连续空间模型来建模。尤其是控制理论、信号处理或者线性系统领域特别常见。我们称为 LTI,线性时不变 linear tiem-invariant 系统,用公式表示就是:

线性时不变系统(linear, time-invariant system, LTI) 就是有如下两个性质的一类系统:

线性:如果你同时向系统输入两个不同的信号,那么得到的输出和这两个信号各自向系统的输出之和相同。 用数学语言描述为,如果输入 x1 产生输出 y1 ,输入 x2 产生输出 y2,那么 输入 ax1+bx2 产生的输出为 ay1+by2 。这里 a 和 b 为常数。
时不变性:系统的作用效果不随时间的变化而变化,仅依赖于系统本身的状态。因此,如果输入变化仅是在时间上平移, 那么产生的输出变化也仅仅是相同的时间平移,其他都是一样的。

输入x乘以B+隐状态h乘以A得到隐状态导数,h乘以C得到输出。上面的叫状态方程,下面是观测方程,ABCD 是参数矩阵。也可以用右图更加清楚的看到它的矩阵变化关系。之所以叫时不变,就是 ABCD 是固定的,这当然是一种假设,而且是个强假设。D在上面的式子中没写主要是因为在许多实际系统中,它可以是零。很多人学SSM 弄着弄着就忘了这个强假设。transformer 本身是没有这样的假设的,也就是说可以用于时变系统和非线性系统。牺牲通用性,换来特定场景下的更高性能,这就是所有 SSM 模型的最底层逻辑。(画图:表示逻辑关系)

2.时序离散化与 RNN

连续系统不方便计算机处理,中间图是对它的离散化展开,就是沿时间拉长,模型和RNN 长相上几乎一样。公式与上面类似,只是导数h'(t)改为不同时刻角标,形成递归过程,这些完全是大学线性系统的内容。

原文在这里给出了一种从连续系统转换为离散系统的 ABC 参数对应关系,这段如果你没有控制理论基础或者线性代数不好的话,基本直接懵逼。不过它其实只是一种方法的举例,学名叫“零阶保持(Zero-Order Hold,ZOH)”。公式不用记,只要知道用了这么一个 delta 函数,经过这么一通运算能得到新的A和B就可以了。这个后面用得到。

其实,还有很多种离散化方法。离散化主要是为了方便计算机处理,同时也是 Mamba的一个技巧,后面会讲它怎么转化成类似 RNN 的门控机制。

3.并行化处理与CNN

如果只是时序建模,SSM 和 RNN 相比也就没啥意思了。它最大的特点就是通过下图卷积实现了计算上的并行化。

看图,就是把长长的链条一下子弄成了输入输出直接对应的样子,隐变量关联关系都跑到中间肚子里去了。先说结论:核心思想是用 CNN 对时序数据建模,借助不同尺度的卷积核,从不同时间尺度上捕获时序特征。数学上一番推导猛如虎之后能得到下面的公式。

第二个式子和前面的图完全对应,就是个CNN 实现。时序递归状态方程改用卷积操作实现了,ABC参数矩阵变成了K,就是图中绿色框内的卷积核。这就牛逼了哈,拖拖拉拉的时序计算变成了能一口气的并行计算。体现在效果上,借助不同卷积核捕捉局部时间序列特征,能同时对短期和长期依赖关系学习,并行计算提高了训练和推理效率,使得 SSMs 在处理复杂的时序数据时表现出色。
结论知道了,爱学习的同学一定好奇这是怎么来的,凭啥就能做这种转换。其实也没那么猛,全是线性系统中现成的内容,学信号处理或自动控制的同学应该很熟。为了让没学过的同学们过过瘾,梗直哥这里用人话给你快速推导一遍,也不难。前面的RNN 公式不是沿着时间迭代的嘛,以两个时刻为例:

离散卷积的定义:

将两个离散序列中的数,按照规则,两两相乘再相加的操作。计算卷积的过程:序列翻转,移位,相乘,取和。

你会发现,二者在结构上类似:
首先,最外面都是求和 Sigma,与虽然上限不同,但都是在一个范围内进行求和,对不同时间步和相应权重的线性组合,因此类似。其次,看输入信号,一个是x_{t-k},一个是x[k],无非是不同的时间步,都涉及时间偏移,因此也类似。
第三,看权重,一个是CB,一个是h[t-k],都是随着时间k变化的量。因此,时序的状态空间模型能改写成卷积的形式啦。到这里,不得不感慨一下。卷积可以说是个极其伟大的数学运算发明,起源于 100 多年前傅里叶变换的工作。它就像是一个“滤镜”,可以帮助我们突出信号中的某些特征,识别和提取信号中的重要信息,因此在信号处理与通信系统领域占据了核心地位。

除此之外,在上面式子中需要注意的是,实际问题中往往会对 ABC矩阵进一步简化假设成更简单的对角阵方便计算,这就是所谓的结构化 SSM,S4 模型。

到这里,再回来看看这幅图。你有没有赫然发现,历史总是重演的,三十年河东,三十年河西。大家熟悉的 CNN、RNN,眼瞅着过时了,没想到又能杀回来。我常提醒大家,想学好深度学习,一定要系统的学,这样你才能高屋建瓴,有全局观。不要一上来总盯着 transformer,但有些人不信邪,往往只想偷懒追风。其实,很多时候,“横看成岭侧成峰,远近高低各不同”。不同模型的巧妙利用和合理组合,也许会迸发新的活力,就像这个 SSM 一样,某种程度上,其实只是换了个名字的CNN 化的 RNN。
我们用生活中的例子来帮你更好理解 RNN 和 SSM 的区别。想象你在读一本书,时序嵌套的 RNN 每次只能读一行,然后把记忆传递到下一行,这种方法只适合处理短故事,故事一长,容易忘记前面的情节。而SSM 并行处理,同时打开所有页看到每行内容,这样就能快速找到和理解整本书,无需逐行传递记忆。

我们用生活中的例子来帮你更好理解 RNN 和 SSM 的区别。想象你在读一本书,时序嵌套的 RNN 每次只能读一行,然后把记忆传递到下一行,这种方法只适合处理短故事,故事一长,容易忘记前面的情节。而SSM 并行处理,同时打开所有页看到每行内容,这样就能快速找到和理解整本书,无需逐行传递记忆。
对应原文,我们已经讲完了简介和第二部分。你可能会问,看上去并行的SSM 就挺好的啊为啥不行呢?别忘了,这个系统还有两个强假设:线性+时不变。极大的限制了它的应用范围,因为实际系统大多为非线性、时变系统。Mamba本质上就是一个 SSM 模型的改进版,放开了这两个约束。

三、Mamba: 选择性 SSM

解决了 SSM 线性+时不变的缺陷

接下来咱们着重讲解什么是选择性 SSMMamba 主要体现在设计了一种机制,让状态空间具备选择性,达到了 Transformers 的建模能力,同时在序列长度上实现了线性扩展,也就是克服了 Transformers 的缺陷,可处理最长达百万长度的序列,而且效率贼高,与 GPU 硬件适配,比Transformers 快5倍,准确率相当甚至更好。这就是它为啥牛逼起来的原因啦。

核心就是搞懂这幅图,其实大致看看就明白,在时间序列模型中间设计了这么一坨非常类似LSMT的门结构,实现所谓的选择性,BC都带了t变成了时变参数,A虽然没有直接含t,但由于delat函数影响A,所以A其实也是时变的了。下面的蓝色部分就是所谓的选择机制,这个delat别小瞧,它就是前面离散函数,也是一个非线性的函数,一会有大用。要真正明白其中的细节,先要从增加选择性的动机开始讲,但其实简单理解就是把整个系统该用:
一个总开关 delat+若干个旋钮Bt,Ct ==非线性时变系统

下面的解释可以认为是对这种选择的合理化。

1.要解决什么问题

从某种角度看,序列建模的核心就是研究如何将长序列的上下文信息压缩到一个较小的状态中。比如,语言模型实际上就是在一个有限的词汇集合中不断进行转换。有统计表明,3500 多个常用中文字,3000个常用英文词能覆盖90%以上的日常用语。transformer 的注意力机制虽然很有效,但效率低,因为它需要存储整个上下文,导致推理和训练时间较长。前面讲的 SSM 递归模型可以并行处理,但因为它们的状态是有限的(单纯时不变导致),效率高但有效性受限于状态的压缩能力。

那能不能设计一种模型,平衡一下,实现这种类似的强选择能力。具体来说,本文关注两种能力:
一是抓重点的能力(选择性复制任务)。从大量信息中选择和记住关键的信息,忽略不相关的部分。类似于在人群中找到你的朋友或者在一篇文章中找到关键词。比如从下面句子中找出名词。

二是上下文联想/推理能力(诱导头任务)。在处理连续的信息时,能够保持逻辑一致
性和上下文的连贯性。比如下图的回答能力,只用了单样本学习。

这就像我们经常说一个人口才好,又能抓住重点,逻辑性又强

那具体怎么改进呢?当然还是在 SSM 基础上。前面我们说过,原来的 SSM 有个 LTI线性时不变系统的强假设(ABC是固定的),这样就导致难以有效的选择上下文信息。以下图为例,甭管输入x是啥,B自岿然不动,这不行,得想办法让它时变。

前面的全局卷积虽然能用不同的卷积核进行时序特征捕捉,但是缺乏内容感知,也就是不知道输入的重点和逻辑。而 transformer 人家本身是没有这些限制的,别说时不变,连线性系统假设都没有。这么一分析,改进的方向就很明确了哈。放开LTI模型的时不变约束,让模型参数依赖于输入内容不就行了吗?说起来简单,具体看看是怎么实现的。

2.怎么增加选择性

说穿了就是让 B和C由固定的变成了可变的,根据输入xt和它的压缩投影学习可变参数。A为了简化,自身还是不变的。蓝色部分(包括投影及其连线)就是所谓的选择机制,目的是根据输入内容选择性地记忆和处理信息,从而提高对复杂序列数据的适应能力。你看,这个思想是不是像极了LSTM,就是增加开关。

所谓的选择,其实人话理解,就是“掺和”。一次不够,用三条线给 B_t掺和了三次,给Ct掺和了两次,给A掺和了两次,看下面的算法因为函数 \tau 是非线性激活函数因此 delta 是非线性的,所以 ABC 都是非线性时变的,整个系统两个条件都放开了加了几个开关,多接了几条水管子。
(画图)演示

这里面的 deltat是前面离散化计算时的参数,我们刚才讲了。投影出来的三条蓝线其实就是S_B,S_C,S_delta 三个选择函数,共享一个投影模块(Project),主要是为了实现参数共享和计算效率。右边的 GPU SPAM、HBM 我们稍等再解释,主要和硬件实现相关。
来看看算法上是怎么实现的。如下面右图,不难就是分别用三个S函数根据输入把 B/C/delta都变成了时变的,这就是所谓的“掺和“过程,就这么简单。


再打个比方,左边就是直接拿一套固定的配方做菜,不管食材是什么。右边每次不同的食材调整配方,确保做出来的菜更适合当前的食材。你说哪个更香呢?

这么看 Mamba 的思想也不复杂啊,本质上就是拿 LSTM 的门控思想移植到了 SSM 模型上,放开了时不变的约束放成非线性系统。。

注意:这里的 B/L/N/D 符号乍一看让人很困惑,其实就是张量的维度。

B:批次大小(Batch size)。表示一次输入的数据量的大小。

L:序列长度(Sequence length)。表示每个序列中包含的时间步数。

N:特征维度(Feature dimension)。表示每个时间步的特征数量

D:输入特征维度(Inputfeature dimension)。

对左边的传统 SSM 模型,参数矩阵长这样,都是静止的

Mamba 的参数增加了L输入序列长度,因为是并行计算,且为时变参数,所以每个时间步的参数都不同,需要学习 L长序列时间步长的参数

其中步长大小 delta 像是个放大镜观察窗口,影响信息处理的焦点。步长较小时模型倾向于忽略具体的单词,而更多地依赖于之前的上下文信息。你可以简单的认为,就是靠着它,实现了注意力的选择。拿着放大镜忽远忽近的看。

另外,原文没有详细解释这几个选择函数,让人有些困惑。我这里都给你补上了。
SB(x)= LinearN(x),Sc(x)= LinearN(x),都是线性投影,这是种常见的神经网络操作,用于将输入数据转换到一个新的空间或维度。这里的 Linear 表示是用线性层来学习这几个函数。
SΔ(x)= BroadcastD(Linear(x)),广播是一个数组操作,它使得维度较小的数组能
够与维度较大的数组进行算术操作。
Ta= softplus,这是个平滑的非线性函数,通常用于网络中以添加非线性特征并帮助网络学习复杂的模式。

经过这样的优化设计,最终希望达到一个什么样的效果呢?图2给了一个示意图

左边是 LTI的效果,输出只能对规则的输入特征进行发现,而右边上面能自己找重了,带色的尽管开始间隔大小不一,但都能找出来排好队。右下是联想能力的体现再看到黑的后就想到以前后面应该跟着蓝色的。也就是说,对于非线性时变数据备了很强的特征捕捉能力。

3.核心原理:流体力学与李指数映射

明白了上面的内容,你只能算是知其然,还没有知其所以然。梗直哥带你从更高角度来理解 Mamba 的精髓,这部分内容的理解其实是哥的发挥,已然超出原文。Transformer 描述的是粒子运动,通过自注意力机制映射动态调整每个输入的权重,类似粒子间通过牛顿力学相互作用力来动态调整自己的轨迹。训练的过程,就是在用牛顿力学拟合粒子轨迹,每个输入(粒子)独立计算与其他输入的关系。
而 Mamba 描述的是流体运动,通过李指数映射来建模时空结构。流体运动描述的是连续介质中的分子集体行为,运动是整体的,内部各点之间有强烈的相互关系和依赖。流体的每个部分都受到整体流体运动的影响,通过内部压力、粘性等因素相互作用。这更符合记忆的本质,因为记忆系统具有连续性、动态变化性和整体关联性,这些特性与流体的性质非常相似。流体模型能够更好地描述记忆中的信息如何相互关联、如何随着时间和新信息的出现进行动态调整和整合李指数映射(Lie exponential map)是一种数学工具,用于描述和分析一个向量场如何沿着另一个向量场发生变化,比如流体力学、电磁场、广义相对论的时空结构等解决了动态系统中相互作用的描述。它是群论和微分几何中重要的概念,来源于李群和李代数的理论,是挪威数学家索菲斯 李引入的。

如果把记忆的流淌比作一个水流管道系统,可以看做一个“李群”,进行各种复杂变换(比如旋转、推移等)。固定矩阵A就是主管道(全局演变路径),类似于流体运动的全局关系,让系统状态更新有固定的全局路径和规则,因此能表现出更高的灵活性和适应性。Bt/Ct就是阀门或旋钮,delta这个离散化因子,就像是流体力学中的时间步长,决定流体运动的离散时间点。选择机制就像是根据具体情况选择和调整旋钮,控制流体在管道中的流动路径。
训练 mamba 的过程就是用李指数映射拟合流体力学动态系统,找到主管道 A,调整阀门和旋钮 Bt、Ct、At,获得最优流体流动路径,让模型能在高维特征空间中进行高效导航和决策。
想象一下:你站在输入 x_t和隐状态 h_t-1构成的向量场中,顺着记忆箭头(h_t-1的更新方向)的方向走,看其他箭头(系统各部分)是如何变化的。这就是流体力学中向量场间的相互作用。

Transformer 的自注意力机制粒子运动强调个体的独立性和动态调整,灵活性高,能动态调整权重,捕捉复杂的上下文依赖关系,但计算复杂度高,资源消耗大。Mamba流体运动强调整体的连续性和全局关系,借用独特的矩阵 A的固定性,提供了稳定性和确定性,通过李指数映射实现高效状态更新和决策。
我噻,绕了这么大一个弯子,其实就是在原来的 RNN 结构上增加了一些类似 LSTM 的门控机制嘛。idea 虽然不难,但难在认知深度是否到位,是否能够举一反三。此外,魔鬼在细节,明白了核心思想,我们接着再来看下。

4.实现细节和网络结构

这部分主要研究如何充分利用 GPU 实现选择性 SSM 的并行计算,也就是前面的图和算法。原文细节很多,大量引用了前人的工作,读起来有些费劲,尤其在没有阅读之前文章的情况下。
简单说,就是努力解决好“既要又要”“的问题,要立又要当立住表现力强的人设需要隐状态维度够大,而要当,速度和内存不能牺牲。为此,提出了三种创新的解决方案:内核融合、并行扫描和重计算。

1)所谓的内核融合:就是把离散化和循环在 GPU SRAM 内存中实现,快然后加载和存储参数 ABC矩阵都用 HBM 高带宽内存。这俩简写对 GPU 不熟的同学可能不知道,其实就是一种分层提升效率的新技术,前者快但内存带宽小,后者慢但是带宽大。这是随着 AI崛起的芯片新技术。

2)并行扫描:这是啥意思呢?本来 SSM 好不容易能用卷积并行运算了,但是放开 LTI假设后又回归 RNN 动态模型,每次 Bt不一样导致并行卷积不行了。Mamba为此做了改进,提出了并行扫描技术,scan 就是操作或处理的意思,
原文基本看不懂到底干了什么怎么实现的,看下图也很难理解。我人话讲下就懂了每个状态 H相当于一个人,看它对应的这条处理线程。自己忙活自己的,吃着碗里看着锅里,当别人的饭做好后,就抢过来用一下,所以某种程度上实现了并行计算。

3)重计算:这步是为了避免存储反向传播所需的中间状态,在输入从 HBM 加载到SRAM 时在反向通道中重计算。这部分的更多细节在附录 D中。简单小结:这部分讲解的就是内存管理、并行计算和动态计算方面的执行细节。开始看不懂不影响整篇文章主体内容的理解。可以先放放。

好,到这里我们总算把 Mamba 的核心原理讲完了,那它的网络结构具体是怎么实现的呢?是不是有点“干呼万唤始出来,犹抱琵琶半遮面”。
“Mamba”这个名字来源于黑曼巴蛇 (Black Mamba),以速度和致命著称。这种命名意在传达该架构的速度、灵活性和高效性,反映出它在处理和转换数据方面的强大能力。其实就是前面 selective SSM 的一种具体实现或者说封装。
看下面两幅图就都明白了。原文给出的这幅图讲解了它的来源,网络结构延续了 H3 作为标准的 SSM 模型的实现,简单说就是用线性投影+卷积 +SSM,这个只适用于 LTI 系统。现在改成时变系统了,怎么弄,又借鉴了门控 MLP的执行,通过梯形的投影操作实现数据准备。二者合成的 mamba就是右者。除了梯形外,还有激活函数进一步实现非线性。

下图是放大版,看的更清楚,修改了一下它用线性投影实现维度调整,以及部分特征提取与转换,输出时用于数据压缩。增加了卷积层捕捉局部的时间依赖性

Selective ssM(状态空间模型)相当于把时序链条又折叠回去,肚子里包含了sA(x)和 T_Δ。用来捕获更广泛的依赖性,包括长距离的时间依赖性和复杂的内容依赖关系。Silu 函数与算法中的 softplus 函数类似,都是用来增加非线性。其实这个 silu 是工程上人为进一步增加的非线性,增强模型表达力。此外,增加卷积模块是为了捕获局部时空特征。

封装后就是一个的模块,如同 transformer 的 decoder 一样可以实现进一步的堆叠,形成大模型。把这个模块和前面的框图对比学习,同时要清楚的意识到哪里是对应的哪些是工程化添加的边角料。当然,这也是为啥再单独起一个名字 Mamba 的原因毕竟和前面讲的 selective ssM 不完全一样了。
到目前为止,我们已经讲完了 3.4 部分,原文 3.5 部分是对上述结构的一些更具体解释,包括在特定情况下,可以退化为类似 RNN 门控机制。再看后面关于选择机制的解释,这篇文章的一大特点就是旁征博引,说实话读起来不太容易,估计很少有人能原汁原味的读懂,大多数都在道听途说或者直接调库拉倒。但真懂了,你的认知绝对不一样。这部分涉及更细的一些内容,不建议一开始一猛子扎太深容易晕,先抓整体逻辑。

接下来看看实验内容。

四、实验

对比 transformer/RNN和Mamba 的训练与推理性能。transformer 训练快推理慢,RNN 训练慢推理快,Mamba结合了二者的优点,都快。实验部分很全面也是一大特点。我们重点看结论。

1.合成任务验证选择机制

选择性复制任务要求模型能够记住并复制序列中的特定单词。表- Mamba 架构与选择性机制结合后的表现优秀,(S6):准确率为 99.8扩展序列长度任务要求模型看到一个二元组(如“Harry Potter”)时,能够记住“Harry并在序列中再次出现时预测“Potter”。Mamba架构,也就是最上面的棕色线,比其他方法要好两倍。

2、语言模型预训练

左图是较短右图是较长的序列长度,
对比了不同模型,横轴为 FLOPs 计算复杂度由低到高,纵轴为困惑度 Mamba 模型最低。它是第一个无需注意力机制就能在扩展定律 scaling Laws 上匹敌强大Transformer++模型的架构。

3.DNA 序列

由于大型语言模型的成功,人们开始探索将基础模型范式应用于基因组学。DNA被视为一种由有限词汇组成的离散序列,需要模型处理长程依赖。实验和图表展示了Mamba 架构在 DNA 建模任务中的卓越性能,特别是在处理长序列和扩展模型大小方面。

横轴为参数量,纵轴为困惑度。Mamba(橙色线)的困惑度左图随着参数数量的增加(从约 200K 到约 40M)显著下降,右图随着序列长度保持稳定。下面是物种 DNA分类任务的微调准确率和不同数据集上的扩展定律。随序列长度,Mamba性能更好。

4.音频例子

音频波形建模和生成问题也是序列建模任务。

5.训练推理效率分析

训练效率:Mamba 的扫描实现比标准实现快 40 倍,处理长序列时时间增长最慢(橙线)。对比蓝线,最右边512时,1ms/0.025ms=40倍
·推理效率:Mamba 在推理阶段的吞吐量比Transformers 高5倍,特别是在大批次处理时,显著优于其他模型。蓝色条的高度明显高于其他模型。此外,文章最后还给出了消融实验分析架构。

6.消融实验分析

主要结论包括:
Δ是最重要的参数,其次是B和C的组合使用,这个好理解,选择性主要就靠它来确定几个函数S_B,S_C,S_delta。随机初始化表现较好,复杂初始化效果较差。增大 N(SSM 状态维度)显著改善性能,成本增加微乎其微,但只有在B和C也选择性时才有效。这些发现验证了选择性 SSM 在语言建模任务中的有效性和优势。

五、代码实现

GitHub:https://github.com/state-spaces/mamba

Mamba 类:
主要用于实现选择性状态空间模型(SSM),通过一维卷积和状态更新来处理输入特征。
使用线性投影和激活函数来调整特征维度和计算时间步长。
通过选择性扫描函数来高效地更新状态。

六、小结与探讨

  1. Transformer注意力机制的窗口小了效果差,大了计算复杂度平方暴涨,的死穴:两难。时序问题空间化出现了瓶颈,单纯的注意力机制有缺陷,并非万能,不是机制本身有问题,而是实现方式。这促使人们思考更换视角。
  2. SSM 模型:从 LTI连续空间线性时不变系统讲起,类似 RNN 离散化,CNN 并行化,但都没离开线性+参数矩阵时不变两个假设。
  3. Mamba 原理:提出了选择机制,其实就是时序门控单元。通过离散化函数 delta 这个非线性总开关控制 ABC矩阵三个小旋钮开关,相当于放开了时不变约束,实现时变。与此同时,在选择性 SSM 这个核心模块之外,还通过增加激活函数进一步提升模型表征力,利用卷积层增强空间特征捕捉力。可以认为Mamba=RNN(变形GRU)+CNN+选择性注意力机制
  4. 思想精髓:流体力学系统+李指数映射+固定矩阵A最优主管道=独特的处理方法
    transformer 横行霸道7年了,七年之痒也该到了。凭什么注意力机制就是王者,记忆的问题还用时序解决就不行吗?只不过平衡好时空关系,兼顾准确与效率就可以了。Mamba 的出现让人们看到了一种新的可能,传统模型依然可以重见天日。无数成熟模型,依然可以老当益壮,重上战场,面对大模型的时代再创辉煌。从某种程度上说选择性机制又何尝不是一种注意力机制,这个视角看起来,Mamba 并没有丢掉它,而是换了一种方式结合了时序模型和注意力机制的优势,以另外一种面目示人。RNN 如此,更何况 LSTM 呢!

裸眼3D相关产品

随着AIGC等前沿技术的迅速发展,互联网正在逐步从2D转向3D,我们正在迎来一个体验升维的新时代。除了“人戴眼镜”的XR、元宇宙设备,联想也在探索“屏戴眼镜”的裸眼3D技术。这种技术使用户无需佩戴任何额外设备,就能体验到真实的3D效果。基于联想研究院的低延时双眼追踪、跨应用3D渲染引擎,以及业界首个支持4K超高清的实时2D内容转3D等技术,联想推出了全球首款27英寸4K裸眼3D显示器,并在1月份的国际消费电子展(CES)上进行了展示,持续引领下一代设备创新潮流。联想的裸眼3D显示引擎代表着当今显示技术的一个重要创新趋势,它以尖端的裸眼3D显示技术作为核心,创新性地构建了一个全面的3D系统级显示空间。这一技术的核心在于其能够无缝整合包括自主研发的实时高清2D转3D应用和跨应用渲染显示应用在内的一些列应用生态,从而使用户能够沉浸在一个逼真的3D环境中,体验3D世界中的生态内容

通过联想的这一革命性技术,用户能够体验到前所未有的3D视觉效果,无论是观看电影、玩游戏还是进行专业级的设计工作,都能获得更加立体和真实的感觉。此外,联想裸眼3D技术及解决方案能够支持丰富的3D生态资源,为用户提供广泛的3D内容选择,不仅增强了娱乐体验,也为专业应用,如教育、医疗和工业设计等领域开启了新的可能性。

值得一提的是,联想的裸眼3D显示技术及解决方案也具有很高的易用性。它能够智能识别用户的观看习惯,能够根据不同的观看角度和距离,实时调整3D效果,从而确保最佳的视觉体验。联想裸眼3D显示产品及技术解决方案的推出,不仅展示了联想在显示技术领域的创新实力,也为整个3D显示行业的发展开辟了新的道路。

相关链接:https://mp.weixin.qq.com/s/iYxyyWJfroIvbOPDg4AY1g

https://mp.weixin.qq.com/s/P52TiW0WM9rQtBe4nLMiiA

Real-Time Radiance Fields for Single-Image Portrait View Synthesis 论文

选自SIGGRAPH 2023实时渲染领域论文。文章实现了最新的单图像实时合成三维视角的技术。

论文题目:Live 3D Portrait: Real-Time Radiance Fields for Single-Image Portrait View Synthesis
论文链接:https://research.nvidia.com/labs/nxp/lp3d/

Paper PDF

本文提出了从单张图像实时推理渲染照片级 3D 表示的单样本方法,该方法给定单张 RGB 输入图像后,编码器直接预测神经辐射场的规范化三平面表示,从而通过体渲染实现 3D 感知的新视图合成。该方法仅使用合成数据进行训练,通过结合基于 Transformer 的编码器和数据增强策略,可以处理现实世界中具有挑战性的输入图像,并且无需任何特殊处理即可逐帧应用于视频。

INTRODUCTION

随着NeRF的提出,三维视觉技术得到快速的发展。三维重建也是非常有意义的工作,其中,单张肖像实现实时三维视角的合成将推动AR、VR、3D远程会议的发展。

基于此,作者提出了该技术的最新方法,该技术的原文表述是infer and render a photorealistic 3D representation from a single unposed image (e.g., face portrait) in real-time.

先来看现有的方法,一般用NeRF+GANs实现3D感知图像生成。其中比较有名的一项技术是EG3D,EG3D的提出者也是本论文的共同作者之一,本文的工作是在EG3D的基础上展开的。

EG3D提出了一种高效的三平面3D表示(triplane 3D representation)(具体细节会在后续给出),并且能够达到与2D GANs相同的实时渲染质量。训练完成后,测试时微调(test-time fine tuning)完成单图像三维重建。但这种方法会有一些问题:

  • NeRF的训练通常需要优化目标(careful optimization objectives)和3D先验(additional 3D priors)
  • 测试时优化需要准确的相机姿态作为输入或优化相机姿态
  • 上述两点优化时耗时的,限制了实时应用

与以往重复使用预训练的generator不同,本篇论文训练了一个端到端的编码器(encoder end-to-end)用于直接从单个输入图像预测三平面3D特征。与以往依赖于多视图真实图像的采集相比,本文不需要获取真实图像,也不需要PBR(physically-based rendering)绘制那样耗时。相反,作者使用预训练的3D GAN生成的多视图一致的合成数据来监督三平面编码器,以便进行新视图合成,再结合数据增强策略和基于Transformer的编码器搭建好模型。在文章中作者展示了对人脸和猫脸三维重建的结果,但作者表示任何3D感知图像generator适用的类别,该模型同样适用。

概括下文章的工作贡献:

  1. 提出了一种前馈编码器模型,直接从输入图像推断三平面3D表示。不需要测试时优化。
  2. 提出了一种新的策略,仅使用从预训练的3D感知图像生成器生成的合成数据
  3. 结合基于Transformer的编码器和实时增强策略,该方法可以处理具有挑战性的输入图像。

2. RELATED WORK

2.1 Light Fields and Image-Based Rendering

传统的方法要么需要许多视图样本,要么需要光场相机作为训练数据。最近提出的NeRF结合3D隐式表示,运用体渲染的方式合成视图,但仍需要大量输入照片。

2.2 Few-shot novel view synthesis

最近一些扩展NeRF的工作用3D隐式表示完成了单图像合成,用到3D卷积、Transformers 等方法。但是这些方法都不是实时生成新视图的,并且都需要多视图图像来训练模型。而作者的方法只需要从预先训练的3D GAN生成的合成图像,这种3D GAN是由单视图图像的集合训练的。

2.3 Learning with synthetic data

当没有基准真实数据(ground truth data )时,合成数据为训练深度学习模型提供了有用的监督。这往往还需要额外的步骤来适应真实图像。

2.4 3D-aware portrait generation and manipulation

最近,3D感知图像生成方法开始解决从单视图2D图像集合中无条件生成逼真的3D表示的问题。结合神经体积渲染(neural volumetric rendering)和生成对抗网络(GANs),最新的3D GAN方法能够生成高分辨率多视图一致图像。作者采用EG3D 的三平面3D表示,实现单视图新视图合成。

2.5 3D GAN inversion

GAN inversion在2D领域取得很大进展,现有的3D GAN inversion方法将给定的图像投影到预训练的StyleGAN2 latent space上,并且在测试时需要摄像机姿态( approximate camera pose )和生成器权重微调( generator weight tuning),以重建域外输入图像。与同时期的工作不同,作者的前馈编码器将未定位的图像作为输入,并且不需要针对摄像机姿态的测试时优化。

2.6 Talking-head generators

给出单个目标肖像和驱动视频,这种Talking-head生成方法主要通过视频数据集训练,侧重于通过操纵2D肖像中的头像姿势和表情来生成talking-head视频。因此,这种方法不预测视点渲染的体积表示和三维几何信息。所以不予比较。

3. PRELIMINARIES: TRIPLANE-BASED 3D GAN

NeRF采用完全隐式的表示,使用神经网络来表示整个三维空间的辐射场,但计算往往需要花费大量时间。首先,对前沿的3D GAN方法EG3D进行概述。EG3D从单视图图像集合和相应的噪声相机姿势中学习3D感知图像生成,EG3D使用混合三平面表示来调节神经体积渲染过程,其中三个典型平面 ��,��,�� 都存储了三个2D特征网格 (feature grids)。使用StyleGAN2生成器,EG3D将噪声向量和相机姿势映射到三平面表示 �∈R256×256×96,对应于3个轴对齐的平面,每个平面具有32个通道。这些特征调节神经体积渲染。

Our hybrid explicit–implicit tri-plane representation (c) is fast and scales efficiently with resolution, enabling
greater detail for equal capacity.

简而言之,将特征存储在正交的三平面(triplane)表示中,通过特征值叠加计算出特定空间点的颜色、体积密度,通过NeRF进行训练,训练得到的参数也保存在三平面表示中。

4. METHOD

作者的目标是将EG3D生成模型的信息提炼到一个前馈编码器的pipline中,这可以直接将未定位的图像映射到一个规范的三平面3D表示,这里的规范表示,对于人脸,头部的中心是原点。该pipline仅需要单次前馈网络传递,从而避免了花销大的 GAN inversion过程,同时允许实时重新渲染输入的任意视点。

作者的工作主要集中在图像到三平面编码器和相关的合成训练方法上,使用EG3D的MLP体积渲染器和超分辨率架构,端到端地训练所有组件。下图是整个模型的推理和训练部分,是文章的重点。

图3图 2:推理和训练管线。在推理阶段,我们以单张图像作为输入,使用 DeepLabV3 提取低分辨率特征。这些特征经过 ViT 和卷积输出,与高分辨率特征串联,再通过 ViT 和卷积解码为三平面表示,从而为体渲染过程提供条件,生成深度、特征、颜色和超分辨率图像。在训练阶段,我们从 EG3D 中采样一个身份,渲染两个监督视图。第一个视图作为编码器输入,预测三平面,然后根据这两个视角进行体渲染,并将渲染结果与 EG3D 的结果进行比较优化。

我们的目标是将训练好的 EG3D 生成模型知识蒸馏至前馈编码管线,该管线只需一次前馈网络传播即可将单张图像直接映射为规范的三平面 3D 表示,同时允许对输入在自由视角下进行实时渲染。我们的贡献集中于图像到三平面编码器和相关的合成数据训练方法。我们使用 EG3D 中的 MLP 体渲染器和超分辨率架构,并对所有组件进行端到端的训练。

TensoRF-将体素网格分解为向量-平面 张量积形式的低秩张量之和

TensoRF: Tensorial Radiance Fields 是2022 年ECCV上的论文

论文地址:https://arxiv.org/abs/2203.09517

源码地址:https://github.com/apchenstu/Te

主页: https://apchenstu.github.io/TensoRF/

张量辐射场是一种新颖的建模和重建辐射场的方法。跟NeRF使用多层感知机隐式建模场景表达的方式不同,TensoRF将场景建模为一个四维的张量,张量中的每一项代表了一个体素,体素内包含了体积密度和多维的特征信息。论文的中心思想是使用张量分解技术,将4D张量分解成多个低秩的张量分量,以小见大

从上图中可以看出,张量辐射场可以达到:

1. 更好的质量

2. 更快的速度

3. 更小的模型体积

张量辐射场除了渲染质量更好之外,与同时期使用体素方式的研究相比占用更少的内存使用。张量辐射场在30分钟内就可以完成重建,并且模型的大小小于4M,这比NeRF更快,以及更小巧。使用VM分解方式的可以达到10分钟的时间,以及更好的质量,模型大小小于75M。TensoRF是第一个从张量的角度来看待辐射场建模,并提出了辐射场重建作为一个低秩张量重建的问题

EG3D: Efficient Geometry-aware 3D Generative Adversarial Networks

https://nvlabs.github.io/eg3d/

将三维坐标对应的体素特征定义为三个正交投影平面的特征

目前的3D GAN要么过于计算密集型,要么缺少多视图一致性,该方法加强了计算效率并且提升了重建质量。使用了显式-隐式结构,不仅生成多视角一致性图片,还能生成高质量3D几何。通过解耦feature generation和neural rendering,该架构就可以用上SOTA的2D CNN生成器比如styleGAN2。

使用单视角2D图片集,无监督地生成高质量且视角一致性强的3D模型,一直以来都是一个挑战。现存的3D GANs要不计算量巨大,要不无法保证3D-consistent。前者限制了生成图片的质量,后者无法解决视角一致性的问题。这篇工作提出的新网络架构,能又快又好地生成3D geometry。

这篇工作提出了两个方法。首先,作者用显隐混合的方法,提高了时空效率,并有较高的质量。第二,提出了dual-discrimination策略,保证了多视角一致性。同时,还引入了pose-based conditioning to the generator,可以解耦pose相关的参数,保证了输出的视角一致性,同时忠实地重建数据集隐含的pose-correlated参数。

同时,这个框架能解耦特征生成和神经渲染,从而可以直接使用SOTA的2D GANs,比如StyleGAN2。

contribution

  • 引入一个基于三平面的3D GAN架构,计算效率高而且效果质量好
  • 提出一个3D GAN训练策略,通过dual discrimination和generator pose conditioning加强多视角一致性,建模出位置相关的属性分布(比如表情等)
  • 在FFHQ和AFHQ上有最佳的非条件3D感知视图合成结果,生成高质量3D几何

Tri-Plane Hybrid 3D Representation

我们需要一种高效且表达力强的3D表示方法,来训练高分辨率的GAN。

这里以单场景过拟合(SSO)来证明三平面表示法的有效性。

每个平面都是N×N×C的,其中C是通道数。

每次查询一个3D坐标x∈R3,将其投影至每个平面上,用双线性插值得到3个特征向量Fxy,Fxz,Fyz

将这3个特征向量累加后,通过一个轻量级的decoder,也就是一个小型MLP,输出RGB和Density

再用volume rendering得到最终图像

这样做的好处是,decoder规模很小,赋予了显式表示更强的表达能力,并减小了计算压力。

在新视角合成的实验上,三平面紧凑而富有表达力,以更低的计算成本,得到了更好的表现,三平面的时空成本是O(N2)的,而voxel是O(N3)的,最重要的是,用2D GANs生成planes,就能得到3D表示。对比NERF,通过显式的投影降低了计算复杂度同时没有减少表达性能。做了个对比实验,baseline是mip-nerf和voxel grid,这里的tri-plane实验中的MLP用了傅里叶feature编码。在同样地内存消耗下运算更快,在同样地结构下速度快且内存消耗少。

Pipeline

CNN Generator Backbone & Rendering

三平面的特征,是由StyleGANA生成的,同时Latent Code和相机参数会输入Mapping Network,生成一个Intermediate Latent Code

StyleGAN2被修改后,输出256×256×96256×256×96的特征图,之后被reshape成32通道的平面

接着从三平面采样,累加后,通过轻量级decoder,生成density和32通道的特征,然后由neural volume renderer生成2D特征图(而非RGB图)

Super Resolution

三平面仍不足以直接生成高分辨率图,因此添加了超分模块

使用了2个StyleGAN2的卷积层,上采样并优化32通道特征图,得到最终的RGB图像

Dual Discrimination

对StyleGAN2的discrimination做了两个修改

首先,添加Dual Discrimination以保证生成图片的视角一致性,即保证原始图片(低分辨率生成的)和超分后的图片的一致性,将低分辨率图片直接双线性上采样后,和超分图片concat形成6通道图片,真实图片也模糊后的自己拼接,也形成6通道图片,进行判别。

这样做,不仅能encourage最终输出和真实图片的分布匹配,也让神经渲染器尽可能匹配下采样的真实图片,并让超分图片和神经渲染保持一致。

其次,作者对discriminator输入了相机内外参,作为一个conditioning label,从而让generator学到正确的3D先验。

Modeling Pose-Correlated Attributes

真实世界数据集如FFHQ,相机姿态与其他参数(如表情)有关联

比如,相机角度与人是否微笑是有关系的,这会导致生成结果视角不一致

因此,为了更好的生成质量,需要将这些参数与相机姿态解耦

这篇工作使用了Generator Pose Conditioning解耦pose和其他参数

Mapping Network不仅接受Latent Code,还接受相机参数做为输入

给予backbone相机姿态作为先验,从而让视角可以和生成产生联系

也就是说,generator可以建模数据集中隐式的pose dependent biases,更忠实地反映数据集特征

为了避免在渲染时因相机移动产生视角不一致,在渲染时保持generator输入的相机参数不变

ICCV’23|全场景单目深度绝对距离估计

作者丨尹炜  转自丨极市平台

本文提出了一个统一相机空间(canonical camera space)变换模块,明确解决了尺度模糊性问题,并且可以轻松地嵌入到现有的单目模型中。配备了论文的模块,单目模型可以在800万张图像和数千个相机模型上稳定地训练,从而实现了对室外图像的零样本泛化,其中包含未见过的相机设置。该论文所提方法也是第二届单目深度估计挑战中的冠军方案,在比赛的各个场景上都排第一。

Arxiv: https://arxiv.org/abs/2307.10984

Github: https://github.com/YvanYin/Metric3D

大家好,在这里给大家分享一下我们最近被 ICCV2023 接受的工作《Metric3D: Towards Zero-shot Metric 3D Prediction from A Single Image》。如何从单张图像恢复出绝对尺度的深度,并且重建出带有绝对尺度的3D场景是一个长期待解决的问题。当前最先进的单目深度估计具体分为两类:

第一类方法的目标是恢复准确的绝对深度,但是这一类的方法泛化性比较差,只能处理单个相机模型,并且由于不同相机存在尺度模糊性,导致无法执行混合数据训练来提升域泛化性。第二类方法针对性解决深度模型的零样本泛化问题,如LeReS/MiDaS/DPT/HDN等文章的方法,经过大规模混合数据集训练,并约束模型只学习相对深度。因此,该类方法都没法恢复绝对尺度。

在这项工作中,论文表明零样本单目度量深度估计的关键在于大规模数据训练以及解决来自各种相机模型的尺度模糊性。论文提出了一个统一相机空间(canonical camera space)变换模块, 明确解决了尺度模糊性问题,并且可以轻松地嵌入到现有的单目模型中。配备了论文的模块,单目模型可以在800万张图像和数千个相机模型上稳定地训练,从而实现了对室外图像的零样本泛化,其中包含未见过的相机设置。

下图(论文首页图)通过两个下游的应用,即SLAM和物体测量,来展示了针对零样本的泛化性以及尺度恢复的准确性。可以看出测量的结构尺寸和GT非常接近。值得注意的是,mono-slam系统通过引入预测的深度,能够消除scale drift的问题,并且slam系统能够实现metric mapping.

主要贡献:

  1. 提出了一种标准空间相机变换(canonical camera space transformation)和对应的逆变换(de-canonical camera space transformation)方法来解决来自不同相机设置的深度尺度模糊性问题。这使得论文方法可以从大规模数据集中学习强大的零样本(zero-shot)单目度量深度模型;
  2. 在模型训练过程中,论文还提出了一种随机提议正则化损失函数,有效提高了深度准确性;
  3. 论文方法在第二届单目深度估计挑战中获得了冠军,在比赛的各个场景上都排第一。
  4. 论文的模型在7个零样本基准测试上达到了最先进的性能。它能够在户外进行高质量的3D度量结构恢复,并且在几个下游任务中受益,如单目SLAM、3D场景重构和测量学。

CVPR2023挑战赛结果:

方法:

1.什么是尺度模糊性?

论文针对混合数据中的尺度模糊性做了详细的讲解。如下图所示:

上图通过一个简单的例子来说明什么是尺度的模糊性。 不同相机在不同距离下拍摄的照片示例。仅从图像内容来看,人们可能会认为最后两张照片是由同一个相机在相似的位置拍摄的。但实际上,由于拍摄图片采用了不同焦距的相机,这些照片是在不同的位置拍摄的。因此,相机的内部参数的变化导致了尺度的不确定性。对于从单张图像估计度量是至关重要的,否则问题就是不适定的。

2.什么影响深度的预测?

针对相机的传感器尺寸、像素的大小、还有相机的焦距,论文有如下观察。

2.1 传感器尺寸和像素大小不会影响度量深度估计

如下图所示,当用不同像素大小的相机拍摄同一个物体时候,虽然像元大小不同,物体在图像的分辨率不同,但是距离是一致的。因此,不同的摄像机传感器不会影响度量深度的估计。此外,传感器的尺寸只是影响了图像拍摄的视野,因此也不会影响深度的估计。

2.2 焦距对于深度估计的准确性非常重要

如下图所示,由于焦距不同,不同距离的物体在相机上的成像大小相同,在网络训练的时候,相似的图像,但是标签却不一致,就导致了一对多的标签映射,因此会导致网络混淆,影响训练。

3.方法的pipeline

方法的pipeline如下图所示。

本文提出了2种训练方法。两种方法都可以很容易的嵌入到当前任意的单目深度估计的框架中。整个方法的核心思想就是建立一个标准相机空间��, 然后将所有的训练数据都映射到这个空间,那么,所有的训练数据都可以被看做是同一个相机拍摄的。论文提出了2种方法进行这种变换,一种是通过变换训练图像,另一种是变换变换GT label。详细如下:

方法1:将标签进行转换

深度的模糊性是针对深度的。因此,第一种方法直接通过转换ground truth深度标签来解决这个问题。在训练阶段,通过乘以一个缩放因子来转换深度标签。在推理阶段,预测的深度处于规范化空间,需要进行反规范化转换以恢复度量信息。

方法2:将输入图像转换

第二种方法是将输入图像转换为模拟规范相机成像效果。具体来说,在训练阶段训练图像根据焦距按比例缩放resize,相机光心也进行了调整,然后进行随机裁剪图像用于训练。在推理阶段,反规范化转换将预测深度调整回原始大小而不进行缩放。

4.监督

论文采用了各种约束。包括LeReS论文提出的pair-wise normal regression loss,VirtualNormal论文提出的虚拟法矢的loss,还有Scale-invariant Log loss。除此之外,该论文还提出了一种新的loss,叫随机提议标准化损失(RPNL)。尺度平移不变损失被广泛应用于仿射不变深度估计,但它会压缩细粒度深度差异,特别是在近距离区域。因此,论文从真值深度和预测深度中随机裁剪若干小块,然后采用中位绝对偏差标准化对它们进行处理。这样,可以增强局部对比度。整体loss如下。

�=�PWN+�VNL+�silog +�RPNL

实验

1.零样本泛化测试

以下的几个表格都是做的零样本泛化实验。其中表格1中,在NYU和KITTI上和当前在他们上fitting的SOTA方法做了对比,发现在不引入该数据做训练,模型就能够恢复出精确的尺度。表格3,论文做了更多的这种零样本泛化的对比,比较了6个数据集。

另外,论文与SOTA仿射不变深度估计方法在5个zero-shot基准上的比较。论文的模型明显优于以前的方法

2.下游应用实验

三维重建实验: 论文展示出,直接将预测的连续帧深度重建成点云,并与各类的方法做了对比,包括MVS的方法,放射不变形深度估计的方法,无监督深度估计的方法,videodepth 深度估计的方法等做了对比,发现整体重建精度上会更好。

SLAM实验: 在如下的表格中,论文的度量深度估计方法可以作为单目SLAM系统的强大深度先验。在KITTI数据集上,将论文的度量深度直接输入到最先进的SLAM系统Droid-SLAM中,结果显示论文的深度使得SLAM系统的性能显著提升。

在ETH3D SLAM数据集上,论文的深度同样带来了更好的SLAM性能,并且能够极大的缓解尺度漂移的问题。

从下图可以看出,droid-slam系统在输入预测的深度后,轨迹和GT更加接近,并且没有尺度漂移的问题,见下面第一个例子。

3.In-the-wild 测量实验

论文从Flickr下载了一些图片,通过从metadata中读取相机的像元大小以及焦距(以mm为单位),粗略估算出相机的焦距(以像素为单位),从而预测出metric depth,然后重建出点云。从点云中可以测量出一些结构的大小,发现和GT相差并不那么大。

4.更多的深度图展示:

总结

本文解决了从单目图像重构三维度量场景的问题。为了解决由不同焦距引起的图像外观深度不确定性,论文提出了一种规范化相机空间转换方法。使用论文的方法,可以轻松地合并由10,000个相机拍摄的数百万数据,以训练一个度量深度模型。为了提高鲁棒性,论文收集了超过800万数据进行训练。几个零样本评估展示了论文工作的有效性和鲁棒性。论文进一步展示了在随机收集的互联网图像上进行计量学测量以及在大规模场景上进行密集建图的能力。

eNERF-实时三维人体重建

浙大三维视觉团队提出ENeRF,首次实现动态场景的实时照片级渲染 (SIGGRAPH Asia 2022)

论文链接:https://arxiv.org/abs/2112.01517

论文代码:https://github.com/zju3dv/ENeRF

论文主页:https://zju3dv.github.io/enerf/

摘自: https://zhuanlan.zhihu.com/p/586595657

1.1 论文的问题描述

输入是多个相机在固定机位拍摄的某个动态场景的多目视频,论文希望能生成该动态场景的自由视点视频。该问题有许多应用,例如虚拟呈现,电影游戏制作等。

1.2 当前方法在这个问题上的局限性

为了支持自由视点视频的应用,自由视点视频的渲染效果需要足够逼真,生成制作需要足够快,生成后在用户端的渲染也需要足够快。

最近一些方法基于隐式神经表示,利用体渲染技术优化场景表示,从而制作自由视点视频。D-NeRF[Pumarola et al., CVPR 2021] 利用隐式神经表示恢复了动态场景的motions,实现了照片级别的真实渲染。但是,这一类方法很难恢复复杂场景的motions,他们训练一个模型需要从几小时到几天不等的时间。此外,渲染一张图片通常需要分钟级的时间。

基于图像的渲染技术克服了以上方法的一些问题。第一,对于动态场景,IBRNet[Wang et al., CVPR 2021]能够把每一帧图像都当作单独的场景处理,从而不需要恢复场景的motions。第二,基于图像的渲染技术可以通过预训练模型避免每一时刻的重新训练。但是,IBRNet渲染一张图片仍然需要分钟级的时间。

IBRNet[Wang et al., CVPR 2021]

1.3 我们的观察和对问题的解决

为了解决基于图像的渲染技术渲染过慢的问题,论文提出结合显式表示和隐式表示两者的优点。具体而言,我们观察到通过MVS方法预测显式表示,例如深度图像,通常是很快的。利用此显式表示去引导隐式表示的体渲染过程中的采样,能够大幅降低此前方法在空间内密集采样点(包括空地方的点和被遮挡的点)造成的计算开销,从而实现加速。

通过MVS方法快速计算新视角的深度,利用深度仅在物体表面进行采样计算辐射场

2. 论文方法

2.1 基于MVS方法预测新视角的深度图像

我们首先使用MVS方法预测新视角的深度图像。给定标定好的相机姿态,我们利用待渲染的视角空间上临近的图像建立级联代价体,使用3D卷积网络处理代价体获得深度图像以及置信区间。

建立级联代价体预测深度图像以及置信区间

2.2 在场景的表面附近预测辐射场

给定上一步预测的深度置信区间,我们在此区间内采样若干点,通过图像特征和3D卷积网络得到的3D特征体,泛化的预测这些采样点的辐射场和密度。

在深度区间内采样少量点,利用图像特征预测这些点的辐射场,使用体渲染技术得到渲染图像

2.3 使用RGB图像优化ENeRF

在得到渲染结果后,我们使用图像的均方差损失函数端到端的优化网络参数。我们实验发现仅使用RGB图像优化网络参数即可获得高质量的渲染结果。

使用RGB图像优化ENeRF

3. 实验分析

3.1 消融实验分析

我们提供了消融实验分析去研究论文方法的每一步带来的影响。

第一行展示了基线方法(与MVSNeRF[Chen et al., ICCV 2021]相似),每条光线采样128个点,这样有着好的渲染结果,但是渲染速度比较慢。直接降低采样点的数量后,会导致渲染质量显著下降。使用论文提出的采样方法(Depth-gui.)后,能提升渲染质量,同时基本保持比较快的渲染速度。

为了进一步提高渲染速度,论文使用了级联的设计(Cascade Cost Volume),通过我们仔细的设计,我们将速度从9.7FPS提升到20.31FPS。

此外我们研究了额外使用地面真值深度图像来监督网络学习,我们发现它对最后的渲染质量不会有很大的影响,这说明了论文方法使用RGB图像端到端优化的鲁棒性。

ENeRF的消融实验

3.2 与SOTA方法的对比

我们在DTU,NeRF Synthetic以及Real Forward-facing静态场景数据集以及ZJUMoCap和DynamicCap动态场景数据集上进行了和之前方法的比较,我们在渲染速度上实现了较大的提升,并且在渲染质量上取得了有竞争力的结果。

ENeRF与SOTA方法在静态场景上的可视化结果的对比
ENeRF与SOTA方法在静态场景上的量化结果对比
ENeRF与SOTA方法在动态场景上的可视化结果对比
ENeRF与SOTA方法在动态场景上的量化结果对比