PointPainting复现
一、下载源码库
下载链接:pointpainting下载
二、安装依赖库
2.1 创建虚拟环境
conda create -n pp python=3.7 # 创建python3.7环境
conda activate pp # 激活环境
conda install pytorch==1.7.0 torchvision==0.8.0 torchaudio=0.7.0 cudatoolkit=10.2 -c pytorch
#必要时需要升高torch版本
#pip install torch==1.8.1+cu102 torchvision==0.9.1+cu102 torchaudio==0.8.1 -f https://download.pytorch.org/whl/torch_stable.html
2.2 安装OpenPCDet
OpenPCDet 是一个开源的 LiDAR 检测框架。 它支持许多流行的数据集,如 Kitti、Nuscenes 等。我们使用 OpenPCDet 作为 LiDAR 检测器。 要安装 OpenPCDet,请先安装它的requirements。 作者修改了 OpenPCDet 的某些部分(包括数据集加载器和训练配置)以支持绘制的 Kitti 数据集,您可以直接在./detector
中使用修改后的版本。 作者给出的运行命令为:
cd PointPainting/detector
python setup.py develop
但是openpcdet的依赖配置很复杂,尤其涉及点云卷积库spconv的部分,因此可以参考:
2.3 安装mmsegmentation
对于基于图像的语义分割,我们使用mmsegmentation (OpenLab V3+) 。 要安装此软件包,mmcv与cuda、pytorch版本兼容有要求,因此您可能需要在安装 mmcv-full时更改地址以匹配您的 torch 和 CUDA 版本(https://download.openmmlab.com/mmcv/dist/cu111/torch1.9.0/index.html),若此链接中没有自己对应的版本,就参考备注(2)中的网址选择具体命令进行安装。
pip install terminaltables
pip install mmcv-full -f https://download.openmmlab.com/mmcv/dist/cu102/torch1.7.0/index.html
您可能会注意到./painting/mmseg
中有一个文件夹,因此您不必手动克隆其存储库。
注:(1)在下载的文件 ./painting/mmseg 中有一个文件夹,作者已经下载了,因此您不必手动克隆其存储库。
(2)mmcv与cuda、pytorch版本兼容有要求,见mmcv官方文档https://mmcv.readthedocs.io/zh_CN/latest/get_started/installation.html根据自己的版本情况选择合适的mmcv:
(3)对于mmcc-full的下载,有时pip 的安装有时会有问题,可以直接下载手动安装:
2.4 安装 Hierarchical Multi-Scale Attention for Semantic Segmentation
此工程还支持用于语义分割的分层多尺度注意力。 虽然我们已经在 ./painting/hma
下为您克隆了他们的 github 存储库(进行了一些修改以处理 kitti 数据集),但请参阅上面的github链接
以安装其依赖项。
三、下载数据集
目前我们只支持 Kitti 数据集,我们预计未来会更新对 Nuscenes 数据集的支持。 对于 Kitti 数据集,您可能需要如下所示管理数据集。 Kitti 数据集可以在这里找到。 您可能还需要下载 OpenPCDet 提供的planes。
detector
├── data
│ ├── kitti
│ │ │── ImageSets
│ │ │── training
│ │ │ ├── calib
│ │ │ ├── image_2
│ │ │ ├── image_3
│ │ │ ├── label_2
│ │ │ ├── velodyne
│ │ │ ├── planes
│ │ │ ├── painted_lidar (keep it empty)
│ │ │── kitti_infos_train.pkl
│ │ │── kitti_info_val.pkl
注:请注意,我们已经为您生成了 train 和 val 信息。 所以在kitti官网下载好对应数据集后,一定只能将 Kitti 原始数据放入上表相应的文件夹中。
四、进行painting
进行painting
,需要依赖具体的语义分割模型。作者提供了三个网络:DeepLabV3 / HMA / DeeplabV3+
。我们建议使用 DeepLab V3+,这是默认设置。
4.1 DeepLab V3+
当您按如下所示管理数据时,绘画应该非常容易。 首先检查painting.py
脚本并选择您要使用的分割网络索引!
要使用 DeepLab V3+ 需要下载模型的权重,可以运行./painting
下的脚本get_deeplabv3plus_model.sh
:
cd painting
sudo sh get_deeplabv3plus_model.sh
然后你可以运行以下命令:
cd painting
python painting.py
painting 过程可能需要数小时,具体取决于您的计算设备性能。 完成绘画后,您可以继续进行 LiDAR Detector 培训!
成功后为:
此时,出现的报错(一):
这是因为MMCV的版本过高,只能兼容1.1.4-1.4.0之间的版本,可以选择1.4.0
下载后手动安装:
报错(二):
这是mmsegmentation部分缺少权重文件:
需要运行指令:
报错(三):
参考:
pytorch学习路上遇到的坑
4.2 HMA-based Painting
除了使用 DeepLab V3+,您还可以基于 HMA 生成分割分数。 如果你想使用 HMA,请在 ./painting
下运行以下命令。 它将下载所需的权重并处理整个分割过程。 同样,可能需要几个小时才能完成。
$ sh generate_hma_score.sh
分割分数将保存在./detector/data/kitti/training/score_hma/
下。 当你运行完脚本后,查看painting.py
脚本并设置SEG_NET = 2
。然后参考Painting进行后续步骤。
五、雷达点云训练
对于训练部分,您应该运行以下命令以基于绘制的点云开始训练。
cd detector
python -m pcdet.datasets.kitti.painted_kitti_dataset create_kitti_infos tools/cfgs/dataset_configs/painted_kitti_dataset.yaml
此时,出现的报错:
解决方法:
对该命令执行的源码文件/home/ypx/ws/PointPainting_ws/detector/pcdet/datasets/kitti/painted_kitti_dataset.py
进行修改:
参考:TypeError: load() missing 1 required positional argument: ‘Loader‘
成功后,结果为:
cd tools
python train.py --cfg_file cfgs/kitti_models/pointpillar_painted.yaml
运行结果:
六、可视化
使用经过训练的权重,您可以运行演示以根据绘制的点云推断结果。 我们使用 OpenPCDet 提供的演示脚本并稍微修改visualize_utils.py
。 要运行演示,请尝试执行以下命令:
pip install mayavi
cd tools
python demo.py --cfg_file cfgs/kitti_models/pointpillar_painted.yaml --ckpt ${your trained ckpt} --data_path ${painted .npy file} --ext .npy
python demo.py --cfg_file /home/ypx/ws/PointPainting-main/detector/output/kitti_models/pointpillar_painted/default/pointpillar_painted.yaml --ckpt /home/ypx/ws/PointPainting-main/detector/output/kitti_models/pointpillar_painted/default/ckpt/checkpoint_epoch_80.pth --data_path /home/ypx/ws/PointPainting-main/detector/data/kitti/training/painted_lidar/000019.npy --ext .npy
查看训练参数:
pip install tensorboardX
pip install tensorflow
需要安装确定版本的open3d:
pip install open3d==0.9.0.0
pip install open3d-python
然后进行到events.out.tfevents.1678719850.ypx
所在的路经/home/ypx/ws/PointPainting-main/detector/output/kitti_models/pointpillar_painted/default/tensorboard
执行命令:
tensorboard --logdir=/home/ypx/ws/PointPainting-main/detector/output/kitti_models/pointpillar_painted/default/tensorboard
报错一:
报错二:Segmentation fault (core dumped)
先安装部分依赖:
pip install traitsui==6.1.0
pip install traits==6.2.0
pip install pyqt5==5.12.0
pip install vtk==9.2.2
执行可视化命令试试;
在已安装PyQT5的情况下依然报错,在终端输入:
export ETS_TOOLKIT=qt
export QT_API=pyqt5
然后接着执行可视化命令。
关于mayavi的安装使用,最麻烦的就是其依赖的功能包及虚拟环境,我本次的虚拟环境依赖如下(安装这些依赖的时候,注意其安装路径):