在英特尔平台上执行大规模 3D 重建

简介

3D 重建是创建增强现实和虚拟现实(AR 和 VR)的基础技术之一。从本质上讲,它涉及理解和复制场景的 3D 几何体,并尽量确保保真度。在这过程中涵盖捕捉场景的形状、纹理、材质和其他属性(图 1)。

捕捉场景的本质可支持 AR 和 VR 中的多种应用。它支持放置现实世界中的对象、结合实际的物理效果,以 3D 的形式对场景进行分割以支持对象替换 — 这些只是 AR 中的部分应用示例。在 VR 中,重建世界可帮助玩家避免现实世界的障碍,从而达到避撞的效果。

reconstructing a room

图 1.  使用 3D 重建,重建中等细节级别的房间

大规模动态 3D 重建

3D 重建作为一种技术,取决于我们想要重建的体积的分辨率和规模 — 决定所需的计算和内存带宽。分辨率取决于体素级别(空间中体积的单位,类似用于 2D 图像的像素)— 它可以是从几毫米到几厘米的任何地方。它通常也被称为稀疏重建和密集重建 — 出于本白皮书的目的,我们认为大于 4 厘米的重建属于稀疏重建。表 1 突出显示了不同 AR 和 VR 应用的分辨率要求,以及从重建馈送至应用或游戏引擎所需的性能。图 2 显示了两种分辨率下沙发的样本重建。

表 1.不同分辨率下大规模重建的典型应用

体素分辨率MR 用例网格划分
> 4 厘米障碍物检测[动态和静态]灯光预估3-5 fps,VGA
离线,VGA
1 厘米 - 4 厘米

社交头像
对象替换
纹理替换
语义分割

30 fps,720p+
3-5 fps,VGA
30 fps,720p+
30 fps,720p+

 

sample reconstructions

图 2.  4 厘米(左)和 8 厘米(右)分辨率下的示例重建

另一个影响因素是重建的规模。重建可以是对象规模,房间规模,也可以是世界规模。除了大规模重建之外,世界规模的 AR 和 VR 体验要求环境中的用户不受任何限制,并且要求系统能够使用由内向外 6DoF 等技术持续跟踪用户(Engel,2015)。

根据我们的定义,动态重建是指连续构建和更新大型 3D 体积图(图 3)。它支持连续重建场景中的非静态对象 — 而不是事先对场景进行静态扫描,然后将体积图加载到应用中。

dynamic reconstruction

图 3.  动态重建,其中有一个人进入视野

本白皮书的主要内容

本白皮书的剩余部分将为观众提供以下关键要点:

  1. 形成对大规模重建管道的了解
  2. 确定英特尔平台上的优化机会,以及在英特尔 CPU 和显卡上进行优化时对性能造成的影响
  3. 介绍 x86 平台上大规模重建管道的性能
  4. 基于管道解释 VR 和 AR 中的两个示例应用

英特尔样本 3D 重建框架

高级架构

3D 重建基本架构流程如图 4 所示。

图 4.  3D 重建管道

重建管道由单色或立体摄像头(有源或无源)和 RGB 摄像头构成,馈送至深度生成模块。摄像头的选择对重建质量有着重要的作用,如表 2 所示。

表 2.用于重建的摄像头配置

传感器类型应用CSI-2sm 成像传感器的典型规格系统设计考虑
跟踪传感器由内向外 6DoFWFOV,鱼眼,全局快门,单色,> 120 fps,> 720pFOV 比显示屏宽,以进行外围跟踪
深度传感器3D 重建,语义,手势有源与无源,高达 1080p,30 fps,0.3 m-5 m,几毫米误差独立于跟踪传感器
RGB 传感器纹理,透视模式高达 13 MP,针对高纹理为 30 fps
匹配显示器分辨率和透视模式的 fps(趋向于 4K,120 fps)
可配置 ISP 处理,以实现同时高质量纹理和视频透视

然后,将深度数据连同相应的相关 RGB 数据馈送到 SLAM(同时定位和地图创建)模块,该模块跟踪摄像头相对于空间中原点或参考点的位置。这有利于实现大规模 VR 和 AR 体验,因为系统不限于跟踪系统中外部发现的小型固定 3D 体积。英特尔® 实感TM 跟踪解决方案 V200 支持集成至 VR 和 AR HMD。

然后将深度、RGB 和位置信息馈送到融合和网格划分块中。英特尔样本大规模动态重建框架基于 InfiniTAM(Prisacariu,2017)和(6d.ai,2018)开发的基础技术,该技术已移植到 x86 平台上。融合块使用散列图,通过截断符号距离函数或 TSDF(Werner,2014)存储重建体的表面属性,而网格划分引擎使用移动立方体等算法细分这些体素,以将其表示可供游戏引擎使用的三角形。(Lorensen,1987)。下面将更加详细地解释这些关键块。管道的其他部分也有明显的优化机会,下面也将进行讨论。

PC 平台上的体素散列

