论文链接:
代码链接:
随着扩散模型的提出,3D 生成领域取得了长足进步。从单张图片重建出 3D 几何是计算机图形学和 3D 视觉的基础任务,在 VR、游戏、3D 内容生成、机器人领域有广泛的应用。由于该任务是不适定的,需要推理出可见和不可见区域的 3D 几何结构。该种能力的构建需要大量的 3D 世界的知识。
部分工作(如 DreamField, DreamFusion, Magic3D)需要通过 score distillation sampling 来蒸馏 2D 图像扩散模型或视觉语言模型的先验知识,从文本或图像创建出 3D 模型。尽管这些方法的结果很吸引人,但都面临着两个问题:效率和一致性。
另一部分的工作则尝试通过网络推理来生成 3D 的几何结构如点云、meshes、神经场,避免耗时的优化。此类方法大多在 3D assets 上训练 3D 生成扩散模型。但是,由于现有的 3D 数据集规模有限,这些方法都缺乏足够的泛化性,只能生成特定类别的形状,结果往往质量较低,缺乏几何细节。
最近出现的一些新的方法如 SyncDreamer 和 MVDream 直接生成物体的多视图 2D 图像。这些工作增强生成图像的多视图一致性,有助于从生成的多视图 2D 图像中恢复出 3D 形状。本文方法也采用了多视角跨域注意力机制,以利用 2D 表示的灵活性和效率,该机制促进不同视角和模态之间信息的交换,有助于更好地理解和重建 3D 场景。但是,这些方法只依赖彩色图像,没有使用额外的深度或法线信息,导致生成形状的保真度不佳。此外,这些方法可能会伴随着巨大的计算成本,因为生成高质量的多视图图像并保持它们的一致性是一个资源密集型的过程。最后,作者引入了一种几何感知的法线融合算法,该算法从多视角的二维表示中提取高质量的表面。
本文提出了一种名为 Wonder3D 的新方法,它是一种从单视图 3D 重建的新方法,与以往方法不同,这种方法侧重于生成多视图一致的法线贴图和彩色图像。为了解决保真度、一致性、泛化性和效率的问题,它用了一个跨域扩散模型,这是一种能同时处理两种不同类型数据(法线和颜色)的模型。核心思想是扩展 stable diffusion,对两个不同域(法线和色彩)的协同分布来建模。Domain switcher 允许扩散模型根据需要生成法线贴图或彩色图像,增加了模型的灵活性。跨域注意力机制则在这两个域之间传递信息,提升生成图像的一致性和质量。为了从生成的视图中稳定地提取表面,作者提出了一种几何感知的法线融合算法。这种算法对不准确性具有鲁棒性,并能够重建干净、高质量的几何形状,如上图所示。
作者在 Google Scanned Object 数据集和各种不同风格的 2D 图像上做了实验。实验表明 Wonder3D 能够高效地恢复出高质量的几何结构。
扩散模型通过一个特殊的退化过程,逐步地恢复图像,它采用了一个前向马尔可夫链和反向马尔可夫链。在扩散模型中,正向过程涉及一个马尔可夫链,它将数据逐步转化为噪声。
给定一个来自于数据分布 p ( z ) p(z) p(z)的样本 z 0 z_0 z0,前向计算会输出一系列逐渐增加噪声的数据 { z t ∣ t ∈ ( 0 , T ) } \{z_t | t\in(0,T)\} {zt∣t∈(0,T)},其中 t t t 表示时间步骤, z t = α t z 0 + σ t ϵ z_t = \alpha_t z_0 + \sigma_t \epsilon zt=αtz0+σtϵ, ϵ \epsilon ϵ 是从分布 N ( 0 , 1 ) \mathcal{N}(0,1) N(0,1)中随机选择的噪声, α t , σ t \alpha_t, \sigma_t αt,σt 是固定的噪声调度序列。正向过程将一直迭代应用到目标图像,直到图像最终变为完全的高斯噪声。然后使用逆马尔可夫链,逐步地去除图像上的噪声,恢复出原始的干净图像,通过预测添加的随机噪声 ϵ \epsilon ϵ,从 z t z_{t} zt 恢复出 z t − 1 z_{t-1} zt−1。
以前的工作使用了如点云、三角平面和 NeRF 这样的 3D 表示方法来建模和处理 3D 数据,作者认为,3D assets (指任何3D模型或场景)的分布(记做 p a ( z ) p_{a}(\mathbf{z}) pa(z))可以建模成对应的 2D 多视图法线图和彩色图像之间的联合分布,这意味着3D资产的表示不仅仅依赖于单一视图或单一类型的数据,而是考虑了多个视图和颜色信息的组合。
法线贴图是一种在2D图像中存储3D表面法线信息的技术。这种方法可以在不增加几何复杂度的情况下,为3D表面添加细节和真实感。
彩色图像提供了表面的颜色和纹理信息,这对于视觉真实感至关重要。
特别地,给定一组相机 { π 1 , π 2 , . . . , π K } \{\pi_1, \pi_2, ..., \pi_K\} {π1,π2,...,πK} (在3D场景中定义了多个观察点或视角)以及一个条件输入图像 y y y,
条件输入图像 y y y 是一个已知的图像,可以是一个特定的视角图像或参考图像,它将作为生成其他视图的条件。
则 3D assets 的分布 p a ( z ) p_a(\mathbf{z}) pa(z) 是,
p a ( z ) = p n c ( n 1 : K , x 1 : K ∣ y ) \begin{equation} \begin{split} p_a(\mathbf{z})=p_{nc}(n^{1:K}, x^{1:K}|y) \end{split} \end{equation} pa(z)=pnc(n1:K,x1:K∣y)
其中
p
n
c
p_{nc}
pnc 是图像
y
y
y 的法线贴图
n
1
:
K
n^{1:K}
n1:K 和彩色图
x
1
:
K
x^{1:K}
x1:K 的联合分布,这些图像是从 3D 资产在不同视角
π
1
,
.
.
.
,
π
K
\pi_1,...,\pi_K
π1,...,πK 观察到的。在后续讨论中,作者省去了记号
y
y
y。因此,我们的目标是学习一个模型
f
f
f,输入是条件输入图像
y
y
y 和一组相机姿态
π
1
:
K
\pi_{1:K}
π1:K,输出对应的法线贴图和彩色图像集合:
(
n
1
:
K
,
x
1
:
K
)
=
f
(
y
,
π
1
:
K
)
\begin{equation} \begin{split} (n^{1:K}, x^{1:K}) = f(y, \pi_{1:K}) \end{split} \end{equation}
(n1:K,x1:K)=f(y,π1:K)
K K K 是相机姿态的个数,即有多组视图。 π 1 : K \pi_{1:K} π1:K 表示一组相机的位置和方向,这些姿态定义了从不同视角观察 3D 场景的方式。这种方法旨在确保从不同相机姿态观察时,生成的法线贴图和彩色图像在视觉上是一致的,从而实现多视图一致性。
采用2D表示方法可以使该方法基于大量图像训练的2D扩散模型,例如Stable Diffusion模型。这些模型经过大量图像(如数十亿张)的训练,拥有强大的先验知识,有助于实现零样本(zero-shot)泛化能力。零样本泛化能力意味着模型能够在没有直接训练数据的情况下对新场景进行推理。另一方面,法线图描述了物体表面的起伏波动,编码了丰富的细节几何信息。我们可以从 2D 法线图提取高质量的 3D 几何信息。
最后,我们可以在扩散机制中,将这个跨域协同分布表示成一个马尔可夫链:
p ( n T 1 : K , x T 1 : K ) ∏ t p θ ( n t − 1 1 : K , x t − 1 1 : K ∣ n t 1 : K , x t 1 : K ) \begin{equation} \begin{split} p(n_T^{1:K}, x_T^{1:K}) \prod_t{p_{\theta}(n_{t-1}^{1:K}, x_{t-1}^{1:K} | n_{t}^{1:K}, x_{t}^{1:K})} \end{split} \end{equation} p(nT1:K,xT1:K)t∏pθ(nt−11:K,xt−11:K∣nt1:K,xt1:K)
其中 p ( n T 1 : K , x T 1 : K ) p(n_T^{1:K}, x_T^{1:K}) p(nT1:K,xT1:K) 是高斯噪声。核心问题是描述出分布 p θ p_\theta pθ,这是模型需要学习的分布,用以定义从一个状态到另一个状态的转移概率。 θ \theta θ 是模型参数,定义了状态转移的概率,需要通过训练数据来学习。这样我们就能从这个马尔可夫链中采样,生成出法线贴图和彩色图像。
本文提出了一个多视角跨域的扩散机制,在两个不同的域上运行,以生成多视角一致的法线图和彩色图。整体架构如下图所示。首先,本方法采用一个多视角扩散模型,生成多视角法线贴图和彩色图,使用多视角注意力驱使不同视角之间具有一致性。其次,domain switcher 允许扩散模型在多个域中运行,无需重新训练现有的 Stable Diffusion。因此,我们可以利用基础模型的泛化能力,它们一般是在大规模数据上训练得到。作者提出了一个跨域注意力机制,在法线域和彩色图像域之间传递信息,确保几何和视觉信息的一致性。最终,该几何法线融合方法能从 2D 法线图和彩色图像中恢复高质量的几何信息和外观信息。
2D 扩散模型单独地生成每个图像,生成的图像在多个视图的视觉和几何方面并非一致。为了增强不同视角的一致性,像 SyncDreamer 和 MVDream 一样,作者利用注意力机制来促进不同视角的信息传递,隐式地编码多视角图像之间的关系,如下图所示。
将原版的自注意力层扩展至全局范围,允许注意力层连接到其它视角的图像。不同视角的 keys 和 values 彼此连接,促进信息的传递。通过在注意力层共享不同视角的信息,扩散模型能够感知到多视图的联系,能够生成一致的多视图彩色图像和法线贴图。
本文模型基于一个预训练的 2D stable diffusion 模型构建,充分发挥其泛化能力。但是,当前的 2D 扩散模型都是针对单个域设计的,接下来的挑战就是如何有效地将 stable diffusion 扩展至多个域。
为了实现此目的,作者探索了多个可能的设计。直接方案就是在 UNet 模块的输出增加四个通道,以表示其它的域。因此,扩散模型能同时输出法线图和彩色图像。但是,我们注意到该设计收敛速度慢、泛化性差。因为通道扩张可能扰乱 stable diffusion 的预训练权重,造成灾难性的模型遗忘。
回到等式1,我们可以将协同分布拆分为两个条件分布:
q a ( z ) = q n ( n 1 : K ) ⋅ q c ( x 1 : K ∣ n 1 : K ) \begin{equation} \begin{split} q_a(\mathbf{z}) = q_n(n^{1:K})\cdot q_c(x^{1:K} | n^{1:K}) \end{split} \end{equation} qa(z)=qn(n1:K)⋅qc(x1:K∣n1:K)
该等式建议我们可以一开始训练一个扩散模型来生成法线图,然后基于生成的法线图,训练另一个扩散模型来生成彩色图像,或者反过来。但是,这个双阶段框架会增加计算成本,也会造成表现退化的问题。
为了克服这些问题,作者通过 domain switcher 设计了一个跨域的扩散机制,记做 s s s。Switcher s s s 是一个一维的向量,标记不同的域,将该 switcher 作为额外的输入,输进扩散模型。因此,等式2 就可以扩展成:
n 1 : K , x 1 : K = f ( y , π 1 : K , s n ) , f ( y , π 1 : K , s c ) \begin{equation} \begin{split} n^{1:K}, x^{1:K} = f(y, \pi_{1:K}, s_n), f(y, \pi_{1:K}, s_c) \end{split} \end{equation} n1:K,x1:K=f(y,π1:K,sn),f(y,π1:K,sc)
Switcher s s s 首先用 NeRF 里提到的 positional encoding 做编码,再和 time embedding 拼接到一起,然后注入 stable diffusion 的 UNet。实验表明,这个微小的变动不会改变预训练先验,而收敛速度会更快,鲁棒性和泛化性会更优。
有了 switcher 后,扩散模型能生成两个不同的域。但是要注意到,对于单个视角而言,彩色图像和法线图并不是几何一致的。为了解决这个问题,需要确保法线图和彩色图的一致性,于是作者加入了一个跨域注意力机制来促进信息在两个域之间传递。该机制的目的是确保生成的图像能在几何和外观上对齐。
该跨域注意力层与原版的自注意力层的结构相同,位于 UNet 每个 transformer 模块的 cross-attention 层之前,如上图所示。在跨域注意力层,将法线域和彩色图像域的 keys 和 values 结合起来,经过注意力操作计算。该设计确保了生成的彩色图像和法线图紧密是关联的,增强二者的几何一致性。
为了从 2D 法线图和彩色图中直接提取 3D 几何结构,作者优化了一个 neural implicit signed distance field(SDF),融合生成的 2D 数据。不像其它的表征(如 meshes),SDF 更加简洁,判别度更强。
SDF 是一个函数,它为空间中的每个点返回一个值,表示该点到最近表面的距离。如果点在表面内部,返回负值;如果点在表面外部,返回正值。SDF函数通常定义为: f ( x ) = 距离 − ϵ f(x)=\text{距离}-\epsilon f(x)=距离−ϵ。其中 ϵ \epsilon ϵ 是一个小的正数,用于确保函数在表面上的值为零。利用神经网络来学习 SDF 函数的参数。这意味着神经网络通过训练,学习如何从输入数据(如图像或点云)中推断出距离场。
但是,采用基于 SDF 的重建方法(如 NeuS)是行不通的。这些方法都是为真实拍摄的图像设计的,需要密集的输入视角。然而,本文方法生成的视角相对稀疏,生成的法线图和彩色图像可能会有一些错误预测的像素。在几何优化时,这些错误可能会累积,造成几何结构的畸变或不完整。于是作者提出了一个能感知几何信息的优化机制。
有了法线贴图 G 0 : N G_{0:N} G0:N和彩色图 H 0 : N H_{0:N} H0:N后,这些图像是从不同视角捕获的,用于后续的 3D 重建。利用分割模型从法线贴图和彩色图中分割出物体的 masks M 0 : N M_{0:N} M0:N。随机选取一批像素点和它们在世界空间对应的射线 P = { g k , h k , m k , v k } P=\{g_k, h_k, m_k, \mathbf{v}_k\} P={gk,hk,mk,vk}。其中 g k g_k gk是第 k k k个采样像素的法线值; h k h_k hk是第 k k k个像素的颜色值; m k ∈ { 0 , 1 } m_k\in \{0,1\} mk∈{0,1}是第 k k k个像素的 mask 值,表示像素是否属于物体; v k \mathbf{v}_k vk是第 k k k个射线的方向。
整体的优化函数如下,
L = L n o r m a l + L r g b + L m a s k + R e i k + L s p a r s e + L s m o o t h \begin{equation} \begin{split} \mathcal{L}=\mathcal{L}_{normal}+\mathcal{L}_{rgb}+\mathcal{L}_{mask}+\mathcal{R}_{eik}+\mathcal{L}_{sparse}+\mathcal{L}_{smooth} \end{split} \end{equation} L=Lnormal+Lrgb+Lmask+Reik+Lsparse+Lsmooth
其中 L n o r m a l \mathcal{L}_{normal} Lnormal表示预测法线与真实法线的损失, L r g b \mathcal{L}_{rgb} Lrgb是 MSE 损失,计算渲染颜色 h ^ k \hat{h}_k h^k和生成颜色 h k h_k hk的损失。 L m a s k \mathcal{L}_{mask} Lmask是一个二元交叉熵损失,计算渲染 mask m ^ k \hat{m}_k m^k 和生成 mask m k m_k mk 的损失。 R e i k \mathcal{R}_{eik} Reik 表示 Eikonal 正则项,鼓励 SDF 梯度的大小为单位长度,有助于保持3D形状的一致性和准确性。 L s p a r s e \mathcal{L}_{sparse} Lsparse 是稀疏正则项,避免 SDF 中的悬浮点,即那些没有被正确映射到 3D 空间的点。 L s m o o t h \mathcal{L}_{smooth} Lsmooth 是一个 3D 平滑正则项,强制 SDF 的梯度在 3D 空间中平滑,有助于生成连续自然的 3D 表面。
Eikonal 正则项是一种在数学和物理中用于描述波动现象的数学模型中常见的项。它与波动方程中的相位速度有关,尤其是在描述光波或其他类型的波的传播时。Eikonal 方程是一个非线性偏微分方程,通常用于描述波动现象中的相位波前。它的形式可以简化为 ∣ ∇ ϕ ∣ 2 = n 2 |\nabla \phi|^2=n^2 ∣∇ϕ∣2=n2,其中 ϕ \phi ϕ是相位函数, ∇ \nabla ∇是梯度算子, n n n是介质的折射率。在波动方程中,正则项是指那些描述波动传播的项。Eikonal 正则项特别关注波前的形状和传播速度。
由于 SDF 表示的本质不同,我们可以通过计算 SDF 的二阶导数提取出优化后的 SDF 的法线值
g
^
\hat{g}
g^。最大化 SDF 的法线
g
^
\hat{g}
g^ 和生成的法线
g
g
g 之间的相似度,提供 3D 几何监督信号。为了克服不同视图下法线的细微错误,作者提出了一个几何法线损失:
L
n
o
r
m
a
l
=
1
∑
w
k
∑
w
k
⋅
e
k
,
e
k
=
(
1
−
cos
(
g
k
^
,
g
k
)
)
\begin{equation} \begin{split} \mathcal{L}_{normal}=\frac{1}{\sum{w_k}}\sum{w_k \cdot e_k}, \quad e_k=(1-\cos{(\hat{g_k}, g_k)}) \end{split} \end{equation}
Lnormal=∑wk1∑wk⋅ek,ek=(1−cos(gk^,gk))
其中 e k e_k ek 是第 k k k个射线的 SDF 的法线 g ^ k \hat{g}_k g^k 和生成法线 g k g_k gk 之间的损失, cos ( ⋅ , ⋅ ) \cos(\cdot, \cdot) cos(⋅,⋅) 表示余弦函数, w k w_k wk 是几何权重:
w
k
=
{
0
,
cos
(
v
k
,
g
k
)
>
ϵ
,
exp
(
∣
cos
(
v
k
,
g
k
)
∣
)
,
cos
(
v
k
,
g
k
)
≤
ϵ
w_k=\left\{ \begin{aligned} 0 &, & \cos(\mathbf{v}_k, \mathbf{g}_k)>\epsilon, \\ \exp{(|\cos(\mathbf{v}_k, \mathbf{g}_k)|)} &, & \cos(\mathbf{v}_k, \mathbf{g}_k)\leq \epsilon \end{aligned} \right.
wk={0exp(∣cos(vk,gk)∣),,cos(vk,gk)>ϵ,cos(vk,gk)≤ϵ
其中
exp
\exp
exp表示指数函数,
∣
⋅
∣
|\cdot|
∣⋅∣ 表示绝对值函数,
ϵ
\epsilon
ϵ 是接近于
0
0
0的负数阈值,我们计算生成法线
g
k
g_k
gk 和第
k
k
k个射线的观测方向
v
k
\mathbf{v}_k
vk的角度余弦值。
在计算机视觉中,射线的观察方向可以用于估计场景的深度和结构。例如,通过分析从不同视点发出的射线的交点,可以重建三维场景。
该方法的设计逻辑就是法线的朝向角,法线被故意设置为向外的(outward-facing),即它们的方向远离物体的表面。而观察方向(viewing direction)是向内的(inward-facing),即观察者看向物体的方向。这种配置确保了法线向量和观察射线(viewing ray)之间的角度始终保持不小于90度,这意味着法线和观察射线之间不会形成锐角。如果法线的方向偏离了这个标准,即如果它们不是向外的,或者观察方向不是向内的,那么生成的法线可能会不准确,这可能会影响3D模型的视觉质量和几何属性的精确度。
而且,一个3D点在优化形状上可能从多个不同的视点(viewpoints)可见,这意味着它可以被多个视点观察到。因此,由于这个3D点可以被多个视点观察到,它会受到对应于这些视点的多个法线的影响。但是,如果这些来自不同视点的法线之间没有表现出完美的一致性,那么几何监督可能会变得有些模糊不清,导致几何形状不精确。为了解决这个问题,作者引入了一个加权机制,而非同等地看待这些来自不同视角的法线。如果一条法线与观测射线有更大的夹角,则权重就更大。这增强了几何监督过程的准确率。
法线是一个向量,它在几何体的表面上的某一点与该表面垂直。在二维空间中,法线是一个垂直于曲线的直线;在三维空间中,法线是一个垂直于表面的平面。法线通常用向量表示。如果一个曲面由函数 z = f ( x , y ) z=f(x,y) z=f(x,y) 定义,则该曲面上点 ( x , y , f ( x , y ) ) (x,y, f(x,y)) (x,y,f(x,y)) 的法线可以通过曲面的梯度向量 ∇ f \nabla{f} ∇f 来确定。
除了法线损失,mask 损失和颜色损失也用于优化几何结构和外观特征。但是,在彩色图像和 masks 中不可避免地会出现一些错误的点,在优化的过程中会逐步累加,产生异常的表面和空洞。于是作者提出了一个简单而有效的策略,叫做 outlier-dropping loss。以颜色损失计算为例,除了简单地将每一步的所有采样射线的颜色求和,作者首先以倒序的顺序将这些损失排序,舍弃损失最大的那部分。这是因为错误预测和其它视角之间缺乏足够的一致性。加入了该策略后,优化后的几何结构就剔除了错误的几何结构和畸变区域。