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

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

文章目录

  • 使用OpenPCDet训练自己的3D点云数据
  • 前言
  • 一、使用python-pcl库(未成功)
    • 1.1 安装PCL
    • 1.2 安装Cython 0.25.2
    • 1.3 安装python-pcl
  • 二、使用pypcd库
    • 2.1 安装pypcd
    • 2.2 准备工作
      • 2.2.1 更改demo.py文档
      • 2.2.2 准备数据
    • 2.3 测试&debug


前言

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
所需环境:
使用OpenPCDet训练自己的3D点云数据(.pcd格式)_第1张图片

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官方步骤:
使用OpenPCDet训练自己的3D点云数据(.pcd格式)_第2张图片
已经安装了cython以及numpy,所以进行第二步:

cd python-pcl
python setup.py build_ext -i

报错如下:
使用OpenPCDet训练自己的3D点云数据(.pcd格式)_第3张图片
猜测是没有安装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可视化界面中没有参数,与参考链接不同,报错如下:
使用OpenPCDet训练自己的3D点云数据(.pcd格式)_第4张图片使用OpenPCDet训练自己的3D点云数据(.pcd格式)_第5张图片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)的文档通过记事本打开查看会出现乱码,如图所示:
使用OpenPCDet训练自己的3D点云数据(.pcd格式)_第6张图片不清楚自己的.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

报错如下:
使用OpenPCDet训练自己的3D点云数据(.pcd格式)_第7张图片找到报错的位置,把这两行代码先注释掉,再运行上面的命令:
使用OpenPCDet训练自己的3D点云数据(.pcd格式)_第8张图片成功运行了,但是可视化界面里没有点云,报了两个警告:
使用OpenPCDet训练自己的3D点云数据(.pcd格式)_第9张图片

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,但是仍然没有点云,猜测是还有其他参数没有配置正确。
使用OpenPCDet训练自己的3D点云数据(.pcd格式)_第10张图片
看了入门文档:Tutorial pypcd后,发现基于python3还需要一些步骤:
使用OpenPCDet训练自己的3D点云数据(.pcd格式)_第11张图片
运行上图中的命令:

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

果然报了相同的错误:
使用OpenPCDet训练自己的3D点云数据(.pcd格式)_第12张图片把之前安装的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')

错误发生了变化:
使用OpenPCDet训练自己的3D点云数据(.pcd格式)_第13张图片cloud.pcd文件名或者目录有一些问题。
把.pcd文件的目录以及文件名换成自己的:

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

没有再报错,但是也没有其他信息:
使用OpenPCDet训练自己的3D点云数据(.pcd格式)_第14张图片

未完待续…

你可能感兴趣的:(深度学习,3D点云目标检测,PCL,机器学习,python,pytorch)