九天毕昇”云平台:python3.7+CUDA10.1+torch1.6.0+spconcv1.2.1安装OpenPCDet全流程

“九天毕昇”云平台:python3.7+CUDA10.1+torch1.6.0+spconcv1.2.1安装OpenPCDet全流程

  • 一.九天毕昇云平台
  • 1.运行环境
  • 2.云平台包含的第三方库
  • 二.开始搭建
  • 1.整理文件
  • 2.解压文件
  • 3.安装spconv-1.2.1
  • (1)安装第三方库
  • (2)安装wheel
  • (3)验证安装
  • 4.安装cmake-3.15.3
  • 5.搭建pcdet
  • (1)安装requirements.txt中的第三方库
  • (2)安装pcdet
  • 三.训练&测试&demo
  • 1.train.py
  • (1)添加环境变量,
  • (2)进行训练
  • (3)进行测试
  • (4)进行demo
  • 四.所有命令
  • 1.安装指令
  • 2.训练+测试+demo
  • 3.初始化指令
  • 五.训练自己的数据
  • 六.相比于官方文件所做的改动
  • 1.修改requirements中的参数
  • 2.添加了数据集
  • 3.更换了程序包
  • 4.spconv下重新下载了pybind11
  • 七.遇到问题
  • 八.文件说明
  • 一、tools文件夹下的文件
  • 1.cfgs下:
  • (1)dataset_configs下:
  • (2)kitti_models下
  • 2.train_utils
  • (1)train_untils.py
  • 二、pcdet文件夹下的文件
  • 1.datasets子文件下
  • (1)kitti下
  • 参考文献
  • 耗时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/12AIlZhTFyiI3Y3HizgSkzQ
    提取码: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

    需要将/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文件里头。

    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

    物联沃分享整理
    物联沃-IOTWORD物联网 » 九天毕昇”云平台:python3.7+CUDA10.1+torch1.6.0+spconcv1.2.1安装OpenPCDet全流程

    发表评论