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

目录

一、【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准确率?


最终效果:

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

(训练模型比较耗时)

所需软件以及环境: 

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应用于多张二维视角的图片,特征聚合起来形成三维物体;

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

【PointNet】

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

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

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

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

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

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

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

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

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

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

【PointNet++】

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

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

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

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安装

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

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

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

打开终端,输入指令:

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

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

sudo apt install git

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

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

然后,进入文件夹pointnet.pytorch

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

完成后即会显示如下

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

cd scripts

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

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

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

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

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

(100KB/s的龟速)

2.3 数据集下载及移植准备

数据集名称:shapenetcore_partanno_segmentation_benchmark_v0

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

2.3.1下载数据集

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

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

【提取码】3hoe

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

2.3.2新建共享文件夹

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

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

①Windows下新建共享文件夹

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

记住创建的文件路径:

②Vmware共享文件夹设置

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

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

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

下一步。

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

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

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

vmware-hgfsclient

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

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

2.3.3数据集移动

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

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

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

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

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

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

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

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

2.4 修改文件

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

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

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()调换位置

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

参考岑老师的Gitee:

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

2.4.2.修改train_segmentation.py文件

同理修改文件:

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

参考岑老师的Gitee:

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

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

打开终端运行: 

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

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

更改后:

输入指令进行训练

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

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

(——漫长的等待——)

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

2.6 测试Pointnet(分类功能)

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

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

参考岑老师的Gitee:

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

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

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

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

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

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

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

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

1.激活Pytorch环境

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

训练,启动!

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

(大概5小时)

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

2.8 测试Pointnet(分割功能)

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

输入指令测试分割功能

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

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

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

更多细节:

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

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

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

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

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

怎么提高我的Pointnet准确率?

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

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

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

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

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

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

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

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

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

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

给博主一个免费的赞👍吧

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

2023.12.23

渝北仙桃数据谷

  • 31
    点赞
  • 51
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 8
    评论
虚拟机是一种可以在计算机上模拟出另一个计算机系统的软件工具。通过虚拟机,我们可以在同一台计算机上同时运行多个操作系统,实现多系统共存的效果。其中,VirtualBox是一款免费且功能强大的虚拟机软件。 下面是使用VirtualBox安装Ubuntu并调整分辨率以及共享文件的详细图文教程: 1. 首先,下载并安装VirtualBox软件。可以在官方网站(https://www.virtualbox.org/)上下载适合自己系统的版本。 2. 安装完成后,打开VirtualBox软件。点击“新建”按钮创建一个新的虚拟机。 3. 在弹出的对话框中,输入虚拟机的名称和操作系统类型(Ubuntu),然后点击“下一步”。 4. 接下来,选择虚拟机的内存大小。一般来说,至少需要分配2GB的内存给Ubuntu虚拟机,然后点击“下一步”。 5. 在创建虚拟硬盘对话框中,选择“现在创建虚拟硬盘”,并点击“创建”。 6. 在虚拟硬盘文件类型对话框中,选择默认的VDI(VirtualBox Disk Image)选项,然后点击“下一步”。 7. 在存储在物理硬盘上对话框中,选择“动态分配”,然后点击“下一步”。 8. 接下来,选择虚拟硬盘的大小。一般来说,20GB的虚拟硬盘足够安装和运行Ubuntu系统了。然后点击“创建”。 9. 已完成虚拟机的创建。选择刚才创建的虚拟机,点击“设置”按钮,进入虚拟机的设置页面。 10. 在显示选项卡中,将视频内存大小设置为128MB,然后点击“确定”。 11. 现在,点击“启动”按钮,选择Ubuntu的ISO镜像文件进行安装。 12. 在Ubuntu安装界面中,选择“安装Ubuntu”并按照提示进行设置。完成安装后,重启虚拟机。 13. 登录Ubuntu系统后,打开终端,执行下列命令安装VirtualBox增强功能:sudo apt-get install virtualbox-guest-dkms 14. 安装完成后,重启虚拟机,并通过“设备”菜单选择“安装增强功能”。 15. 重启虚拟机后,可以调整虚拟机窗口的分辨率。 16. 在虚拟机窗口的顶部菜单中,选择“设备”-“共享剪贴板”和“设备”-“共享文件夹”,可以实现与主机系统的文件和剪贴板共享。 通过以上步骤,我们可以在VirtualBox中安装Ubuntu系统,并通过调整分辨率以及开启共享文件夹功能来实现更好的使用体验。希望对您有帮助!
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Akaxi-1

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值