前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >CVPR 2021 | 动态场景的自监督图网

CVPR 2021 | 动态场景的自监督图网

作者头像
用户1324186
发布2023-09-19 15:54:18
发布2023-09-19 15:54:18
3590
举报
文章被收录于专栏:媒矿工厂媒矿工厂

来源:CVPR 2021 论文链接:https://arxiv.org/abs/2011.10379 论文标题:Neural Scene Graphs for Dynamic Scenes 作者:Julian Ost, Fahim Mannan, Nils Thuerey, Julian Knodt, Felix Heide 内容整理:陈梓煜 简介:仅通过一组RGB图像的监督,神经渲染方法可以学习复杂场景的新视角合成。然而,现有的方法仅适用于学习有效的静态场景,将所有场景对象编码到单个神经网络中,缺乏表示动态场景和将其分解成单个场景对象的能力。本工作提出了第一个将动态场景分解成场景图的神经渲染方法,提出了一种可学习的场景图表示,该表示编码了物体的变换和表征,以有效地渲染场景的新排列和组合。

介绍

从一组图像中进行新视角合成和场景重建是计算机图形和视觉领域的基本问题。传统方法依赖于顺序重建和渲染管线,使用Structure From Motion获取紧凑的场景表示,例如点云或纹理网格,然后使用高效的直接或全局照明渲染来渲染新视角。这些管线还能学习分层场景表示,表示动态场景,以及高效地渲染新视角。然而,传统管线难以捕捉高度依赖视角的特征,在不连续性或场景对象的光照依赖反射方面存在不足。

最近,神经渲染方法已经解决了由视角依赖带来的挑战,脱离了显式场景表示,如网格和BRDF模型,而是学习完全隐式的表示,这些表示通过训练期间的稀疏图像监督,将三维场景嵌入到函数中。具体来说,像神经辐射场(NeRF)这样的隐式场景表示是通过神经网络的权重来编码的,该网络将3D位置和视角方向映射到神经辐射场中。

尽管这些方法相较于传统方法,能获取更好的新视角合成效果,但他们只能有效地学习一个静态的场景,不支持分层表示或者动态场景的表示,然后传统管线是能支持的。针对这个问题,NeRF-W通过外观嵌入向量和不确定性场进行动态和静态元素的分解来考虑光照的变化并忽略动态场景部分。然而,这种方法仍然依赖于静态场景的一致性来学习底层表示。

在本工作中,我们提出了一种能够学习复杂的、多对象动态场景表示的方法。我们的方法将场景分解为静态和动态部分,并学习它们的表示,这些表示以场景图的形式结构化,通过底层场景中的相应跟踪信息进行定义,并由视频的帧进行监督。所提出的方法允许我们合成场景的新视角,或者将动态物体移动到新的位置来获取训练数据里未曾见到的数据。

具体而言,本工作做出了以下贡献:

  • 提出了一种全新的神经渲染方法,将动态的多对象场景分解为可学习的场景图,其中包括解耦的物体坐标变换和场景表示。
  • 直接从一组视频帧和相应的跟踪数据中学习每个场景图节点的对象表示。使用共享的体积表示来编码同类对象的实例。
  • 通过渲染未见过的视图和未见过的动态场景排列来进行验证,使用模拟和实验数据,以及带标签和生成的跟踪数据。
  • 我们证明所提出的方法可以通过逆向渲染进行3D对象检测。

方法

图1 场景图

神经表征下的场景图

图定义:神经场景图允许我们以分层方式建模场景。如图1所示,场景图

{S}

由一个摄像机、一个静态节点和一组动态节点组成,这些节点代表了场景的动态组件,包括对象的外观、形状和类别。我们使用一个有向无环图

{S}

来唯一定义一个场景,如下所示:

{S}=\langle {W}, C, F, L, E\rangle \quad (1)

其中

C

是表示摄像机及其内参

K\in\mathbb{R}^{3\times 3}

的叶节点,叶节点

F = F_{\theta_{bckg}}\cup \{ F_{\theta_{c}} \}^{N_{class}}_{c=1}

表示静态和动态表示模型,

L =\{{l}_o\}^{N_{obj}}_{o=1}

是将隐式对象编码分配给每个表示叶节点的叶节点,

