电脑基础 · 2023年3月31日

[3D检测系列-PointRCNN]复现PointRCNN代码,并实现PointRCNN3D目标检测可视化,包含预训练权重下载链接(从0开始以及各种报错的解决方法)

[3D检测系列-PointRCNN]  复现PointRCNN代码

1.下载代码

2.准备数据集

(1)使用官网提供的数据集格式

(2)使用软连接

3.检测结果

4.结果可视化

(1)仅显示 LiDAR

(2)显示 LiDAR 和图像

 (3)显示具有特定索引的 LiDAR 和图像

(4)显示带有modified LiDAR file附加点云标签/标记的 LiDAR 作为第 5 维


先附上环境配置:

Ubuntu18.04

python3.6

pytorch 1.8.0    torchvision 0.9.0   cuda 11.1

(这几个先不急着装,后面有教程) mayavi 4.7.1  vkt 8.2.0  traits 6.2.0  traitsui 7.2.1 PyQt5 5.15.2


1.下载代码

https://github.com/sshaoshuai/PointRCNN

 Pytorch版本的代码、直接进github下载,这一步应该不需要过多解释。

如果有不会下载的可以直接打开一个终端,输入一下代码

git clone https://github.com/sshaoshuai/PointRCNN

!!!!注意 !!!!

!!!代码下载完后是不完善的!!!

不然会报以下错误:No moudle named 'iou3d_cuda'

    pointnet2_lib打开的话是空的,这个时候需要在github中把这个文件夹单独打开,把里面的东西下载下来,然后放在本地代码文件夹里面去。然后还需要运行以下代码来安装一些工具:

sh build_and_install.sh

错误1:

[3D检测系列-PointRCNN]复现PointRCNN代码,并实现PointRCNN3D目标检测可视化,包含预训练权重下载链接(从0开始以及各种报错的解决方法)

error: command 'gcc' failed with exit status 1

解决方法:进入一下目录:~/pointnet2_lib/pointnet2/src/  ----->将文件中所有cpp文件的的THCState_getCurrensStream(state) 全部改为 c10::cuda::getCurrentCUDAStream()

错误2:

 [3D检测系列-PointRCNN]复现PointRCNN代码,并实现PointRCNN3D目标检测可视化,包含预训练权重下载链接(从0开始以及各种报错的解决方法)

解决方法:进入一下目录:~/lib/utils/roipool3d/src/roipool3d.cpp  ----->将文件中的AT_CHECK 改为 TORCH_CHECK


2.准备数据集

(1)使用官网提供的数据集格式

首先需要下载KITTI数据集,官网的话大家就不用尝试了因为根本下不下来。有个大佬直接上传在百度云盘里面的大家可以在他里面下载一下。KITTI数据集下载(百度云)(作者都不容易大家可以给别人也点个赞支持支持!!)

然后官网的数据集结构如下:

[3D检测系列-PointRCNN]复现PointRCNN代码,并实现PointRCNN3D目标检测可视化,包含预训练权重下载链接(从0开始以及各种报错的解决方法)

 可能有些小白不太明白(我尽量讲明白大佬们见谅,可自行跳过),可以参考我的如下:

[3D检测系列-PointRCNN]复现PointRCNN代码,并实现PointRCNN3D目标检测可视化,包含预训练权重下载链接(从0开始以及各种报错的解决方法)

(2)使用软连接

    因为在跑PointRCNN之前,我先跑过PointPIllars所以为了避免重新拷贝一份,可以直接用软连接。将PointPillars里面的数据集直接连接到这里来。

在PointRCNN的data/KITTI文件夹下:

ln -s (PointPillars数据集的路径) object

    object代表的是创建的文件夹名字,最好就取这个名字,不然要修改代码。 而且数据集的路径是包含training和testing的根目录。然后就会生成一个object文件就OK了。

3.检测结果

利用作者的预训练模型可以直接检测,将模型放在tools下面,他的是外网下载不下来。我上传到CSDN了:----PointRCNN预训练权值-----

