[个人笔记]3D点云深度学习入门

目录

  • 基本数据结构
  • 任务
    • 粒度的区分:(2D为例)
  • 挑战
  • 常用方法和思路
    • 基于体素的点云深度学习:
    • 基于多视
    • 点云深度学习基础网络: point net
      • 网络亮点: max pooling & transform
      • 网络结构
      • 共享权重mlp的一种常用实现:1*1卷积
    • 其他细节
    • 点云深度学习基础网络:pointnet++
      • 用Set Abstraction分层提取特征
      • 用Set Abstraction提到的特征进行分类
      • 用Set Abstraction提到的特征进行分割
  • 公开数据集
    • 机载大规模场景
      • ASL Datasets Repository
      • DALES: A Large-scale Aerial LiDAR Data Set for Semantic Segmentation
      • Unesp Photogrammetric Data Set
    • 非机载大规模场景
      • Semantic 3D : 4billion (地面)大型室外场景 classification benchmark
      • IQmulus & TerraMobilita Contest (看着像地面的)
      • Oakland 3-D Point Cloud Dataset(奥克兰 )(地面)
      • 斯坦福计算机视觉和几何实验室数据集
      • SUN3D
  • 推荐阅读的论文或基础网络
  • 参考文献

基本数据结构

[个人笔记]3D点云深度学习入门_第1张图片
abcd分别是:

  • 点云(point cloud):(x,y,z) , (x,y,z,d), (x,y,z,r,g,b) 图a.
  • 体素(Voxel): 体素是3D空间的像素(pixel)。量化的,大小固定的点云。每个单元都是固定大小和离散坐标。 图b
  • 多边形网格(Polygon meshes):面。 图c
  • 二维投影/多视(2D projection/multi-view)图d
  • 深度图: 可带颜色,如RGBD scan
  • occupancy network: 用decision boundary来表达物体表面。类似2D的矢量图。体素相当于3D像素,occupancy network类似3D的矢量图。
    下面是一张体素的图。
    [个人笔记]3D点云深度学习入门_第2张图片
    下面这张图d描述了occupancy network:
    [个人笔记]3D点云深度学习入门_第3张图片

任务

upsampling,
reconstruction,
segmentation
object detection ,
Shape Completion: 单个物体,缺损部分的补全。
Scene Completion:场景中的物体之间有遮挡,缺失部分补全。
Instance Reconstruction:实例构面。
[个人笔记]3D点云深度学习入门_第4张图片

粒度的区分:(2D为例)

这里以2D图像为例,3D的和它类似。(因为本人没有2D基础,所以这里也列举一下)
abcd分别是:

  • classification:整个数据给出个分类。
  • object localization (detection) : 给出特定目标的bounding box (和分类标签)
  • semantic segmentation: 语义级分割。label each pixel in the image with a category.(把每一个像素点都分为一个类别)
  • instance segmentation:语义级分割的基础上,区分每个instance。(连在一起的东西给出清晰的边界。比如两只羊连在一起,语义分割给不出边界,只知道这些像素都是羊,无法区分不同的羊)

挑战

不规则性:分布不均
非结构化:点与点之间的关系,没有确定的四邻域,八邻域
无序性:点的顺序不同完全不影响。因此不同的三维矩阵表达可以是相同的点云。
旋转性:如果点云整体旋转,每个点坐标都会变,但点云是不变的。
[个人笔记]3D点云深度学习入门_第5张图片
[个人笔记]3D点云深度学习入门_第6张图片

常用方法和思路

基于体素的点云深度学习:

常用CNN方法。
[个人笔记]3D点云深度学习入门_第7张图片

基于多视

直接用2D的CNN方法。
性能很好(高于体素)
[个人笔记]3D点云深度学习入门_第8张图片

点云深度学习基础网络: point net

发布于2017年的PointNet是大多数技术的基础。
简单的说,用mlp逐点提取特征,每点1024个。用maxpool处理每个点的特征,得到1024个总体特征。
同时用空间变换解决旋转性问题。

