使用深度学习的三维点云分类的介绍

Being_young Being_young     2022-10-08     395

关键词:

   在过去的这些年里,对二维图像已经有了大量深入的研究,并且有着长足的发展。它在分类任务上取得了极好的结果主要得益于一下两个关键因素:

1.卷积神经网络。

2.数据 - 大量图像数据可用。

   但是对于3D点云,数据正在迅速增长。大有从2D向3D发展的趋势,比如在opencv中就已经慢慢包含了3D点云的处理的相关模块,在数据方面点云的获取也是有多种渠道, 无论是源于CAD模型还是来自LiDAR传感器或RGBD相机的扫描点云,无处不在。 另外,大多数系统直接获取3D点云而不是拍摄图像并进行处理。因此,在深度学习大火的年代,应该如何应用这些令人惊叹的深度学习工具,在3D点云上的处理上达到对二维图像那样起到很好的作用呢?

3D点云应用深度学习面临的挑战。首先在神经网络上面临的挑战:

(1)非结构化数据(无网格):点云是分布在空间中的XYZ点。 没有结构化的网格来帮助CNN滤波器。
(2)不变性排列:点云本质上是一长串点(nx3矩阵,其中n是点数)。 在几何上,点的顺序不影响它在底层矩阵结构中的表示方式,例如, 相同的点云可以由两个完全不同的矩阵表示。 如下图所示:

                                 

(3)点云数量上的变化:在图像中,像素的数量是一个给定的常数,取决于相机。 然而,点云的数量可能会有很大的变化,这取决于各种传感器。

 

在点云数据方面的挑战:

(1)缺少数据:扫描的模型通常被遮挡,部分数据丢失。
(2)噪音:所有传感器都是嘈杂的。 有几种类型的噪声,包括点云扰动和异常值。 这意味着一个点有一定的概率位于它被采样的地方(扰动)附近的某一半径范围内,或者它可能出现在空间的任意位置(异常值)。
(3)旋转:一辆车向左转,同一辆车向右转,会有不同的点云代表同一辆车

Princeton’s Modelnet40 dataset。 它包含约40个对象类别(如飞机,表格,植物等),用三角形网格表示的12311个CAD模型。 数据分为9843个培训模式和2468个测试模式,如下图

 

 

在点云上应用深度学习的直接方法是将数据转换为体积表示。 例如体素网格。 这样我们就可以用没有神经网络问题的3D滤波器来训练一个CNN(网格提供了结构,网格的转换解决了排列问题,体素的数量也是不变的)。 但是,这有一些不利因素。 体积数据可能变得非常大,非常快。 让我们考虑256×256 = 65536像素的典型图像大小,现在让我们添加一个维度256x256x256 = 16777216体素。 这是很大的数据量(尽管GPU一直在发展)。 这也意味着非常缓慢的处理时间。 因此,通常我们需要妥协并采取较低的分辨率(一些方法使用64x64x64),但是它带来了量化误差的代价。所以,所需的解决方案是一个直接的深度学习的方法,将是3D点云应用深度学习的重点。

作者调查了三种最近发表的文章,主要针对对点云进行深度学习的论文。 正如下图所示,展示了3D点云分类准确性出版(准确性,年份和数据类型),它总结了数据集上的最新准确性结果。 以及每种方法正在处理的数据的类型。 可以看到,在2015年,大多数方法都用于多视图数据(这是一种简短的说法 - 让我们拍摄3D模型的几张照片并使用2D方法处理它们),2016年更多的方法使用了体素表示的点云学习和2017年的基于点的方法有了大幅度的增长。

 

PointNet(CVPR2017)

开拓者! 来自斯坦福大学,他们的工作引起了很多关注。他们做了一些令人惊讶的简单的事情,并证明了为什么它运作良好,他们分别在每个点上训练了一个MLP(在点之间分享权重)。每个点被“投影”到一个1024维空间。然后,他们用点对称函数(max-pool)解决了点云顺序问题。这为每个点云提供了一个1 x 1024的全局特征,这些特征点被送入非线性分类器。利用他们称为T-net的“迷你网络”解决了旋转问题。它学习了点(3 x 3)和中级特征(64 x 64)上的变换矩阵。称之为“迷你”有点让人误解,因为它实际上与主网络的大小有关。另外,由于参数数量的大量增加,引入了一个损失项来约束64×64矩阵接近正交。也使用类似的网络进行零件分割。也做了场景语义分割。做得好!我强烈推荐阅读(或者您也可以观看演示视频)。本文对ModelNet40数据集的准确率高达89.2%。下图是pointNet点云分类的框架

