作者丨陈云

编辑丨3D视觉工坊

《GeoSim: Realistic Video Simulation via Geometry-Aware Composition for Self-Driving》这篇论文是关于自动驾驶中的相机仿真(Camera Simulation)和图像合成(image synthesis),三个reviewer最后都给了strong accept,已被接受为Oral。

CVPR2021满分论文 | GeoSim: Camera Simulation_数据

https://arxiv.org/pdf/2101.06543.pdf

项目主页:https://tmux.top/publication/geosim

5分钟视频介绍 - 哔哩哔哩:https://www.bilibili.com/video/BV1154y137jC/

概述

相机仿真是无人车系统中一个非常重要的任务:

1.用来测试感知模块,比如构建一些在真实世界很难遇到或者很危险的场景。

2.用来生成训练数据,减少人工标注的需求。

仿真系统的主要挑战在于:

1.仿真的结果必须足够真实,不能和真实世界差距过大(Realism Gap), 否则难以用于production 。

2.方法需可扩展(scalable),不需要较多的人工操作就能自动扩展到成千上万的场景。

关于图像仿真的相关工作可以分成两大类,二者有很大的互补性:

1.图形学(Graphics)的方法:代表是CARLA Simulator, 优点在于可以3D控制,技术比较成熟。缺点在于它需要较多的人工操作,比如设计各种asset,而且生成的效果不够真实。

2.神经网络的方法:代表是Nvidia的如Pix2pix/SPADE等。这种方法属于数据驱动(data-driven), 只要数据足够多,就能够生成足够多样的结果,不需要太多的人工。

但是这种方法难以进行3D控制,所以没法直接用于仿真系统。

CVPR2021满分论文 | GeoSim: Camera Simulation_数据_02

图像合成方法可分为两大类:图形学和神经网络所以,GeoSim结合了图形学和神经网络,取长补短。GeoSim的任务设定是:给定一个视频/图片,往里面插入新的汽车。这虽然不如360度自由视角仿真那么灵活,但是已能为自动驾驶的仿真系统提供足够大的帮助,因为自动驾驶仿真系统中最关心的就是可移动物体(dynamic objects/agents)。GeoSim的方法分为两部分:

1.物体重建:首先利用无人车采集的数据重建出大量的3D Asset。

2.仿真:在仿真的时候,将重建的3D Asset插入到输入的视频中。CVPR2021满分论文 | GeoSim: Camera Simulation_神经网络_03GeoSim Overview

3D物体重建

3D重建的目的是利用无人车采集的数据(多目相机图片, 激光雷达点云),重建出3D 物体。相比于利用仿真/人造数据集的方法,使用真实数据进行3D重建(3D reconstruction in-the-wild)的主要难点在于:

1.缺少3D的GroundTruth/label2.真实世界的数据比较复杂,sparse, partial-observation, noisy

CVPR2021满分论文 | GeoSim: Camera Simulation_神经网络_04

用来3D重建的数据来自无人车采集的真实世界数据

为此,GeoSim提出了一个multi-camera, multi-sensor, self-supervised 三维重建模型,如下图所示。

1.特征提取:用CNN和PointNet分别提取图片和LiDAR的特征,而后拼接成一个特征向量。

2.MeanShape+Deformation. Mean shape是一个可学习参数, 可以认为是category-specific template,初始化为一个球体,有2562个顶点,5120面,它的可学习参数就是他的顶点坐标:一个  CVPR2021满分论文 | GeoSim: Camera Simulation_神经网络_05的向量。MLP的输出deformation也是一个长为CVPR2021满分论文 | GeoSim: Camera Simulation_数据_06 的向量,也就是预测MeanShape每个顶点要如何变形。CVPR2021满分论文 | GeoSim: Camera Simulation_神经网络_07  。随着训练,meanshape也在不断更新,最终变成下图中所示的样子。

3.自监督学习。由于缺乏3D 的mesh groundtruth,所以我们利用间接的监督信息·PredictShape渲染生成轮廓,这个过程要求可微分求导的, 所以需要使用DIB-R这种differntiable renderer。生成Mesh的轮廓要和mask label进行对比。这里的label是用MaskRCNN (PointRend) 生成的。·在mesh表面采样,生成一些点,和输入的LiDAR 进行对比。因为LiDAR只能扫描到没被遮挡的部分,所以这里使用partial-chamfer loss, 也就是只取chamferloss 的前半部分。·Mesh Regularization Loss,如LaplacianLoss,作用是使得预测的mesh不会太尖锐。

CVPR2021满分论文 | GeoSim: Camera Simulation_神经网络_08

3D Mesh Reconstruction当我们重建完了3D mesh, 我们可以利用mesh作为媒介,把图片渲染到新的视角(Target Pose Warping),注意这个新的视角和原始图片的视角不能差距太大。这样,GeoSim建立了一个包含8000辆车的Asset Bank。CVPR2021满分论文 | GeoSim: Camera Simulation_神经网络_09

CVPR2021满分论文 | GeoSim: Camera Simulation_3d_10

CVPR2021满分论文 | GeoSim: Camera Simulation_数据_11Asset Bank

Simulation Pipeline

有了重建的3D asset,我们就可以利用它进行仿真。第一步 场景生成:根据现有场景自动生成新的场景。主要是利用高清地图,在合适的位置放置新的车辆,并预测它的运动轨迹。这一步也可以人工设计,生成一些比较罕见/困难的场景。同时根据生成的物体运动轨迹,从asset bank中选择一个与它有相似视角的asset。

CVPR2021满分论文 | GeoSim: Camera Simulation_3d_12

