当前位置: 首页 > 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. 爬虫过程中常见的错误…...

Chapter03-Authentication vulnerabilities

文章目录 1. 身份验证简介1.1 What is authentication1.2 difference between authentication and authorization1.3 身份验证机制失效的原因1.4 身份验证机制失效的影响 2. 基于登录功能的漏洞2.1 密码爆破2.2 用户名枚举2.3 有缺陷的暴力破解防护2.3.1 如果用户登录尝试失败次…...

大数据学习栈记——Neo4j的安装与使用

本文介绍图数据库Neofj的安装与使用&#xff0c;操作系统&#xff1a;Ubuntu24.04&#xff0c;Neofj版本&#xff1a;2025.04.0。 Apt安装 Neofj可以进行官网安装&#xff1a;Neo4j Deployment Center - Graph Database & Analytics 我这里安装是添加软件源的方法 最新版…...

黑马Mybatis

Mybatis 表现层&#xff1a;页面展示 业务层&#xff1a;逻辑处理 持久层&#xff1a;持久数据化保存 在这里插入图片描述 Mybatis快速入门 ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/6501c2109c4442118ceb6014725e48e4.png //logback.xml <?xml ver…...

ssc377d修改flash分区大小

1、flash的分区默认分配16M、 / # df -h Filesystem Size Used Available Use% Mounted on /dev/root 1.9M 1.9M 0 100% / /dev/mtdblock4 3.0M...

SpringBoot+uniapp 的 Champion 俱乐部微信小程序设计与实现,论文初版实现

摘要 本论文旨在设计并实现基于 SpringBoot 和 uniapp 的 Champion 俱乐部微信小程序&#xff0c;以满足俱乐部线上活动推广、会员管理、社交互动等需求。通过 SpringBoot 搭建后端服务&#xff0c;提供稳定高效的数据处理与业务逻辑支持&#xff1b;利用 uniapp 实现跨平台前…...

unix/linux,sudo,其发展历程详细时间线、由来、历史背景

sudo 的诞生和演化,本身就是一部 Unix/Linux 系统管理哲学变迁的微缩史。来,让我们拨开时间的迷雾,一同探寻 sudo 那波澜壮阔(也颇为实用主义)的发展历程。 历史背景:su的时代与困境 ( 20 世纪 70 年代 - 80 年代初) 在 sudo 出现之前,Unix 系统管理员和需要特权操作的…...

3-11单元格区域边界定位(End属性)学习笔记

返回一个Range 对象&#xff0c;只读。该对象代表包含源区域的区域上端下端左端右端的最后一个单元格。等同于按键 End 向上键(End(xlUp))、End向下键(End(xlDown))、End向左键(End(xlToLeft)End向右键(End(xlToRight)) 注意&#xff1a;它移动的位置必须是相连的有内容的单元格…...

Device Mapper 机制

Device Mapper 机制详解 Device Mapper&#xff08;简称 DM&#xff09;是 Linux 内核中的一套通用块设备映射框架&#xff0c;为 LVM、加密磁盘、RAID 等提供底层支持。本文将详细介绍 Device Mapper 的原理、实现、内核配置、常用工具、操作测试流程&#xff0c;并配以详细的…...

基于Java+MySQL实现(GUI)客户管理系统

客户资料管理系统的设计与实现 第一章 需求分析 1.1 需求总体介绍 本项目为了方便维护客户信息为了方便维护客户信息&#xff0c;对客户进行统一管理&#xff0c;可以把所有客户信息录入系统&#xff0c;进行维护和统计功能。可通过文件的方式保存相关录入数据&#xff0c;对…...

【Linux】Linux 系统默认的目录及作用说明

博主介绍&#xff1a;✌全网粉丝23W&#xff0c;CSDN博客专家、Java领域优质创作者&#xff0c;掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域✌ 技术范围&#xff1a;SpringBoot、SpringCloud、Vue、SSM、HTML、Nodejs、Python、MySQL、PostgreSQL、大数据、物…...