网络亮点: max pooling & transform

无序性问题:用一个对称方法g来解决
[个人笔记]3D点云深度学习入门_第9张图片
h: 特征提取层
g:简单的对称方法。如max pooling.
γ:高层特征提取
最后加一个softmax之类用于分类。

旋转性问题:通过STN(spacial transform netw)来解决。

网络结构

符号解释:

  • input transform 和 feature transform: 上文提到的STN空间转换
  • mlp: 多层感知机,通常指几个全连接层。括号里是输出的维度。(这里的mlp实际使用2d卷积实现的。括号里似乎是每个卷积层的channel深度).

过程概述:

  • 第一行蓝色:空间转换 -> 每个点用mlp提64个特征 -> 空间转换 -> 每个点用mlp提1024个特征 -> maxpool得到1024个总特征(只取该特征最大的点)-> mlp将1024个特征浓缩为k个。(mlp的权重对每个点都一样,称为共享权重的mlp)
  • 右下角语义分割:把1024个总特征拼接到之前得到的每点64个特征后面,得到每点1088个特征->用mlp处理得到每点m个分割标签。

亮点:
通过对称性函数(如max pool) 解决无序性问题,和通过空间转换解决旋转性问题。其中首次input transform是直接对3D的点进行旋转,比较好理解;后面的feature transform是在特征层面旋转了。

[个人笔记]3D点云深度学习入门_第10张图片

共享权重mlp的一种常用实现:1*1卷积

在poingnet以及很多代码中,共享权重mlp通常用核为11的卷积实现。
输出特征是多少维,就用多少个filter。
比如,最初的n
3用mlp转化为n*64。

原作者用的是2维卷积,参考此文。其实也可以用一维。

net = tf_util.conv2d(input_image, 64, [1,3], ...) # 64是out channels, 1,3是卷积核尺寸
net = tf_util.conv2d(input_image, 64, [1,1], ...)

过程如下:
[个人笔记]3D点云深度学习入门_第11张图片

其他细节

参考此文

  • 理论证明:原文中证明了任意一个在Hausdorff空间上连续的函数,都可以被这样的PointNet(vanilla)无限的逼近。
  • 效果好:超过了当时的体素方法
  • 轻量:参数少,训练快
  • 缺失鲁棒性:即使点云大量缺失,也可以获得很好的结果。同时,最有效的点是骨干点。
    [个人笔记]3D点云深度学习入门_第12张图片

点云深度学习基础网络:pointnet++

可以看到pointnet只是把所有点放在一起,因此只能提取全局特征。
而局部特征在语义分割等各方面都很重要。
包括pointnet团队本队和其他团队后面都进行了局部区域特征提取方面的研究。
参考这篇知乎文章。
可以看到

  1. 用Set Abstraction分层提取特征。
  2. 用上述特征进行分类
  3. 用上述特征进行分割

用Set Abstraction分层提取特征

setAbstraction结构可以叠多层,如上图所示。
基本思路是把所有点云分簇,每一簇用poingnet提特征,如下图所示(图片来自这篇博客)。
点的个数N越来越少,而每个点特征包含的信息越来越多,特征维度C也发生变化。
主要分为三步: fps 最远距离采样, ball query分簇, pointnet对每一簇提取特征。

[个人笔记]3D点云深度学习入门_第13张图片

