针对 3D 计算机视觉的简介

雷锋网按:本文为 AI 研习社编译的技术博客,原标题 An introduction towards 3D Computer Vision, Jian Shi。 翻译 | 江舟 校对 | Lamaric 整理 | MY

随着 AR / VR 技术和自动驾驶汽车技术的发展,3D 视觉问题变得越来越重要,它提供了比 2D 更丰富的信息。本文将介绍两种用于 3D 场景分析的基本深度学习模型:VoxNet 和 PointNet。

3D 图像介绍

3D 图像会多包含一个维度,即深度。有两种最广泛使用的 3D 格式:RGB-D 和点云。

RGB-D

RGB-D 格式图像就像一堆单值图像,每个像素都有四个属性,红色,绿色,蓝色和深度。

在普通的基于像素的图像中,我们可以通过(x,y)坐标定位任何像素,然后就可以分别获得三种颜色属性(R,G,B)。而在 RGB-D 图像中,每个(x,y)坐标将对应于四个属性(深度,R,G,B)。RGB-D 和点云之间的唯一区别在于,在点云中,(x,y)坐标反映了其在现实世界中的实际值,而不是简单的整数值。

点云

网上的点云样例

点云可以由 RGB-D 图像构建。如果你有已扫描的 RGB-D 的图像,并且还知道扫描相机的内在参数,那么你可以以 RGB-D 图像创建点云,方法是通过使用相机内在参数计算真实世界的点(x,y)。这个过程被称为相机校准。因此,到目前为止,你知道了 RGB-D 图像是网格对齐的图像,而点云是更稀疏的结构。

3D 视觉

就像 2D 问题一样,我们想要检测并识别 3D 扫描图像中的所有对象。但与 2D 图像不同的是,为了充分使用 CNNs 方法的数据,它的最佳输入格式该是什么就成了一个需要解决的问题。

体素化网格

体素化网格是将 3D 对象拟合到网格中的最直观的方法,为了使其看起来像是像素图像,我们在这里将其称为体素。在这种情况下,3D 图像由(x,y,z)坐标描述,它看起来就会像乐高一样。

VoxNet 架构来自“VoxNet:一个用于实时物体识别的 3D 卷积神经网络”,作者:Daniel Maturana 和 Sebastian Scherer。

VoxNet 是一种基于深度学习的框架,它使用占据网格方法对 3D 点云进行分类,VoxNet 在分类问题上非常有效。

例如,如果我们将点云拟合到 32x32x32 的体素化网格,我们可以构建一个全部填充为零的 32x32x32 的数组。然后缩放点云来计算每个体素内的有多少个点。

在获得体素化网格后,我们接下来执行 3D 卷积计算,这有效地在基于体素的图像上滑动立方体(译者注: 3D 卷积是通过堆叠多个连续的帧组成一个立方体,然后在立方体中运用 3D 卷积核)。

我们将扫描扩展到相同的基础。我们设想如果我们进行大规模扫描,每个物体将只是一个会导致一些问题的体素。而且,由于那些上采样操作,不容易确定每个体素的 RGB 颜色。

对于简单的数据集(具有相似的点数,相似的扫描比例),VoxNet 可能是一个简单而效果好的方法。但如果遇到复杂的数据集,它可能并不是一个好的选择。

虽然基于体素化的方法可以在分类问题上展现很好地工作效率,但它为上采样操作牺牲了大量信息。因此,我们希望能够在点上来训练有更好效果的网络。

第一个问题是点的顺序,我们知道点云对点的顺序是不变的。

点云文件可以在不更改实际渲染的情况下被更改。

处理此问题(PointNet)有三种策略:

  1. 对点进行排序。
  2. 输入为 RNN 的序列,此序列通过增加各种排列来增大。
  3. 使用对称函数来聚合来自每个点的信息。在此对称函数中,+ 或 * 是对称的二元函数。

在 PointNet 的论文中,文中说第一种方法会产生一定的计算强度,第二种方法则不够健壮。因此,在这里将使用最大池和对称函数。而最大池是这里的主要操作。

整个框架如下文所述,你也可以去 GitHub 参见完整的实现过程。

PointNet 的架构中,mlp 代表多层感知器。T-Net 是一个微小的变换网络。

通常,它是卷积、完全连接和最大池化层的一种灵活使用方式。我发现一开始可能会很难理解这些,因此我们可以直接看代码去更好地理解。

首先,我将给出一个示例点云,它每行是(x,y,z,r,g,b)。其中每行代表一个点。假设我们在这个例子中有 n 个点。

注意:PointNet 的实际输入使用标准化 RGB 色域,基点的 x,y 在空间的中心是对齐的。为了不与浮点数之间发生混乱,在这里我没有这样做。

