社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  机器学习算法

3D 深度学习中基于体素和基于点云的方法哪种更优?

点云PCL • 6 月前 • 92 次点击  


翻译:particle

编辑:点云PCL


欢迎各位加入知识星球,获取PDF论文,欢迎转发朋友圈。文章仅做学术分享,如有侵权联系删文。

公众号致力于点云处理,SLAM,三维视觉,高精地图等领域相关内容的干货分享,欢迎各位加入,有兴趣的可联系dianyunpcl@163.com。文章未申请原创请勿随意转载!侵权或转载联系微信cloudpoint9527。

摘要


在3D深度学习领域,主要的竞争在于体素(Voxels)与点(Points)之间。你会发现,这两种方法各有特点:一种相对保守、多才多艺且“安全”,而另一种则更具创新性、颠覆性且精准。

基于点的方法:从 PointNet 到Point Transformers



可以使用什么来自计算机视觉领域来在点云上使用深度学习?不是很多,但主要是多层感知器和 2D 卷积。但是点云比图像更难处理,图像具有固定的宽度和高度,它是一个矩形矩阵,其中每个像素都在 0 到 255 之间,附近的像素属于同一对象,并且都是平面 2D。另一方面,点云是混乱的。点之间没有顺序、没有颜色、也没有连续性,该结构是 3D 的,可以旋转或改变比例,并且点的间距不均匀。任何随机洗牌或数据增强都可能破坏卷积的输出。换句话说,就是混乱。

你无法在点云上应用传统的 CNN,这就是 PointNet 架构被发明的原因。当时PointNet 使用共享 MLP(通过 1x1 卷积实现)来从点云学习特征,而不是使用 2D 卷积。它还使用空间变换网络和最大池来对点云进行分类或分割。

2016 年的架构如下所示:

PointNet 架构

PointNet 可以对点云进行分类、分割,甚至分割其子部分。像这样:

因此,这相当于“VGG”。如果必须做一个类比的话:

  • 在图像方法中,VGG/ResNet 用于提取特征,架构的其余部分用于执行任务(对象检测、分割等)

  • 在点云方法中,PointNet/PointNet++ 用于提取特征,其余架构则完成任务。

自PointNet (2016) 和PointNet++ (2017)以来,许多其他提取器和架构也随之而来,例如PointCNN (2018)、DGCNN (2019)、PointNeXt (2022)、Point-MLP (2022),甚至是今天被视为状态的内容最先进的Point Transformers v3 (2023/2024)。这些是特征提取器,它们的目的只是直接从点云学习特征,不会用它进行 3D 对象检测或3D 跟踪,但可以将它们包含在 3D 对象检测器中。

将 PointNet 适配到 3D 架构中


以Point-RCNN (2019)为例,这是一个两阶段的 3D 深度学习算法,使用 PointNet++ 和精心设计的结构来实现 3D 对象检测:

高速公路场景中的 Point-RCNN

这就是我们正在寻找的。它使用 PointNet,但它不是 PointNet,而是它的扩展。当查看架构时,它类似于:

Point-RCNN 架构——两个阶段中的每个阶段都使用 PointNet++(PointNet 的演变)作为特征提取器——在编码器/解码器中,但也在学习特征的第二阶段中。

框架从点云开始,然后学习每个点的特征,最后添加算法,如前景/背景检测、边界框回归等,以达到你的目标......同样,存在许多方法,并且它们都使用提取器。CenterPoint (2021)使用 PointNet++,然后生成对象位置的中心。H3DNet (2020) 也使用 PointNet++。等等...

基于体素的方法


基于体素的方法不是直接的方法;因为它涉及“体素”。如果您听说过“VoxelNet”或“PointPillars”等名称,那就是这个。那么什么是体素呢?

当我们回到 2D 卷积不适用于点云的想法,我们看到点云本质上是非结构化的,每一帧的点数量都会变化,等等......但是有一种方法可以解决这个问题,除了发明PointNet......体素化。

