High-Fidelity Texture Transfer Using Multi-Scale Depth-Aware Diffusion
这篇文章可以从一个带有纹理的几何物体出发,将其身上的纹理自动提取并映射到任意的几何拓扑结构上(见下图红线左侧);或者从一个白模几何对象出发,将任意类型的纹理映射到其身上(见下图红线右侧):
该文章主要应用预训练的扩散模型来搭建了一个3D纹理迁移框架。具体来说,作者们设计了一个多尺度的生成框架来从粗糙到精细地优化UV maps,同时为了确保多视角下的一致性,该文章使用了深度信息作为几何上的引导,同时提出一个新的一致性损失来进一步限制颜色的一致性以及减少artifacts。实验结果证明这个多尺度的框架不仅产生了高质量的纹理迁移结果,还能很好地处理复杂形状并保持正确的语义对应关系。
下图展示了这篇文章的overview:
第一个阶段,先在两个不同的尺度上生成粗糙的目标UV map,生成过程中以reference物体的多视角图像和深度maps({I}ref和{D}ref),和target物体的深度maps({D}tar【1】)作为条件。
第二个阶段,精炼的高分辨率的纹理细节。
【1】博主注:这里原文中对应位置的符号写成了{D}ref,应该是标注错误了,如果作者看到,请及时修正。
下面在下图中介绍纹理生成细节:
(a)先将多个视角下的图像{I}ref、{I}lowtar通过编码器Encoder各自编码到latent空间,然后对其通过DDIM逆向加噪到第T 步,随后和深度maps{D}ref、{D}tar concatenate到一起,作为TexTrans模块的输入,最终生成纹理迁移后的多个视图的结果。目标物体的几何默认是已知的,这时候由于还知道了不同视角下的生成结果(可以看成rendering结果),那么就可以通过可微渲染来优化出粗糙的纹理map Tcoarsetar来了(理论上camera和light也应该是已知的,我估计是作者架设了已知,反正采用的是合成数据集)。
(b)这个阶段的核心是深度感知的自注意力特征注入,也就是上图(b)部分,我们来看看是怎么个回事儿:使用深度信息的引导将纹理或者外观从源物体迁移到目标物体上,生成的过程将会迭代两次,对应不同尺度的图像分辨率。第一次迭代过程中,采用ZTref(也就是参考图像多视图经过编码器Encoder得到的隐向量)来进行初始化目标物体的多个视图。参考下面这个图,来理解是怎么将reference物体的纹理迁移到目标物体的:
首先,在图(b)中我们能清晰的看到,作者使用了两个controlnet-based diffusion model分别以reference物体和target物体的多视图图像为输入,分别以他们的深度图为条件,来进行降噪处理。但是呢,可以清楚的看到处理reference物体的diffusion model交叉注意力部分引出来一个箭头,指向了处理target物体的diffusion model的交叉注意力部分,这里就是对应上面这个图的核心部分。这个模块的作用就是把reference物体的纹理给搞过来。那你可能想了,这么搞不会破坏掉target这边生成时的几何形状吗?嘿,还真不会,因为在训练时target的这部分还输入了深度信息,只要深度信息作为条件,基本上很难修改生成过程的整体轮廓、结构了,所以作者说这部分既能保证全局信息,还能专注于每个单独视角的细节。本质上是几何的深度信息为扩散模型提供了整体形状强先验,而交叉注意力模块中部分注意力矩阵的复用只是为了把纹理信息迁移过来。