fps:Farthest Point Sampling
是一种常见的采样方法,从n个点中采k个(k 方法:

  • 选第一个点,比如随机选。假设为a。
  • 选第二个点:从其他点中,选离a最远的点。假设为b。
  • 选第三个点:从其他点中,选 min( dis(a), dis(b) ) 最大的点。
  • 继续,直至选了k个点。
    详见此文。

Ball query
聚合以每个中心点为球心,a为半径的球体内的所有点,k为上限(即半径内找到k个点就不再找了,每个组最多k个点)

PointNet

  • 接受N’×K×(d+C)的输入。
  • 输出是N’×(d+C)。
  • 其中N是输入点的数量,d是坐标维度,C是特征维度。
  • 坐标输入时,使用每个点相对于其group中心点的相对坐标。

用Set Abstraction提到的特征进行分类

直接把得到的每个点的特征拼起来,再用全连接层输出最后结果。

用Set Abstraction提到的特征进行分割

对Set Abstraction 得到的点进行插值,然后每点用pointnet提特征,继续插值,最后得到完整的结果。

公开数据集

有很多物体数据集,这里略过,主要总结一些室外场景数据集,尤其是机载LiDAR点云的数据集:
关键词:Aerial , airborne, UAV,

机载大规模场景

ASL Datasets Repository

链接:https://projects.asl.ethz.ch/datasets/doku.php?id=home

这是一个大集合,里面有很多小数据集,比如ISER2016 (机载的)
https://projects.asl.ethz.ch/datasets/doku.php?id=iser2016
点云配准源码链接:https://github.com/ethz-asl/robust_point_cloud_registration

还有这个
https://projects.asl.ethz.ch/datasets/doku.php?id=koptinspection:koptinspection

DALES: A Large-scale Aerial LiDAR Data Set for Semantic Segmentation

https://udayton.edu/engineering/research/centers/vision_lab/research/was_data_analysis_and_processing/dale.php

Unesp Photogrammetric Data Set

https://www.fct.unesp.br/#!/unespdataset
https://ieee-dataport.org/documents/dataset-containing-frame-images-and-dense-airborne-laser-scanning-point-clouds

非机载大规模场景

Semantic 3D : 4billion (地面)大型室外场景 classification benchmark

链接:http://www.semantic3d.net/ 但是502 bad gateway 了
好像是地面LiDAR扫描的

IQmulus & TerraMobilita Contest (看着像地面的)

链接:http://data.ign.fr/benchmarks/UrbanAnalysis/#

该数据库包含来自巴黎(法国)密集城市环境的3DMLS数据,

(分类的)

Oakland 3-D Point Cloud Dataset(奥克兰 )(地面)

链接:http://www.cs.cmu.edu/~vmr/datasets/oakland_3d/cvpr09/doc/

这个数据库的采集地点是在美国卡耐基梅隆大学周围,数据采集使用Navlab11,配备侧视SICK LMS激光扫描仪,用于推扫。 其中包含了完整数据集、测试集、训练集和验证集。

也是分类的
.
[个人笔记]3D点云深度学习入门_第14张图片

斯坦福计算机视觉和几何实验室数据集

这一实验室提供了多个三维数据集,包括:

ObjectNet3D:100类, 90127张图像, 其中有201888个物体和44147 个3D 形状;
城市街景三维数据库
Stanford 2D-3D-Semantics Dataset (2D-3D-S):大型建筑物内部平面语义图–3D图数据集,包含了RGB图,二维语义、深度和三维网格语义以及表面法向量。
此外还包含了无人机监控、多视角tracking、街景等数据库。

SUN3D

普林斯顿的数据集,大场景重建。主要用于SFM方法。
————————————————

待看文献:
https://blog.csdn.net/xnliu/article/details/82747308

https://blog.csdn.net/u013019296/article/details/108526109?utm_medium=distribute.pc_relevant.none-task-blog-2defaultbaidujs_baidulandingword~default-1.control&spm=1001.2101.3001.4242

https://blog.csdn.net/bornfree5511/article/details/109901196

推荐阅读的论文或基础网络

基础:
pointnet
pointnet++
目标检测:votenet (和pointnet是同一个作者,目标检测用的)
重构(构面、建模):occupancy net

参考文献

知乎:什么是体素
semantic segmentation 和instance segmentation
CSDN:【论文速读】2020最新点云深度学习综述
CSDN: 点云深度学习

你可能感兴趣的:(AI,point,cloud,个人笔记,深度学习,数据结构,计算机视觉)