【基于Ubuntu下pointnet++激光点云目标检测】保姆级教程 | 环境配置 | 数据集下载 | 修改配置 | 训练以及测试 | 全过程图文by.Akaxi

05-01 6650阅读 0评论

目录

一、【pointnet++网络原理】

二、【基于激光点云的目标检测步骤】

2.1 基本配置

2.2 pointnet++环境配置以及安装

2.3 数据集下载及移植准备

2.3.1下载数据集

2.3.2新建共享文件夹

①Windows下新建共享文件夹

②Vmware共享文件夹设置

2.3.3数据集移动

2.4 修改文件

2.4.1.修改train_classification.py程序

2.4.2.修改train_segmentation.py文件

2.5 训练Pointnet++(分类功能)- 耗时操作

2.6 测试Pointnet(分类功能)

2.7 训练Pointnet(分割功能) - 耗时操作

2.8 测试Pointnet(分割功能)

更多细节:

关于我的Pointnet为什么测试出来的准确率这么低?

怎么提高我的Pointnet准确率?


最终效果:

【基于Ubuntu下pointnet++激光点云目标检测】保姆级教程 | 环境配置 数据集下载 修改配置 训练以及测试 全过程图文by.Akaxi 第1张

------------------------全文6090字51图一步一步完成大约耗时15h------------------------

(训练模型比较耗时)

所需软件以及环境: 

【基于Ubuntu下pointnet++激光点云目标检测】保姆级教程 | 环境配置 数据集下载 修改配置 训练以及测试 全过程图文by.Akaxi 第2张

Vmware Workstation 17pro

内存                             8GB

处理器                               6

硬盘                           40GB

Python                           3.8

Yolo                                V5

Pytorch                          2.1

系统             Ubuntu20.04.6

 

一、【pointnet++网络原理】

【此节是对原理进行讲解,实战可跳过此部分】

参考链接:

【PointNet网络详解+分类解读】https://blog.csdn.net/CSDNcylinux/article/details/106723260

点云( point clouds): 直接将三维点云抛入网络进行训练,数据量小。主要任务有分类、分割以及大场景下语义分割

Mesh图 (manifold,graph):在流形或图的结构上进行卷积,三维点云可以表现为mesh结构,可以通过点对之间连接关系表现为图的结构

体素(volumetric):通过将物体表现为空间中的体素进行类似于二维的三维卷积(例如,卷积核大小为5x5x5),但同时因为多了一个维度,时间和空间复杂度都非常高,目前三维卷积已经不是主流的方法了

多视角( multi-view):通过多视角二维图片组合为三维物体,此方法将传统CNN应用于多张二维视角的图片,特征聚合起来形成三维物体;

【基于Ubuntu下pointnet++激光点云目标检测】保姆级教程 | 环境配置 数据集下载 修改配置 训练以及测试 全过程图文by.Akaxi 第3张

能否直接设计一种能够直接在原始点云上学习的统一框架?

【PointNet】

PointNet网络结构的灵感来自于欧式空间里的点云的特点。对于一个欧式空间里的点云,有三个主要特征:

• 无序性:虽然输入的点云是有顺序的,但是显然这个顺序不应当影响结果。

• 点之间的交互:每个点不是独立的,而是与其周围的一些点共同蕴含了一些信息,因而模型应当能够抓住局部的结构和局部之间的交互。

• 变换不变性:比如点云整体的旋转和平移不应该影响它的分类或者分割

【基于Ubuntu下pointnet++激光点云目标检测】保姆级教程 | 环境配置 数据集下载 修改配置 训练以及测试 全过程图文by.Akaxi 第4张

① 输入变换>对齐输入点云( 规范化3x3 )

② 点云处理->MLP处理点云( 升维到64 )

③ 特征变换->对齐输入特征( 规范化54x64 )

④ 特征处理>MLP处理特征(升维到1024 )

⑤ 对称函数处理>全局特征( Max pooling )

