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

一.项目文件概述

二.数据读取模块配置

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

进入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.mzph.cn/pingmian/70093.shtml

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

相关文章

[250217] x-cmd 发布 v0.5.3:新增 DeepSeek AI 模型支持及飞书/钉钉群机器人 Webhook 管理

目录 X-CMD 发布 v0.5.3📃Changelog🧩 deepseek🧩 feishu|dingtalk📦 x-cmd✅ 升级指南 X-CMD 发布 v0.5.3 📃Changelog 🧩 deepseek 新增 deepseek 模块,用户可通过 deepseek 直接请求使用 …

图论:tarjan 算法求解强连通分量

题目描述 有一个 n n n 个点, m m m 条边的有向图,请求出这个图点数大于 1 1 1 的强连通分量个数。 输入格式 第一行为两个整数 n n n 和 m m m。 第二行至 m 1 m1 m1 行,每一行有两个整数 a a a 和 b b b,表示有一条…

led+串口代码 重定向 STM32F030F4P6 fgetc multiply defined错误

led串口 重定向 STM32F030F4P6 重定向报错 axf: Error: L6200E: Symbol fgetc multiply defined (by usart.o and main.o). 把 #include "stdio.h" int fputc(int ch, FILE *fp) {HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 0xffff);return ch; }int f…

Letsencrypt+certbot为域名免费配置ssl

1、基础概念 Let’s Encrypt 是一个提供免费 SSL/TLS 证书的认证机构,它的目标是让互联网上的通信更加安全,特别是普及 HTTPS。通过 Let’s Encrypt 提供的证书,网站可以使用加密连接,保护用户的数据传输。 Certbot 是一个由电子…

BSD协议栈:UDP发送

BSD实现 在BSD中UDP头部数据结构如下: /** Udp protocol header.* Per RFC 768, September, 1981.*/ struct udphdr {u_short uh_sport; /* source port */u_short uh_dport; /* destination port */short uh_ulen; /* udp length */u_short uh_sum; /* udp …

QT (四)模型/视图 QFileSystemModel,QStringListModel,QStandardItemModel

思考:QTableWidget 在某种程度上可以等价为QStandardItemModel,同理,其他的功能也有类似的等价,但是以当前的QTableWidget 和QStandardItemModel为例的话,两者都是用于实现建立表格的相关组件,只不过QStand…

Unity热更新方案HybridCLR+YooAsset,从零开始,保姆级教程,纯c#开发热更

文章目录: 一、前言二、创建空工程三、接入HybridCLR四、接入YooAsset五、搭建本地资源服务器Nginx六、实战七、最后八、后记 一、前言 unity热更有很多方案,各种lua热更,ILRuntime等,这里介绍的是YooAssetHybridCLR的热更方案&a…

Zabbix——监控Windows下某个文件夹的所有文件变化

获取所有的指定路径下的文件列表 以D:\Apps这个文件夹下的所有文件为例,我需要找到这个文件夹里面的子文件夹中的所有文件,但是排除backup这个文件夹,下面我们来看怎么操作 在scripts目录下创建check_file_in_D_Apps.ps1文件,内容…

C++ Primer 函数匹配

欢迎阅读我的 【CPrimer】专栏 专栏简介:本专栏主要面向C初学者,解释C的一些基本概念和基础语言特性,涉及C标准库的用法,面向对象特性,泛型特性高级用法。通过使用标准库中定义的抽象设施,使你更加适应高级…

java八股文-mysql

1. 索引 1.1 什么是索引 索引(index)是帮助Mysql高效获取数据的数据结构(有序).提高数据的检索效率,降低数据库的IO成本(不需要全表扫描).通过索引列对数据进行排序,降低数据排序成本,降低了CPU的消耗. 1.2 mysql索引使用的B树? 1. 没有使用二叉树,最坏情况o&…

Docker拉不下来镜像问题解决法案

打开docker的设置界面 配置如下: vi /etc/docker/daemon.json {"builder": {"gc": {"defaultKeepStorage": "20GB","enabled": true}},"experimental": false,"registry-mirrors": ["…

春招项目=图床+ k8s 控制台(唬人专用)

1. 春招伊始 马上要春招了,一个大气的项目(冲击波项目)直观重要,虽然大家都说基础很重要,但是一个足够新颖的项目完全可以把你的简历添加一个足够闪亮的点。 这就不得不推荐下我的 k8s 图床了,去年折腾快…

wordpress主题插件开发中高频使用的38个函数

核心模板函数 get_header()/get_footer()/get_sidebar() – 加载模板部件 the_title()/the_content()/the_excerpt() – 显示文章标题、内容、摘要 the_post() – 循环中获取文章数据 bloginfo(‘url’) – 获取站点URL wp_head()/wp_footer() – 输出头部/尾部代码 wp_n…

vue点击左边导航,右边出现页面步骤

vue点击左边导航&#xff0c;右边出现页面 步骤 一定要import不然会出错 index.js Course作为Homeview子路由 Homeview加入<Routerview> 点击跳转<RouterLink to> 父Homeview中有RouterView&#xff08;路由出口&#xff0c;跳转至相应路径&#xff09;和Router…

阿里云视频点播,基于thinkphp8上传视频

前端参考官方示例(jQuery版) <!DOCTYPE html> <html> <head><meta charset"utf-8"><title>阿里云 JavaScript上传SDK Demo (使用jquery)</title><script src"__STATIC__/jquery.min.js"></script><sc…

力扣 66.加一 (Java实现)

题目分析 给定一个数组&#xff0c;可以组成一个数字&#xff0c;将数字加一后&#xff0c;返回新数组 思路分析 首先跟着题目思路走&#xff0c;将数组按位*10可以得到数字&#xff0c;再加一&#xff0c;加一后按位%10&#xff0c;可以得到新的数组。但是此处数字会过大&…

[特殊字符] 用Rust重塑Web开发速度极限:Hyperlane框架——开启高性能服务的「光年时代」[特殊字符]

&#x1f525; 每秒百万级请求&#xff1f;Rust超新星Hyperlane框架让Web开发突破性能次元壁&#xff01;&#x1f525; &#x1f31f; 颠覆性技术亮点&#xff1a;为何全球顶尖工程师正疯狂迁移至Hyperlane&#xff1f; ⚡️ 「速度即正义」&#xff1a;重新定义Web性能天花…

DeepSeek与ChatGPT:AI语言模型的全面对决

DeepSeek与ChatGPT&#xff1a;AI语言模型的全面对决 引言&#xff1a;AI 语言模型的时代浪潮一、认识 DeepSeek 与 ChatGPT&#xff08;一&#xff09;DeepSeek&#xff1a;国产新星的崛起&#xff08;二&#xff09;ChatGPT&#xff1a;AI 界的开拓者 二、DeepSeek 与 ChatGP…

visutal studio 2022使用qcustomplot基础教程

编译 下载&#xff0c;2.1.1版支持到Qt6.4 。 拷贝qcustomplot.h和qcustomplot.cpp到项目源目录&#xff08;Qt project&#xff09;。 在msvc中将它俩加入项目中。 使用Qt6.8&#xff0c;需要修改两处代码&#xff1a; L6779 # if QT_VERSION > QT_VERSION_CHECK(5, 2, …

联想笔记本电脑摄像头灯亮,但没有画面怎么解决,

联想小新电脑&#xff0c;遇到电脑黑屏。 解决方法&#xff0c;搜索打开任务管理器 打开联想管家的路径 打开BatterySetting.exe 程序 然后右下角会弹出一个东西&#xff0c;关闭这个摄像头的隐私模式。就可以打开了 就可以了