导读:我们将专注于最近的深度学习技术,这些技术支持3D对象分类和语义分割。我们将首先回顾一些有关捕获和表示3D数据的常用方法的背景信息。然后,我们将描述三种不同的3D数据表示的基本深度学习方法。最后,我们将描述有前途的新研究方向,并总结我们对该领域前进方向的看法。
假设你正在建造一辆需要了解周围环境的自动驾驶汽车。为了能够感知行人、骑自行车的人和周围的其他车辆以便安全行驶,你将如何设计你的汽车?你可以使用相机,但这似乎并不特别有效,因为相机拍出来的照片是2D的,而你只能将3D“挤压”为从相机捕获的2D图像,然后你尝试从2D图像信息(比如到你前面的行人或汽车的距离)中恢复实际的3D环境信息。通过将3D环境压缩到2D图像,你将丢弃对你最重要的许多信息。尝试将这些信息重新组合在一起很困难,即使对于最先进的算法,也容易出错。
相反,最好是能够使用3D数据扩充你的2D世界视图。你可以直接通过传感器找到这些物体,而不是尝试估算2D图像与行人或其他车辆的距离。但现在感知这一部分是比较困难的。你如何在3D数据中真正识别人?如骑自行车的人和汽车等物体。传统的深度学习技术,如卷积神经网络(CNN),可以使这些物体在2D图像中直接识别,需要适应3D工作。幸运的是,在过去的几年里,人们已经对3D中的感知问题进行了相当多的研究,我们在本文中的任务是简要概述这项工作。
特别是,我们将专注于最近的深度学习技术,这些技术支持3D对象分类和语义分割。我们将首先回顾一些有关捕获和表示3D数据的常用方法的背景信息。然后,我们将描述三种不同的3D数据表示的基本深度学习方法。最后,我们将描述有前途的新研究方向,并总结我们对该领域前进方向的看法。
我们如何捕获和表示3D数据?
很明显,我们需要能够直接在3D中运行的计算机视觉方法,但这提出了三个明显的挑战:感知,表示和理解3D数据。
感知
捕获3D数据的过程很复杂。虽然2D相机便宜且广泛,但3D感测通常需要专门的硬件设置。
立体视觉利用多台摄像机,通过测量被感知物体位置的变化来计算深度信息(来源:爱丁堡大学)
1、立体视觉将两个或以上摄像机相对于彼此固定在特定位置,并使用此设置捕获场景的不同图像,匹配相应的像素,并计算每个像素在图像之间的位置差异以计算其在3D空间中的位置。这大致是人类感知世界的方式 - 我们的眼睛捕捉到现实世界中两个独立的“图像”,然后我们的大脑会看到物体的位置在我们的左眼和右眼之间的位置如何不同以确定其3D位置。立体视觉很有吸引力,因为它涉及的硬件很简单 - 只有两个或以上普通相机。然而,在精度或速度很重要的应用中,这种方法并不是很好。
RGB-D相机输出包含颜色信息和每像素深度的四通道图像(来源:九州大学)
2、RGB-D涉及使用除了彩色图像(“RGB”)之外还捕获深度信息(“D”)的特殊类型的相机。具体来说,它捕获了从普通2D相机获得的相同类型的彩色图像,但是,对于某些像素子集,它还会告诉你相机前面的距离。在内部,大多数RGB-D传感器通过“结构光”进行工作,该结构光将红外图案投射到场景上并感知该图案如何扭曲到几何表面上,或者“飞行时间”,其观察投射的红外光多长时间需要返回相机。你可能听说过的一些RGB-d相机包括微软Kinect和iPhone X的面部识别传感器。RGB-D很棒,因为这些传感器相对较小且成本较低,却很快速且不受视觉匹配误差的影响。然而,由于遮挡(前景中的物体阻挡投影到其后面的物体上),RGB-D相机的深度输出通常会有许多孔,图案感应失败和范围问题(投影和感应都变得难以远离相机)。
LIDAR使用多个激光束(同心圆感应)直接感知环境的几何结构(来源:Giphy)
3、LiDAR涉及在物体上发射快速激光脉冲并测量它们返回传感器所花费的时间。这类似于我们上面描述的RGB-D相机的“飞行时间”技术,但是LiDAR具有明显更长的距离,捕获更多的点,并且对来自其他光源的干扰更加具有鲁棒性。如今,大多数3D LiDAR传感器都是多线(最多64线)光束垂直对齐、可以快速旋转,以便在传感器周围的所有方向上看到。这些是大多数自动驾驶汽车中使用的传感器,因为它们的精度、范围和坚固性,但是LiDAR传感器的问题在于它们通常很大,很重且非常昂贵(64光束传感器)大多数自动驾驶汽车的使用成本为75,000美元)。其结果是,许多公司正在努力开发更便宜的“固态激光雷达”系统,可以在3D感知,而不必旋转。
3D表示
一旦捕获了3D数据,你需要以一种有意义的方式表示它,作为您正在构建的处理管道的输入。您应该知道四种主要表示形式:
3D数据的不同表示。(a)点云(来源:Caltech),(b)体素网格(来源:IIT Kharagpur),(c)三角网格(来源:UW),(d)多视图表示(来源:斯坦福)
a、点云只是3D空间中点的集合;每个点由(xyz)位置指定,可与一些其他属性(如rgb颜色)一起指定。它们是捕获LiDAR数据的原始形式,立体和RGB-D数据(由标记为每像素深度值的图像组成)通常在进一步处理之前转换为点云。
b、体素网格源自点云。“体素”就像3D中的像素;将体素网格视为量化的固定大小的点云。虽然点云可以在空间中的任何位置具有无限数量的点与浮点像素坐标,但是体素网格是3D网格,其中每个单元格或“体素”具有固定大小和离散坐标。
c、多边形网格由一组多边形面组成,这些面具有接近几何表面的共享顶点。将点云视为来自底层连续几何表面的采样3D点的集合;多边形网格旨在以易于渲染的方式表示那些底层表面。虽然最初是为计算机图形创建的,但多边形网格也可用于3D视觉。有几种方法可以从点云中获得多边形网格,包括Kazhdan等人的泊松曲面重构。
d、多视图表示是从不同的模拟视点(“虚拟相机”)捕获的渲染多边形网格的2D图像的集合,以便以简单的方式传达3D几何。简单地从多个摄像机(如立体声)捕获图像和构建多视图表示之间的区别在于多视图需要实际构建完整的3D模型并从几个任意视点渲染它以完全传达底层几何。与上面用于存储和处理3D数据的其他三种表示不同,多视图表示通常仅用于将3D数据转换为用于处理或可视化的简单格式。
理解
既然已经将3D数据转换为易于理解的格式,那么你就需要构建一个计算机视觉管道来理解它。这里的问题是,根据数据的表示,扩展在2D图像(如CNN)上运行良好的传统深度学习技术可能很难处理,使得诸如对象检测或分段之类的传统任务具有挑战性。
学习多视图输入
使用3D数据的多视图表示是使2D深度学习技术适应3D的最简单方法。这是将3D感知问题转换为2D感知问题的一种聪明方式,但仍然允许您推断对象的3D几何结构。使用这种想法的早期基于深度学习的工作是Su等人的多视图CNN一种简单而有效的架构,可以从3D对象的多个2D视图中学习特征描述符。与将单个2D图像用于对象分类任务相比,该方法实现了该方法,提高了性能。这是通过将单个图像输入到在ImageNet上预训练的VGG网络来实现的,以便提取显着特征,汇集这些产生的激活图,并将该信息传递到附加的卷积层以进行进一步的特征学习。
多视图CNN架构
但是,多视图图像表示具有许多限制。主要问题是你并没有真正学习3D -固定数量的2D视图仍然只是底层3D结构的不完美近似。因此,由于从2D图像获得的有限特征信息,诸如语义分割之类的任务(尤其是在更复杂的对象和场景上)的任务变得具有挑战性。此外,这种可视化3D数据的形式对于计算受限的任务(如自动驾驶和虚拟现实)而言不可扩展 - 请记住,生成多视图表示需要渲染完整的3D模型并模拟多个任意视点。最终,多视图学习面临许多缺点,这些缺点促使研究直接从3D数据学习的方法。
学习体积表示法
使用体素网格进行学习可以解决多视图表示的主要缺点。体素网格弥合了2D和3D视觉之间的差距- 它们是最接近图像的3D表示,使得将2D深度学习概念(如卷积算子)与3D相匹配变得相对容易。Maturana和Scherer的VoxNet是第一个在给定体素网格输入的情况下在对象分类任务上获得令人信服的结果的深度学习方法之一。VoxNet对概率占用网格进行操作,其中每个体素包含该体素在空间中占据的概率。该方法的益处在于其允许网络区分已知自由的体素(例如,LiDAR束穿过的体素)和占用未知的体素(例如,LiDAR束撞击的体素后面的体素)。
VoxNet架构
VoxNet的架构本身非常简单,由两个卷积层,一个最大池层和两个完全连接的层组成,用于计算输出类别得分向量。与大多数最先进的图像分类网络相比,该网络更浅,参数更少,但它是从数百种可能的CNN架构的随机搜索中选择的。由于体素网格与图像非常相似,因此它们采用的实际跨步卷积和合并算子是这些算子从2D像素到3D体素的简单修改;卷积运算符使用内核而不是内核在2D CNN中使用的内核,并且池操作符考虑体素的非重叠3D块而不是2D像素块。
VoxNet的一个问题是该体系结构本身并不是旋转不变的。虽然作者合理地假设传感器保持直立,以便体素网格的轴与重力方向对齐,关于旋转的旋转不能做出这样的假设来自后面的对象仍然是同一个对象,即使体素网格中的几何图形与学习的卷积内核非常不同地相互作用。为了解决这个问题,他们采用了简单的数据增强策略。在训练过程中,他们多次旋转每个模型并训练所有副本;然后,在测试时,它们将最终完全连接层的输出汇集到输入的几个旋转中。他们指出,与汇集中间卷积层的输出(如Su等人)相比,这种方法导致了类似的性能,但收敛速度更快。多视图CNN在他们的“视图池”步骤中,通过这种方式,VoxNet通过在输入体素网格的不同旋转上共享相同的学习卷积核权重来学习旋转不变性。
VoxNet代表了迈向真正3D学习的重要一步,但体素网格仍然存在许多缺点。首先,与点云相比,它们会失去分辨率,因为如果它们靠近在一起,则表示复杂结构的几个不同点将被分类到一个体素中。同时,与稀疏环境中的点云相比,体素网格可能导致不必要的高内存使用,因为它们主动消耗内存来表示自由和未知空间,而点云仅包含已知点。
点云学习
PointNet
鉴于基于体素的方法存在这些问题,最近的工作主要集中在直接在原始点云上运行的架构上。最值得注意的是,Qi等人的 PointNet(2016)是最早提出的处理这种形式的不规则三维数据的方法之一。然而,正如作者所指出的,点云只是一组由xyz位置以3D表示的点。更具体地说,给定在点云中,网络需要学习不变的独特功能 输入数据的排列,因为馈入网络的点的排序不会影响基础几何。此外,网络应该对点云的变换具有鲁棒性 - 旋转,平移和缩放不应影响预测。
为了确保输入排序的不变性,PointNet背后的关键洞察力是使用简单的对称函数,为输入的任何排序产生一致的输出(此类函数中的示例包括加法和乘法)。在这种直觉的指导下,PointNet架构背后的基本模块(称为PointNet Vanilla)定义如下:
这里是是一个对称函数,将输入点转换为维向量(用于对象分类)。这个功能可以近似,使得存在另一个对称函数,在等式中是一个多层感知器(MLP),它将各个输入点(及其相应的特征,如xyz位置,颜色,表面法线等)映射到更高维度的潜在空间。max-pooling操作用作对称函数,将学习的特征聚合到点云的全局描述符中。传递这个单一特征向量另一个输出对象预测的MLP。
为了解决学习对点云几何变换不变的表示的挑战,PointNet采用了一种称为T-Net的迷你网络,它将仿射变换应用于输入点云。这个概念类似于Jaderberg等人的空间变压器网络。但更简单,因为不需要定义新类型的图层。T-Net由可学习的参数组成,使PointNet能够将输入点云转换为固定的规范空间 - 确保整个网络即使是最轻微的变化也能保持稳健。
PointNet架构
整个PointNet架构将vanilla方法和T-Net与多个MLP层集成在一起,为层云创建特征表示。然而,除了对象分类之外,PointNet还支持对象和场景的语义分割。为实现此目的,该体系结构将来自最大池对称函数的全局特征向量与输入数据通过几个MLP后学习的每点特征相结合。通过连接这两个向量,每个点都知道其全局语义和本地特征,使网络能够学习更有意义的功能,以帮助进行分段。
使用PointNet的室内场景的语义分割结果
PointNet ++
尽管PointNet取得了令人瞩目的成果,但其中一个主要缺点是架构无法捕获点邻域内的底层局部结构- 这一想法类似于使用CNN从图像中增加感知域大小来提取特征。为了解决这个问题,齐等开发了PointNet ++(2017),从PointNet架构衍生出来,但也能够在点云中学习本地区域的功能。这种方法背后的基础是一个分层特征学习层,它有三个关键步骤。它(1)采样点作为局部区域的质心,(2)基于距质心的距离对这些局部区域中的相邻点进行分组,以及(3)使用迷你PointNet对这些区域的特征进行编码。
逐步重复这些步骤,以便在点云内的不同大小的点组中学习特征。通过这样做,网络可以更好地理解整个点云中本地点集群内的底层关系 - 最终有助于提高泛化性能。这项工作的结果表明,PointNet ++能够对包括PointNet在内的现有方法进行重大改进,并在3D点云分析基准测试(ModelNet40和ShapeNet)上实现了最先进的性能。
有希望的新研究领域—图CNN
目前关于处理三维数据的深度学习架构的研究主要集中在点云表示上,最近的大部分工作都是从PointNet / PointNet ++扩展思路,并从其他领域中汲取灵感,以进一步提高性能。一篇这样的论文的例子是Wang等人的动态图形细胞神经网络(2018),其使用基于图的深度学习方法来改进点云中的特征提取。想法是PointNet和PointNet ++无法捕获各个点之间的几何关系,因为这些方法需要保持不同输入排列的不变性。然而,通过考虑一个点并将它作为有向图周围的最近邻居,Wang等人。构造EdgeConv,一个在数据中的点之间生成唯一特征的运算符。
SPLATNet
SPLATNet架构
另一方面,一些研究已经远离PointNet / PointNet ++中提出的经典特征提取方法,选择设计一种处理点云的新方法。苏等人的SPLATNet(2018)体系结构是点云研究中这一新焦点的一个很好的例子 - 作者设计了一种新颖的体系结构和卷积运算符,而不是直接在点云上运行。本文背后的关键见解是将“感受野”的概念转化为不规则点云,这使得即使在稀疏区域也能保留空间信息(PointNet / PointNet ++的一个关键缺点)。特别令人着迷的是,SPLATNet可以将从多视图图像中提取的特征投影到3D空间中,将这些2D数据与端到端可学习架构中的原始点云融合在一起。使用这种2D-3D联合学习,SPLATNet实现了语义分割的最新技术。
Frustum PointNets
可视化从2D边界框估计生成的3D平截头体
第三个有希望的研究方向涉及扩展我们上面描述的基本架构构建块,以构建更复杂的网络,用于3D等物体检测等有用任务。基于使用2D和3D数据的想法,Qi等人的 Frustum PointNets(2017)提出了一种融合RGB图像和点云的新方法,以提高在大型3D场景中定位对象的效率。用于该任务的常规方法通过直接在整个点云上对滑动窗口执行分类来确定对象的可能3D边界框,这在计算上是昂贵的并且使得实时预测变得困难。齐等人做出两个关键贡献。
首先,他们建议最初使用标准CNN在2D图像上进行物体检测,挤出对应于检测到的物体可能存在的点云区域的3D平截头体,然后仅对此“切片”执行搜索过程。点云。这显着缩小了边界框估计的搜索空间,降低了错误检测的可能性并大大加快了处理流水线,这对于自动驾驶应用至关重要。
其次,Qi等人不是在边界框搜索过程中执行典型的滑动窗口分类。设计一种新颖的基于PointNet的架构,可以直接执行实例分割(将点云分割成单个对象),并在一次通过中对整个3D平截头体进行边界框估计,使得它们的方法对于遮挡和稀疏性都快速且稳健。最终,作为这些改进的结果,这项工作在出版KITTI和SUN RGB-D 3D检测基准时的表现优于所有先前的方法。
一点想法
在过去的5年中,3D深度学习方法已经从使用派生(多视图)到3D数据的原始(点云)表示。在此过程中,我们已经从简单适应2D CNN的方法转变为3D数据(多视图CNN甚至VoxNet),再到手工制作3D(PointNet和其他点云方法)的方法,大大提高了任务的性能喜欢对象分类和语义分割。这些结果很有希望,因为它们证实了在3D中观察和表现世界确实有价值。
然而,这一领域的进步才刚刚开始。当前的工作不仅侧重于提高这些算法的准确性和性能,还侧重于确保稳健性和可扩展性。虽然目前的大部分研究都是由自主车辆应用推动的,但直接在点云上运行的新方法将在3D医学成像、虚拟现实和室内地图中发挥重要作用。
领取专属 10元无门槛券
私享最新 技术干货