【OpenPCDet】部署与【Open3d】可视化
在此前一篇文章【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
2source activate
conda activate opcnet1
conda install pytorch==1.12.0 torchvision==0.13.0 torchaudio==0.12.0 cudatoolkit=11.3 -c pytorch
1
2
3import 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
1
pip install spconv-cu113
1
import spconv
准备数据集
文件结构:把数据按以下安排放入data 1
2
3
4
5
6
7
8
9
10OpenPCDet
├── data
│ ├── kitti
│ │ │── ImageSets
│ │ │── training
│ │ │ ├──calib & velodyne & label_2 & image_2 & (optional: planes) & (optional: depth_2)
│ │ │── testing
│ │ │ ├──calib & velodyne & image_2
├── pcdet
├── tools1
python -m pcdet.datasets.kitti.kitti_dataset create_kitti_infos tools/cfgs/dataset_configs/kitti_dataset.yaml
数据训练
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#2选1
后台运行:
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
kornia包报错
解决:更换kornia版本1
2
3
4
5
6
7
8
9
10
11File "/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)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ <--- HERE1
pip install kornia==0.6.8
no module named "av2" 保证python版本在3.8以上,运行
1
pip install av2
KeyError: 'road_plane' 这是没有准备相关数据,而模型却训练了,打开配置文件/OpenPCDet/tools/cfgs/kitti_models/pointpillar.yaml设置:
1
USE_ROAD_PLANE: False
cudatoolkit报错
跑四个小时才报错,MVP实至名归。 解决: conda install cudatoolkit=11.3 -c pytorch 注:该方法不一定生效,所以配置最初环境的时候应该使用我推荐的conda安装方法。1
numba.cuda.cudadrv.error.NvvmSupportError: No supported GPU compute capabilities found. Please check your cudatoolkit version matches your CUDA version.
Open3D可视化点云
由于我们的数据集是放在服务器上面的,这样有两条路径可以选择。其一是把结果output文件和数据集下载到本地,在本地配置open3d环境进行可视化;其二是仍在服务器进行可视化,在本地查看结果。但是服务器哪来的图形化窗口捏?这就要用到SSH中的狠角:X11-forwarding转发。(注意:不是所有ssh工具都支持X11,如finalshell不支持,而MobaXterm、Xshell支持(然而均无Linux版本,Linux可尝试WindTerm))
### X11安装与转发配置 服务器安装: 1
2
3sudo apt-get update
sudo apt-get install xorg
sudo apt-get install xauth1
sudo vim /etc/ssh/sshd_config
1
2
3AllowTcpForwarding yes
X11Forwarding yes
X11UseLocalhost no1
21. 在MobaXterm中,settings->configuration->x11->x11 remote access勾选full
2. SSH页勾选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
由于是网络传输,鼠标滚轮可以改变大小,有可接受范围内的卡顿现象。
Open3D Q&A
- 只发生一个报错: 这是由于听信谣言安装了0.11的open3d出现软件包问题,安装高版本open3d即可。
1
The 'sklearn' PyPI package is deprecated, use 'scikit-learn' rather than 'sklearn' for pip commands.
可视化损失参数
output环境提供了tensorboard文件,可以用于tensorboard可视化,还是两条路,要么下载在本地可视化,要么在服务器运行,端口映射到本地查看。作者头铁,一条路走到黑!开始:
服务器安装tensorboard:
1 | pip install tensorboardX |
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
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