打个比方,体素就是 3D 图像。当我们有点云时,我们的 3D 形状无法与 2D 卷积一起使用;但是当将此点云转换为一组“体素”时,我们可以使用 3D 卷积,而不是 2D 卷积。例如,可以将空间(是的,“空气”)分割成 50 *50*50厘米的网格,并将它们视为体素。然后取内部点的平均值并赋予它一个值,如果里面没有点,你就认为它是空的。

获取体素点并应用 3D 卷积

所以,这是第二种方法,它很棒,因为当空间被体素化时,你可以使用 3D 卷积。您甚至可以实现 3D 卷积神经网络,并且基本上将您所知道的有关图像卷积的所有内容复制到点云。

这个想法已经通过一种名为“Point Pillar”的算法在二维中得到了复制,并且多年来有很多变化。就像 PointNet 可以适合 Point-RCNN 一样,体素网络也可以适合 Voxel-RCNN。输出如下所示:

所以你现在得到了两种类型的方法:

  • 使用“PointNets”直接从点中学习

  • 首先使用“体素化”过程,学习使用 3D 卷积

但哪一个更好呢?

比较两种方法



想象一下有一个点云及其体素化版本,如下所示:

点与体素

两者中哪一个提供了更多信息?直观地说,点云没有经过转换过程,它没有我们对场景进行体素化时可能出现的“信息丢失”——它的边缘也更加“精确”。所以这对于基于点的方法来说是一个巨大的胜利!

在速度方面,基于点的方法没有这种额外的体素化过程,它们直接使用原始点,甚至可以适应、生成图表、处理稀疏数据等等……基于点的方法确实是创新的解决方案。但是体素使用卷积,我们非常清楚如何将卷积堆叠在一起,如何使其高效,如何在多尺度上使用金字塔架构,如何可视化所学到的特征,等等,我们拥有令人惊叹的众所周知的方法来使用体素创建令人惊叹的架构。换句话说,“保守”的方式就是这个。

起初,研究人员只知道如何使用体素。然后在 2016-2019 年时期,自从 PointNet 出现以来,人们转向了基于点的方法。与此同时,在体素方面发布了像 PointPillars 这样的有趣方法。现在拥有针对这两种方法的最先进的方法,甚至是基于点体素的方法!

示例#1 :Point-Transformer

Point Transformer

该架构直接作用于点,可以看到重复的 3 个不同的块:

  • Point Transformer 模块,实现自注意力和 MLP

  • 向下过渡,涉及采样点、查找 K 最近邻以及进行局部最大池化

  • 上采样,使用插值对点云进行上采样(类似于 UNet 架构)

这只是为了让您“了解”我们可以在点云上应用的操作类型......

示例#2:VoxelNet

第二个示例更容易理解,但它是“支柱”之一,非常好地展示了基于体素的方法中发生的一切:

VoxelNet

正如你所看到的,它从一个特征学习网络开始,它不仅仅涉及“体素化”,还涉及 VFE(体素特征提取)、将体素堆叠在一起、运行完全卷积网络等……然后,使用 3D 卷积在使用区域提议网络生成边界框之前的中间层。

难道就没有其他办法吗?鸟瞰图怎么样?


是的,还有其他方法!基于点和体素的方法是使用 3D 深度学习处理点云的 2 种“主要”方法,至少还有 3 种:

  • 基于点体素的方法(混合):这利用了两个世界中更好的方法,并且可以变得非常复杂。我正在深度点云课程的 DLC 中对一个名为 PV-RCNN 的项目进行全面研究和实施。

  • 鸟瞰图方法:如果您不想转换为体素,也可以转换为鸟瞰图。这有点像“作弊”,但鸟瞰图允许您删除一维并在 2D 中工作。这就是“Point Pillar”算法正在做的事情。

  • 深度图方法:如果您不想使用点、体素,甚至鸟瞰图,您可以使用“范围视图”。范围视图就像深度图。这是一个 2D 正面图像,但其中包含深度值。所以本质上,你可以在上面使用普通的图像卷积。

