这篇博客会介绍点云的基本知识,重点介绍最近两年发表的部分经典论文,有什么建议欢迎留言!

点云基本介绍

点云是某个坐标系下的点的数据集,包含了丰富的信息,可以是三维坐标X,Y,Z、颜色、强度值、时间等等。下面两张图分别展示了点云在三维空间可视化以后的效果和数据格式。点云的数据获取方式有很多种,比较常见的是三维激光扫描仪进行数据采集,它有三大类:

  • 星载(星载LiDAR采用卫星平台,运行轨道高、观测视野广,基本可以测量到地球的每一个角落,为三维控制点和数字高程模型的获取提供了新的途径,有些星载激光雷达还具有观察整个天体的能力)
  • 机载:机载主要借助无人机(UAV/UAS)进行大规模的点云数据采集。
  • 地面分为三小种:地上三维激光扫描、车载MMS、手持激光扫描。


兔子形状的点云

三维点云的数据示例

从上面的数据示例可以看出,点云本质上是一长串点(Nx3矩阵,其中n是点数),这带来两个问题。第一,在几何上,点的顺序不影响它在空间中对整体形状的表示,例如,相同的点云可以由两个完全不同的矩阵表示,如下图所示。我们希望不论点云顺序怎样,模型可以从中得到相同的特征。第二,点云在空间中经过刚性变换后,如旋转或者平移,点云的坐标会变。有时我们为了方便对点云做处理(如分类等),需要将其旋转到正面或者侧面(做旋转),此时,模型得到的点云数据(N*3矩阵)将会完全不同。我们希望点云做变换之后不会影响模型的结果。

传统的点云处理方式包括两大类:

  • 将点云数据投影到二维平面。此种方式不直接处理三维的点云数据,而是先将点云投影到某些特定视角再处理,如前视视角和鸟瞰视角。同时,也可以融合使用来自相机的图像信息。通过将这些不同视角的数据相结合,来实现点云数据的认知任务。比较典型的算法有MV3D和AVOD。
  • 将点云数据划分到有空间依赖关系的体素(voxel)。此种方式通过分割三维空间,引入空间依赖关系到点云数据中,再使用3D卷积等方式来进行处理。这种方法的精度依赖于三维空间的分割细腻度,而且3D卷积的运算复杂度也较高。

接下来我们会介绍从17年至今比较经典的关于点云的论文,包括PointNet,PointNet++,GeoNet,Kd-Net、SO-Net以及做数据上采样的PU-Net。

PointNet

此处是PointNet的位置

PointNet++

此处是PointNet++的位置

GeoNet

  • 论文名 GeoNet: Deep Geodesic Networks for Point Cloud Analysis
  • 作者 Tong He,Haibin Huang,Li Yi

GeoNet是一种基于测地距离的点云分析深度网络,发表在2019年的CVPR上。论文贡献包括两个:开发了一种数据表示以及提出了如何将其运用到下游任务中的方法。为了方便理解论文内容,我们首先来介绍一下测地距离这个概念。

测地距离

我们先从点云的研究任务说起。点云的形状分析是点云的重要任务之一,主要包括三个方面的特征,集合特征、统计特征和拓扑特征。集合特征主要有法向量、曲率等,统计特征主要包括模型顶点间的集合关系、顶点的曲率分布等,拓扑特征主要有突出的特征点、临界点、骨架、Reeb图等,其中骨架是对点云主要特征的一种可视化描述,符合人类的视觉特征。
从目前已有的工作来看,拓扑特征是点云的重要特征之一,对点云的分类、简化、检索等研究有重要的作用。寻找提取点云拓扑特征的简单、有效、快速的方法对点云的形状分析与理解具有重要的意义,测地线就是其中的一种。
测地线是连接曲面上给定的两点之间的最短路径,测地线的长度就是这两点之间的测地距离。根据计算结果的精确性,三维模型的测地距离的计算方法可以分为两大类:精确的方法和近似的方法。可以看做是图论上计算两个点之间的最短路径的计算方法,采用dijkstra等。

GeoNet计算测地距离

GeoNet其实就是利用网络来计算测地距离。我们假设\(\chi = \{ x_{i} \}\)表示点云,每个点的维度为3 。那么我们可以为点\(x_{i}\)定义它的邻居节点为\(B_{r}(x_{i})=\{ x_{j}|d_{E}(x_{i},x_{j}) \le r\}\) 。其中\(d_{E}(x_{i},x_{j})\)表示两个节点之间的欧式距离。也就是说将\(x_{i}\)为球心,半径为r内的节点划为它的邻居节点。这是GeoNet关于邻域的定义。基于此我们继续定义\(G_{r}(x_{i})=\{ g_{i,j}=d_{G}(x_{i},x_{j})|x_{j} \in B_{r}(x_{i}) \}\),其中\(d_{G}表示测地距离\),即\(G_{r}(x_{i})\)表示 \(x_{i}\)到邻域内每个点的测地距离的集合。GeoNet的目标是利用神经网络拟合映射关系:\(f:x_{i} \to G_{r}(x_{i})\),它的网络结构如下图所示。

