使用PointNet深度学习进行点云分类

简介: 训练 PointNet 网络以进行点云分类。点云数据由各种传感器获取,例如激光雷达、雷达和深度摄像头。这些传感器捕获场景中物体的3D位置信息,这对于自动驾驶和增强现实中的许多应用非常有用。例如,区分车辆和行人对于规划自动驾驶汽车的路径至关重要。然而,由于每个对象的数据稀疏性、对象遮挡和传感器噪声,使用点云数据训练稳健分类器具有挑战性。深度学习技术已被证明可以通过直接从点云数据中学习强大的特征表示来解决其中的许多挑战。点云分类的开创性深度学习技术之一是PointNet。

​一、前言
训练 PointNet 网络以进行点云分类。点云数据由各种传感器获取,例如激光雷达、雷达和深度摄像头。这些传感器捕获场景中物体的3D位置信息,这对于自动驾驶和增强现实中的许多应用非常有用。例如,区分车辆和行人对于规划自动驾驶汽车的路径至关重要。然而,由于每个对象的数据稀疏性、对象遮挡和传感器噪声,使用点云数据训练稳健分类器具有挑战性。深度学习技术已被证明可以通过直接从点云数据中学习强大的特征表示来解决其中的许多挑战。点云分类的开创性深度学习技术之一是PointNet。

此示例在悉尼大学创建的悉尼城市对象数据集上训练 PointNet 分类器。该数据集提供使用激光雷达传感器从城市环境中获取的点云数据的集合。该数据集包含来自 100 个不同类别(如汽车、行人和公共汽车)的 14 个标记对象。

二、加载数据集
下载悉尼城市对象数据集并将其提取到临时目录。使用此示例末尾列出的帮助程序函数加载下载的训练和验证数据集。使用前三个数据折叠进行训练,使用第四个数据折叠进行验证。读取其中一个训练样本并使用 进行可视化。
1.png

阅读标签并计算分配给每个标签的点数,以更好地了解数据集中标签的分布。接下来,使用直方图可视化类分布。
2.png

标签直方图显示数据集不平衡且偏向于汽车和行人,这可能会阻止对稳健分类器的训练。您可以通过对不常见的类进行过采样来解决类不平衡问题。对于悉尼城市对象数据集,复制与不常用类对应的文件是解决类不平衡的简单方法。

按标签对文件进行分组,计算每个类的观测值数,并使用此示例末尾列出的帮助程序函数将文件随机过采样为每个类所需的观测值数。

三、数据增强
复制文件以解决类不平衡会增加网络过度拟合的可能性,因为许多训练数据是相同的。为了抵消这种影响,请使用 and helper 函数对训练数据应用数据增强,该函数随机旋转点云、随机删除点,并使用高斯噪声随机抖动点。

预览其中一个增强训练样本。
3.png

请注意,由于用于测量训练网络性能的数据必须代表原始数据集,因此数据增强不会应用于验证或测试数据。

四、数据预处理
准备用于训练和预测的点云数据需要两个预处理步骤。

首先,要在训练期间启用批处理,请从每个点云中选择固定数量的点。最佳点数取决于数据集和准确捕获对象形状所需的点数。为了帮助选择适当的点数,请计算每个类的最小、最大和平均点数。

由于每个班级的点数存在大量的类内和类间差异,因此很难选择适合所有类的值。一种启发式方法是选择足够的点来充分捕获对象的形状,同时不会通过处理太多点来增加计算成本。值 1024 可在这两个方面之间进行良好的权衡。您还可以根据实证分析选择最佳点数。但是,这超出了此示例的范围。使用该函数在训练和验证集中选择 1024 个点。

最后一个预处理步骤是规范化 0 到 1 之间的点云数据,以解决数据值范围的巨大差异。例如,与距离较远的对象相比,靠近激光雷达传感器的对象具有较小的值。这些差异可能会阻碍训练期间网络的收敛。用于规范化训练集和验证集中的点云数据。

预览增强和预处理的训练数据。
4.png

五、定义点网模型
PointNet 分类模型由两个组件组成。第一个组件是一个点云编码器,它学习将稀疏的点云数据编码为密集的特征向量。第二个组件是一个分类器,用于预测每个编码点云的分类类。

PointNet 编码器模型进一步由四个模型组成,然后是最大操作。

共享 MLP 模型是使用一系列卷积、批量归一化和 ReLU 操作实现的。卷积操作的配置使得权重在输入点云中共享。变换模型由共享 MLP 和应用于每个点云的可学习变换矩阵组成。共享 MLP 和 max 操作使 PointNet 编码器对点的处理顺序不变,而转换模型则为方向变化提供不变性。

5.1 定义点网编码器模型参数
共享 MLP 和变换模型由输入通道数和隐藏通道大小进行参数化。此示例中选择的值是通过在悉尼城市对象数据集上调整这些超参数来选择的。请注意,如果要将 PointNet 应用于其他数据集,则必须执行其他超参数优化。

