代码地址: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)。尽管后续工作在质量和效率上改进了基于 SDS 的方法,但这些方法收敛都不太稳定,质量也退化了。近期的工作,如 MVDream、SyncDreamer、Wonder3D 和 Zero123++ 直接通过多视图扩散模型,显式地生成多视角图像,然后通过神经重建方法或大规模重建模型 LRM,从这些图像中重建 3D 模型。直接生成多视角图像使这些方法比基于 SDS 的方法更可控、更高效,因此在单视角 3D 重建领域更受欢迎。
尽管在多视图扩散方法方面取得了令人印象深刻的进步,但它们在生成用于 3D 重建的新视角图像方面仍然存在一些未解决的挑战。,目前的多视角扩散方法主要存在三个显著的挑战:
- 预定义相机类型的不一致性,大多数的多视角扩散方法都假定输入图像是由一个预定义焦距的相机拍摄的。当相机类型或内参不同时,这会造成图像失真,如下图所示,Wonder3D 假设有一个正交相机,当输入图像是由一个小焦距的相机拍摄时,就会产生扭曲的 meshes。

- 多视图扩散模型的效率低,通常依赖于多视图注意力层来交换不同视角的信息,以生成一致的多视图图像。但是,这些注意力层通常是将 Stable Diffusion 的自注意力扩展到所有的多视图图像来实现,这叫做密集多视图注意力,如下图 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的分辨率,无法重建更加细致的网格。
解决这些挑战对于多视图扩散模型的应用和落地至关重要。
Image to 3D
与 GAN 和扩散模型平行,有大量的工作在研究如何从图像生成 3D 资产。一条线路是直接生成 3D 表示,如 SDF、NeRF、高斯表示、Triplanes 或 3D 体积。例如Zero-1-to-3等作品,它们将场景表示为受参考图像和相机姿态条件的扩散模型。LRM-based方法使用大型 transformer 架构,以数据驱动的方式训练三平面表示。另一种技术路线首先生成一致的多视图图像,然后使用NeuS、高斯散射或 LRM 等技术稳健地重建3D形状。尽管取得了巨大进步,但在重建质量、训练分辨率或效率方面仍存在挑战。
Multiview Diffusion
在3D重建和生成中,确保从不同视图观察时生成的图像或结构保持一致性是至关重要的。多视图一致性依赖于从不同视图中提取的特征之间的对应关系,这有助于估计场景的三维结构。MVffusion是首个提出并行生成多视图图像的方法,它使用一种对应关系感知的注意力机制,促进了跨视图信息的交互,并应用于纹理场景网格。Zero123++将多视图平铺成单个图像,并执行单次多视图生成过程,这种方法也被Direct2.5和Instant3D使用。MVDream 和 Wonder3D 都设计了多视图注意力机制来提高多视图一致性。Syncdreamer将多视图特征组合成3D体积,并在3D噪声空间中进行3D感知的融合。上述所有方法都共享相同的思想:通过多视图联合概率分布来建模3D生成。其他一些工作从视频扩散模型中探索先验知识,以实现一致的多视图生成。
Camera Pose
对于 3D 生成,早期工作都是用固定焦距的数据训练的,这意味着它们在生成3D模型时没有考虑不同焦距对图像的影响。在推理(inference)阶段,为了获得更好的性能,需要提供输入图像的仰角信息。仰角是相机观察方向与水平面之间的角度。后续研究试图通过使用固定姿态或整合额外的仰角预测模块来解决这个问题。LEAP方法使用像素级相似性而不是估计的姿态来聚合多视图特征。这种方法不依赖于相机姿态的估计,而是通过比较像素间的相似度来整合信息。然而,这些方法都没有考虑到由相机引起的失真误差,这可能严重影响真实世界数据的重建质量。为了克服这个问题,作者选择在规范的正交空间中生成图像。正交空间是一种特殊的坐标系统,其中相机的视角是固定的,通常是 0 ∘ 0^\circ 0∘仰角。在生成图像的同时,还预测仰角和焦距失真。这意味着模型在生成过程中考虑了相机参数对图像的影响,以减少失真并提高重建的准确性。通过这种方法,可以更好地处理真实世界数据的重建,因为它考虑了相机参数和潜在的失真,从而提高了3D生成的质量和可靠性。
提出了什么办法?
Era3D 是一种新颖的多视图扩散方法,专门针对单个视角的 3D 重建,高效地生成高分辨率( 512 × 512 512\times 512 512×512)图像,以便进行 3D 重建。该方法生成的多视图图像在视觉上是一致的,这意味着从不同视角观察时,图像之间能够保持相同的3D结构和外观。与现有方法不同,Era3D允许使用常见的相机类型作为输入,同时减轻了由不同相机模型带来的图像失真。Era3D 采用了一种独特的训练方法,在训练过程中,输入图像和生成图像可以使用不同的相机模型。这意味着输入图像可以具有任意的焦距和仰角,而生成的图像则使用正交相机和固定视角(仰角为 0 ∘ 0^\circ 0∘)。输入图像可以有任意的焦距和仰角,这使得Era3D能够处理各种相机拍摄的图像,而不受预定义相机参数的限制。尽管输入图像的相机参数灵活多变,但Era3D生成的图像都使用正交相机模型,并且具有 0 ∘ 0^\circ 0∘ 的固定仰角视角。这有助于在生成过程中保持图像的一致性和减少由相机参数差异引起的失真。
但是,这需要扩散模型在生成过程中,隐式地推断和校正输入图像的焦距和视角,这是一项具有挑战性的任务,因为不同的输入图像可能有不同的相机参数,而这些参数并不总是直接给出。如果模型不能准确地推断和校正这些相机参数,生成的图像质量可能会降低。这可能导致图像失真或其他视觉问题,影响最终的3D重建结果。为了克服这个问题,作者提出了一个回归和条件方案。这个方案利用 UNet 的低层级特征图,在每一步去噪过程中预测输入图像的相机信息。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 网格,遥遥领先于其它的多视图扩散模型。
下图展示了 Era3D,主要包括三个关键模块。给定一张任意视角、常见焦距的相机拍摄的图像,Era3D 生成一个标准相机设定的多视图图像。为了提高生成质量,作者提出了一个回归和条件方案,让扩散模型来预测相机姿态和焦距,指导去噪过程。然后,通过 row-wise 多视图注意力显著地降低了内存占用,提升了计算效率。最后,使用神经重建方法如 NeuS,从生成的图像和法线图构建出 3D 网格。
法线图是一种纹理图,它存储了表面每个点的法线向量信息。这些法线向量定义了表面在每个点上的方向,从而影响光线如何与表面相互作用。法线图用于在不增加几何复杂度的情况下,模拟表面的细节和凹凸感。通过改变表面法线的方向,可以模拟出如皱纹、划痕、织物纹理等效果。

