当前位置: 首页 > news >正文

PointNet++论文复现


✨✨ 欢迎大家来访Srlua的博文(づ ̄3 ̄)づ╭❤~✨✨

🌟🌟 欢迎各位亲爱的读者,感谢你们抽出宝贵的时间来阅读我的文章。

我是Srlua小谢,在这里我会分享我的知识和经验。🎥

希望在这里,我们能一起探索IT世界的奥妙,提升我们的技能。🔮

记得先点赞👍后阅读哦~ 👏👏

📘📚 所属专栏:传知代码论文复现

欢迎访问我的主页:Srlua小谢 获取更多信息和资源。✨✨🌙🌙

​​

​​

目录

3D点云

什么是3D点云

为什么要使用3D点云(和计算机视觉比较)

点云数据演示效果

CloudCompare可视化工具

PointNet++模型

Set Abstraction Layer(集合抽象层)

Feature Propagation Layer(特征传播层)

多层感知机(MLP)

Symmetric Function(对称函数)

PointNet++核心代码

附件使用方式

3D点云数据下载

安装依赖

训练脚本

预测脚本

注:附件中不仅有点云分类代码,还有点云分割相关代码


本文所有资源均可在该地址处获取。

3D点云

什么是3D点云

3D点云是由大量空间中的点组成的数据集,这些点在三维坐标系统中具有X、Y和Z三个坐标值,用以表示物体或环境的形状和结构。每个点通常还包含额外的信息,如颜色、强度、法线等,这些信息可以帮助更准确地描述点云所代表的对象。3D点云数据可以通过各种技术获取,如激光扫描(LIDAR)、结构光扫描、立体摄像头以及其他3D感测设备。

点云数据在许多领域都有应用,包括但不限于测绘、建筑、制造业、自动驾驶汽车、文化遗产保护以及游戏开发等。它们为计算机提供了丰富的空间信息,使得能够进行高级的形状分析和模型重建。

为什么要使用3D点云(和计算机视觉比较)

3D点云在许多方面与传统的计算机视觉技术相比具有独特的优势,以下是一些主要的原因:

空间信息的丰富性
3D点云:提供了物体或场景的精确三维空间信息,可以准确地表示对象的形状、大小和位置。
计算机视觉:通常处理二维图像,虽然可以通过立体视觉等方法估计深度信息,但精度和分辨率通常不如3D点云。
精确度
3D点云:由于其三维特性,可以用于精确的尺寸测量和形状分析,这对于工程和制造领域尤为重要。
计算机视觉:在处理二维图像时可能会受到视角、光照变化和遮挡的影响,从而影响测量的精确度。
遮挡和视角问题
3D点云:可以从多个角度分析物体,即使在有遮挡的情况下也能较好地重建物体的完整结构。
计算机视觉:遮挡可能导致图像中关键信息的丢失,这可能会影响识别和分类的准确性。
复杂场景的理解
3D点云:能够更好地理解复杂的三维场景,例如城市环境或工业设施,这对于自动驾驶汽车和机器人导航等应用至关重要。
计算机视觉:在处理复杂场景时可能需要更多的预处理和假设,以简化场景并提取有用的信息。
交互性和沉浸感
3D点云:可以用于创建高度交互性和沉浸感的虚拟现实(VR)和增强现实(AR)体验。
计算机视觉:虽然也可以用于AR/VR,但通常缺乏3D点云所提供的详细和精确的空间信息。
总之,3D点云在处理三维空间数据方面具有独特的优势,它为计算机视觉带来了新的维度,使得在许多领域中的应用更加精确和有效。然而,3D点云技术也有其局限性,如数据处理和存储的要求较高,以及点云配准和降噪等预处理步骤的复杂性。不过,随着技术的进步,这些问题正在逐步得到解决

点云数据演示效果

CloudCompare可视化工具

下载地址:https://www.cloudcompare.org/


使用方式


可视化效果

PointNet++模型

Set Abstraction Layer(集合抽象层)

集合抽象层是PointNet++的核心模块,它通过迭代地采样点云中的点,并在每个采样点上应用PointNet来提取局部特征。

