耗时100h折磨,踩坑无数,终于搭建好平台。

以下是搭建过程,对于其他的云平台和本地搭建也同样适用,后面有搭建过程中遇到问题的解决方法。

一.九天毕昇云平台

官方网站:九天毕昇

关于九天云平台的具体介绍,可以参照
最良心算力平台 | 九天毕昇 |人工智能 | 深度学习 | 中国移动

1.运行环境

使用该云平台,能够省一些搭建和运行的时间,方便用户进行调整。

平台配置:8核32G + 1 V100,CUDA10.1,Ubuntu18.04,python3.7
安装环境:torch == 1.6.0,torchvision == 0.7.0,spconv == 1.2.1,cmake == 3.15.3,pcdet == 0.5.2,vtk == 8.1.2

2.云平台包含的第三方库

Package                Version            
---------------------- -------------------
absl-py                1.0.0              
aiohttp                3.8.1              
aiosignal              1.2.0              
anyio                  2.2.0              
appdirs                1.4.4              
argcomplete            1.12.3             
argon2-cffi            20.1.0             
asn1crypto             1.3.0              
astor                  0.8.1              
async-generator        1.10               
async-timeout          4.0.1              
asynctest              0.13.0             
attrs                  21.2.0             
Babel                  2.9.1              
backcall               0.2.0              
bleach                 4.0.0              
bokeh                  2.4.2              
cached-property        1.5.2              
cachetools             4.2.4              
certifi                2021.10.8          
cffi                   1.14.0             
cfgv                   3.1.0              
chardet                3.0.4              
charset-normalizer     2.0.4              
click                  7.1.2              
cma                    3.0.3              
colorlog               4.1.0              
conda                  4.11.0             
conda-package-handling 1.6.0              
cryptography           2.8                
cycler                 0.10.0             
debugpy                1.5.1              
decorator              5.1.0              
defusedxml             0.7.1              
distlib                0.3.0              
docopt                 0.6.2              
entrypoints            0.3                
filelock               3.0.12             
flake8                 3.8.3              
Flask                  1.1.2              
Flask-Babel            1.0.0              
frozenlist             1.2.0              
funcsigs               1.0.2              
gast                   0.2.2              
google-auth            1.35.0             
google-auth-oauthlib   0.4.6              
google-pasta           0.2.0              
graphviz               0.14               
grpcio                 1.43.0             
gunicorn               20.0.4             
h5py                   3.6.0              
hdfs                   2.5.8              
identify               1.4.19             
idna                   2.8                
importlib-metadata     4.8.2              
ipykernel              6.4.1              
ipython                7.29.0             
ipython-genutils       0.2.0              
itsdangerous           1.1.0              
jedi                   0.18.0             
Jinja2                 3.0.2              
joblib                 0.15.1             
json5                  0.9.6              
jsonschema             3.2.0              
jupyter-client         7.0.6              
jupyter-core           4.9.1              
jupyter-server         1.4.1              
jupyter-server-proxy   3.2.0              
jupyter-tensorboard    0.2.0              
jupyterlab             3.2.1              
jupyterlab-nvdashboard 0.6.0              
jupyterlab-pygments    0.1.2              
jupyterlab-server      2.8.2              
Keras-Applications     1.0.8              
Keras-Preprocessing    1.1.2              
kiwisolver             1.2.0              
Markdown               3.3.6              
MarkupSafe             2.0.1              
matplotlib             3.2.1              
matplotlib-inline      0.1.2              
mccabe                 0.6.1              
mistune                0.8.4              
mkl-fft                1.3.1              
mkl-random             1.2.2              
mkl-service            2.4.0              
multidict              5.1.0              
nbclassic              0.2.6              
nbclient               0.5.3              
nbconvert              6.1.0              
nbformat               5.1.3              
nest-asyncio           1.5.1              
nltk                   3.5                
nodeenv                1.4.0              
notebook               6.4.6              
numpy                  1.21.2             
oauthlib               3.1.1              
objgraph               3.4.1              
olefile                0.46               
opencv-python          4.2.0.34           
opt-einsum             3.3.0              
packaging              21.3               
paddlehub              1.7.1              
paddlepaddle-gpu       1.8.2.post107      
pandas                 1.0.4              
pandocfilters          1.4.3              
parso                  0.8.2              
pathlib                1.0.1              
pexpect                4.8.0              
pickleshare            0.7.5              
Pillow                 8.4.0              
pip                    20.0.2             
pre-commit             2.5.1              
prettytable            0.7.2              
prometheus-client      0.12.0             
prompt-toolkit         3.0.20             
protobuf               3.12.2             
psutil                 5.8.0              
ptyprocess             0.7.0              
pyasn1                 0.4.8              
pyasn1-modules         0.2.8              
pycodestyle            2.6.0              
pycosat                0.6.3              
pycparser              2.19               
pyflakes               2.2.0              
Pygments               2.10.0             
pynvml                 11.4.1             
pyOpenSSL              19.1.0             
pyparsing              3.0.4              
pyrsistent             0.18.0             
PySocks                1.7.1              
python-dateutil        2.8.2              
pytz                   2021.3             
PyYAML                 5.3.1              
pyzmq                  22.3.0             
rarfile                3.1                
regex                  2020.6.8           
requests               2.22.0             
requests-oauthlib      1.3.0              
rsa                    4.8                
ruamel-yaml            0.15.87            
scipy                  1.4.1              
Send2Trash             1.8.0              
sentencepiece          0.1.92             
setuptools             45.2.0.post20200210
simpervisor            0.4                
six                    1.14.0             
sniffio                1.2.0              
tensorboard            2.1.1              
tensorflow             2.1.0              
tensorflow-estimator   2.1.0              
termcolor              1.1.0              
terminado              0.9.4              
testpath               0.5.0              
toml                   0.10.1             
tornado                6.1                
tqdm                   4.42.1             
traitlets              5.1.1              
typing-extensions      3.10.0.2           
urllib3                1.25.8             
virtualenv             20.0.23            
visualdl               2.0.0b6            
wcwidth                0.2.5              
webencodings           0.5.1              
Werkzeug               1.0.1              
wheel                  0.34.2             
wrapt                  1.13.3             
yapf                   0.26.0             
yarl                   1.6.3              
zipp                   3.6.0