【基于Ubuntu下pointnet++激光点云目标检测】保姆级教程 | 环境配置 数据集下载 修改配置 训练以及测试 全过程图文by.Akaxi 第5张

PointNet比较难对精细的特征做学习,在分割上有局限性,并且在平移不变性上也有局限性,对于单个的物体,可以将其平移到坐标系的中心,在一个场景中有多个物体不好办,对哪个物体做归一化呢?

【PointNet++】

• pointnet++在局部区域重复性、迭代的使用pointnet,在小区域使用ointnet生成新的点,新的点定义新的小区域,多级的特征学习。

• 因为是在区域中,可以用局部坐标系,可以实现平移的不变性

• 同时在小区域中对点的顺序是无关的,保证置换不变性。

【基于Ubuntu下pointnet++激光点云目标检测】保姆级教程 | 环境配置 数据集下载 修改配置 训练以及测试 全过程图文by.Akaxi 第6张

【基于Ubuntu下pointnet++激光点云目标检测】保姆级教程 | 环境配置 数据集下载 修改配置 训练以及测试 全过程图文by.Akaxi 第7张

PointNet++的网络大体是encoder-decoder结构,encoder-decoder根据分类、分割应用,又有所不同分类:重复set abstraction的过程,实现一个多级的网络,使得点的数量越来越少,但是每个点代表的区域以及感受野,越来越大,这个cnn的概念很类似,最后把点做一个pooling得到globle feature,送入几层全连接网络,最后通过一个softmax分类。

二、【基于激光点云的目标检测步骤】

2.1 基本配置

前提,得有一个Ubuntu20.04的虚拟机【若没有则需创建一个】

还需要完成基本环境的配置,包括Anaconda环境、Pytorch环境、安装Vscode等,具体步骤参考之前我写的博客:

【基于Ubuntu下Yolov5的目标识别】保姆级教程 | 虚拟机安装 - Ubuntu安装 - 环境配置(Anaconda/Pytorch/Vscode/Yolov5) |全过程图文by.Akaxi_ubuntu使用yolo-CSDN博客

需要完成的步骤:

1.虚拟机的安装与创建

2.安装Ubuntu操作系统

3.环境的配置

3.1.Ubuntu下Anacoda安装以及虚拟环境配置

3.2.Pytorch安装

3.3.Vscode安装

【基于Ubuntu下pointnet++激光点云目标检测】保姆级教程 | 环境配置 数据集下载 修改配置 训练以及测试 全过程图文by.Akaxi 第8张

 ------------------------这里需要大概1小时------------------------

2.2 pointnet++环境配置以及安装

首先安装pointnet++的依赖环境,这里直接克隆github大佬的仓库:

打开终端,输入指令:

git clone https://github.com/fxia22/pointnet.pytorch

如果失败的话需要安装git插件,输入命令即可:

sudo apt install git

【基于Ubuntu下pointnet++激光点云目标检测】保姆级教程 | 环境配置 数据集下载 修改配置 训练以及测试 全过程图文by.Akaxi 第9张

接下来继续克隆仓库,即下载一系列的包和环境【需要20G硬盘空间】硬盘空间不足可以简单的扩容~

如果克隆失败可能是没有科学上网的原因(搜索解决)

【基于Ubuntu下pointnet++激光点云目标检测】保姆级教程 | 环境配置 数据集下载 修改配置 训练以及测试 全过程图文by.Akaxi 第10张

然后,进入文件夹pointnet.pytorch

【基于Ubuntu下pointnet++激光点云目标检测】保姆级教程 | 环境配置 数据集下载 修改配置 训练以及测试 全过程图文by.Akaxi 第11张

继续安装依赖环境(大概需要5min)

【基于Ubuntu下pointnet++激光点云目标检测】保姆级教程 | 环境配置 数据集下载 修改配置 训练以及测试 全过程图文by.Akaxi 第12张

完成后即会显示如下

