在此前一篇文章【PointPillars】环境部署全纪实中介绍了原始Pointpillars作者部署模型的方法,由于仓库代码较老软件包版本适配上带来了很多麻烦。更糟糕的是,作者提供了KITTIVIEW可视化方法,利用web进行可视化,然而web集成度高,数据替换难,为后续更换数据带来很多不便。因此今天尝试使用Openpcdet部署pointpillars并实现数据的可视化。

基于KITTI集OpenPCDet框架Pointpillars训练

版本信息

成功验证版本:
显卡型号:3080ti
cuda:11.3
python:3.8
pytorch:1.12.0
kornia:0.6.8
open3d:0.18.0(有说0.11.0好的,但是实际上过旧的包scikit-learn包报错会出问题)
numpy:1.24.x

Deploy

Cuda安装

见之前的文章,不同版本同理,wget+sh安装,不赘述。

Pytorch环境搭建

新建环境

1
conda create -n opcnet python==3.8
激活环境
1
2
source activate
conda activate opcnet
安装pytorch:之前推荐pip安装是因为避免conda安装到cpu版本的pytorch,这里使用conda安装是为了防止漏装cudatoolkit
1
conda install pytorch==1.12.0 torchvision==0.13.0 torchaudio==0.12.0 cudatoolkit=11.3 -c pytorch
验证:
1
2
3
import torch
print(torch.__version__) #1.12.0
print(torch.cuda.is_available()) #True

Openpcdet安装

1
git clone https://github.com/open-mmlab/OpenPCDet.git

进入Openpcdet文件夹安装其他依赖包:

1
pip install -r requirements.txt
编译安装:
1
python setup.py develop
验证:
1
import pcdet
安装spconv:
1
pip install spconv-cu113
验证:
1
import spconv
至此Openpcdet安装完成。

准备数据集

文件结构:把数据按以下安排放入data

1
2
3
4
5
6
7
8
9
10
OpenPCDet
├── data
│ ├── kitti
│ │ │── ImageSets
│ │ │── training
│ │ │ ├──calib & velodyne & label_2 & image_2 & (optional: planes) & (optional: depth_2)
│ │ │── testing
│ │ │ ├──calib & velodyne & image_2
├── pcdet
├── tools
进入openpcdet文件夹载入数据生成bin与pkl文件:
1
python -m pcdet.datasets.kitti.kitti_dataset create_kitti_infos tools/cfgs/dataset_configs/kitti_dataset.yaml
没有报错则生成成功,注意检查gtbase数据大小是否正常,进入训练。

数据训练

3080ti的训练时间大概是花费10epochs/30min,默认设置是80epochs,大概要4个小时。建议调低epochs,例如5epochs试跑,有的错误最后epochs跑完才会报出(例如后文提到的cudatoolkit问题)。进入/OpenPCDet/tools/cfgs/kitti_models/pointpillar.yaml,修改:

1
NUM_EPOCHS: 5

进入/OpenPCDet/tools,后台运行:

1
2
3
4
5
#21
后台运行:
nohup python -u train.py --cfg_file cfgs/kitti_models/pointpillar.yaml > log1.file 2>&1 &
前台运行:
python train.py --cfg_file cfgs/kitti_models/pointpillar.yaml
训练正常结束: 训练结果

训练Q&A

  1. kornia包报错

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    File "/root/miniconda3/lib/python3.8/site-packages/kornia/geometry/conversions.py", line 346
    "Input must be a tensor of shape (*, 4). Got {}".format(
    quaternion.shape))
    return F.normalize(quaternion, p=2, dim=-1, eps=eps)
    ~~~~~~~~~~~ <--- HERE
    'normalize_quaternion' is being compiled since it was called from 'quaternion_to_rotation_matrix'
    File "/root/miniconda3/lib/python3.8/site-packages/kornia/geometry/conversions.py", line 380
    quaternion.shape))
    # normalize the input quaternion
    quaternion_norm: torch.Tensor = normalize_quaternion(quaternion)
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ <--- HERE
    解决:更换kornia版本
    1
    pip install kornia==0.6.8

  2. no module named "av2" 保证python版本在3.8以上,运行

    1
    pip install av2

  3. KeyError: 'road_plane' 这是没有准备相关数据,而模型却训练了,打开配置文件/OpenPCDet/tools/cfgs/kitti_models/pointpillar.yaml设置:

    1
    USE_ROAD_PLANE: False

  4. cudatoolkit报错

    1
    numba.cuda.cudadrv.error.NvvmSupportError: No supported GPU compute capabilities found. Please check your cudatoolkit version matches your CUDA version.
    跑四个小时才报错,MVP实至名归。 解决: conda install cudatoolkit=11.3 -c pytorch 注:该方法不一定生效,所以配置最初环境的时候应该使用我推荐的conda安装方法。

