很久没写过关于环境配置的博客了,这次实在是因为,自己在是在OpenPCDet环境的配置上遇到坑了。一环扣一环,由于我的实验环境是ubuntu16.04,跟网上大多数教程环境不一样,所以遇到了很多版本不匹配问题。
验证cmake版本
cmake --version
cmake版本要大于等于1.13,不然后边的库的setup过程会报错。不要看网上的博客盲目执行pip install cmake或者apt-get autoremove cmake,这样会导致出一些额外的错误。我参考的是这篇博客进行cmake的升级。
验证cuda和cudnn是否安装好了
先说一下我遇到的问题,因为这次的机子是我接手别人的,里边看似是cuda和cudnn都配置好了,但是后边运行的时候还是过不去。
nvcc -V和nvidia-smi两个命令显示的cuda是不一致的,这个问题不大。主要看nvcc -V这条命令显示的cuda版本。nvidia-smi所显示的cuda是,这个台机器安装驱动所能带动的最大cuda版本,nvcc -V显示的cuda版本才是运行是的版本。一般来说nvidia-smi所显示的版本要高一些。但是,我这台机器nvcc -V所显示是10.2,nvidia-smi所显示的是10.1,本着能不改驱动就不改驱动的原则(担心ubuntu的黑屏),我把~/bashrc中的环境变量改成了10.1版本的。
nvcc -V # 显示安装的cuda版本
cat /usr/local/cuda/include/cudnn.h | grep CUDNN_MAJOR -A 2 ## 显示安装的cudnn版本
下边所有库安装好之后,最好验证一下是否安装成功,成功后,再进行下一步,否则后边容易出错,且难定位。
conda create -n openpcdet python=3.7
conda activate openpcdet
pip install torch==1.8.1+cu101 torchvision==0.9.1+cu101 torchaudio==0.8.1 -f https://download.pytorch.org/whl/torch_stable.html
#安装libboost
sudo apt-get install libboost-all-dev
# 下载spconv,并切换分支
git clone -b v1.2.1 https://ghproxy.com/https://github.com/traveller59/spconv.git
cd spconv
# spconv项目中的third_party对应的目录中有三个文件夹是空的,删除了就行;
#下载pybind11这个包替换掉空文件,并把pybind11放入
cd third_party
git clone https://ghproxy.com/https://github.com/pybind/pybind11
cd .. #退回
cd ./dist
pip to install spconv-1.2.1-cp37-cp37m-linux_x86_64.whl# 先检查一下dist里边的文件,有可能是空的
python3 setup.py bdist_wheel
#如setup.py这一步报错,可能需要你删掉build/ dist/ spconv.egg-info/,这几个文件夹之后再编译
方法一(pip安装):
pip install spconv-cu102 -i https://pypi.tuna.tsinghua.edu.cn/simple
方法二(源码安装):
#cumm安装
git clone https://ghproxy.com/https://github.com/FindDefinition/cumm
cd ./cumm
pip install -e .
#spconv安装
git clone https://ghproxy.com/https://github.com/traveller59/spconv
cd ./spconv
pip install -e .
python
import spconv
命令:
git clone https://ghproxy.com/https://github.com/open-mmlab/OpenPCDet.git
cd OpenPCDet
pip install -r requirements.txt
python setup.py develop
注:numpy库不能太低,我的默认安装了1.16.0版本,后边报错信息不会直接显示numpy版本过低,而是显示No Module xxx,很难看出是numpy版本的问题。
验证pcdet是否安装成功:
python
import pcdet
参考资料
- OpenPCDet安装
- openpcdet环境配置
- 安装 open-mmlab /OpenPCDet并测试demo
- OpenPCDet v0.5版本的安装与测试
ros下的可视化,可以参考我另写的一篇博客。三维目标检测之ROS可视化
首先需要安装可视化的库,mayavi或者open3d两者都可以,可以安装其中一个,也可以两个都安装,我在安装mayavi的时候一直有问题,转而安装open3d,下边以open3d为例。
因为新版本不支持ubuntu16.04,所以我这里是指定的open3d版本号,这里要感谢这篇博客,之前没有考虑到open3d的版本选择跟ubuntu的版本号也有关系。如果不是ubuntu18.04及以上版本,open3d的版本就可以高一些了。
conda install -c open3d-admin open3d==0.9.0
pip install open3d-python
注:open3d的安装用conda来安装,pip安装一直会出问题。
验证open3d是否安装成功:
python
import open3d
如果有错误,可以到文中的第三部分(问题汇总),查看原因,可能是open3d版本不对,也可能是调用了~/.local中的open3d库。
参考资料:
从官方下载,想要测试的网络模型。
将训练模型和测试的点云数据放在合适的位置,执行下边的命令。
python3 demo.py --cfg_file cfgs / kitti_models / pointpillars.yaml \
--ckpt pointpillars.pth \
--data_path $ {POINT_CLOUD_DATA}
我用的数据是kitti数据集中的000000.bin,选用pointpillars来进行测试;
测试结果:
参考资料:
PointPillars点云检测在OpenPCDet推理代码详解
安装的顺序,安装的版本都有一定的要求,这几个的先后编译顺序不能颠倒。
pip install vtk==8.1.2 # 自动安装的vtk是9,会产生冲突
pip install mayavi==4.7.3
pip install PyQt5
报错信息:
AttributeError: type object 'DialogCode' has no attribute 'Accepted'
这个问题,我一直没解决,网上很多方法,在我的机子上都解决不了。
参考资料:
如果遇到类似下边的情况,大概率为open3d版本问题导致。
情况一:
AttributeError: 'open3d.geometry.PointCloud()' object has no attribute 'voxel_down_sample'
情况二:
ImportError: /lib/x86_64-linux-gnu/libm.so.6: version `GLIBC_2.27' not found (required by /home/xxxx/xxxx/lib/python3.7/site-packages/open3d/open3d_pybind.cpython-37m-x86_64-linux-gnu.so)
我在第二个问题上卡了一段时间,明明版本什么都对了呀,为啥运行demo.py的时候还是出错。
另外,因为我之前安装过open3d,所以在~/.local中有一个版本错误的open3d,在运行demo程序的时候,需要加上-s,-s可以让Python不去查找用户目录中的库。
python -s demo.py
参考资料:
情况一:段错误(核心已转储)
(pcdet) auto@auto-System-Product-Name:~/OpenPCDet/tools$ python demo.py --cfg_file cfgs/kitti_models/pv_rcnn.yaml --ckpt pv_rcnn_8369.pth --data_path ../data/kitti/testing/velodyne/000008.bin
2022-03-06 21:32:26,628 INFO -----------------Quick Demo of OpenPCDet-------------------------
2022-03-06 21:32:26,628 INFO Total number of samples: 1
/home/auto/anaconda3/envs/pcdet/lib/python3.7/site-packages/torch/functional.py:445: UserWarning: torch.meshgrid: in an upcoming release, it will be required to pass the indexing argument. (Triggered internally at ../aten/src/ATen/native/TensorShape.cpp:2157.)
return _VF.meshgrid(tensors, **kwargs) # type: ignore[attr-defined]
2022-03-06 21:32:29,122 INFO ==> Loading parameters from checkpoint pv_rcnn_8369.pth to CPU
2022-03-06 21:32:29,154 INFO ==> Done (loaded 367/367)
2022-03-06 21:32:29,300 INFO Visualized sample index: 1
段错误 (核心已转储)
参考资料: