草庐IT

OpenPCDet安装及其3D检测算法实现

PX Yue 2023-04-20 原文

OpenPCDet安装及其3D检测算法实现

前言

open-mmlab /OpenPCDet是一个简洁独立开源的适用于激光雷达3D目标检测的平台,支持多种基于深度学习的3D目标检测算法,可以使用开源数据集或者自制数据集进行训练测试。
github网址链接

一、配置环境

1.1 验证cmake 版本(3.13)

cmake --version

cmake官网链接
cmake版本要大于等于1.13,不然后边的库的setup过程会报错。不要看网上的博客盲目执行pip install cmake或者apt-get autoremove cmake,这样会导致出一些额外的错误,最好的方法是采用超链接的方法进行版本的修改。

1.2 验证cuda、cudnn版本(10.2)

nvcc -V和nvidia-smi两个命令显示的cuda是不一致的,这个问题不大。主要看nvcc -V这条命令显示的cuda版本。nvidia-smi所显示的cuda是,这个台机器安装驱动所能带动的最大cuda版本,nvcc -V显示的cuda版本才是运行是的版本。一般来说nvidia-smi所显示的版本要高一些。

1.3 确定python(3.7)、pytorch版本

安装pytorch时,安装命令,建议去官网复制粘贴,不容易出现cuda和torch版本不匹配的问题。有时也直接用下边的命令行,下载安装也非常快,比如 2.1的第三条指令。

二、安装spconv

2.1 创建虚拟环境

conda create -n pcdet python=3.7  # 创建python3.7环境
conda activate pcdet # 激活环境
conda install pytorch==1.5.0 torchvision==0.6.0 -c pytorch

验证安装成功

(pcdet) ypx@ypx:~/ws/OpenPCDet$ python
Python 3.7.13 (default, Mar 29 2022, 02:18:16) 
[GCC 7.5.0] :: Anaconda, Inc. on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import torch
>>> import torchvision
>>> print(torch.__version__)
1.5.0
>>> print(torchvision.__version__)
0.6.0a0+82fd1c8
>>> 


注:(1)pytorch与torchvision版本视具体工程算法、硬件要求进行适当选择。因为后期具体编译的需要,必要时需要提升版本。
(2)对于虚拟环境的pytorch与torchvision安装有conda install 与pip install两种。大部分情况下是没有差别,但是有些依赖会有问题,为保持一致性,最好选pip install。
(3)在虚拟环境中,注意pip install、pip3 install、conda install是有区别的:
https://www.zhihu.com/question/395145313
大部分情况下,二者没有区别,怎么安装都可以work,不过,二者混着装各种package你真的会因为版本冲突而发疯!conda有严格的检查机制,它会保证你当前装的package安装好之后能work,但是,它只检查用conda安装过的package。例如,你新安装的package会依赖numpy ,不过你已经安装numpy(e.g., 1.19.2),但是用pip安装的,不好意思,它会认为你没安装,然后用conda再安装一个依赖版本的numpy(e.g., 1.18.5)。这个时候,两个numpy可能就打架了。并且你pip list与conda list显示的numpy版本可能不一致,结果不知道最后运行程序的时候调用了哪个版本的numpy。这个时候,uninstall可能也卸载不干净,卸了一个还有一个,最后还可能一直list有却是一个空壳。这个时候,快刀斩乱麻的方法,找到anaconda的lib/site-packages/numpy, 手动删掉它!pip的一个好处是可以安装时既检查conda安装过package的也检查pip安装过的package。不过,它只负责要什么装什么,不负责能不能把装的一堆packages打通,可能装好不work。一般原则,在新环境中,如果装多个packages,既用到conda,又用到pip,那就先conda 的都装好,再pip,如果能用一种装到底,就不要来回换着用。

2.2 安装spconv

spconv是一个卷积库,分为spconv 1.x与spconv 2.x两种版本,具体可以参考:
OpenPCDet完整环境下Spconv1.x与Spconv2.x的安装问题及解决方法
spconv 的github链接

这一步比较容易出现问题。目前spconv出了2.0以上版本,而spconv2.只支持cuda10.2以上版本,如果cuda版本合适,直接运行pip安装即可,像我的系统安装的是cuda10.1,只能老老实实下载原始的版本。

2.2.1 找个文件夹,开始安装spconv1.2:

#安装libboost
sudo apt-get install libboost-all-dev
# 下载spconv,并切换分支
git clone -b v1.2.1 https://ghproxy.com/https://github.com/traveller59/spconv.git

