目录

目录

Neural Scene Graphs for Dynamic Scenes


<Neural Scene Graphs> Neural scene graphs for dynamic scenes

Review

  • 不是传统的 scene graph 中的 graph 的定义,事实上较为 hand-crafted
    • 额外把类别级表征模型也放到图里了,并且额外定义了一具体物体表征到类别级表征模型的边,事实上就是为了表达下某个物体属于某个类别(还有不同 scale),没有什么意义,这样的定义造成了全文的记号混乱,很多地方把类别级表征模型和具体物体表征混为一谈
  • 用到的数据:
    • tracking 信息;自动驾驶 tracking 数据集
    • 视角信息,内外参
    • 物体 3D bbox
    • video
  • 事实上做了什么
    • 利用 KITTI 数据集的 3d bbox 和物体位置标注数据,以及图像,学习了几种类别(卡车、轿车、大巴)的 nerf-based 的 asset bank(即类别级 nerf 表征)
    • 在有 3d bbox 和物体位置标注的情况下,完成了 动态前景+背景解耦、背景 inpainting 等
    • 额外利用逆向神经渲染过程简单尝试了下最优化迭代 BEV 视角下的 bbox 实现检测
  • 用到了 motion clue 来自监督地检测物体、追踪物体姿态?
    • 没有。有 3D bbox 真值、tracking 信息/物体位置信息真值
  • 是否做到了重新光照?还是只是简单的同处移位?
    • 只是简单的同处移位。还是 nerf 设定的一贯问题:view-dependent 效应 现在 纯粹由物体本身决定(baked-in 物体),没有环境光的解耦建模,和环境没关系

Motivation

  • 主要是为了 model dynamic scenes;graph 是显式的 graph
  • task:做了什么
    • 动态场景分解与操作
      https://longtimenohack.com/posts/paper_reading/2021_ost_neural_scene_graph/image-20201221165737154.png
  • 额外应用:
    • ==通过逆向渲染进行物体检测==

Overview

Scene graph 定义:注意不是传统的 scene graph 中的 graph 的定义,事实上较为 hand-crafted

  • https://longtimenohack.com/posts/paper_reading/2021_ost_neural_scene_graph/image-20210712152612134.png
  • \(\mathcal{S}=\left< \mathcal{W}, C, F, L, E \right>\)
  • 根节点 \(\mathcal{W}\),世界节点
  • 相机节点 \(C\)
  • 叶子节点 \(F\), 包括静态 \(F_{bckg}\) 和动态物体\(\{ F_{\theta_c} \}_{c=1}^{N_{class}}\)等;其实就是指==类别级表征模型==,即同类别不同物体通过不同的子 latent 表达不同的 individual,类似 GRAF/PIGAN/AD-NERF/template-nerf
    • https://longtimenohack.com/posts/paper_reading/2021_ost_neural_scene_graph/image-20210712154111276.png
      这个图可以看出,从物体的 latent code 节点 \(L\) 到 类别级表征模型 \(F\) 还有一个所谓的边连接,其实就是表达一下这个物体属于某个类别的含义,并没有其他的特别的边含义;
    • 共享的,因此同类别物体表达时拥有共同的 scale;为了含有不同 scale,计算一个非等比的 scaling \(S_o\),这个信息也加到了上述所谓的从 \(L\)\(F\) 的边上
  • 叶子节点 \(L\),是每个物体的具体表征 latent
  • \(E\),不连接 或者 存在从顶点 u 到顶点 v 的 transformation

类别级表征模型:文中描述定义为"augmented nerf"/“增广 nerf”,其实就是类似 GRAF/CGAN 的条件 nerf/conditional nerf

  • 其实就是背景模型用 single-nerf 表达,动态物体用类别级 nerf 表达,在坐标\(x\)上额外拼接一个 latent \(l\),和 GRAF 一模一样
    https://longtimenohack.com/posts/paper_reading/2021_ost_neural_scene_graph/image-20210712154816699.png
  • 背景
  • 动态物体
    • 这里注意:
      • 因为该文是直接在 KITTI 上训练的,事实上相当于就是在 KITTI 上训了一遍 car 的 GRAF 模型
    • 每个物体有缩放、变换,所以坐标变换关系如下:
      • \(x=S_o T_o^w x, \; \text{with} \; x_o \in [-1, 1]\)
      • 其中 \(S_o\) 就是 bbox 大小的倒数 –> 这样模型可以学到不依赖 size 的 canonical 表征

