代码地址:https://penghtyx.github.io/Era3D/
论文地址:https://arxiv.org/abs/2405.11616
解决了什么问题?
尽管多视角内容生成领域取得了显著的进展,但现有的方案仍然面临着相机先验不匹配、效果差、分辨率低等问题,造成多视角图像的质量很低。这些方案都假设输入图像应该满足相机的预设类型,如相机的焦距是固定的。如果假设不成立,物体的形状就会发生畸变。此外,全图或密集的多视角注意力会造成,当图像分辨率增大时,计算复杂度会出现指数级的爆炸,这使得训练成本非常高。
从单视角图像进行 3D 重建是计算机视觉和图形学的重要任务,它可以应用在游戏设计、VR、机器人等领域。早期的研究大多依赖于直接对体素做 3D 回归,因为 3D 训练数据有限,这会造成效果过度平滑,无法泛化到真实世界中未知的物体上。近来,扩散模型通过在超大规模的视频或图像的数据集上训练,展示了强大的泛化性。这些扩散模型为单视角的 3D 重建提供了有力的工具,有可能从给定的图像中生成出其它视角的图像,实现 3D 重建。
为了利用扩散模型做单视角的 3D 重建,DreamFusion 尝试通过 Score Distillation Sampling 损失函数,从 2D 图像扩散模型蒸馏出 3D 表征(类似于 NeRF 或 Gaussian Splatting),后续的一些论文对此做了改进,提升 3D 模型的质量和生成的效率。但是这些方法收敛都不太稳定,质量也不行。MVDream、SyncDreamer、Wonder3D 和 Zero123++ 直接通过多视角扩散模型来生成多视角图像,然后通过神经重建方法(或大规模重建模型 LRM)根据这些图像重建出 3D 模型。直接生成多视角图像使这些方法比 DreamFusion 更加可控、高效,因此在单视角 3D 重建领域更受欢迎。
要想生成高质量的 3D 重建仍是一个挑战,目前的多视角扩散方法主要存在三个显著的挑战:
- 不一致的预设相机类型,大多数的多视角扩散方法都假定输入图像是由一个相机拍摄的,焦距是固定的。当相机类型或内参不同时,这会造成意外的畸变,如下图所示,Wonder3D 假设有一个正交相机,当输入图像是由一个小焦距的相机拍摄时,就会产生扭曲的 meshes。
- 多视角扩散模型的效率低,通常依赖于多视角注意力层来交换不同视角的信息,生成多视角一致的图像。但是,这些注意力层通常是将 Stable Diffusion 的自注意力层扩展到所有的多视角图像,这叫做 dense multiview attention,如下图 a 所示,会造成计算复杂度和内存占用显著增加。下图展示了不同类型的多视角注意力层。a) 在一个密集的多视角注意力层中,多视角图像的全部特征向量输入进一个注意力模块。b) 对于一个视角和内参任意的相机而言,使用极线约束来构建极线注意力,c) 需要将极线上的特征关联起来。这就是说,我们需要沿着每条极线,采样出 K K K个点,计算出这一个注意力层。在经典的相机设定中,d) 相机正交,而且拍摄角度为水平视角,极线在不同视角图像都是对齐的。e) 这就无需对极线做重复的采样,计算极线注意力。作者假定隐含的特征图的分辨率为 H × W , H = W = S H\times W, H=W=S H×W,H=W=S。在这一个 N − N- N−视角相机系统中,row-wise 注意力将计算复杂度降低至 O ( N 2 S 3 ) O(N^2S^3) O(N2S3)。
极线约束是一种点对直线的约束。在三维空间中,如果一点P投影到两个不同的平面I1和I2,投影点分别为p1和p2,那么p1和p2在三维空间内构成一个平面S。S与面I1的交线L1过p1点,称之为对应于p2的极线;同理,S与I2的交线称之为对应于p1的极线。极线约束的基本原理是:已知左图映射点p1,那么右图映射点p2一定在相对于p1的极线上。这样,对应点匹配的搜索范围就从整幅图像压缩到在一条直线上寻找对应点,显著减少了计算量。
- 生成图像分辨率低,上述使得当前的多视角扩散模型无法应用于 256 × 256 256\times 256 256×256分辨率,无法重建出细致的 meshes。
提出了什么办法?
本文提出了 Era3D,一个创新的多视角扩散方法。针对单视角 3D 重建,它能高效地生成高分辨率( 512 × 512 512\times 512 512×512)、一致的多视角图像。Era3D 允许输入图像来自于常用的相机类型,缓解不同相机模型造成的畸变问题。使用不同相机模型的输入图像来训练,任意焦距和拍摄高度的相机拍摄的图像都可以作为输入图像使用,而生成的图像都是正交的水平相机视角。但是,这需要扩散模型在生成过程中,推理并且矫正输入图像的焦距和视角,这是一项艰巨的任务,会造成生成质量退化。为了克服这个问题,作者提出了一个回归和条件机制,使用去噪步骤的 UNet 的低层级特征图来预测相机的信息。作者发现该回归和条件机制可以使相机姿态预测更加准确。如上图3所示,Era3D 能减轻不同相机类型和焦距引起的畸变问题。
受到极线注意力启发,Era3D 提出了 row-wise 多视角注意力,使高分辨率多视角图像的生成更加高效。极线约束可以用来限制不同视角的关注区域,提升注意力的计算效率。但是,直接用极线注意力仍然效率不高,因为我们必须在极线上采样多个点。这需要我们对多视角图像的视锥构建 3D 特征网格,这非常慢且占内存。然而,由于 Era3D 生成的图像都是正交和水平的视角,不同视角的图像的极线就是对齐的,如上图d 所示,作者就提出了一个高效的 row-wise attention 层。相较于多视角注意力,Row-wise attention 显著地降低了内存占用( 35.32GB v.s. 1.66GB \text{35.32GB v.s. 1.66GB} 35.32GB v.s. 1.66GB)和计算复杂度( 220.41ms v.s. 2.23ms \text{220.41ms v.s. 2.23ms} 220.41ms v.s. 2.23ms)。
首先提出了一个基于扩散的相机预测模块来预测输入图像的拍摄相机的焦距和高度,这使本文方法生成的图像不会有变形。然后,使用一个简单但高效的注意力层(row-wise attention),保证多视角扩散模型的极线约束条件,进行多视角的高效的信息融合。Era3D 生成高质量的多视角图像,分辨率可以达到 512 × 512 512\times 512 512×512,而计算复杂度降低了 12 × 12\times 12× 倍。大量实验证明了 Era3D 能够从多样的单视角输入图像中重建出高质量、细节丰富的 3D meshes,遥遥领先于其它的多视角扩散模型。
下图展示了 Era3D,主要包括三个关键模块。给定一张任意视角、常见焦距的相机拍摄的图像,Era3D 生成一个标准相机设定的多视角图像。为了提高生成质量,作者提出了一个回归和条件机制,让扩散模型来预测准确的相机姿态和焦距,指导去噪过程。然后,通过 row-wise 多视角注意力显著地降低了内存占用,提升了计算效率。最后,使用神经重建方法,从生成的图像和法线图构建出 3D mesh。
法线图是一种纹理图,它存储了表面每个点的法线向量信息。这些法线向量定义了表面在每个点上的方向,从而影响光线如何与表面相互作用。法线图用于在不增加几何复杂度的情况下,模拟表面的细节和凹凸感。通过改变表面法线的方向,可以模拟出如皱纹、划痕、织物纹理等效果。
Objaverse数据集的3D模型主要来源于Sketchfab平台,这是一个由Epic Games旗下的在线平台。该数据集仅使用根据知识共享许可共享的3D模型。Objaverse 1.0包含800,000多个3D模型,并且每个模型都带有文本名称、描述、标签和额外的元数据。此外,还有更大规模的版本Objaverse-XL,包含超过10,000,000个3D对象。Objaverse数据集可以用于多种应用,例如训练AI根据文本描述创建3D模型,创建LOD/重新拓扑资产,识别3D对象,或者为3D角色创建动画。它还可以用于计算机视觉领域,作为训练数据和基准测试。Objaverse包含由超过10万艺术家设计的超过80万个资产,包括3D扫描、从头开始创建的3D模型,甚至动画资产。数据集中的模型具有高度的视觉多样性,涵盖了从动画对象到室内环境的各种类型。
标准的相机设定。为了解决这个问题,Era3D 使用不同内参的输入和生成图像。不管焦距或输入图像的姿态,本文方法只生成一个正交且水平的视角的图像。例如,输入图像的仰角为 α \alpha α,方位角为 β \beta β,Era3D 输出一个多视角图像集合,方位角为 { β , β + 4 5 ∘ , β + 9 0 ∘ , β − 4 5 ∘ , β − 9 0 ∘ , β + 18 0 ∘ } \{\beta, \beta+45^\circ, \beta+90^\circ, \beta-45^\circ, \beta-90^\circ, \beta+180^\circ\} {β,β+45∘,β+90∘,β−45∘,β−90∘,β+180∘},仰角为 0 ∘ 0^\circ 0∘。作者将这种设定称作相机的标准设定。
仰角描述了相机镜头相对于水平面的垂直倾斜角度。仰角的测量是从水平面向上看的角度。当相机镜头直接指向水平面时,仰角为0度。当相机镜头向上倾斜时,仰角为正,表示相机在“仰视”。当相机镜头向下倾斜时,仰角为负,表示相机在“俯视”。
方位角描述了相机镜头相对于北方向(或其他参考方向)的水平旋转角度。方位角的测量是从参考方向(如北方)开始,沿顺时针方向旋转。当相机镜头直接指向北方时,方位角通常为0度或360度。当相机镜头沿顺时针方向旋转时,方位角增加,表示相机在“转动”。方位角通常用于描述相机在水平面上的旋转方向,帮助确定相机的拍摄方向。
回归和条件机制
给定一个任意视角和焦距拍摄的图像,以标准的相机设定来生成其它视角的图像是非常困难的,因为这会给扩散模型增加一个额外的任务(隐式地推理相机的焦距和仰角)。为了简单点,以前的方法需要一个额外的仰角输入或预测值,作为扩散模型的条件。但是,由于缺乏足够的几何信息,单张图像的姿态估计通常是有问题的。尽管估计拍摄的仰角是可能的,但不太可能估计出输入图像的焦距。
为了解决这个问题,作者在扩散模型中加入了一个 Elevation and Focal length Regression 模块(EFReg)。作者在扩散过程中使用 UNet 的特征图来预测相机姿态。UNet 的特征图不仅包含了输入图像,也包含了当前的生成结果,该结果提供了更加丰富的特征来预测相机姿态。
在 UNet 的中间层级的 transformer block 中,作者对隐藏特征图 H \mathbf{H} H使用全局平均池化,产生一个特征向量,然后输入三个 MLP 层 R 1 \mathcal{R}_1 R1 和 R 2 \mathcal{R}_2 R2 来回归出仰角 α ~ \tilde{\alpha} α~ 和焦距 f ~ \tilde{f} f~:
α ~ = R 1 ( AvgPool ( H ) ) , f ~ = R 2 ( AvgPool ( H ) ) \tilde{\alpha}=\mathcal{R}_1(\text{AvgPool}(\mathbf{H})),\quad \tilde{f}=\mathcal{R}_2 (\text{AvgPool}(\mathbf{H})) α~=R1(AvgPool(H)),f~=R2(AvgPool(H))
用 ground-truth 仰角 α \alpha α 和焦距 f f f 来监督训练 α ~ \tilde{\alpha} α~和焦距 f ~ \tilde{f} f~:
l r e g r e s s = MSE ( α ~ , α ) + MSE ( f ~ , f ) \mathcal{l}_{regress}=\text{MSE}(\tilde{\alpha}, \alpha) + \text{MSE}(\tilde{f}, f) lregress=MSE(α~,α)+MSE(f~,f)
然后, α ~ \tilde{\alpha} α~和焦距 f ~ \tilde{f} f~作为扩散模型的条件使用。作者对 α ~ \tilde{\alpha} α~和 f ~ \tilde{f} f~使用位置编码,将它们和 Stable Diffusion 模型的 time embeddings 拼接到一起。该拼接后的特征向量会用在 UNet 全部的上采样层,提供预测的焦距和仰角的信息。
Row-wise Multiview Attention
为了生成多视角一致的图像,多视角扩散模型通常需要多视角注意力层来在生成图像中传递信息。这些层通常扩展自扩散模型现有的自注意力层,对所有生成的多视角图像计算注意力。但是,这些密集的多视角注意力的计算成本太高了,它需要处理多视角图像的全部像素。这就使多视角扩散模型无法做到高分辨率。
由于多视角图像的像素点之间有极线几何的关系,使用极线上的多视角注意力可以降低计算和内存复杂度。但是仔细考虑两个视角相机的极线注意力,会发现它们的计算成本仍然很高。如图2b,对于相机 O 1 O_1 O1的一个像素点,作者可以通过相对的相机位姿,在相机 O 2 O_2 O2中找到其对应的极线。然后,我们需要在极线上采样 K K K个点,在 O 2 O_2 O2的采样点和 O 1 O_1 O1的输入像素之间计算 cross attention。作者提出了一个高效简洁的 row-wise multiview attention,它是极线注意力的特殊形式。
在标准的相机设定中,围绕着一个物体分布着仰角为 0 ∘ 0^\circ 0∘的相机。因此,作者可以证明下面的命题:
Proposition 1. 如果两个正交相机关注于原点,它们的 y y y轴与重力方向对齐,它们的仰角为 0 ∘ 0^\circ 0∘(如图2d所示),那么对于一个相机坐标为 ( x , y ) = ( u , v ) (x,y)=(u,v) (x,y)=(u,v)的像素而言,它在另一个视角的画面上对应的极线就是 y = v y=v y=v。
作者在补充材料给出了证明。上述命题是极线约束的一个特殊形式,所有的极线都对应着生成的多视角图像的所有行。基于此发现,作者对生成图像的相同行使用新的自注意力层。从而避免了密集多视角图像的高复杂度,准确地将注意力集中在极线上。此外,row-wise attention 层只涉及了同一行的像素,而非极线上的多个采样点,因此大幅度降低了计算复杂度,可以在高分辨率 512 × 512 512\times 512 512×512上训练。