采样(Sampling):从输入点云中均匀或根据密度进行采样,选择一组点作为局部区域的中心。
分组(Grouping):对于每个采样点,根据距离选择它的邻近点形成一个小区域(称为“点集”或“组”),这些邻近点将用于提取局部特征。
局部特征提取(Local Feature Extraction):对每个分组应用PointNet或类似的结构,提取局部特征。这通常涉及到使用多层感知机(MLP)来处理每个点的坐标和特征,然后通过最大池化(max pooling)操作来获得一个固定大小的特征向量,该特征向量代表了该组的局部几何特征。

Feature Propagation Layer(特征传播层)

特征传播层用于将高层次的特征传播回原始点云的每个点,以细化特征表示。

插值(Interpolation):使用最近邻或基于距离的权重插值方法,将高层次的特征传播到低层次或原始点云的每个点。
特征更新(Feature Updating):在将高层次特征传播到原始点后,通过额外的MLP层更新每个点的特征,以融合局部和全局信息。

多层感知机(MLP)

在PointNet++中,多层感知机(MLP)用于对点云中的点进行特征提取。MLP是一个简单的前馈神经网络,它可以在每个点上进行多次非线性变换,以提取更复杂的特征。

Symmetric Function(对称函数)

PointNet++使用最大池化作为对称函数,以确保特征的排列不变性。这意味着无论点的顺序如何变化,提取的特征都是相同的。

  1. 输出层
    在网络的最后,通常会添加一个或多个全连接层(也称为密集层),以对提取的特征进行分类或分割任务。这些层将特征向量映射到最终的分类标签或每个点的分割标签

PointNet++核心代码

特征提取核心代码

class PointNetSetAbstraction(nn.Module):def __init__(self, npoint, radius, nsample, in_channel, mlp, group_all):super(PointNetSetAbstraction, self).__init__()self.npoint = npointself.radius = radiusself.nsample = nsampleself.mlp_convs = nn.ModuleList()self.mlp_bns = nn.ModuleList()last_channel = in_channelfor out_channel in mlp:self.mlp_convs.append(nn.Conv2d(last_channel, out_channel, 1))self.mlp_bns.append(nn.BatchNorm2d(out_channel))last_channel = out_channelself.group_all = group_alldef forward(self, xyz, points):"""Input:xyz: input points position data, [B, C, N]points: input points data, [B, D, N]Return:new_xyz: sampled points position data, [B, C, S]new_points_concat: sample points feature data, [B, D', S]"""xyz = xyz.permute(0, 2, 1)print(xyz.shape) # (B,1024,3)if points is not None:points = points.permute(0, 2, 1) #(B,1024,3)# new_xyz是从1024个点中根据最远原则选出的512个点# new_points是以这512个点为圆心,框出32个点 if self.group_all:new_xyz, new_points = sample_and_group_all(xyz, points)else:new_xyz, new_points = sample_and_group(self.npoint, self.radius, self.nsample, xyz, points)print(new_xyz.shape, new_points.shape) # (B,512,3),(B,512,32,6)# new_xyz: sampled points position data, [B, npoint, C]# new_points: sampled points data, [B, npoint, nsample, C+D]new_points = new_points.permute(0, 3, 2, 1) # [B, C+D, nsample,npoint]print(new_points.shape) # (B,6,32,512) 将特征维度转为in_channelfor i, conv in enumerate(self.mlp_convs):bn = self.mlp_bns[i]new_points =  F.relu(bn(conv(new_points)))print(new_points.shape) # 依次改变6的特征维度,不改变32,512new_points = torch.max(new_points, 2)[0] # (B,64,512)new_xyz = new_xyz.permute(0, 2, 1)return new_xyz, new_points

附件使用方式

3D点云数据下载

与原始的ModelNet40数据集相比,ModelNet40_normal_resampled数据集中的点云具有更均匀的采样密度,这使得数据集更适合于训练深度学习模型。
每个点云样本通常包含1024个点,这些点是从原始模型表面均匀采样的。
数据集中的每个点不仅包含三维坐标(x, y, z),还包含表面法线信息(nx, ny, nz)。这些法线信息有助于模型更好地理解点云的几何结构,对于某些3D识别任务来说是非常有用的。
modelnet40_normal_resampled下载地址:https://aistudio.baidu.com/datasetdetail/50045/0
将它放到附件的/data文件夹下

