3D点云分割系列1:PointNet,从Voxel-base到Point-base的进阶之路

这篇具有很好参考价值的文章主要介绍了3D点云分割系列1:PointNet,从Voxel-base到Point-base的进阶之路。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

PointNet

pointnet 分割,3D点云分割,3d,人工智能,机器学习,计算机视觉,图像处理

PointNet发布于2017CVPR。

《PointNet: Deep Learning on Point Sets for 3D Classification and Segmentation》


题外话

PointNet对于3D点云分割的意义有点像FCN对语义分割的意义。PointNet不同以往的voxel-based的模型,它试图通过直接对点云数据中每一个点进行处理,来分析点云中每一个点的信息,提取特征,做分类或分割的task。也就是说,PointNet为点云分割提供了另一条道路,即point-based的方法。


1引言

老生常谈,每一种数据结构都有其存在的道理和意义,点云(Point Cloud)也是如此,对于真实世界,光靠简单的2D RGB图片信息并不能很好的理解。而3D 结构则能够更好的去重现真实世界的场景,因此对于3D数据的处理也是未来的一个重要的发展方向。

通常,点云是一个无序的点集。这些点集分布在空间中,就如同云一样,形成了我们能看到的一些物体。当然,需要注意,这里的无序指的是点云中的点可以被保存在这个点集文件中的任意位置,只要你将点集读取出来并映射在空间中,这个点还是原来空间中的那一个点,它的空间位置信息并不会因为你把它保存在什么位置而改变。不同于点云,2D图像中的每一个点的位置就是固定的,改变了点的位置,图像就自然改变了。

在这里我们就引入了点云的一个特性,也就是无序性。当然,点云还有其他特性:一是旋转、平移不变性,也就是点云可以旋转任何角度、平移任何距离,它整体还是同一个点云,点与点之间的相对位置信息是不变的;二是点的交互性:点云中的点并不是孤立的,每一个点都会和周围点进行交互,即空间中的点在小范围内形成有意义的子集。就像很多点可以集成变成一把椅子这样。

pointnet 分割,3D点云分割,3d,人工智能,机器学习,计算机视觉,图像处理

1.1 voxel-based和point-based的优缺点

正如我们上面提到,点云是无序的,当我们输入一个点云,想对它实现semantic segmentation任务时,该如何确定点与点之间的相对关系呢?有了这一疑问,voxel-based的方法提出将点云分割为一个又一个规则的voxel,这样,相邻的点就会被归类到同一个voxel中。然后简单的取一个voxel中所有点的平均xyzrgb,用来指代这个voxel的特征。这种方法变相降低了计算复杂度,并且将点云中所有点的相对关系给确定了。之后,再用经典的CNN卷积即可实现点云的特征处理。

但是,我们也很容易能想到,简单的将一些点归类到一个voxel中并赋予其平均值作为特征,这就会导致一些重要的点被忽略,同时也会导致最终结果误差增大。

而point-based的方法,则是保留了所有点的原始特征,直接对所有点进行处理,但是这里还是没有提到解决点云无序的问题。在PointNet中,使用了Max-Pooling的方法来解决这一问题。这也很好理解,既然事先输入的点集是无序的,而在空间中又是固定位置,那只需要进行Max-Pooling操作即可保留点云的相对位置信息。同时又可以将点的特征聚合起来,形成全局特征。

个人认为,这一思想类似于点云的sub-sampling。你对一个点云下采样两倍、四倍等等,它还是能保留一个人能直观分辨的结果。只不过Max-Pooling是对特征进行处理,sub-sampling是对点进行处理。

pointnet 分割,3D点云分割,3d,人工智能,机器学习,计算机视觉,图像处理

2 PointNet结构

pointnet 分割,3D点云分割,3d,人工智能,机器学习,计算机视觉,图像处理

Point的模型图也十分简洁明了,几个关键地方为input transform和feature transform中的T-Net、max pool、local和global feature的融合。

2.1 使用对称函数来解决无序性问题

由于点云的数据是无序的,那么就得想让模型来适应这个无序的数据或者让数据变得“有序”。那么解决这一问题主要有三个方法

  1. 将点云中的点进行排序,使其成为一种规范的结构。
  2. 用一个RNN网络来学习点云数据的“排列顺序”。
  3. 使用对称函数来汇总每一个点的信息。

对于第一个方法,排序或许是个简单的方法。至少我们或多或少接触过冒泡、归并等等排序算法,但是,点云是三维空间中的数据结构,并不是简单的一个数字比大小。在高维空间中,想要保证排出来顺序是有序的,这是比较难办到的事情。相当于将一个高维空间映射成一个射线,反过来,还得保证这条射线能够还原这个高维空间,对于人类而言,貌似有点困难。即便排成功了,如果其中有个别点不稳定,整个映射结构可能就会奔溃。

