00实验环境
Ubuntu 16.04
RTX 2080
CUDA 10.1
01安装步骤
1.1 安装前
1.1.1 验证cmake版本
cmake--版本
cmake版本必须大于等于1.13,否则后续库的设置过程会报错。不要阅读网上博客并盲目执行pip install cmake 或apt-get autoremove cmake,因为这会导致一些额外的错误。我参考这篇博客来升级cmake。
1.1.2 验证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|grepCUDNN_MAJOR-A2##显示已安装的cudnn版本
下面所有的库都安装完毕后,最好验证一下是否安装成功。成功后进行下一步,否则容易出错且难以定位。
1.2 配置环境并安装所需库
1.2.1 创建虚拟环境
创建虚拟环境
1.2.2 进入虚拟环境
condaactivateopenpcdet
1.2.3 安装pytorch
注意:已安装GPU 版本。安装完成后,可以测试torch是否可以调用cuda。
安装命令建议从官网复制粘贴。不容易造成cuda和torch版本不匹配的问题。我没有改源,只是使用下面的命令行,下载安装很快。
1.2.4 安装spconv
这一步更容易出现问题。目前spconv已经发布了2.0以上版本,以及spconv2.0版本。仅支持cuda10.2以上版本。
如果cuda版本合适,直接运行pip安装即可。比如我的系统安装的是cuda10.1,所以只能下载原来的版本。
找到一个文件夹并开始安装spconv1.2:
#安装libboossudo apt-get install libboost-all-dev#下载spconv并切换分支git clone -b v1.2.1 https://ghproxy.com/https://github.com/traveller59/spconv.gitcd spconv#在spconv项目中third_party对应的目录下三个文件夹都是空的,删除即可; #下载pybind11包替换空文件,并将pybind11放入cdthird_partygit clone https://ghproxy.com/https://github.com/pybind/pybind11cd . #返回python3 setup.py bdist_wheel #如果setup.py报错,可能需要删除build/dist/spconv.egg-info/,然后编译cd ./distpipinstallspconv-1.2.1-cp37-cp37m-linux_x86_64.whl# 首先检查dist中的文件。它们可能是空的。如果使用机器,可以安装spconv2.x: 方法一(pip安装): pip install spconv-cu102 -i https://pypi.tuna.tsinghua.edu.cn/simple 方法二(源码安装):#cumminstall git clone https://ghproxy.com/https://github.com/FindDefinition/cummcd ./cummpip install -e .#spconvinstall git clone https://ghproxy.com/https://github.com/traveller59/spconvcd ./spconvpipinstall- e.cuda 版本对应的spconv 版本:
验证安装是否成功:
pythonimportspconv1.3 安装OpenPCDet
命令:
gitclonehttps://ghproxy.com/https://github.com/open-mmlab/OpenPCDet.gitcdOpenPCDetpipinstall-rrequirements.txtpythonsetup.pydevelop
注意:numpy库不能太低。我的默认安装的是1.16.0版本。后续的错误信息不会直接显示numpy版本太低,而是会显示No Module xxx。很难判断是numpy版本的问题。
验证pcdet 是否安装成功:
pythonimportpcdet02可视化部分
ros下的可视化可以参考我写的另一篇博客。 3D目标检测的ROS可视化
2.1 安装可视化库
首先,您需要安装可视化库,mayavi 或open3d。您可以安装其中之一或两者。
我在安装mayavi 时遇到问题,所以我安装了open3d。下面以open3d为例。
因为新版本不支持ubuntu16.04,所以我这里指定了open3d版本号。我要为此感谢这个博客。没想到open3d版本选择也和ubuntu版本号有关。
如果不是ubuntu18.04及以上版本,open3d版本可以更高。
conda install -c open3d-admin open3d==0.9.0pipinstallopen3d-python
注意:使用conda安装open3d,pip安装总会出现问题。
验证open3d是否安装成功:
pythonimportopen3d
如果出现错误,可以到文章第三部分(问题总结)查看原因。可能是open3d版本不对,也可能是调用了~/.local中的open3d库。
在tools/demo.py文件中,首先使用了open3d,如下图所示。如果要使用mayavi库,需要删除try部分,只使用except 部分。
2.2 测试
从官网下载你要测试的型号。
将训练模型和测试点云数据放置在适当的位置,并执行以下命令。
python3 demo.py --cfg_file cfgs/kitti_models/pointpillars.yaml --ckpt pointpillars.pth --data_path${POINT_CLOUD_DATA} 我使用的数据是kitti数据集中的000000.bin,我选择pointpillars进行测试;
检测结果:
03问题总结
3.1 Mayavi问题:python3.8安装mayavi4.7.3
安装顺序和安装的版本有一定的要求,并且它们的编译顺序不能颠倒。
pip install vtk==8.1.2 # 自动安装的vtk是9,会产生冲突。 pip install mayavi==4.7.3 pipinstallPyQt5 错误消息:AttributeError:typeobject'DialogCode'hasnoattribute'Accepted' 这个问题我还没有解决。网上有很多方法。在我的机器上无法解决。
3.2 Open3d问题:
如果遇到类似下面的情况,很有可能是open3d版本的问题造成的。
情况一:
AttributeError:'open3d.geometry.PointCloud()'objecthasnoattribute'voxel_down_sample'
情况二:
ImportError:/lib/x86_64-linux-gnu/libm.so.6:version`GLIBC_2.27'notfound(需要/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-sdemo.py
如何在模块搜索路径中不包含~/.local/lib/pythonX.Y/sitepackages 的情况下运行python
3.3 运行demo时出错
场景1:分段错误(核心转储)
(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.bin2022-03-06 2126,628 INFO ------------------ OpenPCDet 快速演示---------------------------- - ----------2022-03-06 2126,628 INFO 样本总数: 1/home/auto/anaconda3/envs/pcdet/lib/python3.7/site-packages/torch/functioning。 py UserWarning: torch.meshgrid: 在即将发布的版本中,将需要传递索引参数。 (在./aten/src/ATen/native/TensorShape.cpp:2157 内部触发。) return _VF.meshgrid(tensors, **kwargs) # type:ignore[attr-defined]2022-03-06 2129,122 INFO==将参数从检查点pv_rcnn_8369.pth 加载到CPU2022-03-06 2129,154 INFO==Done (loaded 367/367)2022-03-06 2129 ,300 INFO 可视化样本index: 1 分段错误(核心转储)
责任编辑:彭静