接下里开始检测:

python eval_rcnn.py --cfg_file cfgs/default.yaml --ckpt PointRCNN.pth --batch_size 4 --eval_mode rcnn --set RPN.LOC_XZ_FINE false

错误1:

[3D检测系列-PointRCNN]复现PointRCNN代码,并实现PointRCNN3D目标检测可视化,包含预训练权重下载链接(从0开始以及各种报错的解决方法)

TypeError: load() missing 1 requered positional argument : ‘Loader’

解决方法:

pip install pyyaml==5.1

 开始了!!!!现在就开始等!!

[3D检测系列-PointRCNN]复现PointRCNN代码,并实现PointRCNN3D目标检测可视化,包含预训练权重下载链接(从0开始以及各种报错的解决方法)

 大约等10分钟后:

[3D检测系列-PointRCNN]复现PointRCNN代码,并实现PointRCNN3D目标检测可视化,包含预训练权重下载链接(从0开始以及各种报错的解决方法)

 检测结果放在以下路径下:

PointRCNN/output/rcnn/default/eval/epoch_no_number/val/final_result/

4.结果可视化

克隆可视化工具:

git clone https://github.com/kuixu/kitti_object_vis.git

     克隆后在data文件中也要像上面2.(2)一样设置一个软连接。可以把他的object删了后重新弄一次。接着需要一些依赖:(记得用镜像不然慢的不得鸟!!!)

pip install opencv-python pillow scipy matplotlib pyside2

    然后需要使用conda来安装mayavi,这个不能用pip我也不知道为什么....但是这里确实用pip的话基本上用不了....不知道为什么

conda install mayavi

然后在kitti_object_vis文件中打开终端:

(1)仅显示 LiDAR

python kitti_object.py --show_lidar_with_depth --img_fov --const_box --vis

  此时可能出现以下错误:

错误1:ModuleNotFoundError: No module named 'vtkIOParallelPython'

[3D检测系列-PointRCNN]复现PointRCNN代码,并实现PointRCNN3D目标检测可视化,包含预训练权重下载链接(从0开始以及各种报错的解决方法)

解决方法:

conda install jsoncpp=1.8.3
pip install pyface==7.3.0

然后继续我们的代码出现一下界面:(大功告成!!)在终端按一次回车就可以查看下一张图

[3D检测系列-PointRCNN]复现PointRCNN代码,并实现PointRCNN3D目标检测可视化,包含预训练权重下载链接(从0开始以及各种报错的解决方法)

然后以下还有其他几种不同的显示方法:(具体的可查看源码的github  kitti_object_vis)

(2)显示 LiDAR 和图像

python kitti_object.py --show_lidar_with_depth --img_fov --const_box --vis --show_image_with_boxes

[3D检测系列-PointRCNN]复现PointRCNN代码,并实现PointRCNN3D目标检测可视化,包含预训练权重下载链接(从0开始以及各种报错的解决方法)

 (3)显示具有特定索引的 LiDAR 和图像

python kitti_object.py --show_lidar_with_depth --img_fov --const_box --vis --show_image_with_boxes --ind 1 

[3D检测系列-PointRCNN]复现PointRCNN代码,并实现PointRCNN3D目标检测可视化,包含预训练权重下载链接(从0开始以及各种报错的解决方法)

(4)显示带有modified LiDAR file附加点云标签/标记的 LiDAR 作为第 5 维

python kitti_object.py --show_lidar_with_depth --img_fov --const_box --vis --pc_label

[3D检测系列-PointRCNN]复现PointRCNN代码,并实现PointRCNN3D目标检测可视化,包含预训练权重下载链接(从0开始以及各种报错的解决方法)


自己写的所以有点复杂,但是至少能完成嘿嘿。如果各位有优化欢迎评论区讨论!!

大功告成!编写不易,大家成功后点个关注or赞谢谢~~