OpenPCDet是个很好的平台,可以使用多种开源3D目标检测算法,也提供了开源数据集的使用方法,但是对于训练自己的数据来说还是有一些困难,主要是数据格式的转换以及接口匹配。官方提供的demo是.bin格式的数据,但是我们自己的数据集是.pcd格式的,初步分析有三种方法:
python-pcl网址:
https://github.com/strawlab/python-pcl
所需环境:
因为以前安装过pcl1.9.1并且写了博客,比较有经验,所以没有安装pcl1.8,先安装了1.9.1尝试一下能否可行,参考链接:
ubuntu18.04如何安装PCL1.9.1以及遇到的bug
安装命令:
sudo pip3 install cython==0.25.2
克隆代码包:
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:https://github.com/dimatura/pypcd
一个入门文档:
Tutorial 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
分享pypcd库的大哥提供了一个example.py文档,我把它和OpenPCDet中的demo.py合在一起后,得到一个新的demo.py文档,链接如下:demo.py。
把自己的.pcd文档放到OpenPCDet/tools/data/kitti/training/pcds目录下。
.pcd格式数据基本内容见参考链接:点云库PCL学习——点云的格式、PCD文件的打开和显示
使用ASCII格式的文档可以通过记事本打开查看,不会有乱码;使用二进制(binary和binary_compressed)的文档通过记事本打开查看会出现乱码,如图所示:
不清楚自己的.pcd文件是哪种格式的可以通过上述方法自己查看一下。
作者指出使用ASCII格式存储数据的文件处理速度非常慢,使用二进制的比较快:
所以自己的.pcd文件最好转成binary和binary_compressed格式。
运行命令:
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')
未完待续…