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++使用最大池化作为对称函数,以确保特征的排列不变性。这意味着无论点的顺序如何变化,提取的特征都是相同的。
- 输出层
在网络的最后,通常会添加一个或多个全连接层(也称为密集层),以对提取的特征进行分类或分割任务。这些层将特征向量映射到最终的分类标签或每个点的分割标签
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表单实现,因此需要给具体控件套一层form表单 新建组件input-required.vue,内容如下 <template><div><el-form ref"formRef" :model"form" :rules"formRules" label-…...
django开发中html继承模板样式
存在问题: django开发中,不同页面样式相同,如何共用一套母版,避免每个页面都重复写样式; 解决方案: 添加一个母版,如“layout.html”,在需要继承的位置添加{% block content %}{% e…...

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

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

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是一个开源项目,收集了围绕GraphRAG的相关资源,目前正在快速收集大家的投稿。深…...

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

Java基于 SpringBoot+Vue的口腔管理平台(附源码+lw+部署)
博主介绍:✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇…...

11.26深度学习_神经网络-数据处理
一、深度学习概述 1. 什么是深度学习 人工智能、机器学习和深度学习之间的关系: 机器学习是实现人工智能的一种途径,深度学习是机器学习的子集,区别如下: 传统机器学习算法依赖人工设计特征、提取特征,而深…...

【人工智能】Python常用库-TensorFlow常用方法教程
TensorFlow 是一个广泛应用的开源深度学习框架,支持多种机器学习任务,如深度学习、神经网络、强化学习等。以下是 TensorFlow 的详细教程,涵盖基础使用方法和示例代码。 1. 安装与导入 安装 TensorFlow: pip install tensorflow…...

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

23省赛区块链应用与维护(房屋租凭【下】)
23省赛区块链应用与维护(房屋租凭) 背景描述 随着异地务工人员的增多,房屋租赁成为一个广阔市场。目前,现有技术中的房屋租赁是由房主发布租赁信息,租赁信息发布在房屋中介或租赁软件,租客获取租赁信息后,现场看房,并签订纸质的房屋租赁合同,房屋租赁费用通过中介或…...
数据结构-图-领接表存储
一、了解图的领接表存储 1、定义与结构 定义:邻接表是图的一种链式存储结构,它通过链表将每个顶点与其相邻的顶点连接起来。 结构: 顶点表:通常使用一个数组来存储图的顶点信息,数组的每个元素对应一个顶点ÿ…...

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

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

Qt C++(一) 5.12安装+运行第一个项目
安装 1. Download Qt OSS: Get Qt Online Installer 在该链接中下载qt在线安装程序 2. 安装时候,注意关键一步,archive是存档的意思,可以找到旧的版本, 比如5.12 3. 注意组件没必要全选,否则需要安装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编译前端的项目 前言项目结构根项目(parent-project)的 settings.gradle.kts后端项目(backend)的 build.gradle.kts前端项目(frontend)的 build.gradle.kts打包bootJar 前言 最近的项目都是使用…...

网络爬虫——常见问题与调试技巧
在开发网络爬虫的过程中,开发者常常会遇到各种问题,例如网页加载失败、数据提取错误、反爬机制限制等。以下内容将结合实际经验和技术方案,详细介绍解决常见错误的方法,以及如何高效调试和优化爬虫代码。 1. 爬虫过程中常见的错误…...
HTML 语义化
目录 HTML 语义化HTML5 新特性HTML 语义化的好处语义化标签的使用场景最佳实践 HTML 语义化 HTML5 新特性 标准答案: 语义化标签: <header>:页头<nav>:导航<main>:主要内容<article>&#x…...

微软PowerBI考试 PL300-选择 Power BI 模型框架【附练习数据】
微软PowerBI考试 PL300-选择 Power BI 模型框架 20 多年来,Microsoft 持续对企业商业智能 (BI) 进行大量投资。 Azure Analysis Services (AAS) 和 SQL Server Analysis Services (SSAS) 基于无数企业使用的成熟的 BI 数据建模技术。 同样的技术也是 Power BI 数据…...

JavaScript 中的 ES|QL:利用 Apache Arrow 工具
作者:来自 Elastic Jeffrey Rengifo 学习如何将 ES|QL 与 JavaScript 的 Apache Arrow 客户端工具一起使用。 想获得 Elastic 认证吗?了解下一期 Elasticsearch Engineer 培训的时间吧! Elasticsearch 拥有众多新功能,助你为自己…...

深入理解JavaScript设计模式之单例模式
目录 什么是单例模式为什么需要单例模式常见应用场景包括 单例模式实现透明单例模式实现不透明单例模式用代理实现单例模式javaScript中的单例模式使用命名空间使用闭包封装私有变量 惰性单例通用的惰性单例 结语 什么是单例模式 单例模式(Singleton Pattern&#…...

376. Wiggle Subsequence
376. Wiggle Subsequence 代码 class Solution { public:int wiggleMaxLength(vector<int>& nums) {int n nums.size();int res 1;int prediff 0;int curdiff 0;for(int i 0;i < n-1;i){curdiff nums[i1] - nums[i];if( (prediff > 0 && curdif…...

【项目实战】通过多模态+LangGraph实现PPT生成助手
PPT自动生成系统 基于LangGraph的PPT自动生成系统,可以将Markdown文档自动转换为PPT演示文稿。 功能特点 Markdown解析:自动解析Markdown文档结构PPT模板分析:分析PPT模板的布局和风格智能布局决策:匹配内容与合适的PPT布局自动…...

WordPress插件:AI多语言写作与智能配图、免费AI模型、SEO文章生成
厌倦手动写WordPress文章?AI自动生成,效率提升10倍! 支持多语言、自动配图、定时发布,让内容创作更轻松! AI内容生成 → 不想每天写文章?AI一键生成高质量内容!多语言支持 → 跨境电商必备&am…...
JS设计模式(4):观察者模式
JS设计模式(4):观察者模式 一、引入 在开发中,我们经常会遇到这样的场景:一个对象的状态变化需要自动通知其他对象,比如: 电商平台中,商品库存变化时需要通知所有订阅该商品的用户;新闻网站中࿰…...

解读《网络安全法》最新修订,把握网络安全新趋势
《网络安全法》自2017年施行以来,在维护网络空间安全方面发挥了重要作用。但随着网络环境的日益复杂,网络攻击、数据泄露等事件频发,现行法律已难以完全适应新的风险挑战。 2025年3月28日,国家网信办会同相关部门起草了《网络安全…...

AxureRP-Pro-Beta-Setup_114413.exe (6.0.0.2887)
Name:3ddown Serial:FiCGEezgdGoYILo8U/2MFyCWj0jZoJc/sziRRj2/ENvtEq7w1RH97k5MWctqVHA 注册用户名:Axure 序列号:8t3Yk/zu4cX601/seX6wBZgYRVj/lkC2PICCdO4sFKCCLx8mcCnccoylVb40lP...