E

是边,表示从

u

v

的仿射变换或属性分配,即

E= \{e_{u,v} \in \{ [\text{ }], {M}^{u}_{v} \} \} \quad (2)

其中

{M}^{u}_{v} = \begin{bmatrix} {R} & {t} \\ {0} & 1 \end{bmatrix}, {R} \in \mathbb{R}^{3 \times 3}, {t} \in \mathbb{R}^{3}.\quad (3)

对于给定的场景图,可以提取所有对象的姿势和位置。对于所有源自根节点

{W}

的边,我们分配了世界空间坐标系和局部对象或摄像机坐标系之间的变换

{T}^{{W}}_v

。动态物体的表征是共享的,在共享的单位正则化的框架中定义。为了表示相同对象类型的不同尺度,我们计算非均匀缩放

{S}_o

,它在对象节点和其共享表示模型

F

之间的边

e_{o,f}

上分配。为了检索对象的局部坐标变换和位置

{p}_{o} = [x,z,y]_{o}

,我们从根节点

{W}

开始遍历,应用坐标变换,直到达到所需的对象节点

F_{\theta_{o}}

表征

图2 表征结构

对于表示模型节点

F

,我们遵循NeRF,将场景对象表示为增强的隐式神经辐射场。在接下来的部分中,我们描述了两种增强的神经辐射场模型,这些模型也在图2中进行了说明,它们表示如图1所示的场景。

背景节点

图2顶部的单个背景表示模型近似建模场景的所有静态部分。静态背景节点函数

F_{\theta_{bckg}}:({x}, {d}) \to ({c},{\sigma})

将点

{x}

映射到其体积密度,并与视角方向结合,生成发射的颜色。因此,背景表示隐含地存储在权重

\theta_{bckg}

中。我们使用一组映射函数,即 Fourier 编码,来辅助学习 MLP 模型中的高频函数。我们使用

\gamma({x})

\gamma({d})

将位置和方向输入映射为高频特征向量,并将这些向量作为背景模型的输入,从而得到表示网络的以下两个阶段:

[\sigma({x}), {y}({x})] = F_{\theta_{bckg,1}}(\gamma_{x}({x})) \quad (4)
{c}({x}) = F_{\theta_{bckg,2}}(\gamma_{d}({d}), {y}({x})) \quad (5)

动态节点

对于动态场景对象,我们考虑场景中每个个体都是连接根结点的组件,这些组件在捕获的持续时间内会改变其姿势。单个连接的对象表示为动态对象

o

。每个对象由局部节点的神经辐射场表示,其位于其节点和位置

{p}_{o}

的局部空间中。外观相似的对象组合成一个类别

c

,并共享表示函数

F_{\theta_{c}}

的权重。一个学习的潜在编码向量

{l}_o

区分各个对象的神经辐射场,表示了对象类别中的对象。

[{c}({x}_o), \sigma({x}_o)] = F_{\theta_{c}} ({l}_o, {p}_{o}, {x}_o, {d}_o). \quad (6)

类别编码

为了训练动态场景中每个对象的单独表示模型不至于导致大量的模型和训练工作,我们试图最小化表示场景中的所有对象的模型数量,考虑共享对象特征并将全局照明效应与单个对象的辐射场分离。我们引入了一个潜在向量

{l}

来编码对象的表示。将

{l}_o

添加到体积场函数

F_{\theta_{c}}

的输入中,可以将从类别

c

的表示函数到对象

o

的辐射场的映射看作是:

F_{\theta_{c}}({l}_{o}, {x}, {d}) = F_{\theta_{o}}({x}, {d}).\quad (7)

在潜在代码的条件下,允许类别

c

中的所有对象共享权重

\theta_{c}

。在训练期间仅对一些对象可见的全局照明导致的辐射场效应在相同类别的所有对象之间共享。

对象坐标框架

动态对象的全局位置

{p}_{o}

在帧之间会发生变化,因此它们的辐射场也会随之移动。我们引入了局部的三维笛卡尔坐标框架

{F}_o

,与对象姿势固定且对齐。点在全局坐标系

{F}_{{W}}

{F}_o

中的变换如下:

{x}_o = {S}_o{T}^w_o{x} \quad \text{ 其中 }{x}_o \in [1,-1].\quad (8)

