三维空间理解已成为机器学习中的一个重要研究方向。最近苹果的产品上添加了能进行三维感知的产品(LiDAR sensor functionality),这使得场景感知和深度学习的结合能被应用在各个生活的领域。而创建一个3D楼层平面图则是其中的一项应用,这项应用可以被用在AR,机器人科学,游戏等领域。

为了实现3D场景平面图的生成,苹果在2022年推出了roomPlan 软件框架作为游戏等的一种实现方案。(可见https://developer.apple.com/documentation/RoomPlan)这个API使用苹果自带的摄像头和LiDAR扫描仪来为房间创建3D平面图。这包括生成房间的各种参数,家具的尺寸和类型,提高模型精度的拍摄指导,以及能被导出为各种通用场景描述(USD,USDA或USDZ)的方案。

这个API的核心设计有两个:3D房间布局估计和3D物体感知管线。3D房间布局估计利用了两个神经网络,一个用于检测墙壁和窗口,而另一个用于检测门窗。估计其将墙壁和开头检测为线并通过估计其高度将它们提升为3D。它在2D墙面上检测门窗并根据墙壁信息和相机位置将它们投影到3D空间中。3D物体感知管线则是将其它物体识别为16个类别的家具。

3D房间布局估计Room Layout Estimation(RLE)

该部分实现的功能主要是检测墙壁,窗口等,并实时在用户的手机或平板上处理数据。

其挑战在于一些可能阻挡结构或开口的家具,以及平板玻璃和镜面墙等影响感知的存在。为了应对这些挑战,文章使用了两个由不同神经网络构成的管线:一个用于检测墙壁和开口,另一个用于检测门窗。

对于墙壁和开口的检测

3d建模 android 苹果手机扫描房间3D建模_人工智能

算法主要分为两个阶段:第一阶段是将检测到的点云通过神经网络贴上语义标签,并以鸟瞰图视角来预测2D的墙壁和开口。第二阶段,则是对墙高使用一系列后处理算法来将2D的墙壁和开口提升为3D。

墙壁和开口管线先将带语义点云转换为两种伪图像表示:语义图(Semantic map)和Z切片图(Z-slicing map)

语义图是一个H*W*K的向量,它编码了整个鸟瞰空间的语义信息。其中H,W,K分别是图像的长度,宽度和语义类数量。这个图是通过将点云及其相关的语义向量投影到图像网格的二维鸟瞰图来创建的。

Z切片图则是将点云划分在一个H*W*Z的体素空间中,Z是沿重力方向的切片数。每个体素都包含一个范围在0~1之间的数字,用来描述该体素中的的点云密度。H,W,Z在该方案中被分别设为了512,512,12。每个体素在X,Y方向被设定为了3cm而在Z轴方向被设为了30cm,这使该方案支持一个最大15m*15m高度最大3.6m的房间的重建。

受端到端线框解析(end-to-end wireframe parsing)的启发(文章链接:https://arxiv.org/abs/1905.03246),文章使用了一套可训练的端到端线检测网络来预测鸟瞰视角下2D房间的布局。该网络以之前的z-slicing map和semantic map为输入,并通过一个带2D可分离卷积的U-Net骨干网络( a U-Net backbone with 2D-depth separable convolutions),输出一个用线来表示墙壁和开口的edge map以及一个corner map。corner map用于标识鸟瞰图中那些像素属于墙角或开口,而edge map用于判断某个像素属于墙壁或开口的可能性。每检测到一个角点,线采样器模块会枚举之前检测到的每个角点并生成线连接的建议。而最后,这些建议被输入进一个线验证网络(line vertification network)中并最终输出分类结果。

效果:该管线在能扫描最大15m*15m的房间的同时还能进行高精准度的检测。此外,该管线还能实时运行在苹果产品上,并能够解决墙壁遮挡、小型结构以及玻璃和镜面墙壁的反射等问题。

门窗检测管线

门窗多为矩形平面物体,为了减少用户视点和角度的影响,文章采用了如下图正交检测(orthographic-detection)的方法,其目标是检测代表每面墙上门窗的平面。

3d建模 android 苹果手机扫描房间3D建模_深度学习_02

该方法的亮点:1.能实时监测门窗 2.支持检测不同状态的门(关上的或打开的)3.完全由苹果原生的神经网络引擎Apple Neural Engine支持。

首先为每面墙生成一个投影图,这是由之前的墙面及开口检测管道提供的。投影图由语义图,RGB图和点距图组成,这三者分别是通过点云语义,RGB图像和点到离其最近的墙的距离投影图组成的。然后,这些数据被输入进2D正交检测器(2D orthgraphic detector),这一检测器是基于常用的单次2D对象检测器(single-shot 2D object detector)(参考文章:https://arxiv.org/abs/1512.02325)构建的。为了提高效率还采用了类似EfficientNet架构(参考文章:https://arxiv.org/abs/1905.11946)的主干。

类似于之前的墙壁开头语义图,门窗语义图也是一个通过对正交视角下的语义编码生成的一个H*W*K的向量。为了平衡效率和质量,K被设定为10。RGB图是一个遵循了相同投影方法生成的H*W*3的向量。距离投影图则是根据归一化后的点到墙壁最近距离投影生成的一个H*W*1的向量。将三者组合后输入正交检测器,因此正交检测器具有一个14通道的输入。

评估:通过对数千房间的扫描实验,文章实现了95%的墙壁和窗户类别识别准确率和召回率,对于门类别则是90%。准确率和召回率是根据2D空间的预测结果和真实结果的IOU计算的。

 3D物体感知管线(3D object-detection pipeline)

管线能检测十六种类别的物体,主要是如下三种:

(1)家具类,如沙发和桌子

(2)器械,如洗手台和冰箱

(3)其它房间内物品,如浴缸和水槽

感知管线由一个局部检测器,一个全局监测器和一个融合算法组成。

3d建模 android 苹果手机扫描房间3D建模_3d建模 android_03

整个框架流程大致如下:

首先,给定一系列RGBD帧图片和对应的相机姿势。在累计的语义点云中生成一个小相机的视锥体视角(frustum view),并将这些内容提供给负责局部检测的3DOD模型,该模型能在扫描同时实时检测房间元素,并显示给用户。

在完成扫描后,全局监测器会被启动。它将整个场景作为输入并预测边界框。全局3DOD模型仅训练了对一部分家具的检测,这其中包含一些大型家具如橱柜和桌子等。通过使用全局检测,我们能获得大型物品的上下文信息,而这些信息可能在实时扫描的局部检测中被遗漏。

最后,局部和全局检测到的内容和从RLE中获得的墙壁信息会被送到融合管道中,并生成最终输出。融合管道不仅结合了局部和全局检测器的结果,而且还根据墙壁位置对预测进行位置调整。

局部检测器和全局监测器的实现及参数

局部检测器和全局检测器的架构是相似的。除了输入数据和它们训练的类别。局部检测器的输入视锥体为 7.2 m x 4.8 m x 3.6 m。文章选择了 15 厘米的体素大小,这使得网络输入大小为 48 x 32 x 24 体素。文章发现 15 cm 在精度、速度和内存之间提供了一个很好的权衡。每个体素的特征维度为 35,这是 xyz 值、归一化 z 和语义特征的串联。对于骨干网,算法使用 3D 卷积 U-Net 架构,其中包括三个下采样层和三个上采样层。

通过如下步骤,网络预测每个体素内对象的得分,中心,种类,大小和朝向:

(1)为了获得对象存在的可能性,使用了两个通道来判断是否有物体存在于某个体素中。

(2)为了输出对象中心,使用了三个通道来表示物体从体素中心的xyz偏移量。

(3)为了输出对象类型,使用了N个通道,N等于支持的类别数

(4)为了输出对象大小,预先设定了大小的模板S,预测该对象被分在某个大小模板的分数,以及长宽高(相比于模板)的三个比例回归偏移量(scale-regression offsets)

(5)为了输出对象朝向,将朝向角分为多个bin,并预测对于每个朝向角的分类分数和回归偏移量并相对于bin的中心以及按bin的大小对结果归一化,该通道大小为2*H

局部检测器总的通道数是2+3+2H+4S+N, 其中N被设定为16,H被设定为12,S被设定为16。局部探测器的分类类别包括存储、沙发、桌子、椅子、床、冰箱、烤箱、炉灶、洗碗机、洗衣机或烘干机、壁炉、水槽、浴缸、厕所、楼梯和电视。而全局监测器的N=S=4,分类类别包括储物柜,沙发,桌子和床。

融合算法

基于框融合(box fusion)进行的结果融合。

框融合从局部检测器累积的框开始,并通过利用全局检测结果对其进行轻微修改。例如,全局检测器可能会将一组相连的厨柜检测为一个对象,这会指导融合算法更好地将内置厨房电器与橱柜对齐或连接起来。

融合逻辑还研究了多个对象之间的配对关系,例如通过将两个沙发箱剪裁成正好 90 度,将两个检测到的沙发箱形成 L 形沙发。

融合步骤计算物体和墙壁之间的关系。融合过程将物体裁剪或对齐到附近的墙壁,并确保物体不与任何墙壁相交。

评估结果:在 30% 的 3D 并交集 (IOU) 下,16 个类别的平均准确率和召回率分别为 91% 和 90%。冰箱、炉灶、床、水槽、马桶、浴缸、沙发、洗衣机或烘干机这八个类别的准确率和召回率均超过 93%。最困难的类别是椅子,准确率为 83%,召回率为 87%,这主要是由于严重的遮挡或拥挤的排列。

扫描指导(scan guidance notification)

影响输入质量的因素有两个:扫描模式和照明。

为了确保高质量输入,RoomPlan软件会向用户提供实时反馈,用文本说明来调整照明,扫描速度和与墙壁的距离。为了实现这一目标,设计了几种情况类型。一旦检测到当前扫描符合其中一种情况,用户会收到通知,如“打开灯”,“放慢速度”等

算法基于ARKit提供的ARFrame类图像作为输入,通过训练不同模型来检测不同扫描条件。

光照条件的检测:将图像平均亮度和ARFrame图像的特征点作为如数特征。如果只将亮度作为输入特征,可能会错误地将黑色物体识别为弱光条件。通过使用3D特征点提供额外上下文可以削弱这种情况的发生。

距离和速度条件的检测:计算相机姿态转换的3D线性速度和图像空间中2D投影速度,结合两个特征(移动和旋转)可以在扫描过程中实时计算出相机的移动轨迹和离被扫描元素的距离。检测神经网络是一个只有几十个参数的双层的多层感知器(MLP)。这个简单的模型能实现90%的准确率

数据收集和标记(Data Collection and Labeling)

为了确保算法能适应房间类型的变化,文章的数据来源于不同的国家以及不同经济水平的地区。

数据收集过程类似于Apple的ARKitScenes(链接文章ARKitScenes - A Diverse Real-World Dataset For 3D Indoor Scene Understanding Using Mobile RGB-D Data - Apple Machine Learning Research)。选择好一个家进行数据采集后,文章将一个家分为多个场景(通常一个场景覆盖一个房间)并进行如下步骤:

首先,在三脚架上使用标准高分辨率激光扫描与Faro Focus S70来收集环境的高精度XYZRGB点云。平均每个房间选择最佳位置并收集四次激光扫描。

然后,用iphone或ipad对每个房间录制最多三个视频序列,尽可能地捕捉每个房间所有表面。每个捕捉过程都遵循不同运动模式以保证算法的高鲁棒性。扫描捕获而定对象包括天花板,地面,墙壁和房间中在算法里被定义的对象。收集过程中房间环境是几乎不变的,且会调整如光照等环境因素。

最后,使用标记工具标记内部所有数据。

表现:能完全仅在用户设备上运行而不涉及服务器(保证了隐私政策的实行)。为实现这一点,前面介绍的三个神经网络都完全在Apple神经引擎(ANE)上运行。使用量化(quantization)、模型修剪(model pruning)和架构搜索(architecture search)等技术来满足延迟和内存要求。目标是让用户在扫描大房间时不会遇到CPU/GPU过热而导致掉帧等意外情况。该算法在五分钟内足以扫描最大15m*15m的整个房间。

总结:本文介绍了RoomPlan API的背后技术细节,它允许用户创建空间的3D平面图,为AR,机器人,电子商务等应用程序提供关键技术。文章深入介绍了 RoomPlan 的两个主要组件,房间布局估计和 3D 对象检测。并展示了这些管道如何在 iPhone 和 iPad 上高效运行。