引用: Charles R. Qi, Hao Su, Kaichun Mo, and Leonidas J. Guibas. Pointnet: Deep learning on point sets for 3d classi cation and segmentation. In The IEEE Conference on Computer Vision and Pattern Recognition (CVPR), July 2017.

The code is available on GitHub: PointNet code 

Pointnet ++(NIPS 2017)

在PointNet之后不久,引入了Pointnet ++。它本质上是PointNet的分层版本。每个图层都有三个子阶段:采样,分组和PointNeting。在第一阶段,选择质心,在第二阶段,把他们周围的邻近点(在给定的半径内)创建多个子点云。然后他们将它们给到一个PointNet网络,并获得这些子点云的更高维表示。然后,他们重复这个过程(样本质心,找到他们的邻居和Pointnet的更高阶的表示,以获得更高维表示)。使用这些网络层中的3个。还测试了不同层级的一些不同聚合方法,以克服采样密度的差异(对于大多数传感器来说这是一个大问题,当物体接近时密集样本,远处时稀疏)。他们在原型PointNet上进行了改进,在ModelNet40上的准确率达到了90.7%。下面是Pointnet++ 架构。

 

引用: Charles R Qi, Li Yi, Hao Su, and Leonidas J Guibas. Pointnet++: Deep hierarchical feature learning on point sets in a metric space. arXiv preprint arXiv:1706.02413, 2017.

Kd-Network(ICCV 2017)

本文使用着名的Kd树在点云中创建一定的顺序结构的点云。一旦点云被结构化,他们就会学习树中每个节点的权重(代表沿特定轴的细分)。每个坐标轴在单个树层级上共享权重如下图中的所有绿色都具有共享权重,因为它们将数据沿x维度细分。测试了随机和确定性的空间细分,并说明了随机版本效果最好。但同时也说出了一些缺点。对旋转(因为它改变树结构)和噪声(如果它改变树结构)敏感。对于每个输入点云数据,都需要上采样,下采样或训练一个新模型。

在Modelnet40上报告了1024点(深度10树)的90.6%准确度数据集和〜32K点(深度15树)的91.8%。做到了部分点云分割,形状检索,并可以在后期工作中尝试其他的树形结构。

引用: Roman Klokov and Victor Lempitsky. Escape from cells: Deep kd-networks for the recognition of 3d point cloud models. arXiv preprint arXiv:1704.01222, 2017.

总结:Pointnet和Pointnet ++使用对称函数来解决顺序问题,而kd-Network使用Kd-tree。 Kd树也解决了结构问题,而在PointNets MLP每个点分别训练。

 

 该文章翻译http://www.itzikbs.com/3d-point-cloud-classification-using-deep-learning,有问题请指出,这样做笔记的记录,让我对文章理解更加深刻,同时欢迎大家关注微信公众号

或者加入3D视觉微信群一起交流分享

三维点云深度学习与语义理解方法及关键技术

...。1.三维点云深度学习在深度学习引入前,传统方法大多使用人工设计的特征[26-29]以及随机森林(RandomForest)等分类器进行点云的语义理解。近年来,深度学习[30]在图像处理、语音识别等领域已有较多成果。深度学习的成功之处在... 查看详情

三维深度学习pytorch-pointnet系列之win10下环境安装与demo运行(代码片段)

【三维深度学习】Pytorch-PointNet系列之win10下环境安装与demo运行提示:最近开始在三维深度学习方面进行研究,从PointNet开始入手,对这个系列的网络进入深入学习,记录相关知识点,分享学习中遇到的问题已经解决的方法。文章目录【... 查看详情

深度学习算法简要总结系列

...文搞懂PointNet全家桶——强势的点云处理神经网络3D点云深度学习PointNet源码解析——数据预处理【3D计算机视觉】从PointNet到PointNet++理论及pytorch代码【三维目标分类】PointNet++详解(一)数据代码中的数据处理... 查看详情

pointnetpointnet++基于深度学习的3d点云分类和分割

前言PointNet是直接对点云进行处理的,它对输入点云中的每一个点,学习其对应的空间编码,之后再利用所有点的特征得到一个全局的点云特征。Pointnet提取的全局特征能够很好地完成分类任务,但局部特征提取能力较差,这使... 查看详情