PointNet 中的分类

第一步操作是进行 2d 卷积,其内核大小为(1,6),它用来聚合一个点的相关信息(x,y,z,r,g,b;总共六个)。此处的输出应为(n,1,64)。

注意:每层都有批量标准化,我将其删除以简化演示过程。此外,原始 PointNet 使用 9 个特征作为输入(x,y,z,r,g,b,normalized_x,normalized_y,normalized_z)。

这里是几个 1x1 卷积运算以逐个像素点的方式检测这些特征。因此,我们将在这之后产生一个(n,1,1024)的数组。

接下来是最重要的步骤,最大池会选择所有点中最显著的特征。这就是函数对点的顺序不变的原因。由于我们在先前的图层中有 1024 个过滤器,因此该图层将输出 1024 个特征。

之后,所有特征将通过完全连接层被完全连接。

注意:这里的批量大小是 1。PointNet 的输入是一个扫描的场景,此场景将被分成小批量(每批有 4096 点)。PointNet 将执行特征检测批处理程序。

到目前为止,如果你再添加一个完全连接的图层来输出类标签的数量,则可以回到之前的图,而这就是 PointNet 在点云上进行分类的方式。简单地可以分为以下三点:

  1. 汇总每个点信息。
  2. 找到每个点最显著的特征。
  3. 然后完全连接来分类。

PointNet 中的语义分割

分割可看作分类模型不断发展的结果。不过,我们希望网络能够忽略点的顺序。因此,我们将每个点特征与全局特征连接起来,让每个点都知道上下文。

然后我们将使用几个 1x1 卷积内核来提取新的逐点特征。

然后我们就能做出逐点预测。例如,每个点有 13 个类。

原文链接:

https://medium.com/@jianshi_94445/an-introduction-towards-3d-computer-vision-71be8ce11956

原文发布于微信公众号 - AI研习社(okweiwu)

原文发表时间:2018-08-22

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏决胜机器学习

机器学习(二十三) —— 大数据机器学习(随机梯度下降与map reduce)

机器学习(二十三)——大数据机器学习(随机梯度下降与map reduce) (原创内容,转载请注明来源,谢谢) 一、概述 1、存在问题 当样本集非常大的时候,...

3663
来自专栏DT乱“码”

TensorFlow实现卷积神经网络

1.卷积神经网络简介 卷积神经网络(convolutional neural network, CNN),最早是19世纪60年代,生物学家对猫视觉皮层研究发...

3059
来自专栏大数据智能实战

pix2pix tensorflow试验(GAN之图像转图像的操作)

GAN是一种典型的概率生成模型,其核心思想是:找出给定观测数据内部的统计规律,并且能够基于所得到的概率分布模型,产生全新的,与观测数据类似的数据。 概率生成模...

4715
来自专栏TensorFlow从0到N

TensorFlow从0到1 - 7 - TensorFlow线性回归的参数溢出之坑

? 上一篇 6 解锁梯度下降算法解释清楚了学习率(learning rate)。本篇基于对梯度下降算法和学习率的理解,去填下之前在线性回归中发现的一个坑。 ...

3627
来自专栏杨熹的专栏

图解何为CNN

参考 CNN - Convolutional Neural Networks 是近些年在机器视觉领域很火的模型,最先由 Yan Lecun 提出。 如果想学细...

3075
来自专栏MixLab科技+设计实验室

深度学习生成舞蹈影片02之MDN代码练习

本文接上一期,补充一些MDN的代码练习。本教程开发环境是python+jupyter,引用了一个用keras写的mdn包,目标是拟合反正弦函数曲线:

1633
来自专栏QQ会员技术团队的专栏

CNN网络介绍与实践:王者荣耀英雄图片识别

本文主要是对CS231n课程学习笔记的提炼,添加了一些Deep Learning Book和Tensorflow 实战,以及Caffe框架的知识。

1.5K3
来自专栏AI研习社

我们建了个模型,搞定了 MNIST 数字识别任务

对于图像分类任务,当前最先进的架构是卷积神经网络 (CNNs).。无论是面部识别、自动驾驶还是目标检测,CNN 得到广泛使用。在本文中,针对著名的 MNIST ...

802
来自专栏机器学习算法与Python学习

干货|多重预训练视觉模型的迁移学习

关键字全网搜索最新排名 【机器学习算法】:排名第一 【机器学习】:排名第一 【Python】:排名第三 【算法】:排名第四 源 | 全球人工智能 本文介绍的是基...

4597
来自专栏人工智能

基于TensorFlow生成抽象纹理

来源:otoro 编译:weakish 编者按:Google Brain机器学习开发者hardmu使用TensorFlow,基于CPPN网络生成了许多有趣的高分...

5528

扫码关注云+社区