干货 | 平面图像的感知已经基本解决了,那三维数据的呢?

2019-10-31 13:56:36 浏览数 (1)

AI 科技评论按:本文的作者是 Mihir Garimella 和 Prathik Naidu,他们是斯坦福大学计算机专业大二的学生,其研究领域包括机器人学、计算机视觉和机器学习等,还分别在 Facebook 的 Connectivity Lab 和亚马逊的 CoreAI 团队积累了行业经验,也是 Fire.Autonomy(一个早期的初创公司,专注于制造用于室内测绘和工业检查的无人机)的联合创始人。本文发布于 The Gradient,AI 科技评论编译如下:

想象一下你正在打造一辆可探测周围环境的自动驾驶车。你要如何让你的车感知行人、骑自行车的人以及其他车辆,以安全行驶呢?你可以给它装上相机,但效果并不是特别好:你面对的是整个 3D 环境,相机拍摄到的只是把它拍扁之后的 2D 图像,然后再尝试从这个 2D 图像中复原你真正需要用到的 3D 信息(比如与车前面的行人、汽车间的距离)。然而,一旦将 3D 环境挤压成 2D 图像,很多对你来说最重要的信息就会丢失,并且将这些信息重新拼凑起来十分困难——即使使用最先进的算法,也容易出错。

相反地,你最好采用 3D 数据来辅助你看这个世界的 2D 视角,而不是从一张 2D 图像中去估计与行人或其他车辆间的距离,这样的话,你将能够通过其它的传感器直接定位这些目标。然而,用了 3D 数据之后,下一步要做的事情就变得麻烦了。你怎样才能从 3D 数据中识别类如人、骑自行车的人以及汽车等目标呢?传统的深度学习技术,如能直接识别 2D 图像中目标的卷积神经网络(CNNs),需要重新对 3D 数据做适配才能工作。幸运的是,在过去的几年中,已有很多对于 3D 感知问题的研究,而本文中,我们将对这一问题做一个简要的概述。

特别地,我们将重点关注能对 3D 对象进行分类和语义分割的最新深度学习技术。一开始,我们会回顾一下 3D 数据采集和表示的常用方法作为背景知识。然后,我们将描述分别针对三种 3D 数据表示方式的基本深度学习方法。最后,我们将探讨一些有前景的研究方向,并从我们的视角,来总结该领域的发展方向。

怎样采集和表示 3D 数据?

显而易见,我们需要的是能够直接以 3D 方式操作的计算机视觉方法,而这就提出了三个明显的挑战:3D 数据的感知、表示和理解。

感知

3D 数据的采集是一个复杂的过程。虽然 2D 摄像价格便宜且应用广泛,但是 3D 感知通常需要专用硬件设施。

双目视觉使用了多个相机,并对感知目标位置的转移进行了评估,来计算深层信息

1. Stereo(双目视觉)将两个或多个相机布置在彼此之间相对固定的位置上,并使用这种设置来捕捉一个场景的不同图像、匹配对应的像素,并计算每个像素的位置在图像之间如何不同,从而计算出这个像素在 3D 空间中的位置。这基本上就是人类感知世界的方式——我们的眼睛捕捉到现实世界中两个分开的「图像」,然后我们的大脑观察目标的位置在我们左、右眼的视野中有何不同,从而确定它的 3D 位置。双目视觉方法看起来很吸引人,因为它只需要简单的硬件——两台或两台以上的普通相机就能实现。然而,因为使用视觉细节来匹配相机图像之间的对应点不仅计算昂贵,而且在缺乏纹理或视觉结构重复的环境中容易出错,这种方法在要求精度或速度的应用中并不适用。

RGB-D相机输出了一个四通道图像,它包含了每个像素深层的颜色信息

2. RGB-D 需要使用一种特定机型的相机,这种相机不仅能捕捉彩色图像 (「RGB」) 还能捕捉深度信息 (depth,「D」)。具体来说,除了捕捉到普通 2D 相机所能捕捉的相同类型的彩色图像,而且它还能告诉你图像中的一部分像素是在相机前方多远的位置上。在内部,大多数 RGB-D 传感器的工作原理是「结构光」(structured light)和「飞行时间」(time of flight),前者将红外图像投射到场景上,并感测该图案如何变形投射到几何表面,后者着眼于投射的红外光返回照相机需要多长时间。我们耳熟能详的 RGB-D 相机包括 Microrosoft Kinect 和 iPhone X 的面部 ID 传感器。RGB-D 非常好用,因为这些传感器体积相对较小且成本低,但速度快且能避免视觉匹配错误。然而,由于遮挡 (前景块中的目标投影到后面的目标)、图像感测失败以及距离问题 (在远离相机的地方,投影和感测都变得困难),RGB-D 相机往往在其深度输出中存在许多空白之处。