pointnetpointnet++基于深度学习的3d点云分类和分割

前言PointNet是直接对点云进行处理的,它对输入点云中的每一个点,学习其对应的空间编码,之后再利用所有点的特征得到一个全局的点云特征。Pointnet提取的全局特征能够很好地完成分类任务,但局部特征提取能力较差,这使... 查看详情

三维目标分类pointnet++详解(代码片段)

...检测的发展与未来-深蓝学院-专注人工智能与自动驾驶的学习平台。        文中涉及到PointNet的地方请参考上一篇文章的详细介绍三维目标检测—PointNet详解(一)_Coding的叶子的博客-CSDN博客。1代码环境部署condacreate-... 查看详情

深度学习背景下的图像三维重建技术进展综述

...作者:杨航,陈瑞,安仕鹏,魏豪,张衡原文地址:​​深度学习背景下的图像三维重建技术进展综述​​三维重建是指从单张二维图像或多张二维图像中重建出物体的三维模型,并对三维模型进行纹理映射的过程。三维重建可... 查看详情

2020厦门大学综述翻译:3d点云深度学习(remotesensiong期刊)

目录摘要1、引言:2、点云深度学习的挑战3、基于结构化网格的学习3.1基于体素3.2基于多视图3.3高维晶格4、直接在点云上进行的深度学习4.1PointNet4.2局部结构计算方法4.2.1不探索局部相关性的方法4.2.2探索局部相关性的方法4.3基... 查看详情

ros关于cv_brige的使用

最近想使用OpenCV和ROS实现点云的拼接,实现三维重建,那么在学习了kinect的基本的使用方法以后我们知道,直接使用ROS的包即可得到点云,深度图,rgb图等信息,roslaunchopenni_launchopenni.launch(深度图彩色图,还有点云都获取了)r... 查看详情

深度学习进阶,keras视频分类(代码片段)

Keras视频分类在此教程中,您将学习如何使用Keras、Python和深度学习执行视频分类。具体来说,您将学习:视频分类与标准图像分类的区别如何使用Keras进行图像分类来训练一个旋转神经网络如何采取CNN,然后使用... 查看详情

三维点云课程——点云基础介绍

目录1、点云概述1.1点云的表达形式1.2点云的特点2、主成分分析在点云中的应用2.1PCA主成分分析2.2KernelPCA(升维)3、点云滤波3.1点云去除3.2降采样3.2.1降采样流程3.2.2 哈希函数3.2.3FarthestPointSampling(FPS)3.2.4NormalSpaceSampling(法... 查看详情

深度学习图像分类介绍(代码片段)

目录1图像分类2常用数据集2.1mnist数据集2.2CIFAR-10和CIFAR-1002.4ImageNet3总结1图像分类图像分类实质上就是从给定的类别集合中为图像分配对应标签的任务。也就是说我们的任务是分析一个输入图像并返回一个该图像类别的标签。假... 查看详情

点云数据处理

...环进行整体平差实现,多视图重建强调整体优化。可以只使用图像,或者点云,也可以两者结合(深度图像)实现。重建的结果通常是Mesh网格。(3)3DSLAM:点云匹配(最近点迭代算法ICP、正态分布变换方法NDT)+位姿图优化(g2o... 查看详情

点云处理基于深度学习模型的不同处理方式

...空间依赖关系的voxel(体素法)、直接在点云数据上应用深度学习模型(点云法)。目录一、点云数据特点1.1无序1.2点与点之间的空间关系 查看详情

立体匹配入门指南:视差图深度图点云

...−xr​立体视觉里,视差概念在极线校正后的像对里使用。深 查看详情

立体匹配入门指南:视差图深度图点云

...−xr​立体视觉里,视差概念在极线校正后的像对里使用。深 查看详情

cvpr2020论文阅读笔记(三维点云/三维重建)

...网络的整体结构如下:网络详细推理步骤如下:损失函数使用完整性损失和对抗损失的加权平均,完整性损失使用L-GAN中提出的CD距离:对抗损失使用GAN中常见的损失函数感觉这篇文章对多尺度的运用非常极致,在编码器、解码... 查看详情

一文开启深度学习之旅(代码片段)

...本文中,我们将学习经典神经网络架构以及网络内部使用的网络层类型。我们还将构建一个基于全连接网络的线性回归模型,并学习如何使用全连接神经网络构建图像分类模型。同时,我们还将了解一类重要的网络架... 查看详情