这允许模型学习

\theta_c

中的无尺度相似性,与对象类型的边界框尺寸

{s}_{o} = [L_o, H_o, W_o]

的长度的倒数进行缩放。

对象表示

连续的体积场函数

F_{\theta_{c}}

从点

{x}_o

、方向

{d}_o

、局部坐标

{p}_{o}

和潜在向量

{l}_{o}

出发,映射到对应的体积密度

{\sigma}

和方向性颜色

{c}

。动态对象的外观取决于它与场景的交互以及全局照明,而这些都是针对对象位置

{p}_o

而改变的。为了考虑位置相关的效应,我们将其添加到全局帧中的输入中。然而,对象的体积密度

\sigma

不应基于其在场景中的姿势而改变。为了确保体积的一致性,仅考虑了发射颜色而不考虑密度。这将姿态添加到第二阶段的输入中,如下所示:

{c}({x}, {l}_o, {p}_o) = F_{\theta_{c,2}}(\gamma_{d}({{d}}), {y}({x}, {l}_o), {p}_{o}).\quad (9)

p_{o}

与视角方向

{d}

连接,保持了原始架构的视角一致行为,并增加了体积密度的姿势一致性。对于所有低维输入

{x}_o

{d}_o

{p}_{o}

,我们再次应用 Fourier 特征映射函数。这导致了对象类别

c

的体积场函数:

F_{\theta_{c}}:({x}_o, {d}_o, {p}_{o}, {l}_{o}) \to ({c},{\sigma}); \forall {x}_o \in [-1,1].\quad (10)

神经场景图渲染

图3 渲染方案

神经场景图描述了一个动态场景和一个相机视图,使用分层结构进行建模。这里展示如何使用这个场景描述来渲染场景的图像,如图3所示,并展示在给定图像训练集的情况下,如何学习叶子节点的表示网络。

渲染流程 学习到的场景的图像是使用光线投射方法渲染的。要投射的光线是通过场景

S

中的相机定义的,在节点

C

处,通过其内参

{K}

和相机变换

{T}^{{W}}_c

生成的。我们使用针孔相机模型来建模相机

C

,沿着每个像素在大小为

H\times W

的胶片上的光线

{r} = {o}+ t{d}

进行追踪。沿着这条光线,我们在所有相交的图节点上采样点。在每个表示模型被命中的点,都计算了颜色和体积密度,并通过沿着光线应用可微积分来计算像素颜色。

多平面采样 为了提高效率,我们将对静态节点的采样限制为多个平面,类似于

{zhou2018stereo}

,类似于2.5维表示。我们定义了

N_{s}

个平面,平行于初始相机姿态

{T}^w_{c,0}

的图像平面,并等间距放置在近裁剪平面

d_n

和远裁剪平面

d_f

之间。对于一条光线

{r}

,我们计算与每个平面的交点

\{t_i\}^{N_{s}}_{i=1}

光线-bbox相交 对于每条光线,我们必须预测通过光线追踪的每个动态节点的颜色和密度。我们检查来自相机

C

的每条光线是否与所有动态节点

F_{\theta_{o}}

相交,方法是将光线平移到对象本地坐标系,然后应用由Majercik等人提出的AABB-光线相交测试。这会计算所有

m

个光线-bbox入口和出口点

(t_{o,1}, t_{o,N_{d}})

。对于每一对入口和出口点,我们采样

N_{d}

等间距的积分点

t_{o,n}=\frac{n-1}{N_{d}-1}(t_{o,N_{d}} - t_{o,1}) + t_{o,1},\quad (11)

体积渲染 通过场景追踪的每条光线

{r}_j

在每个动态节点交点和

N_{s}

个平面上离散化,从而产生一组积分点

\{ \{t_i\}^{N_{s}+m_{j} N_{d}}_{i=1} \}_j

,每个交点处,从静态节点

F_{\theta_{bckg}}

或动态节点

F_{\theta_{c}}

。所有采样点和模型输出

(t,\sigma,{c})

都按照沿光线

{r}(t)

的顺序排列为有序集合

\{\{t_i, \sigma({x}_{j,i}), {c}({x}_{j,i}) \}^{N_{s}+m_{j} N_{d}}_{i=1} |t_{i-1} < t_i \} .\quad (12)