安装依赖

pip install -r requirements.txt

训练脚本

python train_classification.py

预测脚本

python test_classification.py

注:附件中不仅有点云分类代码,还有点云分割相关代码

 ​​

希望对你有帮助!加油!

若您认为本文内容有益,请不吝赐予赞同并订阅,以便持续接收有价值的信息。衷心感谢您的关注和支持!

相关文章:

PointNet++论文复现

✨✨ 欢迎大家来访Srlua的博文(づ ̄3 ̄)づ╭❤~✨✨ 🌟🌟 欢迎各位亲爱的读者,感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua小谢,在这里我会分享我的知识和经验。&am…...

【VUE】el-table表格内输入框或者其他控件规则校验实现

1、封装组件 1、规则校验一般基于form表单实现&#xff0c;因此需要给具体控件套一层form表单 新建组件input-required.vue&#xff0c;内容如下 <template><div><el-form ref"formRef" :model"form" :rules"formRules" label-…...

django开发中html继承模板样式

存在问题&#xff1a; django开发中&#xff0c;不同页面样式相同&#xff0c;如何共用一套母版&#xff0c;避免每个页面都重复写样式&#xff1b; 解决方案&#xff1a; 添加一个母版&#xff0c;如“layout.html”&#xff0c;在需要继承的位置添加{% block content %}{% e…...

MT6769/MTK6769核心板规格参数_联发科安卓主板开发板方案

MT6769安卓核心板具有集成的蓝牙、FM、WLAN和GPS模块&#xff0c;是一个高度集成的基带平台&#xff0c;结合了调制解调器和应用处理子系统&#xff0c;以支持LTE/LTE-A和C2K智能手机应用。 该芯片集成了两个工作频率高达2.0GHz的ARMCortex-A75内核、六个工作频率高达1.70GHz的…...

鸿蒙进阶篇-状态管理之@Provide与@Consume

大家好&#xff0c;这里是鸿蒙开天组&#xff0c;今天我们来学习一下状态管理中的Provide与Consume。 一、概述 嘿&#xff01;大家还记得这张图吗&#xff1f;不记得也要记得哦&#xff0c;因为这张图里的东西&#xff0c;既是高频必考面试题&#xff0c;也是实际开发中&…...

java集合及源码

目录 一.集合框架概述 1.1集合和数组 数组 集合 1.2Java集合框架体系 常用 二. Collection中的常用方法 添加 判断 删除 其它 集合与数组的相互转换 三Iterator(迭代器)接口 3.0源码 3.1作用及格式 3.2原理 3.3注意 3.4获取迭代器(Iterator)对象 3.5. 实现…...

GraphRAG访问模式和知识图谱建模

GraphRAG访问模式和知识图谱建模 GraphRAG访问模式和知识图谱建模什么是GraphRAG了解文本分块检索模式图谱建模相关概念图结构 GraphRAG访问模式和知识图谱建模 graphrag.com是一个开源项目&#xff0c;收集了围绕GraphRAG的相关资源&#xff0c;目前正在快速收集大家的投稿。深…...

TCP/IP协议攻击与防范

一、TCP/IP协议攻击介绍 1.1 Internet的结构​ LAN&#xff1a;局域网 WAN&#xff1a;广域网 WLAN&#xff1a;无线局域网 私有IP地址与公有IP地址&#xff1f; 私有地址&#xff1a;A类&#xff1a;10.0.0.0~10.255.255.255 B类&#xff1a;172.16.0.0~172.31.255.255…...

Java基于 SpringBoot+Vue的口腔管理平台(附源码+lw+部署)

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;…...

11.26深度学习_神经网络-数据处理

一、深度学习概述 1. 什么是深度学习 ​ 人工智能、机器学习和深度学习之间的关系&#xff1a; ​ 机器学习是实现人工智能的一种途径&#xff0c;深度学习是机器学习的子集&#xff0c;区别如下&#xff1a; ​ 传统机器学习算法依赖人工设计特征、提取特征&#xff0c;而深…...