如图所示,GeoNet由两个模块组成:特征提取模块以及测量匹配模块。其中特征提取模块利用PointNet++提取点云的局部特征,再将其输入解码器,同时还将原始的点云输入解码器(skip connection),这样解码器可以对点云的局部特征和总体特征做处理。测量匹配模块利用特征抽取模块得到的特征向量为每个节点计算其邻域测地距离。但该模块的目的并不是计算出准确的测地距离,而是在模型不断拟合测地距离的过程中,其参数矩阵会隐含的提取出一些特征。(笔者私以为,GeoNet的作用就是进行特征提取,在训练模型计算测地距离的过程中,模型的参数包含了点云的一些特征)

论文中还详细介绍了GeoNet如何与下游任务:分类、分割等做融合,并给出了示例。

Kd-Net

  • 论文名 Escape from Cells: Deep Kd-Networks for the Recognition of 3D Point Cloud Models
  • 作者

Kd-Net是一种基于Kd-tree的网络,我们先对Kd-tree加以介绍。

Kd-tree

KD树是从二叉搜索树发展来的,是一种高维索引树形数据结构,常用于大规模高维数据密集的查找比对的使用场景中,主要是最近邻查找以及近似最近邻查找,在CV中主要是图像检索和识别的高维特征向量的查找和比对。
我们举例讲述如何构建一个三维的KD树。我们可以在第一层选择用节点的第一维数据作为分类依据,第二层用第二维数据,第三层用第三维数据,第四层用第一维数据,以此类推。用图中的数据来说明:

  • 根节点为(3,1,4),分类依据为3。
  • 拿到第二个数据(2,3,7),先与根节点(3,1,4)比较,第一层节点的分类维度为一,(2,3,7)的第一维数据小于根节点的第一维数据,所以下一步与根节点的左节点做比较,发现左节点为空,将(2,3,7)放在左节点。
  • 拿到第三个数据(2,1,3),先与根节点(3,1,4)比较,第一层节点的分类维度为一,(2,1,3)的第一维数据小于根节点的第一维数据,所以下一步与根节点的左节点做比较。左节点为(2,3,7),第二层节点的分类维度为二,(2,1,3)的第二维数据比(2,3,7)的第二维数据小,下一步与其左节点作比较。左节点为空,将(2,1,3)插入该点。

    KD树构建过程

    二维KD树的表示方法

    利用Kd_tree构建Kd-net

    了解了如何构建Kd-tree后,我们来看如何根据点云构建Kd-tree进一步组成Kd-net。
    下图左边是建好的Kd-tree,编号为8-15的是8个数据点。可以看到紫色的是第一次切割,蓝色和红色是第二层,绿色和橙色(或红色?)是第三层。该示意图用二维展示了三维点云的kd-tree,在三维空间中,切割的方向是x,y,z轴。为了将点云向量化,作者先用预训练好的数据将叶子节点(8、9、12、13、14、15)向量化,然后根据公式逐层向上计算每个节点的向量表示,直到所有的节点都被向量化。
    图中的右半部分是Kd-net的结构图,其中灰色的条表示网络的节点,中间的圆圈是网络的参数,第一层是所有数据点的向量表示。网络经过一次前向传播得到一个特征向量,即图中标号为1的节点,该节点提取了所有数据的特征。标号为1的特征向量经过一个全连接层得到节点0,即分类结果。其中,相同颜色的圆圈表示网络中的共享参数。节点之间共享参数的条件为:在Kd-tree中是同一层,且分割的方向都相同。可以看到节点8、9、12、13、14、15在同一层且分割的方向都相同:平行于y轴。

    kd-tree和kd-net

    kd-tree向量化公式

持续更新...