对于第二个方法,作为循环网络,RNN对于序列数据的敏感度是远强于CNN的。不过对于一个巨大的点云数据,动不动就是几十万的点集,一个小小的RNN可能难以获得一个较好的鲁棒性。当然,在文章的结尾,作者也比较了使用RNN的方法和PointNet的方法之间的效果差异。

不同于以上两点,使用一个对称函数来汇聚信息或许是一个更为高效简洁的方法。这里的对称函数可以理解为对输入顺序不敏感的操作。比如加、乘、池化pooling。

f ( { x 1 , … , x n } ) ≈ g ( h ( x 1 ) , … , h ( x n ) ) f\left(\left\{x_{1}, \ldots, x_{n}\right\}\right) \approx g\left(h\left(x_{1}\right), \ldots, h\left(x_{n}\right)\right) f({x1,,xn})g(h(x1),,h(xn))

其中 x 1 、 x 2 . . . x n x_{1}、x_{2}...x_{n} x1x2...xn为输入的点, g g g则是一个对称函数,在模型中就是Max-Pooling, h h h则是一个MLP。也就是通过MLP和MaxPooling来拟合函数 f f f。至少,在经验上和实践上,PointNet的这个方法是成功的。

在文章最后,作者设计实验比较了几种方法来解决点云无序性问题得到的accuracy结果。

通过对比RNN、LSTM的输入时排序和对称函数如Attention sum、Average pooling、MaxPooling的方法,结果证明Max Pooling效果是最好的。

注:表的上半部分为输入时通过循环网络排序,下半部分则是使用对称函数进行信息聚合。
pointnet 分割,3D点云分割,3d,人工智能,机器学习,计算机视觉,图像处理

2.2 Local和Global的特征聚合

经过对称函数MaxPooling输出出来的特征为聚合了每个点信息的全局特征,形成了一个特征向量 [ f 1 , . . . , f k ] [f_1, ..., f_k] [f1,...,fk],在图中也就是长度为1024的global feature向量。

pointnet 分割,3D点云分割,3d,人工智能,机器学习,计算机视觉,图像处理

对于分类任务而言,这个global feature已经足够了,只需要再其后面添加一个简单的SVM或者MLP即可完成点云分类的task。但是,对于分割而言,global feature是显然不够的,这一点在2D的图像分割已经证明了(这也是Unet为什么好的原因)。因此,需要将Local和Global的Feature进行相应的融合。在这里,融合方式也十分简单,只需将两个特征进行连接操作(concat),然后将其输入到MLP中反馈给每一个点,既可以根据这个合并好的特征从点云中提取新的特征。当完成这一步时,每一个特征中都会包含点云的局部和全局信息。这在2D语义分割中是比较常见和有效的操作。

2.3 特征对齐网络

对于一个点云而言,我们可以将其看成一个刚体(也就是不会产生形变,无论怎么旋转平移,它都会保留原始形状)。那么,点云进行刚性变化(旋转平移等),点云本身不变,其标签自然也不变。因此,我们希望PointNet能够学习到这种变换,或者说,希望PointNet能够认出旋转任意角度、平移任意距离的点云物体。

有一个简单的方法就是,在输入点云之前,事先将点云数据按照一定的规范,将点云旋转、平移到相同的角度和位置。类似于对2D图像进行一个resize到统一大小的操作。

在这里,我们还得先理解如何对点云数据进行刚性变化。其实十分简单,对于3维的物体,我们想对其进行平移、旋转,只需要相应乘上一个平移矩阵、旋转矩阵即可。

在这里,作者通过一个T-Net来学习这种平移、旋转关系,也就是说让模型自己去拟合这个平移矩阵、旋转矩阵。

同时,作者将这一思想拓展到了点云的特征空间,用同样的方法对特征进行对齐,即feature transform。可以在点特征上插入另一个对齐网络,并预测一个特征变换矩阵来对齐来自不同输入点云的特征。不过,特征空间的变换矩阵比空间变换矩阵的维度高得多,这大大增加了优化的难度。因此,作者在训练的损失计算中加入了一个正则化项,以此将特征转换矩阵限制在接近正交矩阵的范围内。

L r e g = ∥ I − A A T ∥ F 2 L_{reg} = \parallel I-A A^T \parallel^{2}_F Lreg=∥IAATF2

其中, A A A就是T-Net学习到的变换矩阵。

3 总结

总结一下,PointNet为3D点云分割、分类开拓了一条新的道路,也就是Point-base的方法。从对体素voxel的处理转为对点point进行直接处理,提高了效率,同时也获得十分优秀的效果。