【人工智能】Python常用库-TensorFlow常用方法教程

TensorFlow 是一个广泛应用的开源深度学习框架&#xff0c;支持多种机器学习任务&#xff0c;如深度学习、神经网络、强化学习等。以下是 TensorFlow 的详细教程&#xff0c;涵盖基础使用方法和示例代码。 1. 安装与导入 安装 TensorFlow&#xff1a; pip install tensorflow…...

微信小程序按字母顺序渲染城市 功能实现详细讲解

在微信小程序功能搭建中&#xff0c;按字母渲染城市会用到多个ES6的方法&#xff0c;如reduce&#xff0c;map&#xff0c;Object.entries()&#xff0c;Object.keys() &#xff0c;需要组合熟练掌握&#xff0c;才能优雅的处理数据完成渲染。 目录 一、数据分析 二、数据处理 …...

23省赛区块链应用与维护(房屋租凭【下】)

23省赛区块链应用与维护(房屋租凭) 背景描述 随着异地务工人员的增多,房屋租赁成为一个广阔市场。目前,现有技术中的房屋租赁是由房主发布租赁信息,租赁信息发布在房屋中介或租赁软件,租客获取租赁信息后,现场看房,并签订纸质的房屋租赁合同,房屋租赁费用通过中介或…...

数据结构-图-领接表存储

一、了解图的领接表存储 1、定义与结构 定义&#xff1a;邻接表是图的一种链式存储结构&#xff0c;它通过链表将每个顶点与其相邻的顶点连接起来。 结构&#xff1a; 顶点表&#xff1a;通常使用一个数组来存储图的顶点信息&#xff0c;数组的每个元素对应一个顶点&#xff…...

快速入门web安全

一.确定初衷 1.我真的喜欢搞安全吗? 2.我只是想通过安全赚钱钱吗? 3.我不知道做什么就是随便。 4.一辈子做信息安全吗 这些不想清楚会对你以后的发展很不利&#xff0c;与其盲目的学习web安全&#xff0c;不如先做一个长远的计划。 否则在我看来都是浪费时间。如果你考虑好了…...

rabbitMq两种消费应答失败处理方式

在rabbitMq消费端&#xff0c;有三种应答模式&#xff1a; none&#xff1a;不处理。即消息投递给消费者后立刻 ack 消息会立刻从MQ删除。非常不安全&#xff0c;不建议使用 manual&#xff1a;手动模式。需要自己在业务代码中调用api&#xff0c;发送 ack 或 reject&#xff…...

Qt C++(一) 5.12安装+运行第一个项目

安装 1. Download Qt OSS: Get Qt Online Installer 在该链接中下载qt在线安装程序 2. 安装时候&#xff0c;注意关键一步&#xff0c;archive是存档的意思&#xff0c;可以找到旧的版本&#xff0c; 比如5.12 3. 注意组件没必要全选&#xff0c;否则需要安装50个g, 经过请教…...

【RISC-V CPU Debug 专栏 1 -- RISC-V debug 规范】

文章目录 RISC-V Debug调试用例支持的功能限制和不包括的内容RISC-V 调试架构的主要组件用户与调试主机调试翻译器调试传输硬件调试传输模块(DTM)调试模块(DM)调试功能触发模块版本介绍RISC-V Debug RISC-V 调试规范为 RISC-V 处理器提供了一套标准化的调试接口和功能,旨…...

使用Gradle编译前端的项目

使用Gradle编译前端的项目 前言项目结构根项目&#xff08;parent-project&#xff09;的 settings.gradle.kts后端项目&#xff08;backend&#xff09;的 build.gradle.kts前端项目&#xff08;frontend&#xff09;的 build.gradle.kts打包bootJar 前言 最近的项目都是使用…...

网络爬虫——常见问题与调试技巧

在开发网络爬虫的过程中&#xff0c;开发者常常会遇到各种问题&#xff0c;例如网页加载失败、数据提取错误、反爬机制限制等。以下内容将结合实际经验和技术方案&#xff0c;详细介绍解决常见错误的方法&#xff0c;以及如何高效调试和优化爬虫代码。 1. 爬虫过程中常见的错误…...