相机标准化
透视畸变问题。现有的扩散方法假设输入图像和生成图像具有相同且固定的内参。但是,这个假设很难成立,因为输入图像可能是由不同焦距的相机拍摄的。当输入图像的内参矩阵和假设的内参不同时,生成的多视角图像和重建的 3D meshes 就会有明显的扭曲,如图3所示。因为这些模型都是在 Objaverse 数据集上训练的,该数据集的内参是固定的。所以,这些模型就对这一类的几何模式有偏好。
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 为输入图像和生成的图像使用不同的内参。不管输入图像的焦距或相机的姿态如何,本文方法只生成一个正交且 0 ∘ 0^\circ 0∘仰角的图像。例如,输入图像的仰角为 α \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。
这意味着对于第一个相机上的每个像素点 ( u , v ) (u, v) (u,v),其在第二个相机上的对应极线是一条水平线,且该线在 y y y轴上的位置与像素的 v v v坐标相同。极线约束说明了在两个正交相机的立体视觉设置中,已知一个相机上的点,其在另一个相机上的对应点必须位于这条特定的极线上。
正交相机:两个相机的光轴相互垂直,并且它们都朝向同一个点,即原点。
作者在补充材料给出了证明。上述命题是极线约束的一个特殊形式,所有的极线都对应着生成的多视角图像的所有行。基于此发现,作者对生成图像的相同行使用新的自注意力层。从而避免了密集多视角图像的高复杂度,准确地将注意力集中在极线上。此外,row-wise attention 层只涉及了同一行的像素,而非极线上的多个采样点,因此大幅度降低了计算复杂度,可以在高分辨率 512 × 512 512\times 512 512×512上训练。