网站后台可以做两个管理系统么/新网站如何快速收录
文章目录
- 复现
- 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游戏源码分享-像素小鸟游戏(类似深海潜艇) 点击屏幕控制小鸟的飞行高度 整个小游戏就用JS完成 项目地址:https://download.csdn.net/download/Highning0007/88483228 <!DOCTYPE HTML> <html><head><meta http-equiv…...

Vue 3 响应式对象:ref 和 reactive 的使用和区别
🎉🎉欢迎来到我的CSDN主页!🎉🎉 🏅我是尘缘,一个在CSDN分享笔记的博主。📚📚 👉点击这里,就可以查看我的主页啦!👇&#x…...

H5游戏源码分享-密室逃脱小游戏(考验反应能力)
H5游戏源码分享-密室逃脱小游戏(考验反应能力) 预判安全位置,这个需要快速的反应能力 源码 <!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: <body><div id "content"><div id"top"><div id "name">XAiot2302班点名器</div></div><div id "center"><div id "word">你准备好了吗?</di…...

css:button实现el-radio效果
先看最终效果: 思路: 一、 首先准备好按钮内容:const a [one,two,three] 将按钮循环展示出来,并设置一些样式,将按钮背景透明: <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,进入命令操作窗口 生成本地git仓库秘钥: 1、填写自己邮箱 2、一直回车 ssh-keygen -t rsa -C “xxxxxqq.com”3、使用cat查看生成的秘钥,粘贴并设置到gitee上 cat ~/.ssh/id_r…...

【java学习—十】TreeSet集合(5)
文章目录 1. TreeSet1.1. 自然排序1.2. 定制排序 1. TreeSet TreeSet 是 SortedSet 接口的实现类, TreeSet 可以确保集合元素处于排序状态。 TreeSet 支持两种排序方法:自然排序和定制排序。默认情况下, TreeSet 采用自然排序。 1.1.…...

JMeter的使用,傻瓜式学习【上】
目录 前言 1、JMeter元件及基本使用作用域(简述) 1.1、基本元件 1.2、作用域的原则 1.3、元件执行顺序 3、JMeter三个重要组件 3.1、线程组 案例: 3.2、HTTP请求 3.3、查看结果树 响应体中,中文乱码解决方案࿱…...

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

WLAN的组网架构和工作原理
目录 WLAN的组网架构 FAT AP架构 AC FIT AP架构 敏捷分布式AP 下一代园区网络:智简园区(大中型园区网络) WLAN工作原理 WLAN工作流程 1.AP上线 (1)AP获取IP地址; (2)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来分配内存,但C还有一种更好的方法:new和delete。下面以动态…...

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

【机器学习】loss损失讨论
大纲 验证集loss上升,准确率也上升(即将overfitting?)训练集loss一定为要为0吗 Q1. 验证集loss上升,准确率也上升 随着置信度的增加,一小部分点的预测结果是错误的(log lik 给出了指数级的惩…...

LeetCode 779. 第K个语法符号【递归,找规律,位运算】中等
本文属于「征服LeetCode」系列文章之一,这一系列正式开始于2021/08/12。由于LeetCode上部分题目有锁,本系列将至少持续到刷完所有无锁题之日为止;由于LeetCode还在不断地创建新题,本系列的终止日期可能是永远。在这一系列刷题文章…...

java try throw exception finally 遇上 return break continue造成异常丢失
如下所示,是一个java笔试题,考察的是抛出异常之后,程序运行结果,但是这里抛出异常,并没有捕获异常,而是通过finally来进行了流程控制处理。 package com.xxx.test;public class ExceptionFlow {public sta…...

设计模式——装饰器模式(Decorator Pattern)+ Spring相关源码
文章目录 一、装饰器模式的定义二、个人理解举个抽象的例(可能并不是很贴切) 三、例子1、菜鸟教程例子1.1、定义对象1.2、定义装饰器 3、JDK源码 ——包装类4、JDK源码 —— IO、OutputStreamWriter5、Spring源码 —— BeanWrapperImpl5、SpringMVC源码 …...

MATLAB R2018b详细安装教程(附资源)
云盘链接: pan.baidu.com/s/1SsfNtlG96umfXdhaEOPT1g 提取码:1024 大小:11.77GB 安装环境:Win10/Win8/Win7 安装步骤: 1.鼠标右击【R2018b(64bit)】压缩包选择【解压到 R2018b(64bit)】 2.打开解压后的文件夹中的…...

GEE错误——影像加载过程中出现的图层无法展示的解决方案
问题: // I dont know if some standard value exists for the radius, in the same, I will assume that some software would prefer to use square shape, but circle makes more sense to me. // pixels is noice if you want to zoom in and out to visualize…...

读图数据库实战笔记03_遍历
1. Gremlin Server只将数据存储在内存中 1.1. 如果停止Gremlin Server,将丢失数据库里的所有数据 2. 概念 2.1. 遍历(动词) 2.1.1. 当在图数据库中导航时,从顶点到边或从边到顶点的移动过程 2.1.2. 类似于在关系数据库中的查…...

QT如何检测当前系统是是Windows还是Uninx或Mac?以及是哪个版本?
简介 通过Qt获取当前系统及版本号,需要用到QSysInfo。 QSysInfo类提供有关系统的信息。 WordSize指定了应用程序编译所在的平台的指针大小。 ByteOrder指定了平台是大端序还是小端序。 某些常量仅在特定的平台上定义。您可以使用预处理器符号Q_OS_WIN和Q_OS_MACOS来…...

Maven配置阿里云中央仓库settings.xml
Maven配置阿里云settings.xml 前言一、阿里云settings.xml二、使用步骤1.任意目录创建settings.xml2.使用阿里云仓库 总结 前言 国内网络从maven中央仓库下载文件通常是比较慢的,所以建议配置阿里云代理镜像以提高jar包下载速度,IDEA中我们需要配置自己…...

由浅入深C系列八:如何高效使用和处理Json格式的数据
如何高效使用和处理JSON格式的数据 问题引入关于CJSON示例代码头文件引用处理数据 问题引入 最近的项目在用c处理后台的数据时,因为好多外部接口都在使用Json格式作为返回的数据结构和数据描述,如何在c中高效使用和处理Json格式的数据就成为了必须要解决…...