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

PointNet++复现、论文和代码研读

文章目录

  • 复现
    • 1.创建虚拟环境并进入
    • 2.安装pytorch
    • 3.分割模型的训练和测试
      • 3.1.下载数据处理数据
      • 3.2.训练分割模型
      • 3.3分割模型的测试
    • 4.分类模型的训练和测试
  • 论文研读
  • 制作自己的数据集流程
    • 分割模型数据集准备

复现

https://github.com/yanx27/Pointnet_Pointnet2_pytorch

1.创建虚拟环境并进入

conda create -n pointnet++ python=3.7
conda activate pointnet++

2.安装pytorch

查找对应版本,这里cuda是10.1,服务器上只有10.0,10.2和11.1,但我在官网上(https://pytorch.org/get-started/previous-versions/)发现10.2与pytorch1.6也匹配,先不安装cuda10.1试一试。
在这里插入图片描述

# CUDA 10.2
conda install pytorch==1.6.0 torchvision==0.7.0 cudatoolkit=10.2 -c pytorc

报错:
在这里插入图片描述
随后出现以下内容所以没有管。
在这里插入图片描述

3.分割模型的训练和测试

3.1.下载数据处理数据

将Stanford3dDataset_v1.2_Aligned_Version数据集放在data目录下(代码里改一下数据集路径),运行程序生成npy文件。
cd data_utils
python collect_indoor3d_data.py
在这里插入图片描述

3.2.训练分割模型

python train_semseg.py
参数使用默认值,改了一下log_dir
在这里插入图片描述
报错:在这里插入图片描述
按理说不应该报错,名字都是对的,后面弹出一个窗口,说S3DISDataLoader.py内容较新,选择比较还是覆盖,点击覆盖后问题解决。

报错:
没有tqdm
pip install tqdm

报错:
在这里插入图片描述

room_data = np.load(room_path, allow_pickle=True)

在这里插入图片描述
感觉是不是npy生成的有问题,不然为什么前面的npy可以而这个npy报错?把pointnet生成的npy复制到该目录下。但对比了两个工程处理数据的py文件,感觉没有什么区别。但这样操作后程序跑起来了:
在这里插入图片描述
在这里插入图片描述

3.3分割模型的测试

在这里插入图片描述
上面两个是本来就有的,里面有pointnet和pointnet++的预训练模型,可直接用来测试。用Github推荐的MeshLab看可视化效果,左侧真实值,右侧预测值。
在这里插入图片描述

4.分类模型的训练和测试

github上给的不同模型的效果对比:
在这里插入图片描述
_SSG不知道是什么

论文研读

https://proceedings.neurips.cc/paper_files/paper/2017/file/d8bf84be3800d12f74d8b05e9b89836f-Paper.pdf

PointNet++网络结构的搭建借鉴了CNN的思想,通过层次结构应用PointNet(SA层)来提取点云特征,同时在特征提取模块中引入了特殊结构(MSG、MRG)来解决点云密度分布不均匀的问题。
在这里插入图片描述

图中虚线圆圈类似CNN中的卷积,将圆圈内所有点提取为一个特征即为局部特征提取,所以输入点经过SA层后将会变成一个个特征点,最终点云经过一层层SA层抽象为点云的特征。可以看到SA层与CNN中的卷积层非常相似,都是选取中心点,由其领域中的所有点得到特征。但由于点云的性质导致无法直接应用3D CNN。PointNet首先对点云进行标准化(T-Net)再应用MLP,最大池化层等结构来提取整个点云的信息,最终会导致局部特征的丢失。

如何选择局部区域?
在二维图像中,局部区域即每个卷积核,卷积中心就是一个个的像素点,它们排列有序,使用固定大小的卷积核就能有效的覆盖整幅图像。但在点云中,各点之间的距离是不相等的,因此局部区域的中心的选择较为重要,它决定了最终能否有效覆盖整个点云。而局部区域的大小,即邻域的选择也要考虑到点云分布不均的特点。

如何将局部区域中的点信息提取为一个特征点?
在CNN中,特征提取就是简单的卷积操作,对卷积中心及其邻域应用卷积核相乘就能得到一个结果,即局部区域的特征。
PointNet++中使用PointNet来实现特征提取,即对每个局部区域应用小型的PointNet来得到局部区域的信息。

PointNet++定义了一个SA层解决以上两个问题。
单个SA层由采样层、分组层以及PointNet层三个模块组成。采样层用于从输入集合中选出每个局部区域的中心点,分组层用于构建局部区域点集,通过这两层完成局部区域的划分。PointNet层使用小型PointNet网络用于提取局部区域的特征,这一层用于聚合局部区域的特征。

采样层——采样层使用了最远点采样(FPS,farthest point sampling)来进行局部区域中心的选择,这种方式相比随机采样能够更好的覆盖整个输入点集。假设点云中有N个点,用向量d表示每个点的坐标,向量C表示点的特征。由PointNet++的网络结构图可以看出,输入为N*(d+C)的点云,经过采样层,由最远点采样选出了K个局部中心,用于分组层进行区域划分。

分组层——在划分局部区域时使用了球型邻域,将局部区域中心点周围球型邻域的点分为一组,用于后续的特征提取。分组层根据采样层选出的中心点将点云分为了K个不同大小的局部区域,最终输出N1K(d+C),N1为每个局部邻域中点的数量。

邻域大小的选择对特征学习较为重要,在CNN中,使用较小的卷积核一般能获得更好的性能,但并不同样适用于点云。点云的分布不均匀,有些地方稀疏,若使用较小的邻域,那么该局部区域中的点过少会导致PointNet层无法有效的学习到局部信息。为了解决这一问题,PointNet++设计了两种分组策略:多尺度分组与多分辨率分组,如下图:
在这里插入图片描述

多尺度分组(MSG,Multi-scale grouping)即采用不同尺寸的邻域,同时提取特征,并将这些不同尺度的特征组合起来作为局部区域的整体特征。由于在网络浅层时输入点数量较多,因此采样得到的中心点较多,使用MSG方法就意味着要在如此多的邻域中应用PointNet层提取特征,计算量太大。

多分辨率分组(MRG,Multi-resolution grouping)提取到的特征向量由两部分组成,左边的部分(s1)是由上层的3个中心点提取得到的,而每个中心点都是由上上层相应的领域中的点得到的,同时将这些点视为一个大的局部空间,并提取特征(s2)。

当点云的局部区域较为稀疏时,经过一个SA层得到的中心点就更少了,此时s1就不如s2更能表征点云中该区域的特征。当局部区域较为密集时,经过两层抽象得到的特征s1包含的信息更多。

简单概括一下:
MSG是对同一层的点,采用一组不同大小的邻域同时提取特征并组合为整体特征。MRG是分别对不同层次的点进行特征提取,并组合为整体特征。可以看出该方法相比MSG计算效率要更高。

PointNet层——这层对每个局部区域应用PointNet进行特征的提取,最终输出一个个新的特征点,对应输入邻域的局部特征。输入为K组邻域点,使用PointNet对每个局部区域进行特征提取,得到一个长度为C1的特征向量。最终输出为N1*(d+C1)的形式,即N1个特征点组成的点集,此时点的数量相比输入下降了,但每个点的特征却包含了更多的信息。
参考:https://blog.csdn.net/CirnoZhang/article/details/109085303

效果与PointNet进行对比:
在这里插入图片描述
https://blog.csdn.net/toCVer/article/details/126265782
https://blog.csdn.net/CirnoZhang/article/details/109085303(每周学习总结 pointnet++代码解读)

制作自己的数据集流程

分割模型数据集准备

首先看原来的数据集内容:
S3DIS数据集多用于室内点云的语义分割和实例分割(每个柱子桌椅等都是分开标注的)

6个区域:【目录名称】Area1、Area2、Area3、Area4、Area5、Area6
在这里插入图片描述
13个语义元素: 【annotation的类别】天花板ceiling、地板floor、墙壁wall、梁beam、柱column、窗window、门door、桌子table、椅子chair、沙发sofa、书柜bookcase、板board 、混杂元素(其他)clutter

11种场景:【单文件的名称】办公室、会议室、走廊、礼堂、开放空间、大堂、休息室、储藏室、复印室、储藏室和卫生间 office, conference room, hallway, auditorium, open space, lobby, lounge, pantry, copy room, storage and WC

每个区域有不同的房间,如会议室、走廊、办公室、厕所、存储间等。每一类下面有目录Annotations和一个对应名字的txt文件,如conferenceRoom_1.txt。(这里面是xyzrgb)
在这里插入图片描述
Annotations目录下每一类(每类的每个实例)有以类命名的txt文件,里面是xyzrgb。
在这里插入图片描述
每个物体用txt文件存储,每个txt存储了物体坐标和颜色信息。特别要注意的是,该txt文件中没有存储标签信息,其标签信息是用文件名称来进行区分。例如chair txt文件中的数据都是其中一个椅子的点云数据。因此,在正式处理之前,需要进行处理,为每个点补上标签。
上述这个过程的实现是通过PointNet++中的collect_indoor3d_data.py实现的。该脚本文件为每个点生成了标签,并转换为npy文件,加速文件的读取过程。运行collect_indoor3d_data.py处理数据得到:
在这里插入图片描述

数据集的整体流程:
1.通过collect_indor3d将数据进行转换,为每个点分配标签
2.初始化:读取271个小房间的信息,获取采样点信息,由于这个数据集比较大,不利于训练,PointNet++训练之前会将它进行预处理。对每个房间点的数量对其进行随机采样,随机划分划分为1mx1m的block,然后再放入网络进行训练。
3.对输入房间进行随机采样并计算法向量,进行相应归一化操作。

数据集介绍
https://blog.csdn.net/weixin_47142735/article/details/121605323

相关文章:

PointNet++复现、论文和代码研读

文章目录 复现1.创建虚拟环境并进入2.安装pytorch3.分割模型的训练和测试3.1.下载数据处理数据3.2.训练分割模型3.3分割模型的测试 4.分类模型的训练和测试 论文研读制作自己的数据集流程分割模型数据集准备 复现 https://github.com/yanx27/Pointnet_Pointnet2_pytorch 1.创…...

轨迹规划 | 图解路径跟踪PID算法(附ROS C++/Python/Matlab仿真)

目录 0 专栏介绍1 PID控制基本原理2 基于PID的路径跟踪3 仿真实现3.1 ROS C实现3.2 Python实现3.3 Matlab实现 0 专栏介绍 🔥附C/Python/Matlab全套代码🔥课程设计、毕业设计、创新竞赛必备!详细介绍全局规划(图搜索、采样法、智能算法等)&a…...

吴恩达《机器学习》1-3:监督学习

一、监督学习 例如房屋价格的数据集。在监督学习中,我们将已知的房价作为"正确答案",并将这些价格与房屋的特征数据一起提供给学习算法。学习算法使用这些已知答案的数据来学习模式和关系,以便在未知情况下预测其他房屋的价格。这就…...

Flutter PopupMenuButton下拉菜单

下拉菜单是移动应用交互中一种常见的交互方式,可以使用下拉列表来展示多个内容标签,实现页面引导的作用。在Flutter开发中,实现下拉弹框主要有两种方式,一种是继承Dialog组件使用自定义布局的方式实现,另一种则是使用官方的PopupMenuButton组件进行实现。 如果没有特殊的…...

国家数据局正式揭牌,数据专业融合型人才迎来发展良机【文末送书五本】

国家数据局正式揭牌,数据专业融合型人才迎来发展良机 国家数据局正式揭牌,数据专业融合型人才迎来发展良机 摘要书籍简介数据要素安全流通Python数据挖掘:入门、进阶与实用案例分析数据保护:工作负载的可恢复性Data Mesh权威指南分…...

H5游戏源码分享-像素小鸟游戏(类似深海潜艇)

H5游戏源码分享-像素小鸟游戏&#xff08;类似深海潜艇&#xff09; 点击屏幕控制小鸟的飞行高度 整个小游戏就用JS完成 项目地址&#xff1a;https://download.csdn.net/download/Highning0007/88483228 <!DOCTYPE HTML> <html><head><meta http-equiv…...

Vue 3 响应式对象:ref 和 reactive 的使用和区别

&#x1f389;&#x1f389;欢迎来到我的CSDN主页&#xff01;&#x1f389;&#x1f389; &#x1f3c5;我是尘缘&#xff0c;一个在CSDN分享笔记的博主。&#x1f4da;&#x1f4da; &#x1f449;点击这里&#xff0c;就可以查看我的主页啦&#xff01;&#x1f447;&#x…...

H5游戏源码分享-密室逃脱小游戏(考验反应能力)

H5游戏源码分享-密室逃脱小游戏&#xff08;考验反应能力&#xff09; 预判安全位置&#xff0c;这个需要快速的反应能力 源码 <!DOCTYPE html> <html> <head> <meta http-equiv"Content-Type" content"text/html; charsetutf-8" /&…...

【LeetCode刷题-哈希】--706.设计哈希映射

706.设计哈希映射 class MyHashMap {private class Pair{private int key;private int value;public Pair(int key ,int value){this.key key;this.value value;}public int getKey(){return key;}public int getValue(){return value;}public void setValue(int value){this…...

前端 : 用HTML ,CSS ,JS 做一个点名器

1.HTML&#xff1a; <body><div id "content"><div id"top"><div id "name">XAiot2302班点名器</div></div><div id "center"><div id "word">你准备好了吗?</di…...

css:button实现el-radio效果

先看最终效果&#xff1a; ​​​ 思路&#xff1a; 一、 首先准备好按钮内容&#xff1a;const a [one,two,three] 将按钮循环展示出来&#xff0c;并设置一些样式&#xff0c;将按钮背景透明&#xff1a; <button v-for"(item,index) in a" :key"in…...

算法工程师-机器学习-数据科学家面试准备4-ML系统设计

https://github.com/LongxingTan/Machine-learning-interview 算法工程师-机器学习-数据科学家面试准备1- 概述 外企和国外公司、春招、秋招算法工程师-机器学习-数据科学家面试准备2- Leetcode 300算法工程师-机器学习-数据科学家面试准备3-系统设计算法工程师-机器学习-数据…...

git重装后如何连接以前项目

git重装后如何连接以前项目 1、配置秘钥 点击 Git Bash Here&#xff0c;进入命令操作窗口 生成本地git仓库秘钥&#xff1a; 1、填写自己邮箱 2、一直回车 ssh-keygen -t rsa -C “xxxxxqq.com”3、使用cat查看生成的秘钥&#xff0c;粘贴并设置到gitee上 cat ~/.ssh/id_r…...

【java学习—十】TreeSet集合(5)

文章目录 1. TreeSet1.1. 自然排序1.2. 定制排序 1. TreeSet TreeSet 是 SortedSet 接口的实现类&#xff0c; TreeSet 可以确保集合元素处于排序状态。     TreeSet 支持两种排序方法&#xff1a;自然排序和定制排序。默认情况下&#xff0c; TreeSet 采用自然排序。 1.1.…...

JMeter的使用,傻瓜式学习【上】

目录 前言 1、JMeter元件及基本使用作用域&#xff08;简述&#xff09; 1.1、基本元件 1.2、作用域的原则 1.3、元件执行顺序 3、JMeter三个重要组件 3.1、线程组 案例&#xff1a; 3.2、HTTP请求 3.3、查看结果树 响应体中&#xff0c;中文乱码解决方案&#xff1…...

主定理(一般式)

主定理&#xff08;Master Theorem&#xff09;是用于分析递归算法时间复杂度的一个重要工具。它适用于形式化定义的一类递归关系&#xff0c;通常采用分治策略解决问题的情况。 目录 主定理简化版的局限主定理一般形式情况1&#xff1a; n l o g b a n^{log_{b}{a}} nlogb​a …...

WLAN的组网架构和工作原理

目录 WLAN的组网架构 FAT AP架构 AC FIT AP架构 敏捷分布式AP 下一代园区网络&#xff1a;智简园区&#xff08;大中型园区网络&#xff09; WLAN工作原理 WLAN工作流程 1.AP上线 &#xff08;1&#xff09;AP获取IP地址&#xff1b; &#xff08;2&#xff09;AP发…...

使用OBS Browser+访问华为云OBS存储【Windows】

背景 项目中使用华为云 S3 存储,java 代码中通过华为云 OBS 提供的esdk-obs-java 来访问文件。 但是,通过 JAVA SDK 方式不太方便运维,所以我们需要一款可视化的客户端软件。 华为云 OBS 自身也提供了一款客户端软件,名为 OBS Browser+。 OBS Browser+简介 OBS Browse…...

C++总结(3):类的动态内存分配、异常、类型转换运算符

文章目录 1 类的动态内存分配1.1 C动态内存分配1.2 拷贝构造函数1.3 赋值运算符(operator)重载 2 异常3 类型转换运算符 1 类的动态内存分配 1.1 C动态内存分配 在C/C中都可以使用malloc/free来分配内存&#xff0c;但C还有一种更好的方法&#xff1a;new和delete。下面以动态…...

折半搜索(meet in the middle)

介绍 折半搜索&#xff0c;又称 meet in the middle \text{meet in the middle} meet in the middle&#xff0c;指将整个搜索过程分为两部分&#xff0c;并对两部分分别进行搜索&#xff0c;最后得到两个答案序列&#xff0c;将这两个答案序列进行合并&#xff0c;即可得到最…...

KubeSphere 容器平台高可用:环境搭建与可视化操作指南

Linux_k8s篇 欢迎来到Linux的世界&#xff0c;看笔记好好学多敲多打&#xff0c;每个人都是大神&#xff01; 题目&#xff1a;KubeSphere 容器平台高可用&#xff1a;环境搭建与可视化操作指南 版本号: 1.0,0 作者: 老王要学习 日期: 2025.06.05 适用环境: Ubuntu22 文档说…...

新能源汽车智慧充电桩管理方案:新能源充电桩散热问题及消防安全监管方案

随着新能源汽车的快速普及&#xff0c;充电桩作为核心配套设施&#xff0c;其安全性与可靠性备受关注。然而&#xff0c;在高温、高负荷运行环境下&#xff0c;充电桩的散热问题与消防安全隐患日益凸显&#xff0c;成为制约行业发展的关键瓶颈。 如何通过智慧化管理手段优化散…...

如何理解 IP 数据报中的 TTL?

目录 前言理解 前言 面试灵魂一问&#xff1a;说说对 IP 数据报中 TTL 的理解&#xff1f;我们都知道&#xff0c;IP 数据报由首部和数据两部分组成&#xff0c;首部又分为两部分&#xff1a;固定部分和可变部分&#xff0c;共占 20 字节&#xff0c;而即将讨论的 TTL 就位于首…...

【7色560页】职场可视化逻辑图高级数据分析PPT模版

7种色调职场工作汇报PPT&#xff0c;橙蓝、黑红、红蓝、蓝橙灰、浅蓝、浅绿、深蓝七种色调模版 【7色560页】职场可视化逻辑图高级数据分析PPT模版&#xff1a;职场可视化逻辑图分析PPT模版https://pan.quark.cn/s/78aeabbd92d1...

A2A JS SDK 完整教程:快速入门指南

目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库&#xff…...

在Mathematica中实现Newton-Raphson迭代的收敛时间算法(一般三次多项式)

考察一般的三次多项式&#xff0c;以r为参数&#xff1a; p[z_, r_] : z^3 (r - 1) z - r; roots[r_] : z /. Solve[p[z, r] 0, z]&#xff1b; 此多项式的根为&#xff1a; 尽管看起来这个多项式是特殊的&#xff0c;其实一般的三次多项式都是可以通过线性变换化为这个形式…...

LabVIEW双光子成像系统技术

双光子成像技术的核心特性 双光子成像通过双低能量光子协同激发机制&#xff0c;展现出显著的技术优势&#xff1a; 深层组织穿透能力&#xff1a;适用于活体组织深度成像 高分辨率观测性能&#xff1a;满足微观结构的精细研究需求 低光毒性特点&#xff1a;减少对样本的损伤…...

从物理机到云原生:全面解析计算虚拟化技术的演进与应用

前言&#xff1a;我的虚拟化技术探索之旅 我最早接触"虚拟机"的概念是从Java开始的——JVM&#xff08;Java Virtual Machine&#xff09;让"一次编写&#xff0c;到处运行"成为可能。这个软件层面的虚拟化让我着迷&#xff0c;但直到后来接触VMware和Doc…...

热门Chrome扩展程序存在明文传输风险,用户隐私安全受威胁

赛门铁克威胁猎手团队最新报告披露&#xff0c;数款拥有数百万活跃用户的Chrome扩展程序正在通过未加密的HTTP连接静默泄露用户敏感数据&#xff0c;严重威胁用户隐私安全。 知名扩展程序存在明文传输风险 尽管宣称提供安全浏览、数据分析或便捷界面等功能&#xff0c;但SEMR…...

raid存储技术

1. 存储技术概念 数据存储架构是对数据存储方式、存储设备及相关组件的组织和规划&#xff0c;涵盖存储系统的布局、数据存储策略等&#xff0c;它明确数据如何存储、管理与访问&#xff0c;为数据的安全、高效使用提供支撑。 由计算机中一组存储设备、控制部件和管理信息调度的…...