渲染框架

  • 静态背景,为了提高效率,用了 multi-plane 采样,2.5D 表达
    • Stereo magnification: Learning view synthesis using multiplane images. In SIGGRAPH, 2018.
    • 初始(\(t=0\))相机坐标系下,near clip 和 far clip 之间定义与图像平面平行的 \(N_s\)​​ 个等距平面,用这样的方式定义的背景场景表征(而不像nerf那样的三维函数的模式)
    • 对于任意一条光线,背景节点采样点是光线与逐个平面的交点
    • 🤔 笔者思考:
      • 这种等距平面的模式也许也适用于任意长度、任意延伸的路面表征;随着路面朝向的改变与长度延伸,不断地新增等距平面
      • 需要考虑选取路面"隧道"样空间的哪些截面作为平面,与车道线垂直?平面原点定义为车道线点?如何考虑多车道?如何考虑多个车道之间空间的交界?
  • 动态物体,计算 ray-box intersection,计算射线和 bbox 相交的区域
    • AABB-ray intersection;
      • A ray-box intersection algorithm and efficient dynamic voxel rendering. 2018
      • 首先把光线变到物体的local坐标系,然后做efficient AABB test
    • 计算每条射线方向和所有动态物体的 bbox 交点起终点,然后在起交点和终交点之间采样 \(N_d\)​​ 个点即为采样点
    • 作者说很少量的几个等距点足够精确表达动态物体,并且渲染时间也很短
  • 🤔 ​笔者思考:
    • 考虑到任意组合场景的设定下,不同物体的采样方式渲染方式、缩放都会不太一样;
      • 如果渲染方式都不同,就很难render compositional scene了,因为体渲染组合场景是需要根据前后的三维遮挡关系来修正\(T(t)\)积分函数的
    • 不同物体的model比较合适的统一的输入是rays_o、rays_d、near、far,而不是采样点;统一返回一组点的 \(\sigma(t)\)​ 与 \(\mathbf{c}(t)\)​​ ;然后统一利用其进行体渲染
      • 比如对于背景节点的采样点是和等距平面的交点
      • 对于动态节点的采样点是光线和bbox交叉部分的采样点

Result

  • 在额外有 3D bbox 真值、tracking 信息/物体位置信息真值时,单独分开表达物体还算是较为简单的
    https://longtimenohack.com/posts/paper_reading/2021_ost_neural_scene_graph/image-20210712160620509.png

额外应用:利用逆向神经渲染进行物体检测:🚀 是我想要的思路!

  • 在 BEV 下随机采一个初始 anchor box,然后只使用 \(l_1\) 图像重建误差同时迭代最优化 anchor box positionlatent code

不足与 future work

  • 数据集本身 scale 小(毕竟是自动驾驶数据集),物体都见不全,后面想做 large view extrapolation

Implementation

  • 利用 tracking 的标注直接计算得变换矩阵

  • “a scene” 一个scene? 训练350k迭代/一整天

    • 🤔 每次只训练一个scene?相当于就是一整段 KITTI sequence?
    • 最多12个动态物体 -> 符合 KITTI 数据集里面的每一段的情况
  • 等距平面 \(N_s=6\),bbox交叉线采点数 \(N_d=7\)

  • 扩充了物体的bbox,使得能够包含物体的阴影

  • 线性学习率下降

  • 可以使用KITTI原来人工的标注,也可以使用现有的tracking的方法:(tracking 即使 noisy 也可以)

    • PointRCNN 检测 + AB3DMOT tracking
    • 或者 CenterTrack:只依赖于纯粹的未标注的视频序列