二.开始搭建

相关文件的下载链接:
链接:https://pan.baidu.com/s/1_Te4eSNl09d1XvDPjckBEQ?pwd=6666

官方文件多少有点问题(后面会说),所以搭建时就不用clone指令了。同时我对下载来的官方文件添加删除了一些些,该链接里头就是修改好的文件。

下载好后,先在云平台上上传好数据集,创建项目并导入(具体操作看上面的视频链接),导入的文件会存在/data/usr文件夹中。

1.整理文件

首先,在/data/usr文件夹中,将下载的三个文件:PointCloudDet3D.zip,cmake-3.15.3.tar.gz,spconv-1.2.1.zip拷贝(或剪切)到/root下。
在这里插入图片描述)

2.解压文件

在默认的根目录下使用指令:

unzip PointCloudDet3D.zip
unzip spconv-1.2.1.zip

3.安装spconv-1.2.1

(1)安装第三方库

由于平台本身缺少torch等第三方库文件,会影响spconv的安装,所以先把第三方库装上。

先检查一下/root/PointCloudDet3D下的requirements.txt 文件是不是如下内容:

numpy
torch==1.6.0 
torchvision==0.7.0
numba
tensorboardX
easydict
pyyaml
scikit-image
tqdm
SharedArray
vtk==8.1.2

如果是就下一步用以下指令安装,不是则复制上方将原内容覆盖掉。

cd /root/PointCloudDet3D
pip install -r requirements.txt 

出现以下两个错误
ERROR: paddlepaddle-gpu 1.8.2.post107 has requirement gast>=0.3.3, but you’ll have gast 0.2.2 which is incompatible.