场景生成第二步 渲染,遮挡与阴影:1) 将上一步选择的asset渲染到target pose,同时可以得到它的深度(depth),也就是到相机的距离。

2) 将新物体的深度和背景的深度信息进行对比,判断遮挡关系(occlusion reasoning),比如下图中的新渲染的车的车头就被已有的车遮挡。这里背景的深度信息可以通过depth completion network 预测得到。

CVPR2021满分论文 | GeoSim: Camera Simulation_数据_13

渲染与遮挡判断此外,因为我们asset是3D的, 我们还能够利用3D引擎(如Blender)渲染shadow,如下图所示。同理,shadow也要判断遮挡关系

CVPR2021满分论文 | GeoSim: Camera Simulation_数据_14

用3D引擎可以生成shadow第三步 合成。这最后一步的目的,是将渲染的前景物体和背景自然的融合在一起。因为前景物体和背景物体处于不同的光照场景,直接copy&paste 会很突兀,此外上一步渲染操作可能会带来不连续的边缘,也需要进行处理。这里参考了deepfill图像修复网络,一方面修复边缘,另一方面进行relighting, 使得物体和背景尽可能一致。具体的模型设计和训练过程可以参考论文的supplementary。

CVPR2021满分论文 | GeoSim: Camera Simulation_3d_15

用神经网络将前景和背景自然的融合到一起

实验结果

视频效果:GeoSim可以生成超高分辨率的视频(4096x2160), 这里展示的是~720p分辨率。4K的视频可以点这个 链接(https://yun.sfo2.digitaloceanspaces.com/public/geosim/geosim-4K.mp4) 或者这个链接

(https://gg-1252820389.cos.ap-hongkong.myqcloud.com/geosim-1min.mp4)

查看。不同于以往的工作,GeoSim并没有专门在视频生成的过程做特殊处理,但是因为GeoSim是3D-aware, 尽量用到了geometry的信息,所以生成的视频很容易就做到极高的temporal-consistency.下面这个场景就比较有趣,两辆仿真生成的车和警车争行。

CVPR2021满分论文 | GeoSim: Camera Simulation_神经网络_16

仿真生成的两辆车和警车争行

GeoSim还能进行multi-camera simulation。下面这个例子有四辆仿真的车,做到了multi-camera consistency。

CVPR2021满分论文 | GeoSim: Camera Simulation_神经网络_17

multi-camera simulation. 总共有四辆车是仿真生成的

和不同baseline的对比。因为不是3D-aware, 前两个baseline的位置和尺寸都不对。CAD的渲染主要是纹理不够真实。

CVPR2021满分论文 | GeoSim: Camera Simulation_3d_18

GeoSim VS Baseline不同的渲染方法的对比, GeoSim既保有Graphics方法的Geometry信息,又保有原始图片的纹理信息。

CVPR2021满分论文 | GeoSim: Camera Simulation_3d_19

不同渲染方法的对比除了视觉上的对比, GeoSim还进行了human test。即给定一组图片,其中一张是GeoSim,另外一张是baseline, 由用户选择哪个看起来更真实。每一个baseline测试200-400组,结果也验证了GeoSim的显著优越性。Simulation Pipeline中的每一个模块都是必需的。

CVPR2021满分论文 | GeoSim: Camera Simulation_神经网络_20

Simulation pipeline 中每个模块的用途利用GeoSim可以生成数据用来训练模型,可以看作数据增强(data augmentation)。

CVPR2021满分论文 | GeoSim: Camera Simulation_神经网络_21

用GeoSim生成的数据做增强来训练模型GeoSim在Argoverse的效果果。Argoverse数据集的场景、相机参数和前面的UrbanData有较大的差别。GeoSim可以generalize到这些场景中。此外,这里的asset用的还是从UrbanData中创建的,但是在argoverse中并不违和。

CVPR2021满分论文 | GeoSim: Camera Simulation_3d_22


总结&讨论

GeoSim对image synthesis的思路是:Model if we can, predict if we need, guess if we have to. 对于可以显式建模(explictly modeling)的地方,尽量使用显式建模,比如target-pose warping, shadow rendering, occlusion reasoning。而对于需要猜/预测的地方则可以使用神经网络,比如inpainting。相比于一股脑FCN/GAN直接生成,这样可以充分的利用已有信息,更容易控制,并且具有更好的解释性,比如对于failure case, 较容易分析是哪里出现了问题。

在应用方面,除了实现自动驾驶相机仿真的realism和scalability, GeoSim的方法也能用于虚拟现实 AR/VR 和视频编辑等。尤其是虚拟现实,它的任务也是往现有的视频中加入新的物体,和GeoSim非常像。

关于激光雷达仿真,可以参考CVPR2020 Oral: LiDARsim。LiDARsim和GeoSim的思路很像,都是先三维重建asset用来执行simulation;Simulation的时候也是先physics/graphics,再neural network。

关于深度估计,可以参考KITTI上面相关的论文 ,另外推广一下ICCV2019 的depth completion工作,方法简单而有效。Limitation & Future Work:·目前只能仿真汽车,还有待扩充到行人,自行车等。

·GeoSim可以和object removal的工作相结合,先构建一个不包含任何物体的静态背景图片,再运行GeoSim,这样可以任意控制生成图片的物体。·还没法做到360度自由视角,可以和free view rendering的研究相结合,这样能对背景也进行渲染。不过相比于可移动物体,背景过于复杂,又不是无人车主要关心的对象,所以可能优先级不高。·AssetBank的每一辆车都只有有限的视角,可以用神经网络生成360度全景。

CVPR2021满分论文 | GeoSim: Camera Simulation_数据_23