激光雷达使用几条激光束(同心圆感应)来直接感知周边环境的几何结构

3. LiDAR(激光雷达)的工作方式是向物体发射高频激光脉冲,并测量它们返回传感器所需的时间。这与我们上面提到的 RGB-D 相机的「飞行时间」技术类似,但是 LiDAR 的射程明显更长,能捕获的点更多,并且在有其它光源干扰的情况下也更加稳定。现在大多数 3D LiDAR 传感器都有几个(最高可达 64 个)垂直对齐的光束,它们能快速旋转以观察传感器周围的所有方向。由于这些传感器的精度、工作距离和稳定性(较好),大多数自动驾驶汽车中都会使用它们。不过,LiDAR 传感器也有缺点:通常体积大、笨重,并且非常昂贵(大多数自动驾驶车中使用的 64 波束传感器要花 75000 美元)。因此,许多公司目前正在尝试开发更便宜的「固态激光雷达」(solid state LiDAR)系统,这种系统可以进行 3D 感知而无需旋转。

3D 表示

采集 3D 数据后,你就需要以有用的形式将它表示出来,并输入到你接下来要构建的处理模型中。你应该了解以下四种主要的 3D 表示:

3D 数据的不同表示:(a)点云;(b) 体素网格; (c) 多边形网格; (d) 多视图表示

a. 点云(Point clouds)是 3D 空间点的简单集合,每个点可选择性地与一些其他属性(例如 rgb 颜色)一起由一个(xyz)坐标确定。它们是所捕捉的原始 LiDAR 数据,并且在进行进一步处理之前,双目视觉 和 RGB-D 数据(由每个都标记了像素深度值的图像组成)通常会被转换为 点云。

b. 体素网格(Voxel grids)源自于点云。「体素」就像 3D 空间中的像素,体素网格则可被看成是量化的、大小固定的点云。然而点云在浮点像素坐标的空间中的任一地方,都可以有无限个点,体素网格则是每个单元或「体素」都具有固定大小和离散坐标的 3D 网格。

C. 多边形网格(Polygon meshes)由一组与多边形表面近似、共享顶点的几何面组成。点云可被视为从真实的连续几何表面采样得到的 3D 点的集合;而多边形网格则旨在以易于渲染的方式表示那些底层表面。多边形网格虽然最初因计算机图形而创建,它对于 3D 视觉,也非常有用。从点云中获取多边形网格的方法有多种,其中包括 KaZhand 这类泊松曲面重建方法。

d. 多视图表示(Multi-view representations)是从不同模拟视点(「虚拟相机」)捕获的一个经渲染的多边形网格的 2D 图像的集合,它可以采用简单的方法对 3D 几何进行转换。简单从多个相机(呈现效果如双目视觉)捕捉图像和构建一个多视图表示之间的区别在于,后者需要真正去构建完整的 3D 模型,并从多个任意视点渲染该模型,从而实现真实的几何结构的完全转换。与上述其他三种用于存储和处理 3D 数据的表示不同,多视图表示通常仅应用于将 3D 数据转换成可处理或可视化的简单格式。

理解

将 3D 数据转换为可理解的格式后,接下来就需要真正地构建计算机视觉模型来理解它。现在的问题是,把在 2D 图像上表现良好的传统深度学习技术(如 CNN)拓展到在 3D 数据上运行,根据数据表示的不同可能会很困难,这也使得目标检测、语义分割等传统任务变得具有挑战性。

多视图输入学习(Learning with multi-view inputs)

