Paper: Zhang J, Tang Z, Pang Y, et al. Repaint123: Fast and high-quality one image to 3d generation with progressive controllable 2d repainting[J]. arXiv preprint arXiv:2312.13271, 2023.
Introduction: https://pku-yuangroup.github.io/repaint123/
Code: https://github.com/PKU-YuanGroup/repaint123
一. 研究思路
现有的 image-to-3D 方法大多采用 diffusion 模型生成多视角图像,并使用 SDS Loss 以保证多视角的一致性。然而还是存在多视角的不连续性、过度饱和与过度平滑的纹理、以及较慢的生成速度等问题。
Repaint123 结合了 diffusion 模型强大的图像生成能力和 repaint 方法优秀的纹理对齐能力,以生成高质量的多视角一致的视图。在 repaint 的过程中,Repaint123 能够针对重叠区域调整重绘强度,进一步提高了生成图像的质量。有了多视角一致的高质量图像,就可以使用 MSE Loss 快速地进行 3D 生成。
Repaint123 的 image-to-3D 过程分为三阶段:
- 第一阶段 (coarse):使用 SDS Loss 监督 diffusion 生成的图像优化 GS 场景以生成粗略的场景表示;
- 第二阶段 (fine):从 GS 中提取 mesh 表示,然后提出了一种可控的重绘策略渐近地细化纹理;
- 第三阶段 (train):使用 MSE Loss 监督细化后的图像优化 GS 场景;
二. 粗 GS 生成
和 DreamGaussian 一样,使用 SDS Loss 监督 diffusion 生成的图像来优化 GS 场景。本阶段生成了一个具有粗糙几何和纹理的 GS 场景,整个过程大致需要 1 分钟。
三. 纹理细化
为了保证多视角视图的连续性,Repaint123 在细化图像的纹理时,选取一张细化后的图像作为参考,考虑其纹理和深度信息,然后逐步细化相邻视角的图像。为了保证较高的图像质量,Repaint123 使用了一个预训练的 2D diffusion 模型,可以接受图像作为 prompt 进行引导。并且可以对新视角中的未细化区域(即参考图像中的遮挡区域)自适应调整修复强度,以实现更加流畅的修复效果。整个纹理细化分为 3 个步骤:DDIM 反演、可控去噪、重绘:
1. 遮挡部分 mask 获取
在细化图像前,需要先考虑如何通过参考图像和当前视图获得当前视图中的重叠 (overlap) 区域和遮挡 (occlusion) 区域。记参考图像为 I r I_r Ir,其深度图为 D r D_r Dr,视角为 V r V_r Vr;当前视图为 I n I_n In,深度图为 D n D_n Dn,视角为 V n V_n Vn。
首先将参考视角 V r V_r Vr 下的深度图 D r D_r Dr 逆向投影到三维空间中得到三维点云 P r P_r Pr,然后将 P r P_r Pr 向视角 V n V_n Vn 投影得到深度图 D n ′ D_n' Dn′。随后只要比较 D n D_n Dn 和 D n ′ D_n' Dn′,深度值不同的像素就是当前视图在参考视图中的被遮挡区域,可以得到 mask M n M_n Mn。
2. DDIM 反演
为了保留 coarse 阶段生成的三维场景多视角一致的颜色信息,通过 DDIM 反演将粗糙的视图 I I I 映射回隐空间得到隐变量 x i n v x^{inv} xinv,为后续去噪生成多视角一致的图像奠定基础。
3. 可控去噪
重绘当前视图被遮挡区域的过程中,使用重叠区域的隐变量
x
i
n
v
x^{inv}
xinv 替换去噪阶段生成的隐变量以保证重叠区域的几何和纹理保持不变:
x
t
−
1
=
x
t
−
1
i
n
v
⊙
(
1
−
M
)
+
x
t
−
1
r
e
v
⊙
M
x_{t-1}=x_{t-1}^{\mathrm{inv}} \odot(1-M)+x_{t-1}^{\mathrm{rev}} \odot M
xt−1=xt−1inv⊙(1−M)+xt−1rev⊙M
其中 x t − 1 r e v x_{t-1}^{\mathrm{rev}} xt−1rev 是 diffusion 在时间步长 t t t 时刻的隐变量。此外,Repaint123 还使用了 ControlNet 根据粗糙的深度图施加额外的几何约束,以确保图像的几何一致性。
为了缓解迭代过程中累积的纹理偏差,Repaint123 引入了一个相互自注意力机制 (mutual self-attention mechanism),在去噪的过程中将参考图像的注意力特征注入新视图重新绘制过程中。具体来说,将空间特征投影到新视图上得到查询特征
Q
t
Q_t
Qt,然后使用
Q
t
Q_t
Qt 查询参考图像的注意力特征
K
r
K_r
Kr 和
V
r
V_r
Vr 就能够得到高质量的纹理参考特征:
Attention
(
Q
t
,
K
r
,
V
r
)
=
Softmax
(
Q
t
K
r
T
d
)
V
r
\text{Attention}(Q_t, K_r, V_r) = \text{Softmax} \left( \frac{Q_t K_r^T}{\sqrt{d}} \right) V_r
Attention(Qt,Kr,Vr)=Softmax(dQtKrT)Vr
4. 逐步重绘
为了重绘 360° 全景 3D 物体,Repaint123 交替选取参考视角顺时针和逆时针的相邻机位进行重绘(即图中的 ①~⑥),这样渐近地获取遮挡区域的 mask 并进行重绘,可以最大限度地保证多视角一致性和纹理质量:
四. 图像质量提升
尽管逐步重绘策略能够保持整个三维场景的多视角一致性,但机位在渐近的过程中累积的纹理偏差会导致后面的视图质量下降。其中,重叠区域和遮挡区域都会降低图像质量。1
1. 重叠区域
对于重叠区域,当斜视视角变成正视视角时,纹理的分辨率会降低,导致当前视图使用参考视图的纹理进行渲染时会出现失真。因此,Repaint123 提出了一种可见性感知的自适应重绘过程 (visibility-aware adaptive repainting process),即根据该区域之前的最佳视角自动调整重绘强度。
可见性感知的自适应重绘时,需要根据区域情况调整去噪强度,因为过度的强度会产生不一致的结果,强度不足则会限制图像质量的提升。为了选择合适的细化强度,考虑将去噪强度与 Visibility Map 关联起来:对于遮挡区域,将 Visibility Map 中的值设为 0,表示需要细化;对于当前视角的渲染角度比之前视角差的重叠区域,将 Visibility Map 中的值设为 1,表示不需要进一步细化;对于其他区域,将 Visibility Map 中的值设为 cosθ*,取先前所有视角中的最大 cosθ。
在每个去噪步骤中,根据当前的时间步长,将 Visibility Map 二值化为 mask:
M
t
i
,
j
=
{
1
,
if
V
i
,
j
>
1
−
t
T
0
,
else
M_t^{i,j} = \begin{cases} 1, & \text{if } V^{i,j} > 1 - \frac{t}{T} \\ 0, & \text{else} \end{cases}
Mti,j={1,0,if Vi,j>1−Ttelse
上述方法可以在渲染过程中根据不同区域的可见性和时间步长自适应地调整重绘强度,从而提高重叠区域的纹理质量,减少失真现象,达到更真实的渲染效果。
2. 遮挡区域
对于遮挡区域,视图质量较低是因为缺少了 prompt 文本作为引导。为了提升遮挡区域的图像质量,采用 CLIP 编码器将参考图像编码为图像 prompt 进行引导:
五. 实验
六. 总结
七. 复现
Unreleased