将输入转换模型输入通道大小设置为 64,将隐藏通道大小设置为 128、256 ,并使用此示例末尾列出的帮助程序函数初始化模型参数。

将第一个共享 MLP 模型输入通道大小设置为 64,将隐藏通道大小设置为 ,并使用此示例末尾列出的帮助程序函数初始化模型参数。

将特征转换模型输入通道大小设置为 64,将隐藏通道大小设置为 64、128 和 256,并使用此示例末尾列出的帮助程序函数初始化模型参数。

将第二个共享 MLP 模型输入通道大小设置为 64,将隐藏通道大小设置为 64,并使用此示例末尾列出的函数初始化模型参数。

5.2 定义点网分类器模型参数
PointNet 分类器模型由共享 MLP、完全连接操作和 softmax 激活组成。将分类器模型输入大小设置为 64,将隐藏通道大小设置为 512 和 256,并使用此示例末尾列出的帮助程序函数初始化模型参数。

六、定义点网功能
创建示例末尾的“模型函数”部分中列出的函数,以计算 PointNet 模型的输出。函数模型将点云数据、可学习模型参数、模型状态以及指定模型是否返回训练或预测输出的标志作为输入。网络返回用于对输入点云进行分类的预测。

七、定义模型梯度函数
创建示例的“模型梯度函数”部分中列出的函数,该函数将模型参数、模型状态和小批量输入数据作为输入,并返回相对于模型中可学习参数的损失梯度和相应的损失。

八、指定训练选项
训练 10 个 epoch,并以 128 个周期为批次加载数据。将初始学习率设置为 0.002,将 L2 正则化因子设置为 0.01。初始化 Adam 优化的选项。

九、训练点网
使用自定义训练循环训练模型。

在训练开始时随机播放数据。

对于每次迭代:

在每个纪元结束时,根据验证数据集评估模型,并收集混淆指标,以随着训练的进行来衡量分类准确性。

完成 epoch 后,将学习率降低 .

初始化参数梯度的移动平均值和 Adam 优化器使用的梯度的元素平方。

如果为 true,则训练模型。否则,请加载预训练网络。

请注意,训练是在具有 12 GB GPU 内存的 NVIDIA Titan X 上验证的。如果您的 GPU 内存较少,则可能会在训练期间耗尽内存。如果发生这种情况,请降低 .训练此网络大约需要 5 分钟。根据您的 GPU 硬件,可能需要更长的时间。显示验证混淆矩阵。

5.png

计算平均训练和验证准确性。由于悉尼城市对象数据集中的训练样本数量有限,因此将验证准确率提高到 60% 以上具有挑战性。在没有帮助程序函数中定义的增强的情况下,该模型很容易过度拟合训练数据。为了提高 PointNet 分类器的健壮性,需要进行额外的培训。

十、使用点网对点云数据进行分类
加载点云数据,使用训练期间使用的相同函数预处理点云,使用模型函数预测点云标签。显示得分最高的点云和预测标签。
6.png

十一、模型梯度函数
函数将一小批数据、相应的目标和可学习的参数作为输入,并返回相对于可学习参数和相应损失的损失梯度。损失包括一个正则化项,旨在确保 PointNet 编码器预测的特征转换矩阵近似正交。要计算梯度,请使用训练循环中的函数评估函数。

十二、点网分类器函数
该函数将点云数据 dlX、可学习模型参数、模型状态和标志 isTraining作为输入,该标志指定模型是返回用于训练还是预测的输出。然后,该函数调用 PointNet 编码器和多层感知器来提取分类特征。在训练期间,每次感知器操作后都会应用dropout。在最后一个感知器之后,操作将分类特征映射到类的数量,并使用softmax激活将输出规范化为标签的概率分布。PointNet 编码器预测的概率分布、更新的模型状态和特征转换矩阵作为输出返回。