【基于Ubuntu下pointnet++激光点云目标检测】保姆级教程 | 环境配置 数据集下载 修改配置 训练以及测试 全过程图文by.Akaxi 第13张

随后进入scripts文件,执行脚本构建可视化C++命令

cd scripts
bash build.sh #build C++ code for visualization

【基于Ubuntu下pointnet++激光点云目标检测】保姆级教程 | 环境配置 数据集下载 修改配置 训练以及测试 全过程图文by.Akaxi 第14张

如果出现未找到指令可能是没有安装g++编译器

输入如下指令安装g++编译器

【基于Ubuntu下pointnet++激光点云目标检测】保姆级教程 | 环境配置 数据集下载 修改配置 训练以及测试 全过程图文by.Akaxi 第15张

安装完成后,再次执行脚本

【基于Ubuntu下pointnet++激光点云目标检测】保姆级教程 | 环境配置 数据集下载 修改配置 训练以及测试 全过程图文by.Akaxi 第16张

随后下载数据集执行脚本程序(这里通过指令下载很慢很慢,故终止此程序,转而使用2.3的方法):

【基于Ubuntu下pointnet++激光点云目标检测】保姆级教程 | 环境配置 数据集下载 修改配置 训练以及测试 全过程图文by.Akaxi 第17张

(100KB/s的龟速)

2.3 数据集下载及移植准备

数据集名称:shapenetcore_partanno_segmentation_benchmark_v0

【基于Ubuntu下pointnet++激光点云目标检测】保姆级教程 | 环境配置 数据集下载 修改配置 训练以及测试 全过程图文by.Akaxi 第18张

由于在Ubuntu系统下载此数据集速度过慢,于是采用在Windows系统下载镜像包,随后通过Vmware虚拟机共享文件夹,共享在Ubuntu系统下,即可完成。

2.3.1下载数据集

参考此博主的方法:https://blog.csdn.net/jizhidexiaoming/article/details/128164037

【数据集百度网盘】https://pan.baidu.com/s/1MavAO_GHa0a6BZh4Oaogug

【提取码】3hoe

将百度网盘里面的数据集下载至windows系统目录下

【基于Ubuntu下pointnet++激光点云目标检测】保姆级教程 | 环境配置 数据集下载 修改配置 训练以及测试 全过程图文by.Akaxi 第19张

2.3.2新建共享文件夹

共享文件夹的作用是将Windows系统的文件与虚拟机的Ubuntu系统的文件相互联系起来,实现我在Windows下的数据集文件与Ubuntu文件共享,在Ubuntu系统下运行程序PointNet++来处理点云数据集,实现目标检测。

【共享文件夹参考博客】https://blog.csdn.net/weixin_44126785/article/details/120585921

①Windows下新建共享文件夹

在我的Windows11系统D盘下新建文件夹,叫做Akaxi_share

记住创建的文件路径:

【基于Ubuntu下pointnet++激光点云目标检测】保姆级教程 | 环境配置 数据集下载 修改配置 训练以及测试 全过程图文by.Akaxi 第20张

②Vmware共享文件夹设置

打开Vmware虚拟机软件,进入如图所示的设置

【基于Ubuntu下pointnet++激光点云目标检测】保姆级教程 | 环境配置 数据集下载 修改配置 训练以及测试 全过程图文by.Akaxi 第21张

根据共享文件夹指引一步一步操作:

【基于Ubuntu下pointnet++激光点云目标检测】保姆级教程 | 环境配置 数据集下载 修改配置 训练以及测试 全过程图文by.Akaxi 第22张

点击浏览找到刚刚设置的【共享文件夹】,点击确定后继续。

【基于Ubuntu下pointnet++激光点云目标检测】保姆级教程 | 环境配置 数据集下载 修改配置 训练以及测试 全过程图文by.Akaxi 第23张

下一步。

【基于Ubuntu下pointnet++激光点云目标检测】保姆级教程 | 环境配置 数据集下载 修改配置 训练以及测试 全过程图文by.Akaxi 第24张

启用此共享,完成啦~~~~

【基于Ubuntu下pointnet++激光点云目标检测】保姆级教程 | 环境配置 数据集下载 修改配置 训练以及测试 全过程图文by.Akaxi 第25张

点击确定,完成此共享文件夹的设置。

打开虚拟机,在Ubuntu系统终端输入指令(注意空格):

vmware-hgfsclient
sudo vmhgfs-fuse .host:/ /mnt -o nonempty -o allow_other

【基于Ubuntu下pointnet++激光点云目标检测】保姆级教程 | 环境配置 数据集下载 修改配置 训练以及测试 全过程图文by.Akaxi 第26张

然后就可以在Ubuntu系统找到我们的在Windows系统下的共享文件夹了,根据如图找到你的共享文件夹

【基于Ubuntu下pointnet++激光点云目标检测】保姆级教程 | 环境配置 数据集下载 修改配置 训练以及测试 全过程图文by.Akaxi 第27张

2.3.3数据集移动

【Windows】-> 【共享文件夹】->【工作文件夹】

在Windows系统将你下载的数据集文件,拖入共享文件夹

【基于Ubuntu下pointnet++激光点云目标检测】保姆级教程 | 环境配置 数据集下载 修改配置 训练以及测试 全过程图文by.Akaxi 第28张

解压数据集压缩包,即可打开虚拟机在Ubuntu看到数据集文件

(解压大概需要2分钟,解压后1.42G,可删除压缩包)

【基于Ubuntu下pointnet++激光点云目标检测】保姆级教程 | 环境配置 数据集下载 修改配置 训练以及测试 全过程图文by.Akaxi 第29张

打开Ubuntu即可看到数据集,接下来我们需要将数据集移动到工作目录下:

(注意解压后的文件夹会嵌套,注意文件关系)

【基于Ubuntu下pointnet++激光点云目标检测】保姆级教程 | 环境配置 数据集下载 修改配置 训练以及测试 全过程图文by.Akaxi 第30张

(这里共享文件夹复制到Ubuntu工作文件夹下大概需要2分钟)

复制完成后,我们的工作就完成啦。

【基于Ubuntu下pointnet++激光点云目标检测】保姆级教程 | 环境配置 数据集下载 修改配置 训练以及测试 全过程图文by.Akaxi 第31张

2.4 修改文件

我们需要对pointnet文件夹下的一些程序进行修改:

首先打开Vscode,方便文件操作以及代码改写。

【基于Ubuntu下pointnet++激光点云目标检测】保姆级教程 | 环境配置 数据集下载 修改配置 训练以及测试 全过程图文by.Akaxi 第32张

2.4.1.修改train_classification.py程序

【参考链接】https://blog.csdn.net/weixin_61985044/article/details/130942480

文件在目录:pointnet.pytorch/utils/下

添加main函数

在代码开头添加下面代码,并将所有的cuda()改为to(device): device = torch.device("cuda" if torch.cuda.is_available() else "cpu")

将scheduler.step()和optimizer.step()调换位置

【基于Ubuntu下pointnet++激光点云目标检测】保姆级教程 | 环境配置 数据集下载 修改配置 训练以及测试 全过程图文by.Akaxi 第33张

修改好后的train_classification.py程序:(直接覆盖即可)

参考岑老师的Gitee:

https://gitee.com/cenruping/multi-sensor-fusion-perception/tree/master/pointnet.pytorch

2.4.2.修改train_segmentation.py文件

同理修改文件:

【基于Ubuntu下pointnet++激光点云目标检测】保姆级教程 | 环境配置 数据集下载 修改配置 训练以及测试 全过程图文by.Akaxi 第34张

 修改好后的train_classification.py程序:(直接覆盖即可)

参考岑老师的Gitee:

https://gitee.com/cenruping/multi-sensor-fusion-perception/tree/master/pointnet.pytorch

2.5 训练Pointnet++(分类功能)- 耗时操作