使用数值积分近似的渲染积分来预测像素颜色

{\hat{C}}({r}) = \sum\limits_{i=1}^{N_{s}+m_jN_{d}} T_{i} \alpha_{i} {c}_{i}, \text{where} \quad (13)
T_{i}=\mathrm{exp}(- \sum_{k=1}^{i-1} \sigma_{k} \delta_{k}) \text{ and } \alpha_i = 1 - \mathrm{exp}(- \sigma_{i} \delta_{i}), \quad (14)

其中

\delta_{i}=t_{i+1}-t_{i}

是相邻点之间的距离。

联合场景图学习 对于每个动态场景,我们优化每个节点

F

上的一组表示网络。我们的训练集包含

N

个元组

\{({I}_k,{S}_k)\}^N_{k=1}

,场景的图像

{I}_{k} \in \mathbb{R}^{H\times W\times 3}

和相应的场景图

{S}_k

。我们为所有相机节点

{C}_k

的每个像素

j

采样光线。从给定的3D跟踪数据中,我们采取变换

{M}^u_v

来形成参考场景图边缘。对于所有

H \times W \times N

条光线

{r}_k,j

,预测像素值

\hat{C}_k,j

我们从所有帧中随机抽样一批光线

{R}

,并将每个光线与相应的场景图

{S}_k

和参考像素值

C_k,j

关联起来。我们将损失定义为预测颜色

\hat{C}

和参考值

C

之间的总平方误差。与DeepSDF类似,我们假设潜在代码

{z}_o

上有一个零均值多元高斯先验分布,具有球形协方差

\sigma^2{I}

。对于这个潜在表示,我们对所有对象描述符应用权重为

\sigma

的正则化。

{L} = \sum_{\boldsymbol{r}\in{R}}\Vert \hat{C}(\boldsymbol{r}) - C(\boldsymbol{r}) \Vert_2^2 +\frac{1}{\sigma^2}\Vert\boldsymbol{z}\Vert^2_2 \quad (15)

实验

前景背景分离

图4 前景背景分离

在没有额外监督的情况下,所提出的场景图模型的结构自然地将场景分解为动态和静态场景组件。在图4中,我们呈现了一个学习图的孤立节点的渲染图。具体来说,在图4 (c) 中,我们删除了所有动态节点,并从仅包含相机和背景节点的场景图中渲染图像。我们观察到渲染的节点仅捕捉静态场景组件。类似地,我们在(b)中从图中排除了静态节点渲染了动态部分。每个对象的阴影是其动态表示的一部分,并在渲染中可见。除了解耦背景和所有动态部分外,该方法还准确重建了场景(d)的目标图像(a)。

移动物体操纵

图5 旋转

图6 移动

学习到的神经场景图可以在其边缘和节点上进行操作。为了展示所提出场景表示的灵活性,我们改变了一个已学习节点的边缘变换。图5和6验证了这些变换保留了环境光照的影响,如反射和阴影。场景表示通过图像颜色隐式编码环境光照线索,这是对象位置和视图方向的函数。在图5中,将已学习的对象节点沿其偏航轴旋转验证了车辆后备箱上的高光按照固定的场景照明移动,并相对于视图方向保留了亮点。在图6中,将对象从其在训练集中的原始位置移开。与简单复制像素不同,模型在移动车辆后,可以正确地表现高光。

新场景构建和视图合成

图7

除了通过学习到的场景图进行姿态操作和节点移除外,本方法还允许构建全新的场景图和新视图合成。图7展示了使用随机抽样的对象和变换生成的全新场景图的视图合成结果。我们将样本限制在所有观察到的道路轨迹的联合集上,我们定义为可行驶空间。

图8

与以前的神经渲染方法类似,所提出的方法允许在学习场景表示后进行新视图合成。图8报告了自车进入场景的新视图,其中自车向前行驶约2米。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-09-17 11:43,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 媒矿工厂 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 介绍
  • 方法
    • 神经表征下的场景图
    • 表征
    • 背景节点
    • 动态节点
    • 神经场景图渲染
  • 实验
    • 前景背景分离
    • 移动物体操纵
    • 新场景构建和视图合成
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档