Vue记事本应用实现教程

文章目录 1. 项目介绍2. 开发环境准备3. 设计应用界面4. 创建Vue实例和数据模型5. 实现记事本功能5.1 添加新记事项5.2 删除记事项5.3 清空所有记事 6. 添加样式7. 功能扩展&#xff1a;显示创建时间8. 功能扩展&#xff1a;记事项搜索9. 完整代码10. Vue知识点解析10.1 数据绑…...

【杂谈】-递归进化:人工智能的自我改进与监管挑战

递归进化&#xff1a;人工智能的自我改进与监管挑战 文章目录 递归进化&#xff1a;人工智能的自我改进与监管挑战1、自我改进型人工智能的崛起2、人工智能如何挑战人类监管&#xff1f;3、确保人工智能受控的策略4、人类在人工智能发展中的角色5、平衡自主性与控制力6、总结与…...

【OSG学习笔记】Day 18: 碰撞检测与物理交互

物理引擎&#xff08;Physics Engine&#xff09; 物理引擎 是一种通过计算机模拟物理规律&#xff08;如力学、碰撞、重力、流体动力学等&#xff09;的软件工具或库。 它的核心目标是在虚拟环境中逼真地模拟物体的运动和交互&#xff0c;广泛应用于 游戏开发、动画制作、虚…...

Spring Boot 实现流式响应(兼容 2.7.x)

在实际开发中&#xff0c;我们可能会遇到一些流式数据处理的场景&#xff0c;比如接收来自上游接口的 Server-Sent Events&#xff08;SSE&#xff09; 或 流式 JSON 内容&#xff0c;并将其原样中转给前端页面或客户端。这种情况下&#xff0c;传统的 RestTemplate 缓存机制会…...

通过Wrangler CLI在worker中创建数据库和表

官方使用文档&#xff1a;Getting started Cloudflare D1 docs 创建数据库 在命令行中执行完成之后&#xff0c;会在本地和远程创建数据库&#xff1a; npx wranglerlatest d1 create prod-d1-tutorial 在cf中就可以看到数据库&#xff1a; 现在&#xff0c;您的Cloudfla…...

2025 后端自学UNIAPP【项目实战:旅游项目】6、我的收藏页面

代码框架视图 1、先添加一个获取收藏景点的列表请求 【在文件my_api.js文件中添加】 // 引入公共的请求封装 import http from ./my_http.js// 登录接口&#xff08;适配服务端返回 Token&#xff09; export const login async (code, avatar) > {const res await http…...

工业自动化时代的精准装配革新:迁移科技3D视觉系统如何重塑机器人定位装配

AI3D视觉的工业赋能者 迁移科技成立于2017年&#xff0c;作为行业领先的3D工业相机及视觉系统供应商&#xff0c;累计完成数亿元融资。其核心技术覆盖硬件设计、算法优化及软件集成&#xff0c;通过稳定、易用、高回报的AI3D视觉系统&#xff0c;为汽车、新能源、金属制造等行…...

学习STC51单片机32(芯片为STC89C52RCRC)OLED显示屏2

每日一言 今天的每一份坚持&#xff0c;都是在为未来积攒底气。 案例&#xff1a;OLED显示一个A 这边观察到一个点&#xff0c;怎么雪花了就是都是乱七八糟的占满了屏幕。。 解释 &#xff1a; 如果代码里信号切换太快&#xff08;比如 SDA 刚变&#xff0c;SCL 立刻变&#…...

算法笔记2

1.字符串拼接最好用StringBuilder&#xff0c;不用String 2.创建List<>类型的数组并创建内存 List arr[] new ArrayList[26]; Arrays.setAll(arr, i -> new ArrayList<>()); 3.去掉首尾空格...

听写流程自动化实践,轻量级教育辅助

随着智能教育工具的发展&#xff0c;越来越多的传统学习方式正在被数字化、自动化所优化。听写作为语文、英语等学科中重要的基础训练形式&#xff0c;也迎来了更高效的解决方案。 这是一款轻量但功能强大的听写辅助工具。它是基于本地词库与可选在线语音引擎构建&#xff0c;…...