PointNet中出彩的地方包括使用T-Net来学习点云的刚性变换、使用MaxPooling来解决点云输入无序性的问题。文章来源地址https://www.toymoban.com/news/detail-801897.html

到了这里,关于3D点云分割系列1:PointNet,从Voxel-base到Point-base的进阶之路的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 3D点云(3D point cloud)及PointNet、PointNet++

    https://www.youtube.com/watch?v=Ew24Rac8eYE 传统图像数据是2维的 3D点云是3维的,可以表达更多信息 比如对化工厂进行违章识别、安全隐患的识别 城市管理 点云分割 点云补全 点云生成 点云物体检测(3D物体检测) 点云配准(后续任务的基础) 一般点云数据都是基于激光雷达扫描生

    2024年02月02日
    浏览(38)
  • 使用 PointNet 进行3D点集(即点云)的分类

    无序3D点集(即点云)的分类、检测和分割是计算机视觉中的核心问题。此示例实现了开创性的点云深度学习论文PointNet(Qi 等人,2017)。 如果使用 colab 首先安装 trimesh  !pip install trimesh 。

    2024年02月07日
    浏览(38)
  • (CVPR) PointNet:用于3D分类和分割的点集深度学习 - 详细解读

    目录 知识补充 网络解读 概括 局部和全局特征的融合(分割任务) 联合对准网络(T网络) 总结 点云存在的问题: 详细理解: 参考内容: 点云转换为体素的问题:数据庞大 本文设计了一种直接消耗点云的神经网络(保持了输入中心点的排列不变性) 刚性变换: 指保持物

    2024年03月21日
    浏览(72)
  • 基于pointnet的3D物体分类和分割检测(复现不出来你直接敲我家门)

    录 前言 一.资料下载 1.代码下载 2.数据集下载 二.环境配置 1.本文采用设备配置说明 2.虚拟环境配置 三.训练部分 1.分类训练部分 2.分割的训练部分 四.预测部分 1.分类结果展示 2.分割结果可视化 目前,2D的物体检测算法已经非常成熟,算法准确率的上升空间已经遇到瓶颈,而

    2024年02月01日
    浏览(51)
  • 点云 3D 分割 - SqueezeSegV2(ICRA 2019)

    声明:此翻译仅为个人学习记录 文章信息 标题: SqueezeSegV2: Improved Model Structure and Unsupervised Domain Adaptation for Road-Object Segmentation from a LiDAR Point Cloud (ICRA 2019) 作者: Bichen Wu * , Xuanyu Zhou * , Sicheng Zhao * , Xiangyu Yue, Kurt Keutzer ( * Authors contributed equally) 文章链接:https://arxiv.org/pdf/1

    2024年02月11日
    浏览(45)
  • 3D点云之语义分割(相关官方示例介绍)

    之前在博客中提到,会考虑用深度学习来对3D点云进行处理,接下来迈出脚步,先整几个例子来熟悉它。例子原型来源于官网,博主在其基础上做了一些代码修改。 1. Keras中的资源 Code examples 2.openvinotoolkit open_model_zoo/demos at master · openvinotoolkit/open_model_zoo · GitHub 主要参考官网

    2024年02月06日
    浏览(42)
  • 6种最常用的3D点云语义分割AI模型对比

    由于增强现实/虚拟现实的发展及其在计算机视觉、自动驾驶和机器人领域的广泛应用,点云学习最近引起了人们的关注。 深度学习已成功用于解决 2D 视觉问题,然而,由于其处理面临独特的挑战,深度学习技术在点云上的使用仍处于起步阶段。 推荐:用 NSDT编辑器 快速搭建

    2024年04月17日
    浏览(37)
  • 【点云分割】points3d框架学习01 —— 安装和配置

    [Errno 2] No such file or directory: ‘llvm-config’ 检查一下 AttributeError: module ‘numpy‘ has no attribute ‘long‘ replace numpy version with error: subprocess-exited-with-error

    2024年02月11日
    浏览(34)
  • Open3D 点云分割之区域生长(Python版本,指定种子点)

    点云分割作为许多应用的前提,其直接会关乎到后续利用点云数据进行曲面重建、特征提取等处理的效果。区域生长算法做为一种较为经典的聚类分割算法,具有很广泛的应用,算法过程如下所述: 1、首先将按照每个点的曲率值由小到大进行排序。 2、选择曲率值最小的那个

    2024年02月03日
    浏览(36)
  • Open3D 实现建筑物点云立面和平面分割提取

    Open3D 实现建筑物点云立面和平面分割提取 点云数据在现实场景中广泛应用,例如建筑物三维重建、智能交通等领域。然而,点云数据量庞大且噪声较多,因此需要对其进行处理和分析。Open3D 是一款开源的跨平台点云处理库,在点云数据预处理、三维重建和可视化等方面有着

    2024年02月07日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包