人工智能3d点云之Pointnet++项目实战源码解读(点云分类与分割)

news2025/3/14 12:28:29

一.项目文件概述

二.数据读取模块配置

实际代码运行时是先定义与加载好模型,然后再去读取数据进来传入到模型网络中去训练。但现在反过来先读取数据开始。

进入ModelNetDataLoader类的_getitem方法,

做标准化的目的是处理异常大的数值

上面返回的cls是类别,相当于标签(Y)。point_set就是由六列(特征)组成一个点,共1024个点的矩阵。这时dataload构建完成了。

三.网络模型架构

dataload完成可以读取数据后,现在就传入网络结构进行前向传播了,这里在配置文件中可知用的是pointnet2_cls_msg模型来的,所以进入这个类的构造方法与forward方法中。

sa1到sa3层是整个Pointnet++的核心部分

补充上图中的[8,3,1024]中的8是指batch_size。

现在进入sa1定义的类中,如下图:

四.最远点采样

还是在s1对应的forward方法中,

上图中只是做采样操作,还没做特征提取或权重参数计算,所以输入只要原始数据的坐标信息即可。下面进入到最远点采样方法farthest_point_sample中,

对于第一个中心点,它是在每个batch中它会随机初始化一个最远点的索引作为第一个中心点。

五.采样得到中心点

上图中所有现在对红色的其中一个(其实它是剩下的未确定的红色的所有点都会这样做),这里只是说一个例子。上图中即最小的那个mask为ture,其它就false。下面就按这个boolean值来更新初始化的distance矩阵(直接更新值到这个矩阵中),如下图:

上图中就是把与确定点最近的点的坐标更新到更新表(distance)中了,那未更新到的点还是保持比较大的。下一步就是从distance表中选出距离最大的那个值来:

上图中的这个思想也是值得学习运用到其它项目的。

这时最远点采样点就确定,搞定了。

六.组区域划分方法

注意上面最远点采样返回的是索引值来的,下面进入index_points方法中,这方法主要就是按这些索引值去原始坐标值中检索到真实坐标值回来。如下图:

七.实现group操作得到各中心簇

进入到query_ball_point方法中,这个也核心方法,如下图:

返回结果回去,至此query_ball_point方法结束,它每一行表示簇(例512),一簇有16个点,batchsize=8,所以它的shape就是8*512*16,这个矩阵中的值都是ID值来的,不是实际的值。

八.特征提取模块整体流程

现在要进行特征提取操作了,那首先要得到实际的值来,

以前版本是特征与特征间没联系,现在簇中内容都得到了,那么肯定会有联系了

上图中是法向量特征与分组完的位置特征接拼在一起的意思。

下面开始提特征操作了:

上图中max是指选出某个维度中的最大值,本例中指定的是2,所以它就是说对在簇中的所有点(例16个)中取最大的一个出来就行了,类似做了下采样。

这时对于每一个半径围成的圆中点的特征已经算出来了,放入list中,现在for剩下半径围成的点的特征。

为什么要多个半径来提取特征,目的就是提取到的特征更丰富。下面就把放到new_points_list中的特征拼接在一起,特征个数将累加起来,shape为(8,320,512)如下图:

至此不同半径的特征已经提取完,并拼接返回回去,s1也就结束了。

九.预测结果输出模块

现在开始调用s2了,它的传入参数是s1的二个返回结果(原始位置信息和提取的特征).

s2与s1的操作是一样的。进入s3时它是当作1个簇了,如下图:

我们最终是要得到40分类的结果,那现在经过第一个全连接后得到512不满足,所以继续做全连接,bn与relu,drop,直到fc3后输出40类,如下图:

到这里由拿到数据进入网络模型进行前向传播(不同半径的特征提取与拼接,分类预测)就结束了,下面看下它的数据是怎么拿的。

十.分类任务总结

它获取数据后会做一些数据增强的操作,例如drop删除掉一些数据,又如数据缩放(相当于乘法),数据加减法等操作。如下图:

得到分类的预测结果后,将结合实际值得到损失值,再然后做反向传播与梯度下降,如下图:

