任务描述
对不完整的扫描场景进行补全,同时进行语义分割。
动机
由于遮挡和传感器测距限制,扫描时只能获取部分、不完整的场景。传统方法(泊松重建等)主要通过拟合或者连续能量函数优化的方式填补小空洞,而对大范围的缺失(如墙体,椅子的脚)则无能为力。大范围的缺失处理方案主要有考虑物体对称性,结构化重建以及CAD模型回溯的方法。
然后就是基于深度学习的方法了,目前的学习方法只能处理固定大小的场景,因此都是针对单帧或者是物体的补全。本文就主要解决大场景的补全问题。为此选择了使用全卷积网络(FCN,fully convolutional network),全卷积网络具有的优点就是可以接受任意尺寸的输入图像(当然,本文是3D CNN),允许训练测试时的尺寸大小不同,而网络的卷积核大小始终保持不变,并且计算高效。训练的时候将训练的场景裁切成固定大小的体块作为输入,而测试的时候对场景大小则不做要求。FCN的使用是本文的核心创新点
方法
为了同时保有局部细节和大尺度的结构信息,本文亦采用了分级的策略(很多文章都有),如下:
为了提高精度,还采用了自回归的策略,将一个volume分成8个group,每个group内的voxel互不相邻,单个group的预测取决于之前group的预测,如下:
本文还就是使用生成模型还是判别模型做了实验(以上是否分级,是否使用自回归也有实验),判别模型预测具体的TDF值和语义标签,适用于扫描内容充足,缺失部分大概率只是单一类别的情形;生成模型将TDF值离散化为一个个的bin,转化为分类问题,输出各类别的概率分布,适用于内容稀疏的情形。
网络
训练是在合成数据上进行的,首先要生成数据(可以看成是数据增强);网络分三级,每级8个group,一共24个网络。每一级各组之间并行处理,虽然互相之间有依赖关系,但实际训练时直接用真值代替了预测值,但各级之间如果也这样做,则会过度平滑,只能串行。由于显存限制,没法做成端到端的,在1080上训练大概要3天。
输入有三部分Partial TSDF volume,上一级的TDF volume,这一级之前的group TDF volume。
输出预测的有两部分 TDF和语义标签(怎么看都是附带的)
数据生成
在SunCG上进行轨迹的模拟,轨迹的统计特性来源于ScanNet,除了均值和方差之外,还模拟了相机的抖动。沿着轨迹渲染深度影像,然后再深度影像进行体素融合。分层计算TSDF值和TDF值,TSDF值是输入,TDF值是groud truth。将训练场景按3m间隔进行划分,分辨率,实际范围如下(分辨率的设置从网络架构来看会好理解一点):
层级 | 分辨率 | 实际范围(m) | ||||
---|---|---|---|---|---|---|
Level 1(18.8cm³) | 32 | 16 | 32 | 6 | 3 | 6 |
Level2(9.4cm³) | 32 | 32 | 32 | 3 | 3 | 3 |
Level3(4.7cm³) | 32 | 64 | 32 | 1.5 | 3 | 1.5 |
TSDF vs TDF
网络除了输入的第一部分是TSDF,其他使用的全部都是TDF,作者认为对于具有真值的Volume而言,场景都是已知的,使用TDF,无符号距离更好,因为TSDF的符号是从相机可视性而言代表已知与未知(而不是内部和外部,因为对于合成数据而言,距离场往往是不水密的)(没看懂)。