还要别的吗?可以使用图神经网络,但这其实是着回到直接处理点的方法,也可以使用占用网络,但这些实际上是体素。

可以使用 3D 深度学习处理点云的 5 种方法

总结


  • 如果你想在点云上使用深度学习,普通的 2D 卷积将不起作用,点云是随机设置的,它们不遵守结构,并且卷积运算可能会破坏它们。

  • 我们有两种使用深度学习处理点云的主要方法:基于点(直接处理)和基于体素(体素化,然后卷积)

  • 基于点的方法始于 PointNet,并通过学习每个点的特征并聚合所有内容来实现直接处理点的想法。随后出现了其他方法,例如 PointNet++、PointCNN 或 Point Transformers。

  • 基于体素的方法首先将点云转换为体素网格,然后处理这些点,这次使用 3D 卷积。体素化在混乱中创建秩序,并允许在点云上使用 3D 卷积。

  • 可以将任何基于点或体素的提取器放入架构中,例如 Point-RCNN、VoxelNet、PV-RCNN 等等...

  • 在大多数情况下,需要使用额外的操作,例如对点进行采样、对它们进行聚类、检测前景/背景等......

  • 还有其他处理点云的方法。例如可以将点云转换为鸟瞰图或范围视图,作者认为目前最好的方法是点体素方法(混合)。

来源:

https://www.thinkautonomous.ai/blog/voxel-vs-points/

资源

自动驾驶及定位相关分享

【点云论文速读】基于激光雷达的里程计及3D点云地图中的定位方法

自动驾驶中基于光流的运动物体检测

基于语义分割的相机外参标定

综述:用于自动驾驶的全景鱼眼相机的理论模型和感知介绍

高速场景下自动驾驶车辆定位方法综述

Patchwork++:基于点云的快速、稳健的地面分割方法

PaGO-LOAM:基于地面优化的激光雷达里程计

多模态路沿检测与滤波方法

多个激光雷达同时校准、定位和建图的框架

动态的城市环境中杆状物的提取建图与长期定位

非重复型扫描激光雷达的运动畸变矫正

快速紧耦合的稀疏直接雷达-惯性-视觉里程计

基于相机和低分辨率激光雷达的三维车辆检测

用于三维点云语义分割的标注工具和城市数据集

ROS2入门之基本介绍

固态激光雷达和相机系统的自动标定

激光雷达+GPS+IMU+轮速计的传感器融合定位方案

基于稀疏语义视觉特征的道路场景的建图与定位

自动驾驶中基于激光雷达的车辆道路和人行道实时检测(代码开源)

用于三维点云语义分割的标注工具和城市数据集

更多文章可查看:点云学习历史文章大汇总

SLAM及AR相关分享

TOF相机原理介绍

TOF飞行时间深度相机介绍

结构化PLP-SLAM:单目、RGB-D和双目相机使用点线面的高效稀疏建图与定位方案

开源又优化的F-LOAM方案:基于优化的SC-F-LOAM

【论文速读】AVP-SLAM:自动泊车系统中的语义SLAM

【点云论文速读】StructSLAM:结构化线特征SLAM

SLAM和AR综述

常用的3D深度相机

AR设备单目视觉惯导SLAM算法综述与评价

SLAM综述(4)激光与视觉融合SLAM

Kimera实时重建的语义SLAM系统

易扩展的SLAM框架-OpenVSLAM


以上内容如有错误请留言评论,欢迎指正交流。如有侵权,请联系删除

扫描二维码

                   关注我们

让我们一起分享一起学习吧!期待有想法,乐于分享的小伙伴加入知识星球注入爱分享的新鲜活力。分享的主题包含但不限于三维视觉,点云,高精地图,自动驾驶,以及机器人等相关的领域。

分享与合作:微信“920177957”(备注:姓名+学校/公司+研究方向) 联系邮箱:dianyunpcl@163.com。

为分享的伙伴们点赞吧!

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/175446
 
92 次点击