简介
主页:https://github.com/autonomousvision/giraffe
将场景表示为合成生成神经特征场。对于一个随机采样的相机,基于单个特征字段来批量渲染场景的特征图像。二维神经渲染网络将特征图像转换为RGB图像。
关键假设是,将组合式3D场景表示合并到生成模型中,可以使图像合成更加可控。
虽然只训练原始图像集合,在测试时,能够控制图像形成过程的相机姿势,对象姿势,以及对象的形状和外观,能够分离单个物体,并允许在场景中平移和旋转它们。
将场景表示为合成生成神经特征场允许从背景中分离出一个或多个对象以及单个对象的形状和外观,同时从非结构化和非固定的图像集合中学习,无需任何额外的监督。
将这种场景表示与神经渲染管道相结合,可以生成快速、逼真的图像合成模型。
此外,模型可以在训练数据之外进行泛化,例如,可以合成比训练图像中更多对象的场景。
注意,为了清晰起见,用颜色来可视化体而不是特征。
可控的图像生成
虽然大多数生成模型都是2D的,但论文在生成模型中加入了合成的3D场景表示。这导致了一致的图像合成结果
与论文的方法相比,在2D操作时,翻译一个对象可能会改变另一个对象(a和b)。它进一步允许我们执行复杂的操作,如循环转换( c)或在测试时添加更多的对象(d)。这两种方法都是在双目标场景的原始未摆位图像集合上进行无监督训练。
贡献点
GIRAFFE 是一种从原始的非结构化图像集合中训练,以可控和逼真的方式生成场景的新方法。
主要见解有两个:
- 首先,将合成3D场景表示直接合并到生成模型中,可以实现更可控的图像合成。
- 其次,将这种显式3D表示与神经渲染管道相结合,可以实现更快的推理和更真实的图像。
为此,将场景表示为合成生成神经特征场。将场景批量渲染为分辨率相对较低的特征图像,以节省时间和计算。神经渲染器处理这些特征图像并输出最终渲染结果。通过这种方式,可以获得高质量的图像,并扩展到现实场景。当在原始非结构化图像集合上训练时,论文的方法允许单目标和多目标场景的可控图像合成。
实现流程
目标是一个可控的图像合成管道,可以从原始图像集合进行训练,无需额外的监督。
生成器
G
θ
G_θ
Gθ 取一个摄像机姿态 ξ 和 N 个形状和 外观编码
z
s
i
,
z
a
i
z^i_s, z^i_a
zsi,zai 和 仿射变换
T
i
T_i
Ti 作为输入,合成一个由 N−1个物体 和 一个背景 组成的生成场景图像。
鉴别器 D φ D_φ Dφ 以 生成的图像 I ^ \hat{I} I^ 和 真实图像 I 为输入,用对抗损失训练我们的完整模型。在测试时,可以控制相机的姿势,物体的形状和外观代码,以及物体在场景中的姿势。
橙色表示可学习操作,蓝色表示不可学习操作。
Objects as Neural Feature Fields
NeRF回顾
位置编码
Generative Neural Feature Fields
GRAF是一种神经辐射场的生成模型,该模型是从 unposed 的图像集合中训练出来的。
为了了解 nerf 的潜在空间,他们根据形状和外观代码 z s , z a N ( 0 , I ) z_s, z_a ~ N (0, I) zs,za N(0,I) 对MLP进行条件调整
其中
M
s
、
M
a
M_s、M_a
Ms、Ma 是潜码的维数
论文提出一种更有效的体积和神经渲染的结合,将GRAF的三维颜色输出公式 c 替换为更通用的 M f M_f Mf 维特征 f ,并将对象表示为生成神经特征场
Object Representation
NeRF和GRAF的一个关键限制是整个场景都是由一个模型来表示的。
当我们对分离场景中的不同实体感兴趣时,我们需要控制单个对象的姿态、形状和外观(也将背景视为对象),可以使用单独的特征场结合仿射变换来表示每个对象
其中
s
,
t
∈
R
3
s, t∈R^3
s,t∈R3 表示缩放和平移参数,R∈SO(3)表示旋转矩阵,将点从物体转换到场景空间
在场景空间中进行体渲染,并在其标准对象空间中评估特征场
这允许我们在一个场景中安排多个对象。所有对象特征字段共享它们的权重,T 从数据集相关的分布中采样
Scene Compositions
如上所述,将场景描述为 N 个实体的组合,其中前 N - 1是场景中的对象,最后一个代表背景。
考虑两种情况:
- N 在数据集中是固定的,这样图像总是包含 N−1个对象加上背景
- N 在数据集中是不同的
在实践中,对背景使用与对象相同的表示,除了其使用固定缩放和平移参数 s N , t N s_N, t_N sN,tN 来跨越整个场景,并以场景空间原点为中心。
复合算符
为了定义复合算符 C,让我们回忆单个实体
h
θ
i
i
h^i_{θ_i}
hθii 的特征场预测给定点 x 和观测方向 d 的密度
σ
i
∈
R
+
σ_i∈R^+
σi∈R+ 和特征向量
f
i
∈
R
M
f
f_i∈R^{M_f}
fi∈RMf。当组合非固体物体时,对于 x 处的总体密度,通常是将各个密度相加,并使用密度加权平均值来组合(x, d)处的所有特征
虽然简单直观,但 C 的这种选择还有一个额外的好处:确保密度大于0的所有实体的梯度流。
Scene Rendering
3D Volume Rendering
体积渲染RGB颜色值,但我们将此公式扩展到渲染 M f M_f Mf 维特征向量 f
对于给定的摄像机外 ξ 值,设
{
x
j
}
j
=
1
N
s
\{x_j\}^{N_s}_{j=1}
{xj}j=1Ns 为给定像素的摄像机射线 d 上的采样点,
(
σ
j
,
f
j
)
=
C
(
x
j
,
d
)
(σ_j, f_j) = C(x_j, d)
(σj,fj)=C(xj,d) 为对应的场密度 和 特征向量。体积绘制算子
π
v
o
l
π_{vol}
πvol 将这些值映射到像素的最终特征向量 f
通过数值积分,得到 f 为
其中
τ
j
τ_j
τj 为透射率,
α
j
α_j
αj 为
x
j
x_j
xj 的 α 值,
δ
j
=
∣
∣
x
j
+
1
−
x
j
∣
∣
2
δ_j = ||x_{j+1}−x_j||_2
δj=∣∣xj+1−xj∣∣2 为相邻采样点之间的距离。通过计算每一个像素的
π
v
o
l
π_{vol}
πvol 得到整个特征图像。为了提高效率,以
1
6
2
16^2
162 分辨率渲染特征图像,这低于
6
4
2
64^2
642 或
25
6
2
256^2
2562 像素的输出分辨率。然后,使用2D神经渲染将低分辨率的特征映射上样本到更高分辨率的RGB图像。实验证明,这有两个优点:提高渲染速度和提高图像质量。
2D Neural Rendering
神经渲染算子
利用权值 θ 将特征图像
I
V
∈
R
H
V
×
W
V
×
M
f
I_V∈R^{{H_V} ×{W_V} ×{M_f}}
IV∈RHV×WV×Mf 映射到最终合成的图像
i
^
∈
R
H
×
W
×
3
\hat{i}∈R^{H×W ×3}
i^∈RH×W×3 。
灰色表示输出,橙色表示可学习操作,蓝色表示不可学习操作。
将 π θ n e u r a l π^{neural}_θ πθneural 参数化为具有 leaky ReLU激活的2D卷积神经网络(CNN),并将最近邻上采样与3 × 3卷积相结合以增加空间分辨率。
这里选择小的内核尺寸和没有中间层,只允许在空间上进行小的细化,以避免在图像合成期间纠缠全局场景属性,同时允许增加输出分辨率。
在每个空间分辨率下将特征图像映射到RGB图像,并通过双线性上采样将前一个输出添加到下一个输出。这些跳跃连接确保了特征字段的强梯度流。
通过对最后的RGB层应用 sigmoid 激活,获得了最终的图像预测 I ^ \hat{I} I^。
Training
完整的生成过程正式地表示为
N 是场景中实体的数量,
N
s
N_s
Ns 是沿着每条射线的采样点的数量,
d
k
d_k
dk 是第 k 个像素的射线,
x
j
k
x_{jk}
xjk 是第 j 个采样点,第 k 个像素/射线。
在训练过程中,采样场景中实体的数量 N ~ p N p_N pN,潜在代码 z s i , z a i z^i_s, z^i_a zsi,zai ~ N (0, I),以及一个摄像机姿势 ξ ~ p ξ p_ξ pξ和 对象级转换 T i T_i Ti ~ p T p_T pT。
在测试时,将 p ξ p_ξ pξ 和 p T p_T pT 分别定义为在数据相关的摄像机仰角和有效的对象转换上的均匀分布这种选择的动机是,在大多数现实场景中,物体是任意旋转的,但不会因为重力而倾斜。相反,观察者(在我们的例子中是相机)可以自由地改变仰角
用非饱和GAN目标和R1梯度惩罚训练模型
其中 f (t) =−log(1 + exp(−t)), λ = 10,
p
D
p_D
pD表示数据分布。
实现细节
所有物体特征字段 { h θ i i } i = 1 N − 1 \{h^i_{θ_i}\}^{N−1}_{i=1} {hθii}i=1N−1 共享它们的权重,将它们参数化为具有ReLU激活的mlp。我们使用8个层,隐藏维数为128,密度和特征头的维数分别为1, M f M_f Mf = 128。对于背景特征场 h θ N N h^N_{θ_N} hθNN,使用一半的层和隐藏维数。使用 L x L_x Lx = 2·3·10 和 L d L_d Ld = 2·3·4进行位置编码。沿着每条射线采样 M s M_s Ms = 64点,以162像素渲染特征图像 I V I_V IV。对于生成器的权值,我使用衰减为0.999的指数移动平均数。使用RMSprop优化器,批大小为32,识别器和生成器的学习率分别为1 × 10−4和5 × 10−4。对于2562像素的实验,将 M f M_f Mf = 256和一半的生成器学习率设置为2.5 × 10−4。