PointCloud及其经典论文介绍的更多相关文章

  1. 巨经典论文!推荐系统经典模型Wide & Deep

    今天我们剖析的也是推荐领域的经典论文,叫做Wide & Deep Learning for Recommender Systems.它发表于2016年,作者是Google App Store的 ...

  2. Memory Networks01 记忆网络经典论文

    目录 1.Memory Networks 框架 流程 损失函数 QA 问题 一些扩展 小结 2.End-To-End Memory Networks Single Layer 输入模块 算法流程 Mu ...

  3. 经典论文系列| 实例分割中的新范式-SOLO

    前言: 这是实例分割中的一篇经典论文,以往的实例分割模型都比较复杂,这篇论文提出了一个简单且直接的实例分割模型,如何设计这种简单直接的模型且要达到一定的精度往往会存在一些困难,论文中有很多思路或思想值 ...

  4. 经典论文系列 | 缩小Anchor-based和Anchor-free检测之间差距的方法:自适应训练样本选择

    ​  前言  本文介绍一篇CVPR2020的论文,它在paperswithcode上获得了16887星,谷歌学术上有261的引用次数. 论文主要介绍了目标检测现有的研究进展.anchor-based和 ...

  5. 经典论文翻译导读之《Finding a needle in Haystack: Facebook’s photo storage》

    https://github.com/chrislusf/seaweedfs [译者预读]面对海量小文件的存储和检索,Google发表了GFS,淘宝开源了TFS,而Facebook又是如何应对千亿级别 ...

  6. 物体的三维识别与6D位姿估计:PPF系列论文介绍(三)

    作者:仲夏夜之星 Date:2020-04-08 来源:物体的三维识别与6D位姿估计:PPF系列论文介绍(三) 文章“A Method for 6D Pose Estimation of Free-F ...

  7. CVPR2020论文介绍: 3D 目标检测高效算法

    CVPR2020论文介绍: 3D 目标检测高效算法 CVPR 2020: Structure Aware Single-Stage 3D Object Detection from Point Clo ...

  8. 经典论文系列 | 目标检测--CornerNet & 又名 anchor boxes的缺陷

    ​ 前言: 目标检测的预测框经过了滑动窗口.selective search.RPN.anchor based等一系列生成方法的发展,到18年开始,开始流行anchor free系列,CornerNe ...

  9. Fully Convolutional Networks for semantic Segmentation(深度学习经典论文翻译)

    摘要 卷积网络在特征分层领域是非常强大的视觉模型.我们证明了经过端到端.像素到像素训练的卷积网络超过语义分割中最先进的技术.我们的核心观点是建立"全卷积"网络,输入任意尺寸,经过有 ...

随机推荐

  1. asp.net core系列 66 Dapper介绍--Micro-ORM

    一.概述 目前对于.net的数据访问ORM工具很多,EF和EF Core是一个重量级的框架.最近在搭建新的项目架构,来学习一下轻量级的数据访问ORM工具Dapper.Dapper支持SQL Serve ...

  2. 面试还不知道BeanFactory和ApplicationContext的区别?

    接口 BeanFactory 和 ApplicationContext 都是用来从容器中获取 Spring beans 的,但是,他们二者有很大不同 我看到过很多问 BeanFactory 和 App ...

  3. 曹工说Tomcat1:从XML解析说起

    一.前言 第一次被人喊曹工,我相当诧异,那是有点久的事情了,楼主13年校招进华为,14年在东莞出差,给东莞移动的通信设备进行版本更新.他们那边的一个小伙子来接我的时候,这么叫我的,刚听到的时候,心里一 ...

  4. 全网唯一的纯前端实现的canvas支持多图压缩并打包下载的工具

    技术栈: canvas jszip.js(网页端压缩解压缩插件JSZIP库) FileSaver.js(文件保存到本地库) 直接解读源码: <div class="cont" ...

  5. vuex分模块后,如何获取state的值

    问题:vuex分模块后,一个模块如何拿到其他模块的state值,调其他模块的方法? 思路:1.通过命名空间取值--this.$store.state.car.list // OK 2.通过定义该属性的 ...

  6. css之vw布局

    vw,vh是视口单位,是相对视口单位,与百分百布局不一样的是,百分百是相对于父及元素,而vw布局是相对与窗口. 而rem布局是要与js一起配合 // 以iphone6设计稿 @function px2 ...

  7. Hadoop起步之图解SSH、免密登录原理和实现

    1. 前言 emmm….最近学习大数据,需要搭建Hadoop框架,当弄好linux系统之后,第一件事就是SSH免密登录的设置.对于SSH,我觉得使用过linux系统的程序员应该并不陌生.可是吧,用起来 ...

  8. java中关于IO流的知识总结(重点介绍文件流的使用)

    今天做软件构造实验一的时候,用到了java文件流的使用,因为之前学的不是很踏实,于是决定今天好好总结一下, 也方便以后的回顾. 首先,要分清IO流中的一些基础划分: 按照数据流的方向不同可以分为:输入 ...

  9. charles使用说明(基于mac)

    1. Charles简介 1.1 Charles 需要java的运行环境支持,支持Windows.Mac:Fiddler不支持Mac.故Charles是在Mac下常用的网络封包截取工具. 1.2 Ch ...

  10. 39 | 从小作坊到工厂:什么是Selenium Grid?如何搭建Selenium Grid?