开启生长之旅!这是我参加「日新计划 12 月更文挑战」的第3天,点击查看活动概况。

3D 视觉算法包括许多内容,此文仅当作入门了解些概念和知识归纳。

布景知识

3D图画描绘有多种办法,常见的如下:

  • 点云
  • 网格(meshes)
  • 依据视图的描绘
  • 深度图画(depth images)

RGB-D相机

一般普通的相机拍出来的图画,其每个像素坐标(x, y)能够取得三种色彩特色(R, G, B)。但在 RGB-D 图画中,每个(x, y)坐标将对应于四个特色(深度 D,R,G,B)

一,依据3DMM的三维人脸重建技术概述

1.1,3D 人脸重建概述

3D 人脸重建界说:从一张或多张2D图画中重建出人脸的3D模型。数学表达式:

M=(S,T)M = (S,T)

其间 SS 表明人脸 3D 坐标形状向量(shape-vector),TT 表明对应点的纹路信息向量(texture-vector)。

3D 人脸重建算法分类:

3D视觉算法初学概述

1.2,初版 3DMM

1999 年论文 《A Morphable Model For The Synthesis Of 3D Faces》提出三维形变模型(3DMM),三维形变模型树立在三维人脸数据库的基础上,以人脸形状和人脸纹路统计为束缚,同时考虑到了人脸的姿势和光照因素的影响,因而生成的三维人脸模型精度高。每一个人脸模型都由相应的形状向量 SiS_iTiT_i组成,其界说如下:

SnewModel=S+∑i=1m−1isiS_{newModel} = \bar{S} + \sum_{i=1}^{m-1} \alpha_{i} s_{i}
TnewModel=T+∑i=1m−1bataitiT_{newModel} = \bar{T} + \sum_{i=1}^{m-1} bata_{i} t_{i}

其间 S\bar{S} 表明均匀脸部形状模型,sis_i表明 shape 的 PCA 部分(依照特征值降序摆放的协方差阵的特征向量),i\alpha_i表明对应形状系数;纹路模型符号界说类似。经过调整形状、纹路系数系数可生成不同的人脸 3D 模型。

二,视觉SLAM算法基础概述

SLAM 问题的本质:对运动主体本身和周围环境空间不确定性的估量。为了处理SLAM问题,咱们需求状 态估量理论,把定位和建图的不确定性表达出来,然后采用滤波器或非线性优化,估量状况的均值和不确定性(方差)。

SLAM 是Simultaneous Localization and Mapping的缩写,中文译作“同时定位与地图构建”。它是指搭载特定传感器(单目、双目、RGB-D 相机、Lidar)的主体,在没有环境先验信息的情况下,在运动进程中树立环境的模型,同时估量自己的运动。假如这儿的传感器首要为相机,那就称为“视觉SLAM”;假如传感器位激光,则为激光 SLAM,两者对比方下:

3D视觉算法初学概述

SLAM 首要处理定位地图构建两个问题**。**视觉 SLAM 流程图如下:

3D视觉算法初学概述

整个视觉 SLAM 流程包括以下几个步骤:

  1. 传感器信息读取。视觉 SLAM 中首要指摄像头图画数据读取与预处理。
  2. 视觉里程计Visual Odometry, VO)。视觉里程计的使命是预算相邻图画间相机的运动,以及部分地图的姿态。VO 又称为前端 (Front End)。
  3. 后端优化Optimization)。后端接受不同时刻视觉里程计丈量的相机位姿,以及回环检测的信息,对它们进行优化,得到大局一致的轨道和地图。由于接在 VO 之后,又称为后端(Back End)。
  4. 回环检测Loop Closing)。回环检测判别机器人是否到达过先前的位置。假如检测到回环,它会把信息供给给后端进行处理。
  5. 建图Mapping)。它依据估量的轨道,树立与使命要求对应的地图。

2.1,视觉里程计

视觉里程计 VO 目的是经过相邻帧间的图画估量相机运动,并康复场景的空间结构。其间为了定量地估量相机运动,必须先了解相机与空间点的几许联系。同时,仅经过视觉里程计来估量轨道,将不可避免地呈现累积漂移 (Accumulating Drift),即每次估量都有差错的情况下,先前时刻的差错将会传递到下一个时刻,导致经过一段时刻累积之后,估量的轨道将不再精确,如下图所示。

3D视觉算法初学概述

2.2,后端优化

概述性的说,后端优化首要目是为了处理 SLAM 进程中噪声的问题。后端优化要考虑的问题,便是怎么从这些带有噪声的数据中估量整 个系统的状况,以及这个状况估量的不确定性有多大—这称为最大后 验概率估量(Maximum-a-Posteriori,MAP)。这儿的状况既包括机器 人本身的轨道,也包括地图。

前端与后端的联系:前端给后端供给待优化的数据,以及这些数据的初始值。后端只关心数据的优化进程,不联系这些数据来源于什么传感器。因而在视觉 SLAM 中,前端和核算机视觉研讨范畴更为相关,比方图画的特征提取与匹配等,后端则首要是滤波与非线性优化算法

2.3,回环检测

回环检测(又称闭环检测 Loop Closure Detection),首要目的是为了处理位置估量随时刻漂移的问题

能够经过图画类似性来完成回环检测。在检测到回环之后,咱们会把“A与B是同一个点”这样的信息告诉 后端优化算法。然后,后端依据这些新的信息,把轨道和地图调整到符合回环检测成果的姿态。这样,假如咱们有充沛而且正确的回环检测, 就能够消除累积差错,得到大局一致的轨道和地图。

2.4,建图

建图(Mapping)是指构建地图的进程。这儿的地图是对环境的描绘,但这个描绘并不是固定的,需求视SLAM 的应用而定。

3D视觉算法初学概述

建图技术,依据用途的不同,能够分为稀少重建和稠密重建,稀少重建通常是重建一些图画特征点的三维坐标,稀少重建首要用于定位稠密建图又称三维重建,是对整个图画或图画中绝大部分像素进行重建,在导航、避障等方面起着无足轻重的作用。

3D视觉算法初学概述

三,三维点云语义切割和实例切割综述

3.1,三维数据的表明办法

三维图画 = 普通的 RGB 三通道彩色图画 + Depth Map。

三维数据有四种表明办法,分别是 point cloud(点云),Mesh(网格),Voxel(体素)以及 Multi-View(多角度图片)。由此也衍生出了对应的三维数据语义和示例切割的算法,但首要是针对 point cloud 的算法越来越多。三维数据集有 ShapeNet、S3DIS、ModelNet40 等。

3.1.1,点云界说

点云简略来说便是一堆三维点的调集,必须包括各个点的三维坐标信息,其他信息比方各个点的法向量、色彩、分类值、强度值、时刻等均是可选。

点云在组成特色上分为两种,一种是有序点云,一种是无序点云。

  • 有序点云:一般由深度图复原的点云,有序点云依照图方阵一行一行的,从左上角到右下角摆放,当然其间有一些无效点由于。有序点云按次序摆放,能够很容易的找到它的相邻点信息。有序点云在某些处理的时分仍是很便当的,但是许多情况下是无法获取有序点云的。
  • 无序点云:无序点云便是其间的点的调集,点摆放之间没有任何次序,点的次序交流后没有任何影响。是比较遍及的点云办法,有序点云也可看做无序点云来处理。

3.1.2,点云的特色:

  • 空间分辨率、点位精度、外表法向量等。
  • 点云能够表达物体的空间轮廓和具体位置,咱们能看到大街、房子的形状,物体间隔摄像机的间隔也是可知的;其次,点云本身和视角无关,能够恣意旋转,从不同角度和方向调查一个点云,而且不同的点云只要在同一个坐标系下就能够直接融合。

3.1.3,点云获取

点云一般需求经过三维成像传感器取得,比方双目相机、RGB-D相机和 LiDAR激光传感器

3D视觉算法初学概述

依据激光丈量原理得到的点云,包括三维坐标(XYZ)和激光反射强度(Intensity),强度信息与目标的外表原料、粗糙度、入射角方向以及仪器的发射能量、激光波长有关。依据拍摄丈量原理得到的点云,包括三维坐标(XYZ)和色彩信息(RGB)。结合激光丈量和拍摄丈量原理得到点云,包括三维坐标(XYZ)、激光反射强度(Intensity)和色彩信息(RGB)。

3.1.4,点云存储格局