大规模重建的关键是能够利用数据结构高效存储和检索体素数据。有三种方法可以做到这一点(图5)。

  1. 体素网格:通过在内存中预分配的固定 3D 体素网格表示体中的所有信息。虽然这样会导致每个体素需要花费一定的访问时间来存储和检索 TSDF 值,但必须预先分配内存这一事实使存储大体积非常不切实际,即使是大小合适的空间也可能要数十 GB。
  2. 八叉树:这是一种基于树的数据结构,其中空间以递归的形式细分为分辨率各不相同的体素八分圆。它的优点是可以在需要时分配体积,从而提高内存效率。
  3. 散列图:它表示可用作散列图的体积,包含访问体素的散列函数。与八叉树一样,它支持动态分配和管理空间中的体素。此外,与八叉树不同的是,它具有以下优点
    1. 除 TSDF 信息之外,还能够在固定的时间关联和检索每个体素的元数据 — 例如,每个体素的材质或对象分类属性。八叉树需要广泛搜索类似的功能。
    2. 能够根据平台计算可用性和应用要求,将大体积分成较小的 3D 网格,并在不同层级结构中管理多个本地和全局散列表,并在它们之间进行有效的合并和更新。
    3. 能够更高效地管理内存,正如 InfiniTAM 的作者所述。

图 5.  3D 融合的体素网格、八叉树和散列图表示

X86 优化

Opencl™ 融合和网格划分

相比 CPU 版本,OpenCL™ 版融合和基于网格划分的移动立方体可显著提升性能,并提供英特尔显卡的实时性能。表 3 显示了 OpenMP*版 和 OpenCL 版融合之间的延迟对比,查看重建管道的视椎网格划分和光线投射部分,基于第六代智能英特尔® 酷睿™ i7 处理器和英特尔® 锐炬® Pro 显卡 系统和 Long_Office_Household TUM 数据集的系统(Cremers,2013)。

表 3.针对单帧的 OpenMP* 和 OpenCL™ 重建延迟比较

 

融合

网格划分

Ray Cast

4 厘米 - OpenMP

32 毫秒

30 毫秒

160 毫秒

4 厘米 - OpenCL

< 1 毫秒

< 5 毫秒

2.4 毫秒

5 毫米 - OpenMP

197 毫秒

1.5 秒

220 毫秒

5 毫米 - OpenCL

< 1 毫秒

< 5 毫秒

6.5 毫秒

基于网格的网格划分

体素散列映射上的移动立方体基本上涉及解析整个散列表,并生成包含顶点的网格三角形,表示体积的表面。对于散列表中的每个散列条目,该算法需要构建所属立方体的相邻体素的顶点列表,并识别穿过该立方体的三角形表面。网格的三角形和顶点生成后,将提供给可基于譬如 Unity* 框架的 AR 和 VR 应用。

在每帧基础上将生成的三角形合并为索引列表(比如删除旧三角形和更新的新三角形),并向游戏引擎提供最新三角形列表以支持物理更新,这些操作的成本非常高。如果要解决这个问题,可以采用基于网格的网格生成方法。基本上,整个体积网格被分为较小的 3D 网格。移动立方体 a) 在与当前帧中当前摄像头位置的视锥体的边界框轴对齐 b)至少有一个带有 TSDF 的新体素或修改后体素的网格上运行(图 6)。这样有助于在英特尔显卡上实现房间规模的实时重建,以供 AR 和 VR 应用使用。以网格为基础执行网格划分还有利于图形执行单元 (EU) 提高并行化程度。

图 6.  x86 上大规模动态重建的性能

网格简化

为了减少每个网格中的三角形数量,使用修改后的二次误差度量算法在每个帧上运行网格简化算法。这样可以将三角形数量减少 2-5 倍,从而减少 AR 和 VR 应用的负载(图 7)。通过确保处理网格的不同部分,我们可以在英特尔显卡上使用修改后 QEM 方法将简化过程进一步并行化。

Meshing without simplification

Meshing with simplification

图 7.  没有简化(顶部)和简化后(底部)的网格划分

语义网格缩减

以每帧为基础运行的平面检测和跟踪算法(图8)。使用每个体素的元数据标签将该平面信息作为标签存储在体素网格空间上。针对每个网格运行网格简化时,可进行额外的检查,看看相应的顶点是否在大平面上,如果是,则 QEM 算法适应更积极地折叠顶点周围的边缘。

plane detection and tracking

图 8.  融合到体素卷中的平面检测和跟踪

性能

图 9.  x86 上大规模动态重建的性能

图 9 显示了基于典型房间规模数据集(x 轴显示帧数)的大规模动态重建框架的性能,采用第六代智能英特尔® 酷睿™ i7 处理器和英特尔® 锐炬® Pro 显卡。总时间(以毫秒为单位)分为三个部分 — 将深度数据融合到体积散列图中的时间,自上次更新后已更改体中的所有 3D 体素网格的网格化时间,以及最后将网格对象阵列合并到 AR 和 VR 应用框架(如 Unity)的时间。这表明在 x86 PC 上运行 OpenCL™ 优化的大规模动态重建可以实现实时性能。所看到的峰值是场景中摄像头视点或对象纹理突然变化的数据集部分。