使用 3D 数据的多视图表示,是 2D 深度学习技术适配于 3D 的最简单方法。将 3D 感知问题转换为 2D 感知问题是一个聪明的做法,但在某种程度上,这种方法仍然需要你推理出一个目标的 3D 几何。早期基于深度学习的工作使用了这一方法的是 SU 等人的论文 Multi-view CNN(2015,https://arxiv.org/pdf/1505.00880.pdf),它提出的 Multi-view CNN 这个简单而有效的结构,能从一个 3D 目标的多个 2D 视图中学习特征描述符。比起使用单个 2D 图像来进行目标分类,采用了这一方法的结构具有更好的性能。它的实现方式是:将单个图像喂给在 ImageNet 上进行了预训练的 VGG 网络从而来提取显著特征、池化产生的激活图,并将这些信息传送到附加卷积层来进一步进行特征学习。

多视图 CNN 结构

同时,多视图图像表示也存在大量不足。其中,主要的不足是,无法真正以 3D 形式进行学习——固定数量的 2D 视图依旧只是一个对底层 3D 结构的不完美近似。结果,由于从 2D 图像中获得的特征信息有限,诸如语义分割等任务——尤其是跨目标和场景的更复杂的任务,变得具有挑战性。同时,对于诸如自动驾驶和虚拟现实等计算受限的任务,这种 3D 数据可视化形式无法进行大规模应用——要注意的是,生成多视图表示需要对完整的 3D 模型进行渲染以及对多个任意视点进行仿真。最后,多视图学习也面临着许多缺陷,而这些缺陷将激励研究者们研究直接从 3D 数据中学习的方法。

体积表示法学习(Learning with volumetric representations)

体素网格学习解决了多视图表示的主要缺陷。体素网格架起了 2D 和 3D 视觉之间的桥梁——它们对于图像来说,最接近 3D 表示,可使 2D 深层学习概念(如卷积运算符)更易于适配 3D 场景。Maturana 和 Scherer 的论文 VoxNet(2015,https://www.ri.cmu.edu/pub_files/2015/9/voxnet_maturana_scherer_iros15.pdf),就是最早一批在给定体素网格输入的情况下,在目标分类任务上取得喜人结果的深度学习方法。VoxNet 在概率性占位网格上操作,其中每个体素包含该体素在空间上被占用的概率。这种方法的一个好处是,它允许网络对已知自由的体素 (例如 LiDAR 光束通过的体素) 和占用情况未知的体素 (例如 LiDAR 光束射中的位置后面的体素) 进行区分。

VoxNet 结构

VoxNet 的结构本身相当简单,它由 2 个卷积层、1 个最大池层和 2 个全连接层组成,最终计算输出类得分向量。这种网络比大多数最先进的图像分类网络更浅得多,并且拥有小得多的参数,不过它是从数百种可能的 CNN 结构的随机搜索中被选取出来的。由于体素网格与图像非常相似,它们采用的实际跨步卷积和池化操作,只是在 2D 像素上执行的这些操作对 3D 体素的细微适配。卷积操作使用 d×d×d×c 核而非应用于 2D CNNs 中的 d×d×c 核,而池化操作则考虑非重叠的 3D 体素块,而不是 2D 像素块。

VoxNet 的一个问题是,它的结构并非原本就是旋转不变的。虽然论文作者合理地假设传感器保持直立,从而让体素网格的 z 轴与重力方向对齐,但是对于 z 轴的旋转来说,即使体素网格中的几何与学习卷积核的相互作用非常不同,这种的假设——来自后方的目标依旧是同一个目标,依旧是不存在的。为解决这一问题,他们采用了一种简单的数据增强策略。在训练期间,他们将每个模型旋转几次,并在所有的副本上进行训练;接着,在测试时,他们将横跨几个输入选择的最终全连接层的输出进行池化处理。他们指出,与 Su 等人的 Multi-view CNNs 在其「视图池化」步骤中将中间卷积层的输出池化相比,这种方法带来的性能差不多但是收敛得更快。用这种方式,VoxNet 通过共享横跨输入体素网格的不同旋转的相同的学习卷积核权重,来学习旋转不变性。

VoNET 代表了向真正的 3D 学习迈进的一大步,不过,体素网格仍然存在许多缺陷。首先,与点云相比,它们损失了分辨率——因为当它们彼此靠近时,一些代表复杂结构的不同点会被嵌入到一个体素中。同时,与稀疏环境中的点云相比,体素网格可能导致不必要的高内存使用,因为它们大量消耗内存来表示自由和未知空间,而点云则仅包含已知点。

点云学习(Learning with point clouds)

  • 点云分割(PointNet)

针对这些基于体素方法的问题,最近的研究集中于直接在原始点云上进行操作的结构。最值得注意的是,Qi 等人的论文 PointNet(2016,https://arxiv.org/pdf/1612.00593.pdf)是针对处理不规则 3D 数据这种格式最早被提出的方法之一。然而,如作者所指出的,点云只是 3D 空间里由 XYZ 坐标表示的一组点。更具体来说,假设给定点云中的 N 点,因为喂给网络的点的排序对底层几何没有影响,网络需要学习对输入数据的 N! 排列具有不变性的唯一特征。此外,网络对于点云的转换——旋转、平移应该是稳定的,并且它的大小应该对预测没有影响。

为了确保跨输入排序的不变性,点云分割背后的关键性经验是,使用一个为输入的任意排序产生一致输出的简单的对称函数(此类函数中的典型算法包括加法和乘法)。在这种认知的指导下,点云分割结构背后的基本模块(叫做 PointNet Vanilla)定义如下:

f(x1,…,xn)=γ⊙g(h(x1),…,h(xn))

其中 f 是将输入点转换成 k 维向量(用于目标分类)的对称函数。这个函数 f 可以近似为另一个对称函数 g。在等式中,h 是一个多层感知器(MLP),它用来将个别输入点(以及它们的 xyz 坐标、颜色、表面法线等相应特征)标记到更高维度的隐空间。最大池化操作充当对称函数 g,它将学习到的特征聚合为点云的全局描述符。这个单一的特征向量被传递到γ——另一个输出目标预测的 MLP。

为了应对这一挑战——学习对点云的几何变换具有不变性的表示,点云分割采用一个叫做 T-Net 的小型网络,该网络将一种仿射变换应用到点云的输入上。这个概念与 Jaderberg 等人的论文 spatial transformer networks(2016,https://arxiv.org/pdf/1506.02025.pdf)所提出的概念类似,但要简单得多,因为它不需要定义层的新类型。T-Net 由可学习的参数组成,这些参数使点云分割能够将输入点云转换为一个固定的、规范的空间,从而确保即使对于最细微的变化,整个网络也是稳定的。

点云分割结构

整个点云分割结构集成了原始方法、T-Net 与为点云创建特性表示的多个 MLP 层。然而,除了目标分类之外,点云分割还能够实现目标和场景的语义分割。为了实现这一点,点云分割结构将最大池化对称函数中的全局特征向量与在输入数据被传送到一些 MLP 之后学习的任一点的特征相结合。通过连接这两个向量,每个点都能感知到其全局语义和局部特征,从而使网络能够学习有助于分割的附加的、更有意义的特征。

基于点云分割的室内场景语义分割结果

  • 点云分割 (PointNet )

虽然点云分割取得了较大的成果,但它存在的主要缺点之一,就是它的结构无法捕获到点邻域内的底层局部结构——点邻域这个概念类似于:使用 CNN 从图像中不断增大的感受野规格中提取特征。为了解决这个问题,Qi 等人提出了优化后的 PointNet (2017,https://arxiv.org/pdf/1706.02413.pdf),它衍生自点云分割结构,不过也能够从点云中的本地区域学习特性。该方法的基础是分层特征学习层,其具有三个关键步骤:第一,它将采样的点作为局部区域的质心;第二,基于与质心的距离对这些局部区域中的相邻点进行分组;第三,使用迷你—点云分割对这些区域的特征进行编码。

这些步骤不断重复,从而在点云内的大小不一的点群中学习特征。通过这种方式,网络可以更好地理解整个点云中的局部点群中的底层关系——最终有助于提高泛化性能。该研究结果表明,点云分割 能够显著改进包括点云分割在内的现有方法,并在 3D 点云分析基准(ModelNet40 和 ShapeNet)上实现了最佳性能。

具有前景的新研究领域

图像卷积神经网络(Graph CNNs)

当前对用于处理 3D 数据的深度学习结构的研究,主要集中在点云表示方面,同时,最近的许多工作都是在延展点云分割/点云分割 的概念,并从其他领域汲取灵感来进一步提高性能。例如 Wang 等人的论文 Dynamic Graph CNNs (2018,https://arxiv.org/pdf/1801.07829.pdf),就使用基于图形的深度学习方法来改善点云中的特征提取。它的观点是点云分割/点云分割 无法捕获各个点之间的几何关系,因为这些方法需要保持对不同输入阵列的不变性。然而,通过将一个点和它周围最近的邻域视作一个定向图,Wang 等人构建了 EdGeConV,它是一个生成遍布数据中的点的唯一特征的运算符。如果你有兴趣对图形进行进一步学习,阅读另一篇 Gradient 概览(https://thegradient.pub/structure-learning/)。

针对点云处理的稀疏点阵网络(SPLATNet)

针对点云处理的稀疏点阵网络结构

另一方面,一些研究已经绕开了点云分割/点云分割 中提出的经典特征提取方法,而选择设计一种综合处理点云的新方法。Su 等人提出的 SPLATNet(2018,https://arxiv.org/pdf/1802.08275.pdf)架构,是点云研究新焦点中一个极好的例子——作者设计了一种新的结构和卷积算子,可以直接在点云上操作。这篇论文的主要观点是,将「感受野」的概念转译为能让空间信息即使在稀疏区域(点云分割/点云分割 的一个主要缺陷)也能够被保存的不规则点云。特别有意思的是,SPLATNet 可以将从多视图图像中提取的特征投影到 3D 空间中,在端到端可学习结构中融合 2D 数据与原始点云。使用这种 2D- 3D 联合学习,SPLATNet 在语义分割中实现了最优性能。

椎体点云分割(Frustum PointNets)

对 2D 边界框估计生成的 3D 截体进行可视化

第三个有前景的研究方向,是关于对我们上面所描述的基本结构构建块进行延展,用来构建用于诸如 3D 目标检测等有用任务的更精细的网络。基于同时使用 2D、3D 数据这一想法,Qi 等人的 Frustum PointNets (2017,https://arxiv.org/pdf/1711.08488.pdf) 提出了一个新方法:融合 RGB 图像与点云,来提高大 3D 场景中目标定位的效率。该任务的传统方法通过直接在整个点云上对滑动窗口执行分类,来确定目标可能的 3D 边界框,这种计算成本大,而且还让实时预测变得困难。Qi 等人做出了两个重要贡献:

  • 第一,他们提议首先使用标准的 CNN 对 2D 图像进行目标检测,将被检测目标可能驻留的点云区域对应的 3D 截体拍扁,然后仅在点云的这个「切片」上执行搜索流程。这样就明显缩小了边界框估计的搜索空间,降低了错误检测的可能性,并且还会大大加速处理进度——这个对于自动驾驶的应用至关重要。
  • 第二,Qi 等人设计了一种新颖的基于点云分割的结构,可以直接一次性对整个 3D 截头体进行实例分割(将点云分割为单个目标)和边界框估计,而不是在边界框搜索过程中执行典型的滑动窗口分类,从而使他们方法在遮挡和稀疏上的表现既快速又稳定。最终,由于这些改进,这项工作在发布时,在 KITTI 和 SUN RGB-D 3D 检测基准上的表现都优于先前所有的方法。

最后的思考

在过去仅仅 5 年的时间里,3D 深度学习方法已经从使用衍生的(多视图)3D 数据表示发展到原始的(点云)3D 数据表示。在此过程中,我们已经从简单使用 2D CNNs 适配 3D 数据的方法(多视图 CNN,甚至 VoxNet)转变为专为 3D 创建的方法(点云分割和其他点云方法),极大地提改善了在目标分类和语义分割等任务上的性能。这些成果是有前景的,因为它们证实了以 3D 视角来看、来表示这个世界,确实是有价值的。

然而,这一领域的进展才刚开始。目前的工作不仅要聚焦于提高这些算法的精度和性能,也需要确保稳定性和可扩展性。尽管目前的许多研究都是由动驾驶这一应用场景所推动的,但是直接在点云上操作这一新方法,也将在 3D 医学图像、虚拟现实和室内测绘中发挥重要作用。

Via:

Beyond the pixel plane: sensing and learning in 3D

地址:

https://thegradient.pub/beyond-the-pixel-plane-sensing-and-learning-in-3d

题图来源:

https://www.youtube.com/watch?v=B8R148hFxPw

0 人点赞