使用OpenPCDet训练自己的3D点云数据(.pcd格式)

使用OpenPCDet训练自己的3D点云数据


前言

OpenPCDet是个很好的平台,可以使用多种开源3D目标检测算法,也提供了开源数据集的使用方法,但是对于训练自己的数据来说还是有一些困难,主要是数据格式的转换以及接口匹配。官方提供的demo是.bin格式的数据,但是我们自己的数据集是.pcd格式的,初步分析有三种方法:

  1. 官方demo建议的方法,把.pcd文件数据转为.npy,然后更改kitti_dataset.yaml配置文件读取.npy文件,还需要验证demo.py能否读取.npy文件,目前没有查到成功案例,资料比较少。
  2. 想办法把.pcd文件数据转为.bin,然后更改kitti_dataset.yaml配置文件,KITTI数据集就是.bin格式,所以此格式一定可以被demo.py读取,有人成功过,就是会遇到很多问题。
  3. 想办法使demo.py可以直接读取.pcd格式的文件,有成功案例,决定先尝试这种方法。

一、使用python-pcl库(未成功)

python-pcl网址:
https://github.com/strawlab/python-pcl
所需环境:
在这里插入图片描述

1.1 安装PCL

因为以前安装过pcl1.9.1并且写了博客,比较有经验,所以没有安装pcl1.8,先安装了1.9.1尝试一下能否可行,参考链接:
ubuntu18.04如何安装PCL1.9.1以及遇到的bug

1.2 安装Cython 0.25.2

安装命令:

sudo pip3 install cython==0.25.2

1.3 安装python-pcl

克隆代码包:

git clone https://github.com/strawlab/python-pcl.git

python-pcl官方步骤:
在这里插入图片描述
已经安装了cython以及numpy,所以进行第二步:

cd python-pcl
python setup.py build_ext -i

报错如下:
在这里插入图片描述
猜测是没有安装VTK-8.1的原因,进行VTK-8.1的安装,参考连接:
https://blog.csdn.net/weixin_44723106/article/details/103071712
https://www.cnblogs.com/haijian/p/12417017.html
VTK-8.1的下载链接:
https://codeload.github.com/Kitware/VTK/zip/refs/tags/v8.1.0
按照参考链接中两种build包放置的位置都进行的尝试,cmake可视化界面中没有参数,与参考链接不同,报错如下:
在这里插入图片描述在这里插入图片描述VTK-8.2.0的下载地址:
https://vtk.org/download/
使用VTK-8.2.0进行测试,结果报错跟上面一样。

上面的错误没有解决…
与实现上述方法的大佬发了封邮件,他回信分享了一个他最近在用的库:
pypcd:https://github.com/dimatura/pypcd
优点:所需依赖较少,安装方便,步骤清晰

二、使用pypcd库

开源代码网址:
pypcd:https://github.com/dimatura/pypcd
一个入门文档:
Tutorial pypcd

2.1 安装pypcd

所用python版本为3.6.9,虽然作者说只支持python2,支持python3的版本在Pull requests#9里,但是我直接使用官方网站的code,后面并没有报有关Python版本的错误。
执行命令:

git clone https://github.com/dimatura/pypcd
cd pypcd
sudo python setup.py install

2.2 准备工作

2.2.1 更改demo.py文档

分享pypcd库的大哥提供了一个example.py文档,我把它和OpenPCDet中的demo.py合在一起后,得到一个新的demo.py文档,链接如下:demo.py

2.2.2 准备数据

把自己的.pcd文档放到OpenPCDet/tools/data/kitti/training/pcds目录下。
.pcd格式数据基本内容见参考链接:点云库PCL学习——点云的格式、PCD文件的打开和显示
使用ASCII格式的文档可以通过记事本打开查看,不会有乱码;使用二进制(binary和binary_compressed)的文档通过记事本打开查看会出现乱码,如图所示:
在这里插入图片描述不清楚自己的.pcd文件是哪种格式的可以通过上述方法自己查看一下。
作者指出使用ASCII格式存储数据的文件处理速度非常慢,使用二进制的比较快:
在这里插入图片描述所以自己的.pcd文件最好转成binary和binary_compressed格式。

2.3 测试&debug

运行命令:

cd OpenPCDet/tools
python demo.py --cfg_file cfgs/kitti_models/pv_rcnn.yaml     --ckpt pv_rcnn_8369.pth     --data_path data/kitti/training/pcds/1575453152900.pcd

报错如下:
在这里插入图片描述找到报错的位置,把这两行代码先注释掉,再运行上面的命令:
在这里插入图片描述成功运行了,但是可视化界面里没有点云,报了两个警告:
在这里插入图片描述

demo.py:76: RuntimeWarning: invalid value encountered in subtract
  points[:, 3] = (points[:, 3] - np.min(points[:, 3]))/(np.max(points[:, 3]) - np.min(points[:, 3]))
demo.py:76: RuntimeWarning: invalid value encountered in float_scalars
  points[:, 3] = (points[:, 3] - np.min(points[:, 3]))/(np.max(points[:, 3]) - np.min(points[:, 3]))

查了一下这个警告应该是因为demo.py中第76行的数组运算中减法以及float_scalars(不确定是什么)有一些问题。
这部分代码是有关点云强度设定的,注释掉这部分代码不再出现warning,但是仍然没有点云,猜测是还有其他参数没有配置正确。
在这里插入图片描述
看了入门文档:Tutorial pypcd后,发现基于python3还需要一些步骤:
在这里插入图片描述
运行上图中的命令:

python
import pypcd
 pc = pypcd.PointCloud.from_path('cloud.pcd')

果然报了相同的错误:
在这里插入图片描述把之前安装的pypcd删掉,再安装这个:

python3.6 -m pip install --user git+https://github.com/DanielPollithy/pypcd.git
python
from pypcd import pypcd
pc = pypcd.PointCloud.from_path('cloud.pcd')

错误发生了变化:
在这里插入图片描述cloud.pcd文件名或者目录有一些问题。
把.pcd文件的目录以及文件名换成自己的:

python
from pypcd import pypcd
pc = pypcd.PointCloud.from_path('OpenPCDet/tools/data/kitti/training/pcds/1575453160900.pcd')

没有再报错,但是也没有其他信息:
在这里插入图片描述

未完待续…

  • 3
    点赞
  • 42
    收藏
    觉得还不错? 一键收藏
  • 11
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值