Open3D可视化点云

由于我们的数据集是放在服务器上面的,这样有两条路径可以选择。其一是把结果output文件和数据集下载到本地,在本地配置open3d环境进行可视化;其二是仍在服务器进行可视化,在本地查看结果。但是服务器哪来的图形化窗口捏?这就要用到SSH中的狠角:X11-forwarding转发。(注意:不是所有ssh工具都支持X11,如finalshell不支持,而MobaXterm、Xshell支持(然而均无Linux版本,Linux可尝试WindTerm)) ### X11安装与转发配置 服务器安装:

1
2
3
sudo apt-get update 
sudo apt-get install xorg
sudo apt-get install xauth
配置服务器ssh文件:
1
sudo vim /etc/ssh/sshd_config
确认三项:
1
2
3
AllowTcpForwarding yes
X11Forwarding yes
X11UseLocalhost no
SSH终端(以MobaXterm为例)开启X11权限:
1
2
1. 在MobaXterm中,settings->configuration->x11->x11 remote access勾选full
2. SSH页勾选X11
重启SSH,看到初始页面X11变勾,设置成功。 X11可用

验证:服务器运行xclock,本地出现小时钟即转发成功。(有看到需要设置ip端口的:export DISPLAY="ip:0.0",但貌似没用上)接下来继续在服务器部署可视化环境,服务器安装sklearn:

1
pip install scikit-learn

安装open3D

1
pip install open3d -i https://pypi.tuna.tsinghua.edu.cn/simple

验证:

1
import open3d
安全!轻舟已过万重山。

运行可视化demo:

1
python demo.py --cfg_file /root/autodl-tmp/opcnet/OpenPCDet/tools/cfgs/kitti_models/pointpillar.yaml --ckpt /root/autodl-tmp/opcnet/OpenPCDet/output/kitti_models/pointpillar/default/ckpt/checkpoint_epoch_80.pth --data_path /root/autodl-tmp/opcnet/OpenPCDet/data/kitti/testing/velodyne/001234.bin
结果: 1234点云样本 2674点云样本 由于是网络传输,鼠标滚轮可以改变大小,有可接受范围内的卡顿现象。

Open3D Q&A

  1. 只发生一个报错:
    1
    The 'sklearn' PyPI package is deprecated, use 'scikit-learn' rather than 'sklearn' for pip commands.
    这是由于听信谣言安装了0.11的open3d出现软件包问题,安装高版本open3d即可。

可视化损失参数

output环境提供了tensorboard文件,可以用于tensorboard可视化,还是两条路,要么下载在本地可视化,要么在服务器运行,端口映射到本地查看。作者头铁,一条路走到黑!开始:

服务器安装tensorboard:

1
2
pip install tensorboardX
pip install tensorflow -i https://pypi.tuna.tsinghua.edu.cn/simple

50M/s的源才是好源。

本地端口映射

Linux可以运行以下命令,Windows的cmd、git软件等也可以:

1
ssh -L xxxx(本地目标端口如16006):localhost:6006(服务器的固定端口) -p xxxxx(服务器登陆端口) user@your serverip
运行可视化命令:
1
tensorboard --logdir=/root/autodl-tmp/opcnet/OpenPCDet/output/kitti_models/pointpillar/default/tensorboard
tensorboard运行成功 http访问映射的端口:
1
http://localhost:16006
损失函数可视化

参考链接:
1. https://blog.csdn.net/jin15203846657/article/details/122735375?spm=1001.2014.3001.5501
2. https://blog.csdn.net/AaaA00000001/article/details/127021967
3. https://blog.csdn.net/weixin_52288941/article/details/133518555