如何轻松理解对点云的深度学习算法 - PointNet算法?

CV_2 PointNet算法的简单理解(入门级别)

一. 写这篇博文的初衷

随着激光雷达渐渐被人们所熟知,其抗干扰、精度高、可建模的优点也被逐渐放大,因此也开始被广泛地用于各个行业(自动驾驶、精密测距、3D建模等等),但由于激光雷达本身的一些局限性(点云近密远疏、雨雾天气表现一般等等),因此其更常被用做是传感器融合中的一个部分。但不管是研究学者也好还是产业公司也好,都有着减少传感器数量、降低成本的最为纯粹的需求。因此对于激光雷达点云的深度学习也在近两年开始越来越多,本文便旨在介绍一种基于激光点云的深度学习算法:PointNet以及它的衍生算法:PointNet++。

二. 什么是激光雷达点云?激光点云数据有什么特点?以及基于这些点云我们可以到底做些什么?

  1. 通俗地来讲,激光雷达点云其实就是一组在给定的三维坐标系统中定义的数据点。其通常通过3D扫描仪(也就是LiDAR)直接生成。
  2. 点云数据具有:无序性(只是点而已,排序顺序没有影响)、近密远疏性(设备扫描与视角不同导致)、非结构化数据(直接去做CNN比较难)
  3. 基于这些点云我们可以做:点云分割(区分点云中每个部分是什么)、点云补全(解决激光雷达点云近密远疏的问题)、基于点云的物体检测、点云的配准(各个点云的拼接)等等。

三. 为什么需要PointNet算法?以及PointNet算法究竟可以做些什么?

如何轻松理解对点云的深度学习算法 - PointNet算法?_第1张图片
对于激光雷达有所了解的同学肯定知道,通过激光雷达扫描得到的点云pcd文件中,保存的其实就是点云中每个点的坐标信息(x, y, z, nx, ny, nz),而并没有像一般的图像一样携带着像素矩阵等可以代表特征的特征信息,因此如何从这些点云中提取出特征信息就成为了我们的当务之急,因此就有了所谓的PointNet算法。至于PointNet算法究竟可以做什么或者说它有什么功能,通常被分为三种:分类任务、部件分割以及场景分割。

四. PointNet的核心函数

如何轻松理解对点云的深度学习算法 - PointNet算法?_第2张图片
1.置换不变性表示的就是点的排列顺序不影响物体的性质。
2.SUM函数则是用来将一大堆数据进行挑选,最终找到一个可以代表这一大堆数据的全局特征。
根据这两个函数就可以简单地去构造一个基础的网络架构了,如下图所示。
如何轻松理解对点云的深度学习算法 - PointNet算法?_第3张图片
简单的说就是将扫描得到所有点云数据,根据坐标值的大小,融合选择成为最终一个坐标。但是也可以看出来随着坐标数量的减少,点云的特征也会大幅度的减少,因此是否可以先对已有的坐标进行升维操作之后再进行max操作呢?这就是PointNet的巧妙之处了。

五. PointNet的基本模型架构

如何轻松理解对点云的深度学习算法 - PointNet算法?_第4张图片
第一层MLP做的就是升维操作;g部分做的就是选最大值操作,从而选出特征;最后一层的MLP则是给得到的特征坐标赋予权重,从而用于之后的分类工作。

六. PointNet的整体网络架构

如何轻松理解对点云的深度学习算法 - PointNet算法?_第5张图片
如上图所示,整个PointNet按照功能被分为了两类,一类是用于点云分类的Classification Network(蓝色部分),另一类是用于点云分割的Segmentation Network(黄色部分)。

PointNet点云分类网络:
如何轻松理解对点云的深度学习算法 - PointNet算法?_第6张图片
在图中红色圈圈部分为是做一些关于数据的转换,后期人们发现这两个步骤可以被忽略。蓝色圈圈部分就是通过MLP对数据进行升维,直到由原先的 n个(x, y, z)坐标升级到 n个(x, y, z, …1024个参数)坐标。黄色圈圈部分则是对升维后的结果进行max操作从而将 n个坐标最终压缩称为1个坐标。末尾部分的粉色圈圈则是对最终获得的那一个坐标中的每一个特征赋予权重,从而可以用来之后的分类操作。(画一下更好理解)
如何轻松理解对点云的深度学习算法 - PointNet算法?_第7张图片
PointNet点云分割网络:
如何轻松理解对点云的深度学习算法 - PointNet算法?_第8张图片
对于点云的分割任务来说,其本质其实就是对点云中的每一个点进行逐一地分类,为了实现这一目的,不光点云中的每个点携带着自己的特征信息,还希望它们能携带一部分全局的特征。因此就出现了将图中红色圈圈的两个部分特征数据拼接起来的操作。拼接完成后再通过蓝色圈圈部分的MLP,从而获得每个点的分类概率。

PointNet所存在的问题

  1. 与当前的主流网络不符,没有局部特征的融合,要不是自己一个点,要不就是整体一群点。
  2. 没有关系的概念,局部样本点之间是一定存在关系的,但是在PointNet中却没有考虑到。

因此,为了考虑点云中点与点之间的关系,即考虑局部特征和全局特征之间的关系和融合,就有了基于PointNet的升级版本:PointNet++。PointNet++在本质思想上与之前的PointNet没有太大的偏差,但是采用了类似图像卷积的方法,也就是类似于在点云的局部画圈的感觉,或者说像是聚类的感觉将点云分成一堆一堆的,之后再对每堆提取局部特征然后再整合起来。


择日更新PointNet++

你可能感兴趣的:(计算机视觉CV,python,算法,深度学习,人工智能,机器学习)