十一.分割任务数据与配置概述

由上图看出分割是要对每个点都要做分类的,看它是归属那一个类别当中。而不像分类一样后面做maxpool对全局特征预测就行。

十二.分割需要解决的任务概述

而分类的话经过s3后做下采样,最后其实是变成1个点的特征,而分割就是后面做上采样变成为2048个点进行分类开,如下图:

下面就只看上采样的代码了:

十三.上采样完成分割任务

它调用fp3其实开始做上采样操作,把这四个参数值传入到pointnet_util中的PointNetFeaturePropagation类下的forward方法中

上面所说的1024维向量就当作是1024个特征。

上图中所说近的距离的权重会大一点,远距离的权重就小一点。

经过多个层运算后,得到如下图:

最后就调用softmax就结束了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2300368.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

IP 路由基础 | 路由条目生成 / 路由表内信息获取

注:本文为 “IP 路由” 相关文章合辑。 未整理去重。 IP 路由基础 秦同学学学已于 2022-04-09 18:44:20 修改 一. IP 路由产生背景 我们都知道 IP 地址可以标识网络中的一个节点,并且每个 IP 地址都有自己的网段,各个网段并不相同&#xf…

java后端开发day16--字符串(二)

(以下内容全部来自上述课程) 1.StringBuilder 因为StringBuilder是Java已经写好的类。 java在底层对他进行了一些特殊处理。 打印对象不是地址值而是属性值。 1.概述 StringBuilder可以看成是一个容器,创建之后里面的内容是可变的。 作用…

LabVIEW危化品仓库的安全监测系统

本案例展示了基于LabVIEW平台设计的危化品仓库安全监测系统,结合ZigBee无线通信技术、485串口通讯技术和传感器技术,实现了对危化品仓库的实时无线监测。该系统不仅能提高安全性,还能大幅提升工作效率,确保危化品仓库的安全运营。…

深度学习框架探秘|Keras 应用案例解析以及 Keras vs TensorFlow vs PyTorch

引言 上一篇文章《深度学习框架探秘|Keras:深度学习的魔法钥匙》 我们初步学习了 Keras,包括它是什么、具备哪些优势(简洁易用的 API、强大的兼容性、广泛的应用领域),以及基本使用方法。本文,…

NAT(网络地址转换)技术详解:网络安全渗透测试中的关键应用与防御策略