打开终端运行: 

【基于Ubuntu下pointnet++激光点云目标检测】保姆级教程 | 环境配置 数据集下载 修改配置 训练以及测试 全过程图文by.Akaxi 第35张

这里注意需要修改自己数据集的路径,如下图所示查看数据集路径:

【基于Ubuntu下pointnet++激光点云目标检测】保姆级教程 | 环境配置 数据集下载 修改配置 训练以及测试 全过程图文by.Akaxi 第36张

这就是你的数据集路径,把你的路径替换在训练数据集的代码里面。

【基于Ubuntu下pointnet++激光点云目标检测】保姆级教程 | 环境配置 数据集下载 修改配置 训练以及测试 全过程图文by.Akaxi 第37张

更改后:

【基于Ubuntu下pointnet++激光点云目标检测】保姆级教程 | 环境配置 数据集下载 修改配置 训练以及测试 全过程图文by.Akaxi 第38张

输入指令进行训练

(注意需要Pytorch环境,如果没有配置需要配置一下,具体参考我的博客)

【基于Ubuntu下pointnet++激光点云目标检测】保姆级教程 | 环境配置 数据集下载 修改配置 训练以及测试 全过程图文by.Akaxi 第39张

大概需要9-10小时(因为采用的是CPU)

(——漫长的等待——)

训练50层后,即可看到最后的训练结果:

【基于Ubuntu下pointnet++激光点云目标检测】保姆级教程 | 环境配置 数据集下载 修改配置 训练以及测试 全过程图文by.Akaxi 第40张

2.6 测试Pointnet(分类功能)

首先也需要对代码进行修改,打开Vscode修改show_cls.py程序

【基于Ubuntu下pointnet++激光点云目标检测】保姆级教程 | 环境配置 数据集下载 修改配置 训练以及测试 全过程图文by.Akaxi 第41张

修改好后的show_cls.py程序:(直接覆盖但需要改一下)

参考岑老师的Gitee:

https://gitee.com/cenruping/multi-sensor-fusion-perception/tree/master/pointnet.pytorch

修改代码中的第25行,这里是需要改成你的数据集路径(同理上面的路径修改过程)

【基于Ubuntu下pointnet++激光点云目标检测】保姆级教程 | 环境配置 数据集下载 修改配置 训练以及测试 全过程图文by.Akaxi 第42张

输入下面代码用于测试分类功能:

python3 show_cls.py --model cls/cls_model_0.pth

【基于Ubuntu下pointnet++激光点云目标检测】保姆级教程 | 环境配置 数据集下载 修改配置 训练以及测试 全过程图文by.Akaxi 第43张

接下来即可进行测试啦,可以看到测试效果

【基于Ubuntu下pointnet++激光点云目标检测】保姆级教程 | 环境配置 数据集下载 修改配置 训练以及测试 全过程图文by.Akaxi 第44张

可以看到测试成功!!!!但是准确性accuracy比较低,但是过程总是成功的~

2.7 训练Pointnet(分割功能) - 耗时操作

与训练Pointnet的分类功能一样,这里也是需要注意

1.激活Pytorch环境

2.修改成自己的数据集环境

【基于Ubuntu下pointnet++激光点云目标检测】保姆级教程 | 环境配置 数据集下载 修改配置 训练以及测试 全过程图文by.Akaxi 第45张

训练,启动!

【基于Ubuntu下pointnet++激光点云目标检测】保姆级教程 | 环境配置 数据集下载 修改配置 训练以及测试 全过程图文by.Akaxi 第46张

(因为采用的是CPU同理也很费时间)

(大概5小时)

等待训练完成后,看到训练结果成功。

【基于Ubuntu下pointnet++激光点云目标检测】保姆级教程 | 环境配置 数据集下载 修改配置 训练以及测试 全过程图文by.Akaxi 第47张

2.8 测试Pointnet(分割功能)

测试前需要移动一下文件:

【基于Ubuntu下pointnet++激光点云目标检测】保姆级教程 | 环境配置 数据集下载 修改配置 训练以及测试 全过程图文by.Akaxi 第48张

输入指令测试分割功能

python3 show_seg.py --model cls/cls_model_0.pth

【基于Ubuntu下pointnet++激光点云目标检测】保姆级教程 | 环境配置 数据集下载 修改配置 训练以及测试 全过程图文by.Akaxi 第49张

这里会报错一行代码出现索引超出范围(期末考试月呜呜呜,先放一放,待解决)

正常来说应该出现这样的分割激光点云的目标检测:

【基于Ubuntu下pointnet++激光点云目标检测】保姆级教程 | 环境配置 数据集下载 修改配置 训练以及测试 全过程图文by.Akaxi 第50张

更多细节:

关于我的Pointnet为什么测试出来的准确率这么低?

数据集问题:如果数据集不够丰富或样本分布不均衡,那么模型就无法学会区分不同的类别。如果你使用的是 ShapeNet 数据集,建议检查每个类别中训练和测试样本的数量是否相等,并尝试增加训练集的大小。

超参数问题:模型的性能很大程度上取决于超参数的选择,如学习率、批量大小、训练时的迭代次数等。你可以尝试调整这些超参数,看看能否提高模型的精度。

过拟合问题:如果在训练期间模型表现良好,但测试精度很低,那么可能是由于过度拟合造成的。在这种情况下,你可以尝试通过增加正则化项(如 L2 正则化)或者使用 dropout 等方法来降低模型的复杂度。

模型选型问题:如果以上措施都没有改善测试精度,那么可能是由于模型的结构不适合数据集。你可以尝试使用其他的深度学习模型或者进行一些模型结构的修改,例如增加卷积层或全连接层。

怎么提高我的Pointnet准确率?

数据集加载:检查测试数据集是否被正确加载,例如检查测试数据集中的样本数量和类别数量是否正确。

模型加载:检查训练好的模型是否被正确加载,并且与训练时使用的参数相同。

模型评估:检查模型在测试集上的表现,例如打印输出每个类别的精度、计算混淆矩阵等。

超参数调整:尝试调整超参数,重新训练模型,看看是否能够提高测试精度。

码一下解决方案参考链接:

https://blog.csdn.net/qq_36638362/article/details/110483678

https://blog.csdn.net/u010663118/article/details/106237966

【如果您解决了以上问题,请联系我~~~~让我膜拜一下哇】

----------------------------------------------------------------------------------------------------

相信读到这里的朋友,一定是坚持且优秀的

给博主一个免费的赞👍吧

扫描二维码进博主交流群,问题交流 | 吹吹水 | 一起变得更加优秀

【基于Ubuntu下pointnet++激光点云目标检测】保姆级教程 | 环境配置 数据集下载 修改配置 训练以及测试 全过程图文by.Akaxi 第51张

2023.12.23

渝北仙桃数据谷


免责声明
1、本网站属于个人的非赢利性网站,转载的文章遵循原作者的版权声明。
2、本网站转载文章仅为传播更多信息之目的,凡在本网站出现的信息,均仅供参考。本网站将尽力确保所
提供信息的准确性及可靠性,但不保证信息的正确性和完整性,且不对因信息的不正确或遗漏导致的任何
损失或损害承担责任。
3、任何透过本网站网页而链接及得到的资讯、产品及服务,本网站概不负责,亦不负任何法律责任。
4、本网站所刊发、转载的文章,其版权均归原作者所有,如其他媒体、网站或个人从本网下载使用,请在
转载有关文章时务必尊重该文章的著作权,保留本网注明的“稿件来源”,并白负版权等法律责任。

手机扫描二维码访问

文章版权声明:除非注明,否则均为主机测评原创文章,转载或复制请以超链接形式并注明出处。

发表评论

快捷回复: 表情:
评论列表 (暂无评论,6650人围观)

还没有评论,来说两句吧...

目录[+]