ERROR: paddlepaddle-gpu 1.8.2.post107 has requirement scipy<=1.3.1; python_version >= “3.5”, but you’ll have scipy 1.4.1 which is incompatible.

不用管,用不到paddlepaddle-gpu。如果更改gast和scipy版本会影响TensorFlow的正常使用。

(2)安装wheel

cd /root/spconv-1.2.1
python setup.py bdist_wheel
cd dist
pip install spconv-1.2.1-cp37-cp37m-linux_x86_64.whl

没有报错,且最后一步为removing build/bdist.linux-x86_64/wheel,说明wheel安装成功。

(3)验证安装

输入

python
import spconv

若没报错,说明安装成功。
在这里插入图片描述

4.安装cmake-3.15.3

等待时间会很长,大约半个小时到一个小时。
使用以下命令进行安装:

cd
tar -xvzf cmake-3.15.3.tar.gz
cd cmake-3.15.3
./bootstrap    #执行引导文件
#该命令执行需要一定时间,请耐心等待。成功执行结束之后,末尾提示:CMake has 	#bootstrapped.  Now run make.
make
sudo make install
cmake --version
cd ..
rm -rf cmake-3.15.3  #清理安装源代码
pip install cmake==3.15.3

注意最后需要用pip install 再进行安装一次。

5.搭建pcdet

(1)安装requirements.txt中的第三方库

打开终端使用命令,前面如果安装过了,就不用安装了。

cd /root/PointCloudDet3D
pip install -r requirements.txt 

(2)安装pcdet

使用命令安装pcdet

cd /root/PointCloudDet3D
python setup.py develop

出现Finished processing dependencies for pcdet==0.5.2+0表明安装成功。

三.训练&测试&demo

1.train.py

(1)添加环境变量,

首先添加环境变量:

export LD_LIBRARY_PATH=/usr/local/lib/python3.6/dist-packages/cntk/libs:"${LD_LIBRARY_PATH}"

(2)进行训练

进入PointCloudDet3D文件夹下运行,注意pv_rcnn.yaml的路径对不对。

cd /root/PointCloudDet3D/tools
python train.py --cfg_file cfgs/kitti_models/pv_rcnn.yaml

注意格式,train.py 文件后面需要加上需要训练模型的位置,不加会报错。如:
想要训练pv_rcnn,则需要加入pv_rcnn.yaml所在的文件路径;
想要训练voxelrcnn,则需要加入voxelrcnn所在的文件路径。

目前pcdet0.5.2仅包含以下的几个模型:
在这里插入图片描述

(3)进行测试

在训练完成的基础上进行,对训练的pth文件进行加载并测试数据,路径为/root/PointCloudDet3D/output/kitti_models/pv_rcnn/default/ckpt/checkpoint_epoch_*.pth

python test.py --cfg_file cfgs/kitti_models/pv_rcnn.yaml --batch_size 1 --ckpt /root/PointCloudDet3D/output/kitti_models/pv_rcnn/default/ckpt/checkpoint_epoch_51.pth --save_to_file

除了yaml路径外,还需要加入pth数据的位置,一般都放在output中(train后才会生成,否则木有文件数据)

(4)进行demo

首先要安装mayavi

pip install mayavi

运行代码,除了需要加上ckpt中训练的pth路径外,还需要加上data的路径,即 /root/PointCloudDet3D/data/kitti,否则也会报错。

python demo.py --cfg_file cfgs/kitti_models/pv_rcnn.yaml --ckpt /root/PointCloudDet3D/output/kitti_models/pv_rcnn/default/ckpt/checkpoint_epoch_51.pth  --data_path /root/PointCloudDet3D/data/kitti

四.所有命令

1.安装指令

为了方便搭建,干脆直接把以上所有命令总结一下。在整理完文件后,可以直接复制以下命令直接搭建完毕,一气呵成:

#解压
unzip PointCloudDet3D.zip
unzip spconv-1.2.1.zip

#安装三方包
cd /root/PointCloudDet3D
pip install -r requirements.txt 

#安装spconv
cd /root/spconv-1.2.1
python setup.py bdist_wheel
cd dist
pip install spconv-1.2.1-cp37-cp37m-linux_x86_64.whl

#安装cmake
cd
tar -xvzf cmake-3.15.3.tar.gz
cd cmake-3.15.3
./bootstrap    #执行引导文件
#该命令执行需要一定时间,请耐心等待。成功执行结束之后,末尾提示:CMake has 	#bootstrapped.  Now run make.
make
sudo make install
cmake --version
cd ..
rm -rf cmake-3.15.3  #清理安装源代码
pip install cmake==3.15.3

#安装pcdet
cd /root/PointCloudDet3D
python setup.py develop
#安装mayavi
pip install mayavi

2.训练+测试+demo

export LD_LIBRARY_PATH=/usr/local/lib/python3.6/dist-packages/cntk/libs:"${LD_LIBRARY_PATH}"
cd /root/PointCloudDet3D/tools
python train.py --cfg_file cfgs/kitti_models/pv_rcnn.yaml
python test.py --cfg_file cfgs/kitti_models/pv_rcnn.yaml --batch_size 1 --ckpt /root/PointCloudDet3D/output/kitti_models/pv_rcnn/default/ckpt/checkpoint_epoch_51.pth --save_to_file
python demo.py --cfg_file cfgs/kitti_models/pv_rcnn.yaml --ckpt /root/PointCloudDet3D/output/kitti_models/pv_rcnn/default/ckpt/checkpoint_epoch_51.pth  --data_path /root/PointCloudDet3D/data/kitti

搭建总共要花一个多小时的时间,训练、测试、demo共两小时,耐心等待即可。

3.初始化指令

每次重新打开项目时,路径和pcdet安装都会被清除,所以加入如下指令进行初始化:

#pcdet文件夹
cd PointCloudDet3D
python setup.py develop
export LD_LIBRARY_PATH=/usr/local/lib/python3.6/dist-packages/cntk/libs:"${LD_LIBRARY_PATH}"
cd tools
python train.py --cfg_file cfgs/kitti_models/pv_rcnn.yaml

五.训练自己的数据

这里有我自己在官方下载的数据集,超大!warning!
链接:https://pan.baidu.com/s/1kZ1I45qGX7NNjMFzt7wK1w
提取码:6666

2022-11-3 补充info文件和reduce文件
链接:https://pan.baidu.com/s/1ptf_kfOzDYDLq6j_ByUg4Q?pwd=6666
提取码:6666

需要将/root/PointCloudDet3D/tools/dataset_configs/cfgs/kitti_dataset.yaml中,将第二行改为自己想要的路径,例如:我的数据集的名字叫做kitti_big,则可以改为DATA_PATH: ‘…/data/kitti_big’
在这里插入图片描述

接着再用代码进行训练,python train.py --cfg_file cfgs/kitti_models/pointpillar.yaml会自动索引。

还有其他博主说的方法:3D目标检测——代码理解——OpenPCDet:数据处理适应自己的点云数据

六.相比于官方文件所做的改动

利用其它文章中的clone指令,可以得到官方文件,但是官方文件有些文件缺失,有些版本不够,还有些程序包压根就是有问题的,导致我查阅了很久很久才找到问题,以下就是我对文件的改动:

1.修改requirements中的参数

进入OpenPCDet-master文件夹,打开requirements.txt,将下面内容复制
numpy
torch == 1.6.0
torchvision == 0.7.0
numba
tensorboardX
easydict
pyyaml
scikit-image
tqdm
SharedArray
vtk==8.1.2

改动原因:
1.将torch>=1.1修改为torch == 1.6.0 ,torchvision == 0.7.0:因为torch=>1.1默认安装为最新版本torch1.12.0版本,与自带的CUDA10.1不匹配。
2.vtk==8.1.2:用pip install vtk会自动安装最新版本,而安装mayavi时,会有一个build搭建环境的过程,如果vtk版本过高,会导致安装失败。

其他直接pip install安装最新的就行,不影响运行。

2.添加了数据集

其他文章中,都要用info生成数据集。因为生成时,时常出问题,我干脆直接下下来放到PointCloudDet3D文件里头。

具体生成文件可以下载:
链接:https://pan.baidu.com/s/1JORT2ZJ_fwintcY0m7DhIg?pwd=6666
提取码:6666
在这里插入图片描述

3.更换了程序包

之前用的时pcdet0.3.0进行安装,发现安装好后,里面的程序根本运行不了,直接换成了pcdet0.5.2进行安装。

4.spconv下重新下载了pybind11

此问题说明spconv安装缺文件,从官方下载下来的spconv1.2.1,文件夹下的third_party/pybind11是空的,需要自己手动去下载。

pybind11链接:https://github.com/pybind/pybind11/tree/3b1dbebabc801c9cf6f0953a4c20b904d444f879

七.遇到问题

由于遇到的问题非常多,所以直接写在另一篇博客中:安装OpenPCDet时遇到的问题

八.文件说明

主要是自己看过的几个比较重要的源代码文件。

一、tools文件夹下的文件

train.py:训练
test.py:测试
demo.py:可视化
参考:PV-RCNN代码解读——demo.py & test.py

1.cfgs下:

(1)dataset_configs下:

kitti_dataset.yaml:在该文件中,可以修改数据集位置。
在这里插入图片描述
…/data/kitti表示的就是/root/PointCloudDet3D/data/kitti。

(2)kitti_models下

该文件夹下包含各种模型:
在这里插入图片描述

在使用训练程序时,可以加上想要训练的模型,如:python train.py --cfg_file cfgs/kitti_models/pointpillar.yaml

2.train_utils

(1)train_untils.py

①里面有tqdm进度条函数

 with tqdm.trange(start_epoch, total_epochs, desc='epochs', dynamic_ncols=True, leave=(rank == 0)) as tbar:
	        total_it_each_epoch = len(train_loader)

tqdm.tqdm函数用法:

pbar = tqdm.tqdm(total=total_it_each_epoch, leave=leave_pbar, desc='train', dynamic_ncols=True)#tqdm就是进度条
#total:迭代元素的多少,用len(iterable)代替,
#leave:如果True,显示所有的进度条,如果是None,只显示第一个进度条
#dynamic_ncols:设置为True之后,ncols相当于无效,ncol-改变进度条&环境的宽度 
#desc:进度条的前面的提示。

借鉴:tqdm 简介及正确的打开方式
②里面有训练并保存训练模型的函数

def train_model(model, optimizer, train_loader, model_func, lr_scheduler, optim_cfg,
                start_epoch, total_epochs, start_iter, rank, tb_log, ckpt_save_dir, train_sampler=None,
                lr_warmup_scheduler=None, ckpt_save_interval=1, max_ckpt_save_num=50,
                merge_all_iters_to_one_epoch=False):

二、pcdet文件夹下的文件

1.datasets子文件下

(1)kitti下

①kitti_dataset.py
用于生成数据,里面有生成图片,pkl,txt等文件的程序,生成的数据会放在/root/PointCloudDet3D/data/kitti文件夹下。
生成数据的指令:

python -m pcdet.datasets.kitti.kitti_dataset create_kitti_infos tools/cfgs/dataset_configs/kitti_dataset.yaml

因为经常报错,所以直接下下来放data里了。
代码具体详情请看:3D目标检测——代码理解——OpenPCDet:数据处理kitti_dataset.py的理解

②kitti_object_eval_python下的eval.py
参考:3D目标检测——代码理解——OpenPCDet:验证eval部分分析

参考文献

[1]Openpcdet-(1)环境配置及kitti数据集训练
[2]zjkclpch / OpenPCDet2

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