目录
相关文章
|
机器学习/深度学习 编解码 人工智能
人脸表情[七种表情]数据集(15500张图片已划分、已标注)|适用于YOLO系列深度学习分类检测任务【数据集分享】
本数据集包含15,500张已划分、已标注的人脸表情图像,覆盖惊讶、恐惧、厌恶、高兴、悲伤、愤怒和中性七类表情,适用于YOLO系列等深度学习模型的分类与检测任务。数据集结构清晰,分为训练集与测试集,支持多种标注格式转换,适用于人机交互、心理健康、驾驶监测等多个领域。
|
2月前
|
机器学习/深度学习 人工智能 监控
河道塑料瓶识别标准数据集 | 科研与项目必备(图片已划分、已标注)| 适用于YOLO系列深度学习分类检测任务【数据集分享】
随着城市化进程加快和塑料制品使用量增加,河道中的塑料垃圾问题日益严重。塑料瓶作为河道漂浮垃圾的主要类型,不仅破坏水体景观,还威胁水生生态系统的健康。传统的人工巡查方式效率低、成本高,难以满足实时监控与治理的需求。
|
2月前
|
机器学习/深度学习 传感器 人工智能
火灾火焰识别数据集(2200张图片已划分、已标注)|适用于YOLO系列深度学习分类检测任务【数据集分享】
在人工智能和计算机视觉的快速发展中,火灾检测与火焰识别逐渐成为智慧城市、公共安全和智能监控的重要研究方向。一个高质量的数据集往往是推动相关研究的核心基础。本文将详细介绍一个火灾火焰识别数据集,该数据集共包含 2200 张图片,并已按照 训练集(train)、验证集(val)、测试集(test) 划分,同时配有对应的标注文件,方便研究者快速上手模型训练与评估。
火灾火焰识别数据集(2200张图片已划分、已标注)|适用于YOLO系列深度学习分类检测任务【数据集分享】
|
2月前
|
机器学习/深度学习 人工智能 自动驾驶
7种交通场景数据集(千张图片已划分、已标注)|适用于YOLO系列深度学习分类检测任务【数据集分享】
在智能交通与自动驾驶技术快速发展的今天,如何高效、准确地感知道路环境已经成为研究与应用的核心问题。车辆、行人和交通信号灯作为城市交通系统的关键元素,对道路安全与交通效率具有直接影响。然而,真实道路场景往往伴随 复杂光照、遮挡、多目标混杂以及交通信号状态多样化 等挑战,使得视觉识别与检测任务难度显著增加。
|
2月前
|
机器学习/深度学习 人工智能 监控
坐姿标准好坏姿态数据集(图片已划分、已标注)|适用于YOLO系列深度学习分类检测任务【数据集分享】
坐姿标准好坏姿态数据集的发布,填补了计算机视觉领域在“细分健康行为识别”上的空白。它不仅具有研究价值,更在实际应用层面具备广阔前景。从青少年的健康教育,到办公室的智能提醒,再到驾驶员的安全监控和康复训练,本数据集都能发挥巨大的作用。
坐姿标准好坏姿态数据集(图片已划分、已标注)|适用于YOLO系列深度学习分类检测任务【数据集分享】
|
2月前
|
机器学习/深度学习 编解码 人工智能
102类农业害虫数据集(20000张图片已划分、已标注)|适用于YOLO系列深度学习分类检测任务【数据集分享】
在现代农业发展中,病虫害监测与防治 始终是保障粮食安全和提高农作物产量的关键环节。传统的害虫识别主要依赖人工观察与统计,不仅效率低下,而且容易受到主观经验、环境条件等因素的影响,导致识别准确率不足。
|
21天前
|
机器学习/深度学习 数据采集 编解码
基于深度学习分类的时相关MIMO信道的递归CSI量化(Matlab代码实现)
基于深度学习分类的时相关MIMO信道的递归CSI量化(Matlab代码实现)
|
机器学习/深度学习 人工智能 文字识别
中药材图像识别数据集(100类,9200张)|适用于YOLO系列深度学习分类检测任务
本数据集包含9200张中药材图像,覆盖100类常见中药材,适用于YOLO系列及主流深度学习模型的图像分类与目标检测任务。数据已划分为训练集(8000张)与验证集(1200张),采用标准文件夹结构和简体中文命名,适配PyTorch、TensorFlow等框架,可用于中药识别系统开发、医学辅助诊断、移动端图像识别App研发及AI科研训练,具备较强的实用性与拓展性。
549 45
|
2月前
|
机器学习/深度学习 自动驾驶 算法
道路表面缺陷数据集(裂缝/井盖/坑洼)(6000张图片已划分、已标注)|适用于YOLO系列深度学习分类检测任务【数据集分享】
随着城市化与交通运输业的快速发展,道路基础设施的健康状况直接关系到出行安全与城市运行效率。长期高强度的使用、气候变化以及施工质量差异,都会导致道路表面出现裂缝、坑洼、井盖下沉及修补不良等缺陷。这些问题不仅影响驾驶舒适度,还可能引发交通事故,增加道路养护成本。
道路表面缺陷数据集(裂缝/井盖/坑洼)(6000张图片已划分、已标注)|适用于YOLO系列深度学习分类检测任务【数据集分享】
|
机器学习/深度学习 人工智能 编解码
AI虫子种类识别数据集(近3000张图片已划分、已标注)|适用于YOLO系列深度学习分类检测任务【数据集分享】
本数据集包含近3000张已划分、标注的虫子图像,适用于YOLO系列模型的目标检测与分类任务。涵盖7类常见虫子,标注采用YOLO格式,结构清晰,适合农业智能化、小样本学习及边缘部署研究。数据来源多样,标注精准,助力AI虫害识别落地应用。

热门文章

最新文章