2.2.2 spconv项目中的third_party对应的目录中有三个文件夹是空的,删除了进行更换;

cd third_party
git clone https://ghproxy.com/https://github.com/pybind/pybind11
#或者  git clone https://github.com/pybind/pybind11.git
cd pybind11
git checkout -b 3b1dbeb

2.2.3 编译安装 spconv v1.2

cd .. #退回
cd ..
python3 setup.py bdist_wheel
#如setup.py这一步报错,可能需要你删掉build/ dist/ spconv.egg-info/,这几个文件夹之后再编译

成功编译后:

注:这一步极有可能报错,

报错一:


报错二:

此报错,什么都不需要修改,直接再执行一次。
报错三:

解决办法参考:

运行setup.py无法编译spconv的问题–ubuntu18.04

ubuntu18.04安装spconv踩坑实录

cout不是std的成员

(1)当无具体对应的报错解决方案时,需要针对自己的具体报错,进行百度搜索

(2)若出现报错nvcc fatal: unknown ‘-Wall’ 注释文件 中包含 -Wall 的两行代码 并重新执行
Caffe2Targets.cmake 文件路径如下:

~/anaconda3/envs/pcdet/lib/python3.6/site-packages/torch/share/cmake/Caffe2/Caffe2Targets.cmake

两行代码如下:

(line 73) INTERFACE_COMPILE_OPTIONS "-Wall;-Wextra;-Wno-unused-parameter;-Wno-missing-field-initializers;-Wno-write-strings;-Wno-unknown-pragmas;-Wno-missing-braces;-fopenmp"

(line 93) INTERFACE_COMPILE_OPTIONS "-Wall;-Wextra;-Wno-unused-parameter;-Wno-missing-field-initializers;-Wno-write-strings;-Wno-unknown-pragmas;-Wno-missing-braces"

2.2.4 安装:

cd ./dist
pip install spconv-1.2.1-cp37-cp37m-linux_x86_64.whl# 先检查一下dist里边的文件,有可能是空的

2.2.5 验证是否安装成功

python
import spconv

结果无报错即可

三、安装Openpcdet

git clone https://ghproxy.com/https://github.com/open-mmlab/OpenPCDet.git
cd OpenPCDet
pip install -r requirements.txt 
python setup.py develop 


要确认是安装的完整版的pcdet,如果不是,重新编译,或者更换pytorch版本编译。

验证pcdet是否安装成功,无报错即可功,:

python 
import pcdet

参考链接:
安装 open-mmlab /OpenPCDet并测试demo

三维目标检测之OpenPCDet环境配置及demo测试

openpcdet环境配置及demo运行

四、复现demo(以pointpillar算法为例)

4.1 下载pointpillar的预训练模型

PointPillars点云检测在OpenPCDet推理代码详解

若复现目标是其他算法,则选择对应的预训练模型
下载链接pointpillar预训练模型

将下载好的文件pointpillar_7728.pth 放入文件夹/OpenPCDet/tools

4.2 下载kitti数据集

kitti官网下载链接
object-> 3d object

选择的是激光雷达的3D点云数据:
Download Velodyne point clouds, if you want to use laser information (29 GB)
下载完成后解压发现里面有两个文件夹,分为训练集和测试集:training和testing
下载下来后将其放置一个固定位置。

4.3 选择并下载可视化工具

可视化工具有两款可以选择:mayavi与open3d
至于尝试进行ros下的可视化,可以参考另一篇博客:三维目标检测之ROS可视化

4.3.1 选择open3d进行可视化

open3d的版本选择跟ubuntu的版本号也有关系,这个要注意。具体可以参考这篇博客:
Open3D版本和Ubuntu的关系

(1) 安装指令:

conda install -c open3d-admin open3d==0.9.0
pip install open3d-python

open3d==0.9.0的安装

open3d-python的安装

(2) 验证open3d是否安装成功:

python
import open3d

(3)指令运行

python3 -s  demo.py --cfg_file cfgs/kitti_models/pointpillar.yaml  --ckpt pointpillar_7728.pth --data_path /home/ypx/ws/OpenPCDet/data_object_velodyne/testing/velodyne/000000.bin

其中:

–cfg_file: .yaml配置文件
–ckpt:  为训练好的.path 模型文件
–data_path:为检测的数据.bin文件
-s:  有时候之前安装过open3d,所以在~/.local中有一个版本错误的open3d,在运行demo程序的时候,需要加上-s,-s可以让Python不去查找用户目录中的库。

(4)解决报错
有时执行完这条语句后,会出现报错

报错一:

报错二:

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)

以上报错,
这大概率是open3d版本与ubuntu不对应,或者安装了多个版本的open3d,此时可以删除重新安装:

conda remove open3d

重新安装时,最好4.3.1的(1)的两条指令一起执行。

报错四:


open3d有时候会缺少一些部分功能包,可以尝试 pip install <功能包名>;
但是注意安装位置,有时是./local,而不是当前新建的虚拟环境:这时要么想办法调用./local的文件(去掉执行命令中的-s,python3换为python),要么想办法确认当前的python版本(pip3)和安装指令,安装到当前环境中

报错五:
段错误(核心已转储)

或者

(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
段错误 (核心已转储)

解决办法参考,【段错误(核心已转储)——运行PV-RCNN代码 python demo.py】

报错六:

pytorch版本过低,某些函数无法激活,更换版本。

(4)可视化结果:

4.3.2 选择mayavi进行可视化

(1) tools/demo.py文件中,优先使用的是open3d,如下图所示,如果想要用mayavi这个库的话,需要把try部分删了,只用except里边的部分。
原文件:

import argparse
import glob
from pathlib import Path

try:
    import open3d
    from visual_utils import open3d_vis_utils as V
    OPEN3D_FLAG = True
except:
    import mayavi.mlab as mlab
    from visual_utils import visualize_utils as V
    OPEN3D_FLAG = False

import numpy as np
import torch

from pcdet.config import cfg, cfg_from_yaml_file
from pcdet.datasets import DatasetTemplate
from pcdet.models import build_network, load_data_to_gpu
from pcdet.utils import common_utils

将这一块去除就可以了:

try:
    import open3d
    from visual_utils import open3d_vis_utils as V
    OPEN3D_FLAG = True
except:

修改后:

import argparse
import glob
from pathlib import Path
import mayavi.mlab as mlab
from visual_utils import visualize_utils as V
OPEN3D_FLAG = False

import numpy as np
import torch

from pcdet.config import cfg, cfg_from_yaml_file
from pcdet.datasets import DatasetTemplate
from pcdet.models import build_network, load_data_to_gpu
from pcdet.utils import common_utils

(2)安装

pip install vtk==8.1.2 # 自动安装的vtk是9,会产生冲突
pip install mayavi==4.7.3
pip install PyQt5
pip install scipy
pip install scikit-image
pip install tqdm
pip install torchvision

(3)报错解决:
python3.8安装mayavi4.7.3
Conda安装mayavi
python安装mayavi后报错AttributeError

(4)指令运行

python demo.py --cfg_file cfgs/kitti_models/pointpillar.yaml     --ckpt pointpillar_7728.pth     --data_path /home/ypx/ws/OpenPCDet/data_object_velodyne/testing/velodyne/000000.bin

整体参考:
ubuntu 18.04 从零开始复现 OpenPCDet 训练kitti数据集并评估 可视化 损失函数

有关OpenPCDet安装及其3D检测算法实现的更多相关文章

  1. ruby - 在 64 位 Snow Leopard 上使用 rvm、postgres 9.0、ruby 1.9.2-p136 安装 pg gem 时出现问题 - 2

    我想为Heroku构建一个Rails3应用程序。他们使用Postgres作为他们的数据库,所以我通过MacPorts安装了postgres9.0。现在我需要一个postgresgem并且共识是出于性能原因你想要pggem。但是我对我得到的错误感到非常困惑当我尝试在rvm下通过geminstall安装pg时。我已经非常明确地指定了所有postgres目录的位置可以找到但仍然无法完成安装:$envARCHFLAGS='-archx86_64'geminstallpg--\--with-pg-config=/opt/local/var/db/postgresql90/defaultdb/po

  2. ruby - 完全离线安装RVM - 2

    我打算为ruby​​脚本创建一个安装程序,但我希望能够确保机器安装了RVM。有没有一种方法可以完全离线安装RVM并且不引人注目(通过不引人注目,就像创建一个可以做所有事情的脚本而不是要求用户向他们的bash_profile或bashrc添加一些东西)我不是要脚本本身,只是一个关于如何走这条路的快速指针(如果可能的话)。我们还研究了这个很有帮助的问题:RVM-isthereawayforsimpleofflineinstall?但有点误导,因为答案只向我们展示了如何离线在RVM中安装ruby。我们需要能够离线安装RVM本身,并查看脚本https://raw.github.com/wayn

  3. ruby-on-rails - rails 目前在重启后没有安装 - 2

    我有一个奇怪的问题:我在rvm上安装了ruby​​onrails。一切正常,我可以创建项目。但是在我输入“railsnew”时重新启动后,我有“程序'rails'当前未安装。”。SystemUbuntu12.04ruby-v"1.9.3p194"gemlistactionmailer(3.2.5)actionpack(3.2.5)activemodel(3.2.5)activerecord(3.2.5)activeresource(3.2.5)activesupport(3.2.5)arel(3.0.2)builder(3.0.0)bundler(1.1.4)coffee-rails(

  4. ruby - 如何为 emacs 安装 ruby​​-mode - 2

    我刚刚为fedora安装了emacs。我想用emacs编写ruby。为ruby​​提供代码提示、代码完成类型功能所需的工具、扩展是什么? 最佳答案 ruby-mode已经包含在Emacs23之后的版本中。不过,它也可以通过ELPA获得。您可能感兴趣的其他一些事情是集成RVM、feature-mode(Cucumber)、rspec-mode、ruby-electric、inf-ruby、rinari(用于Rails)等。这是我当前用于Ruby开发的Emacs配置:https://github.com/citizen428/emacs

  5. ruby-on-rails - 无法在centos上安装therubyracer(V8和GCC出错) - 2

    我正在尝试在我的centos服务器上安装therubyracer,但遇到了麻烦。$geminstalltherubyracerBuildingnativeextensions.Thiscouldtakeawhile...ERROR:Errorinstallingtherubyracer:ERROR:Failedtobuildgemnativeextension./usr/local/rvm/rubies/ruby-1.9.3-p125/bin/rubyextconf.rbcheckingformain()in-lpthread...yescheckingforv8.h...no***e

  6. ruby - 通过 RVM (OSX Mountain Lion) 安装 Ruby 2.0.0-p247 时遇到问题 - 2

    我的最终目标是安装当前版本的RubyonRails。我在OSXMountainLion上运行。到目前为止,这是我的过程:已安装的RVM$\curl-Lhttps://get.rvm.io|bash-sstable检查已知(我假设已批准)安装$rvmlistknown我看到当前的稳定版本可用[ruby-]2.0.0[-p247]输入命令安装$rvminstall2.0.0-p247注意:我也试过这些安装命令$rvminstallruby-2.0.0-p247$rvminstallruby=2.0.0-p247我很快就无处可去了。结果:$rvminstall2.0.0-p247Search

  7. ruby - 如何在 Lion 上安装 Xcode 4.6,需要用 RVM 升级 ruby - 2

    我实际上是在尝试使用RVM在我的OSX10.7.5上更新ruby,并在输入以下命令后:rvminstallruby我得到了以下回复:Searchingforbinaryrubies,thismighttakesometime.Checkingrequirementsforosx.Installingrequirementsforosx.Updatingsystem.......Errorrunning'requirements_osx_brew_update_systemruby-2.0.0-p247',pleaseread/Users/username/.rvm/log/138121

  8. ruby - Fast-stemmer 安装问题 - 2

    由于fast-stemmer的问题,我很难安装我想要的任何ruby​​gem。我把我得到的错误放在下面。Buildingnativeextensions.Thiscouldtakeawhile...ERROR:Errorinstallingfast-stemmer:ERROR:Failedtobuildgemnativeextension./System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/bin/rubyextconf.rbcreatingMakefilemake"DESTDIR="cleanmake"DESTDIR=

  9. ruby - RuntimeError(自动加载常量 Apps 多线程时检测到循环依赖 - 2

    我收到这个错误:RuntimeError(自动加载常量Apps时检测到循环依赖当我使用多线程时。下面是我的代码。为什么会这样?我尝试多线程的原因是因为我正在编写一个HTML抓取应用程序。对Nokogiri::HTML(open())的调用是一个同步阻塞调用,需要1秒才能返回,我有100,000多个页面要访问,所以我试图运行多个线程来解决这个问题。有更好的方法吗?classToolsController0)app.website=array.join(',')putsapp.websiteelseapp.website="NONE"endapp.saveapps=Apps.order("

  10. ruby - 如何根据特征实现 FactoryGirl 的条件行为 - 2

    我有一个用户工厂。我希望默认情况下确认用户。但是鉴于unconfirmed特征,我不希望它们被确认。虽然我有一个基于实现细节而不是抽象的工作实现,但我想知道如何正确地做到这一点。factory:userdoafter(:create)do|user,evaluator|#unwantedimplementationdetailshereunlessFactoryGirl.factories[:user].defined_traits.map(&:name).include?(:unconfirmed)user.confirm!endendtrait:unconfirmeddoenden

随机推荐