pointNet复现、论文和代码研读

news2024/12/23 4:50:53

文章目录

    • 论文复现
    • 论文研读
      • 1.动机
      • 2.模型结构![在这里插入图片描述](https://img-blog.csdnimg.cn/286bc0bfc06846f690adde4979366977.png)
      • 3.实验效果
      • 4.总结
    • 代码研读
      • 模型什么时候保存,保存到哪里?
      • 模型训练的数据集?
      • 为什么是在CPU上运行的?运行的时候有输入gpu号
      • 如何测试模型的语义分割的效果?
      • 如何测试模型的分类效果?

论文复现

https://github.com/charlesq34/pointnet
安装的时候注意tensorflow的版本,代码是1.0.1版本的。python3.7+的版本不支持tensorflow2.0以下的。
cuda的版本是10.0

conda create -n pointnet python=3.6
conda activate pointnet
#pip install  tensorflow==1.14.0 -i  https://pypi.tuna.tsinghua.edu.cn/simple
pip install  tensorflow-gpu==1.14.0 -i  https://pypi.tuna.tsinghua.edu.cn/simple
sudo apt-get install libhdf5-dev
sudo pip install h5py
python train.py

在训练了:
在这里插入图片描述

论文研读

1.动机

点云数据格式不规则,大多数研究者将其住转为3D体素网格或者集合图像,但是渲染数据不必要且造成问题,所以提出一种网络直接利用点云,可以进行部件分割、目标分类、场景理解等。

2.模型结构在这里插入图片描述

分类网络和分割网络。对于分类网络,输入n个点,提取特征然后用最大值池化聚合点的特征,输出是每一类的分数。分割网络将全局特征和局部特征拼接,输出每点的分数。主要有三个模块,最大值池化作为对称函数处理输入的无序数据,全局和局部的拼接结构是将全局点云特征加到每个点云的特征再进行特征提取。对齐网络保证模型的对特定空间转换的不变性。

整体流程:
1、输入为一帧的全部点云数据的集合,表示为一个nx3的2d tensor,其中n代表点云数量,3对应xyz坐标。
2、输入数据先通过和一个T-Net学习到的转换矩阵相乘来对齐,保证了模型的对特定空间转换的不变性。
3、通过多次mlp对各点云数据进行特征提取后,再用一个T-Net对特征进行对齐。
4、在特征的各个维度上执行maxpooling操作来得到最终的全局特征。
5、对分类任务,将全局特征通过mlp来预测最后的分类分数;对分割任务,将全局特征和之前学习到的各点云的局部特征进行串联,再通过mlp得到每个数据点的分类结果。

图中的input transform和feature tansforms是什么?
为了保证输入点云的不变性,作者在进行特征提取前先对点云数据进行对齐操作(input tansform)。对齐操作是通过训练一个小型的网络(T-Net)来得到转换矩阵(3x3),旋转矩阵和输入点云数据相乘实现对齐。feature tansforms也是T-Net获得的64x64的转换矩阵,对特征进行对齐。

该模型一直在做点之间特征的单独提取,除最后一层max pool获取全局信息外,没有将点与其周围的点进行融合,提取局部特征。这一点PointNet++里进行了解决。

3.实验效果

该模型代码里有三个train.py。最外层的是训练室内室外场景的分割 训练模型对三维形状的点云进行分类 ,里面的类别有飞机、汽车等;part_seg目录下的train.py是部件分割,例如桌子会把桌面和桌腿分别分割出来。sem_seg里面的分割是针对室内场景的分割。

https://github.com/nikitakaraevv/pointnet
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
实验数据:
在这里插入图片描述
在这里插入图片描述

4.总结

本文的模型2017年提出,是直接利用3D点云用来分类和分割。对于分割任务,将单个点云的特征和全局的特征拼接再提取特征,涉及到对称函数(max pool)解决无序数据问题、全局和局部特征的拼接以及对齐网络。

参考:
https://zhuanlan.zhihu.com/p/336496973

代码研读

模型什么时候保存,保存到哪里?

现在的epoch是250轮,当训练到10的倍数就将模型保存到Model saved in file: log/model.ckpt。但是目录下没有model.ckpt,倒是有:
在这里插入图片描述
这三个文件分别表示的是什么,在代码哪里对应的?
代码中使用的是tf.train.Saver()类的save(sess,ckpt文件目录),saver()和restore()只保存了session中相关变量对应的值,不涉及模型的结构。Saver的作用是将我们训练好的模型的参数保存下来,以便下一次继续用于训练或测试。Restore是将训练好的参数提取出来。saver.restore()回根据 ‘model.ckpt-n’ 自动寻找参数名–值文件进行加载 基于checkpoint文件(ckpt)加载参数时,实际上就是用Saver.restore取代了initializer的初始化
在这里插入图片描述
在这里插入图片描述

模型训练的数据集?

ModelNet10和ModelNet40都是分类的数据集。(https://modelnet.cs.princeton.edu/)
在这里插入图片描述

语义分割模型下载数据集进行训练,但是sh download_data.sh报错。
在这里插入图片描述
手动下载数据集进行解压,然后训练python train.py,数据集目录结构长这样:
在这里插入图片描述
输入的是.h5格式。一共有13个类别。
在这里插入图片描述
H5文件是层次数据格式第5代的版本(Hierarchical Data Format,HDF5),用以存储和组织大规模数据。H5将文件结构简化为两个主要的对象类型,数据集dataset,就是同一类型数据的多维数组;组group,一种容器结构,可以包含数据集和其他组。对每一个dataset而言,除了数据本身之外,这个数据集还有很多属性信息,同事支持存储数据集对应的属性信息,所有的属性信息的集合称metaData。
在这里插入图片描述

h5py文件是存放两类对象的容器,数据集(dataset)和组(group),dataset类似数组类的数据集合,和numpy的数组差不多。group是像文件夹一样的容器,它好比python中的字典,有键(key)和值(value)。group中可以存放dataset或者其他的group。”键”就是组成员的名称,”值”就是组成员对象本身(组或者数据集)。https://blog.csdn.net/YYY_77/article/details/118269666(该链接是将原图和label转为h5文件)

下载的数据集indoor3d_sem_seg_hdf5_data目录下主要就是h5格式的文件,all_files.txt是这些h5文件的位置。
在这里插入图片描述
room_files.txt里面的内容长这样:
在这里插入图片描述
下载好这个数据集就可以直接训练了。

如果要准备自己的HDF5数据,要先下载3D室内解析数据(S3DIS),用python collect_indoor3d_data.py把数据重组再运行gen_indoor3d_h5.py来生成HDF5文件。

为什么是在CPU上运行的?运行的时候有输入gpu号

因为安装的tensorflow是cpu版本。验证tensorflow是cpu还是gpu的方法:
在这里插入图片描述
pip install tensorflow-gpu==1.14.0 -i https://pypi.tuna.tsinghua.edu.cn/simple
在这里插入图片描述
在这里插入图片描述

为什么在4个GPU上都在运行?

如何测试模型的语义分割的效果?

S3DIS

1.下载好数据集解压,放在data目录下;
下载S3DIS数据集用来测试和可视化。
https://cvg-data.inf.ethz.ch/s3dis/
在这里插入图片描述

2. 运行collect_indoor3d_data.py。
collect_indoor3d_data.py是读取文件夹中的每一个文件,把文件处理为数据标签文件(每一行是xyzrgbl,l是什么?)并调用indoor3d_util.py中的函数进行保存。

indoor3d_util.collect_point_label(anno_path, os.path.join(output_folder, out_filename), 'numpy')

在这里插入图片描述

在这一步,如果把S3DIS数据集生成HDF5文件,就要运行gen_indoor3d_h5.py,这个函数读取上一步生成的.npy文件得到h5文件和room_filelist.txt。不过这里,该数据集用来测试不用生成h5。

Area_5/hallway_6中多了一个额外的字符,不符合编码规范,需要手动删除。经查找具体位置为Stanford3dDataset_v1.2_Aligned_Version\Area_5\hallway_6\Annotations\ceiling_1.txt中的第180389行数字185后。windows下建议使用EmEditor打开文件,会自动跳转到该行,数字185后面有一个类似空格的字符,实际上不是空格,删掉然后重新打一个空格就可以了。
在这里插入图片描述

3.运行batch_inference.py进行测试。
参数中num_point、dump_dir、no_clutter的意思?
在这里插入图片描述
num_point点云的数目、错误分类的点云会被保存在dump目录下,通过将点云渲染为三视图图像来可视化点云。

分割模型训练好(基于GPU):
在这里插入图片描述
运行指令:
python batch_inference.py --model_path log6/model.ckpt --dump_dir log6/dump --output_filelist log6/output_filelist.txt --room_data_filelist meta/area6_data_label.txt --visu

报错:unsupproted operand type(s) for +:‘range’ and ‘list’
只需强制将range转为list类型即可

以下是测试生成的文件,准确率在85.9%。
在这里插入图片描述
在这里插入图片描述
怎么看可视化的结果?
dump中有obj文件,可以用CloudCompare打开看点云数据。
在这里插入图片描述
用CloudCompare打开pred.txt文件看点云数据。
在这里插入图片描述
这里每一列代表什么意思?
前3列是x、y、z,中间3列RGB(大概率是),倒数第二列分类的最大值,最后一个是分类的标签。
在这里插入图片描述
在这里插入图片描述

原图是什么样的?分割成了什么类型?
结论:原图太大了下载不太现实,分割的类型就是txt最后一列。
S3DIS数据集是包含真实标签的3D点云数据,这些3D点云包含在2D-3D-S数据集中。2D-3D-S数据集(https://github.com/alexsax/2D-3D-Semantics)是从3个不同的建筑里6个大型室内区域共6000平方米的区域内采集的,包含7w张RGB图片,还有对应的深度图、表面重建、语义注释、全局XYZ图和相机信息。数据集的大小有全局xyz的图片共766G,没有全局xyz的图片大小为110G。
在这里插入图片描述
代码里有写什么颜色对应什么种类:
在这里插入图片描述
在这里插入图片描述
用Github推荐的MeshLab看可视化效果:
真实标签:

分割模型的预测结果:
在这里插入图片描述

分割模型训练读入.H5格式文件,那模型测试是读入什么格式的数据?
npy文件格式

理一下分割模型训练测试整体流程
在这里插入图片描述

要训练分割模型并进行效果测试,下载indoor3d_sem_hdf5_data数据集到sem_seg目录下,里面是一些h5文件用来训练模型。模型训练好之后要进行测试和可视化,要下载Stanford3dDataset_v1.2_Aligned_Version数据集,运行collect_indoor3d_data.py,把数据集里面的txt文件生成.npy文件,(此时还可以运行gen_indoor3d_h5.py将生成的.npy文件生成为h5文件),运行batch_inference.py进行测试和可视化。

如何测试模型的分类效果?

点云分类模型训练好(基于CPU):
在这里插入图片描述
数据集是modelnet40_ply_hdf5_2048。
在这里插入图片描述

直接运行python evaluate.py --visu报错:
报错1:没有scipy库
pip install scipy -i https://pypi.tuna.tsinghua.edu.cn/simple
报错2:没有PIL库
pip install pillow -i https://pypi.tuna.tsinghua.edu.cn/simple
报错3:没有matplotlib
pip install matplotlib -i https://pypi.tuna.tsinghua.edu.cn/simple
报错4:AttributeError: module ‘scipy.misc’ has no attribute imsave
pip install imageio -i https://pypi.tuna.tsinghua.edu.cn/simple

import imageio
...
imageio.imwrite(img_filename, output_img)
# scipy.misc.imsave(img_filename, output_img)

运行结果:
eval mean loss: 0.519701
eval accuracy: 0.884117
eval avg class acc: 0.857692
在这里插入图片描述
图片保存在dump目录下,是分类物体的三视图显示。源代码是把错误分类的物体的三视图保存下来了,我把所有的都保存下来看了一下。绘图是由pc_util.point_cloud_three_views方法实现三视图的绘制。原理是使用draw_point_cloud方法绘制二维点云图像,通过修改旋转系数xrot、yrot和zrot来改变主视图方向,最终输出三种不同视觉的图像。
2220_label_bed_pred_bed.jpg:(这张标签为床,预测为床)
在这里插入图片描述
221_label_dresser_pred_sink.jpg(这是将梳妆台预测为洗碗槽)
在这里插入图片描述
处理自己的数据集:
https://blog.csdn.net/jiugeshao/article/details/131347202

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1149086.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何在不污染代码的情况下给大R玩家定制特殊服务

点击上方亿元程序员关注和★星标 引言 大家好,我是亿元程序员,一位有着8年游戏行业经验的主程。 本系列是《和8年游戏主程一起学习设计模式》,让糟糕的代码在潜移默化中升华,欢迎大家关注分享收藏订阅。 为了在不污染代码的情况…

39基于matlab的全局路径规划算法中的快速扩展随机树RRT路径规划算法及其改进方法

基于matlab的全局路径规划算法中的快速扩展随机树RRT路径规划算法及其改进方法,RRT Star、RRT_Conncet是一种具有状态约束的非线性系统生成开环轨迹的技术,相比于其他算法可以轻松处理障碍物的问题。程序中的各参数已进行详细说明,起点坐标&a…

[ASP]青辰网络考试管理系统NES X3.5

源码下载:https://download.csdn.net/download/m0_66047725/88452220 青辰智能网络考试管理系统NES采用功能强大、高效灵活的B/S 架构模式,先进的HTML5技术作为前端开发,用户可通过PC、手机、平板等终端进行访问。具有高度的可扩展性&#x…

Mac 4款必备精品软件

一、Downie Downie 是一款万能下载器,它已经出到第 4 代了,它可以作为你的浏览器插件使用,Downie 让你几乎能够下载在网页上的一切内容。比如你在网站上看到一个很有意思的视频,看一遍不够过瘾,想要下载下来反复观看。…

上大学期间应不应该多交朋友

听人劝、吃饱饭,奉劝各位小伙伴,不要订阅该文所属专栏。 作者:不渴望力量的哈士奇(哈哥),十余年工作经验, 跨域学习者,从事过全栈研发、产品经理等工作,现任研发部门 CTO 。荣誉:2022年度博客之星Top4、博客专家认证、全栈领域优质创作者、新星计划导师,“星荐官共赢计…

微信小程序实现微信登录(Java后台)

这两天在自己的小项目中加入了微信小程序的很多功能,今天来说一下关于微信授权登录的部分。 需要的材料 1:一个可以测试的微信小程序 2:此微信小程序的APPID和APPscret 流程 微信用户对应一个小程序都有一个唯一的openid,微信…

lv8 嵌入式开发 网络编程开发 21 私有云盘项目

目录 1云盘项目简介 2 项目实现 2.1 首先实现TCP客户端、服务端 2.2 实现客户端函数简化 2.3 实现服务端函数简化 2.4 TCP数据连包现象 2.5 封装send函数和recv函数 2.6 建立readme说明 2.7 实现文件传输 2.8 读取配置文件种的ip、端口号,通过argv[1]参数实现文件传输…

如何做好高校后勤管理?有什么好用的高校后勤管理软件?

当谈到现代校园的后勤管理时,广州商学院的经验提供了一个成功的案例,可供其他学校学习和借鉴。 一、关于广州商学院   广州商学院,是经教育部批准设立的一所全日制普通本科院校,占地面积1400多亩,总建筑面积55万余平…

白嫖的安信可-小安派s1开发板开箱

白嫖的安信可-小安派s1开发板开箱 前言1、主板2、SPI触摸屏3、DVP摄像头4、喇叭5、咪头 前言 今天是了解到接触到在到白嫖,拿到小安派的第二天,那就介绍一下刚刚接触的小安派。看到开发文档的烧录硬件的要求,安信可官方有烧录软件&#xff0…

STM32F4X SDIO(三) SD卡命令与响应

STM32F4X SDIO(三)SD卡命令与响应 SD卡命令命令类型通用命令与特殊命令命令的格式SD卡命令列表通用命令基础命令读操作命令写操作命令写保护命令擦除命令加锁命令特定应用命令 特殊命令 SD卡响应列表短响应R1响应(正常响应命令)R1b响应R3响应(OCR 寄存器…

15 结构型模式-外观模式

1 外观模式介绍 2 外观模式原理 public class SubSystemA {public void methodA(){//业务代码} }public class SubSystemB {public void methodB(){} }public class SubSystemC {public void methodC(){} }public class Facade {private SubSystemA obj1 new SubSystemA();pri…

2023年中国无人机环保监测产业链及市场规模分析[图]

无人机环保监测是无人机应用场景的重要组成部分,无人机环保监测为通过无人机飞行平台,搭载环保监测仪器进行大气环境、水环境、生态环境监测的一种环境监测模式。 无人机环保监测分类 资料来源:共研产业咨询(共研网) …

高中数学之向量

1.向量基本概念 1.既有大小又有方向的量叫做向量 2.只有大小没有方向的量叫做数量(比如年龄15) 3.具有方向的线段叫做有向线段,假设A为起点,B为终点,我们就说线段AB具有方向。向量可以用有向线段 A B → \overrightarr…

哈工大发布大模型思维链推理综述:200+文献全面解析大语言模型思维链推理最新进展...

©PaperWeekly 原创 作者 | 初征,陈靖昌,刘铭,秦兵,刘挺 单位 | 哈尔滨工业大学 研究方向 | 自然语言处理 论文标题: A Survey of Chain of Thought Reasoning: Advances, Frontiers and Future 论文链接&#xff…

【PC】2023年10月商店更新-闲游盒

亲爱的玩家朋友们,大家好! 欢迎大家来到2023年第十次商店更新! 万圣节即将到来,为了让大家可以在万圣节盛装出席,我们在10月商店更新中准备了邪恶诅咒,PGC 2023的专属宝物,以及RASH悲喜强势回归…

CentOS7安装配置MobaXterm使用换源处理虚拟机拍照备份与还原Linux常用命令

目录 一、centos7安装与配置 1.1 参考安装步骤 1.2 安装配置CentOS 7实操 1.2.1 配置虚拟机 1.2.2 登录CenOS 1.2.3 检测是否可联网 1.2.4 查看、设置IP地址 1.2.5 使用vi编辑ifcfg-ens33 1.2.6 重启网络服务 1.3 MobaXterm使用 1.3.1 官方下载地址 1.3.2 MobaXte…

数据结构——双向链表的实现

一、双向链表的结构 注意:双向链表又称带头双向循环链表 这⾥的“带头”跟前⾯我们说的“头节点”是两个概念,实际前⾯的在单链表阶段称呼不严 谨,但是为了同学们更好的理解就直接称为单链表的头节点。 带头链表⾥的头节点,实际…

计算机毕业设计选题推荐-美术馆微信小程序/安卓APP-项目实战

✨作者主页:IT研究室✨ 个人简介:曾从事计算机专业培训教学,擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Python…

260亿!每部手机赚数千元,手机行业太赚钱了,难怪都想做手机

日前H公司公布了前三季度的业绩,净利润大幅增长两倍多,而营收仅增长2.4%,这显示出三季度仅是多卖了数百万部高端手机,利润就飙升了数百亿元,平均每部手机赚数千元。 该公司公布的业绩显示,前三季度营收增长…