点云的文件格局能够有许多种,包括 .xyz,npy,ply,obj,off 等(mesh 能够经过泊松采样等办法转化成点云)。关于单个点云,假如你运用np.loadtxt得到的实际上便是一个维度为 的张量,num_channels一般为 3,表明点云的三维坐标。

  • pts 点云文件格局是最简洁的点云格局,直接按 XYZ 次序存储点云数据, 能够是整型或者浮点型。

3D视觉算法初学概述

  • LAS 是激光雷达数据(LiDAR),存储格局比 pts 杂乱,旨在供给一种敞开的格局标准,答应不同的硬件和软件供给商输出可互操作的一致格局。LAS 格局点云截图,其间 C:class(所属类),F:flight(航线号),T:time(GPS 时刻),I:intensity(回波强度),R:return(第几次回波),N:number of return(回波次数),A:scan angle(扫描角),RGB:red green blue(RGB 色彩值)。

3D视觉算法初学概述

  • .xyz 一种文本格局,前面 3 个数字表明点坐标,后面 3 个数字是点的法向量,数字间以空格分隔。

3D视觉算法初学概述

  • .pcap 是一种通用的数据流格局,现在流行的 Velodyne 公司出品的激光雷达默认收集数据文件格局。它是一种二进制文件

3D视觉算法初学概述

3.1.5,三维点云的多种表明办法

三维点云除了原始点云表明还要网格 (Mesh) 表明和体素表明,如下图所示:

3D视觉算法初学概述

3.2,依据点云的分类和检测

**布景:**相比于图画数据,点云不直接包括空间结构,因而点云的深度模型必须处理三个首要问题:

  1. 怎么从稀少的点云找到高信息密度的表明。
  2. 怎么构建一个网络满意必要的约束如 size-variance 和 permutation-invariance。
  3. 怎么以较低的时刻和核算资源消耗处理很多数据。

对点云的分类通常称为三维形状分类。与图画分类模型类似,三维形状分类模型通常是先经过聚合编码器生成大局嵌入,然后将嵌入经过几个彻底连通的层来取得终究成果。依据点云聚合办法,分类模型大致可分为两类: 依据投影的办法依据点的办法。

3.3,依据点云的语义切割

依据点云的语义切割办法大致可分为依据投影的办法和依据点的办法。

3.3.1,PointNet 网络

PointNet 是第一个能够直接处理原始三维点云的深度神经网络,简略来说 PointNet 所作的事情便是对点云做特征学习,并将学习到的特征去做不同的应用:分类(shape-wise feature)、切割(point-wise feature)等。

无论是分类仍是切割,本质上都仍是分类使命,仅仅粒度不同罢了。因而损失函数 loss 一定有有监督分类使命中常用的交叉熵 loss,别的 loss 还有之前 alignment network(用于实现网络关于仿射变换、刚体变换等变换的无关性)的束缚 loss,也便是上面的 mat_diff_loss

PointNet 网络结构如下所示:

3D视觉算法初学概述

其大致的运算流程如下(来自【3D视觉】PointNet和PointNet++):

  1. 输入为一帧的悉数点云数据的调集,表明为一个 nx3 的 2d tensor,其间 n 代表点云数量,3 对应 xyz 坐标。
  2. 输入数据先经过和一个 T-Net学习到的转化矩阵相乘来对齐,保证了模型的对特定空间转化的不变性。
  3. 经过多次 mlp 对各点云数据进行特征提取后,再用一个 T-Net 对特征进行对齐。
  4. 在特征的各个维度上履行 maxpooling 操作来得到终究的大局特征
  5. 对分类使命,将大局特征经过 mlp 来预测最终的分类分数。
  6. 对切割使命,将大局特征和之前学习到的各点云的部分特征进行串联,再经过 mlp 得到每个数据点的分类成果。

切割使命针关于每一个点做分类,在下面的图中,把大局的特征复制成 n 份然后与之前的 64 维特征进行拼接,然后接着做一个 mlp,最终的输出 nxm 便是每一个点的分类成果。

3D视觉算法初学概述

四,参考资料

  1. 细嚼慢咽读论文:PointNet论文及代码具体解析
  2. 3D点云基础知识
  3. 【3D视觉】PointNet和PointNet++
  4. 点云+深度学习的开山之作–Pointnet