目录 NAT的作用 NAT类型 NAT工作流程示例 NAT 转换技术的原理 源地址转换(SNAT,Source NAT): 目标地址转换(DNAT,Destination NAT): 端口地址转换(PAT&#xff0c…

容器化部署Kafka的最佳实践:基于KRaft模式的无ZooKeeper方案

一、docker 部署kafka单节点 1.1安装docker 可以参考这篇CentOS 7安装docker并配置镜像加速 1.3 运行kafka(注意修改zookeeper,kafka地址) docker run -d --name kafka -e KAFKA_ADVERTISED_LISTENERSPLAINTEXT://172.16.10.180:9092 -p …

【PHP】php+mysql 活动信息管理系统(源码+论文+数据库+数据库文件)【独一无二】

👉博__主👈:米码收割机 👉技__能👈:C/Python语言 👉专__注👈:专注主流机器人、人工智能等相关领域的开发、测试技术。 【PHP】php 活动信息管理系统(源码论文…

thingboard告警信息格式美化

原始报警json内容: { "severity": "CRITICAL","acknowledged": false,"cleared": false,"assigneeId": null,"startTs": 1739801102349,"endTs": 1739801102349,"ackTs": 0,&quo…

OpenHarmonry 5.0.1源码下载与编译

预置环境:硬盘500G、内存32G、Ubuntu 20.04.6 LTS Ubuntu系统下载路径:ubuntu-releases安装包下载_开源镜像站-阿里云 一、必需环境 sudo apt-get update && sudo apt-get install binutils binutils-dev git git-lfs gnupg flex bison gperf…

STM32 外部中断和NVIC嵌套中断向量控制器

目录 背景 外部中断/事件控制器(EXTI) 主要特性 功能说明 外部中断线 嵌套向量中断控制器 特性 ‌中断线(Interrupt Line) 中断线的定义和作用 STM32中断线的分类和数量 优先级分组 抢占优先级(Preemption Priority) …

string类详解(上)

文章目录 目录1. STL简介1.1 什么是STL1.2 STL的版本1.3 STL的六大组件 2. 为什么学习string类3. 标准库中的string类3.1 string类3.2 string类的常用接口说明 目录 STL简介为什么学习string类标准库中的string类string类的模拟实现现代版写法的String类写时拷贝 1. STL简介 …

【Go并发编程】Goroutine 调度器揭秘:从 GMP 模型到 Work Stealing 算法

每天一篇Go语言干货,从核心到百万并发实战,快来关注魔法小匠,一起探索Go语言的无限可能! 在 Go 语言中,Goroutine 是一种轻量级的并发执行单元,它使得并发编程变得简单高效。而 Goroutine 的高效调度机制是…

【前端】Vue组件库之Element: 一个现代化的 UI 组件库

文章目录 前言一、官网1、官网主页2、设计原则3、导航4、组件 二、核心功能:开箱即用的组件生态1、丰富的组件体系2、特色功能亮点 三、快速上手:三步开启组件化开发1、安装(使用Vue 3)2、全局引入3、按需导入(推荐&am…

坐井说天阔---DeepSeek-R1

前言 DeepSeek-R1这么火,虽然网上很多介绍和解读,但听人家的总不如自己去看看原论文。于是花了大概一周的时间,下班后有进入了研究生的状态---读论文。 DeepSeek这次的目标是探索在没有任何监督数据的情况下训练具有推理能力的大模型&#…

UART(一)——UART基础

一、定义 UART(Universal Asynchronous Receiver/Transmitter)是一种广泛使用的串行通信协议,用于在设备间通过异步方式传输数据。它无需共享时钟信号,而是依赖双方预先约定的参数(如波特率)完成通信。 功能和特点 基本的 UART 系统只需三个信号即可提供稳健的中速全双工…

DeepSeek 的创新融合:多行业应用实践探索

引言 在数字化转型的浪潮中,技术的融合与创新成为推动各行业发展的关键力量。蓝耘平台作为行业内备受瞩目的创新平台,以其强大的资源整合能力和灵活的架构,为企业提供了高效的服务支持。而 DeepSeek 凭借先进的人工智能技术,在自然…

CentOS 7超详细安装教程(含镜像)

1. 安装前准备 1.1 CentOS简介 CentOS(Community Enterprise Operating System,中文意思是:社区企业操作系统)是一种基于 Red Hat Enterprise Linux(RHEL)源代码构建的免费开源操作系统。它在稳定性、安全…

Qt中基于开源库QRencode生成二维码(附工程源码链接)

目录 1.QRencode简介 2.编译qrencode 3.在Qt中直接使用QRencode源码 3.1.添加源码 3.2.用字符串生成二维码 3.3.用二进制数据生成二维码 3.4.界面设计 3.5.效果展示 4.注意事项 5.源码下载 1.QRencode简介 QRencode是一个开源的库,专门用于生成二维码&…

SpringBoot教程(三十二) SpringBoot集成Skywalking链路跟踪

SpringBoot教程(三十二) | SpringBoot集成Skywalking链路跟踪 一、Skywalking是什么?二、Skywalking与JDK版本的对应关系三、Skywalking下载四、Skywalking 数据存储五、Skywalking 的启动六、部署探针 前提: Agents 8.9.0 放入 …

IntelliJ IDEA 接入 AI 编程助手(Copilot、DeepSeek、GPT-4o Mini)

IntelliJ IDEA 接入 AI 编程助手(Copilot、DeepSeek、GPT-4o Mini) 📊 引言 近年来,AI 编程助手已成为开发者的高效工具,它们可以加速代码编写、优化代码结构,并提供智能提示。本文介绍如何在 IntelliJ I…