图 10 显示了随着时间推移生成的数据集的三角形数量,没有进行网格简化或语义网格缩减。局部三角形的数量是自上次更改以来的更新数量,而全局三角形数量是整个体积内的更新。

图 10.  每帧中网格化的三角形数量和数据集的整个体积

图 11 显示了采用基于网格的方法在网格简化之前和之后每帧节省的三角形数量,每次更新的延迟为 100-500 毫秒。

图 11.  Kitchen 和 Freiburg 360 数据集的网格缩减(Cremers,2013)

示例应用

动态 3D 重建可用于创建丰富的 VR/AR 体验并考虑用户安全性。以下是动态 3D 重建应用的两个示例。

避撞

在非透视 6DoF VR 应用中,用户安全是首要考虑因素。如果用户对世界环境感到“盲目”,用户移动路径中的物理对象可能会成为潜在的安全隐患。动态 3D 重建可帮助将对象的位置映射到统一的 3D 世界坐标中,之后用于提前警告用户避免碰撞。动态重建的另一个优点是,它能够检测物体何时移动,例如,进入该区域的人或宠物。图 12 显示了旨在实现这些目标的避撞 (CA) 系统图示。

图 12.  避撞设置

我们可以基于多个因素调整用户周围的安全区域。其中一些主要的因素包括,用户的速度、接近用户的对象的速度等等。在简单的情况下,用户的速度越快,安全区域应该越大,从而提供早期警告。我们进行了初步的用户研究,以找出有关特定安全系数的用户速度与安全区域之间的关系。研究结果和细节不在白皮书的探讨范围之内。

避撞应用可作为 VR 和 AR 平台上的后台服务运行,它可以向用户的应用发送异常,然后以适当的方式融入警告(例如,在房中显示猫的头像等等)(图 13)。

virtual scene

图 13.  左:没有任何真实对象的虚拟场景   右:有人走近的虚拟场景

放置虚拟对象

在 AR 中的真实帧上叠加虚拟对象可提供有趣的用户体验。了解 3D 世界坐标中的平面几何结构有助于自动放置和对齐虚拟对象。在最简单的情况下,借助大规模 3D 重建,虚拟电视屏幕可以“挂”在场景中的平面墙上。由于场景的 6DoF 模型,虚拟电视即使不在视野范围内,也会留在原位。

比较复杂的示例应用包括,将复杂机器的运动部件叠加在真实机器上,以显示它们应该如何运行或移动。或者用数字内容组装未完成的复杂对象或机器。这要求对机器的实际部分进行精确的网格划分,并支持应用生成并正确地放置缺失的部分。

扩展动态重建框架以分割和跟踪对象也可用于将虚拟对象放置用例扩展到动态对象。

总结

  1. 大规模动态重建是一项基础性技术,与位置跟踪结合使用,可帮助创建高端 VR 和 AR 体验
  2. 在英特尔 CPU 和显卡平台上,通过适当的优化和分区,可以实现高分辨率动态重建
  3. 避撞和虚拟对象放置是大规模动态重建的两个主要用例

行动号召:使用 OpenCL 优化、语义理解等技术,可在 x86 平台上为 AR 和 VR 应用提供最佳实时性能,还支持开发新应用,如室内规模或更大规模的多玩家 AR 和 VR 游戏,创建更加身临其境的体验。

如欲了解更多信息,请联系您的英特尔销售代表。

致谢

作者在此向为本文技术工作或内容审阅作出贡献的人表示衷心的感谢。Arijit Chattopadhyay 和 Michael D. Rosenzweig 帮助设计了问题陈述和潜在解决方案,以在英特尔平台上实现高性能 3D 重建。Mario Palumbo 帮助进行了审阅并提供了大力支持。6A.ai 提供了基准大规模重建功能,为此项工作奠定了基础。

参考文献

(2018).Retrieved from 6d.ai.

Cremers, C. K. (2013).Dense Visual SLAM for RGB-D Cameras.Proc. of the Int. Conf. on Intelligent Robot Systems (IROS).

Engel, J. S. (2015).Large-scale direct SLAM with stereo cameras.International Conference on Intelligent Robots and Systems (IROS) (pp. 1935-1942.).IEEE/RSJ .

Fujiwara, T. e. (2013 ).“Plane detection to improve 3D scanning speed using RANSAC algorithm.”.IEEE 8th Conference on Industrial Electronics and Applications (ICIEA)(2013):, (pp. 1863-1869.).

Heckbert, P. S. (1999).“Optimal triangulation and quadric-based surface simplification.”.Comput.Geom., (pp. 49-65).

Lorensen, W. (1987).Marching cubes:A high resolution 3D surface construction algorithm.SIGGRAPH.

Prisacariu, V. A. (2017).“InfiniTAM v3:A Framework for Large-Scale 3D Reconstruction with Loop Closure.”.CoRR, (p. abs/1708.00783).

Werner, D. A.-H. (2014).Truncated Signed Distance Function:Experiments on Voxel Size.ICAR.

有关编译器优化的更完整信息,请参阅优化通知