简述

  second.pytorch代码集成一些3d激光雷达点云的学习算法,关于这方面资料相对较少,主要是3d点云深度学习算法也是这两年才开始发力。学习资料相对单一,本文首先记录自己配置second.pytorch的nvidia-docker环境所踩过的坑,后期会分别写一写当前的3d-lidar点云的深度学习算法。这里,也推荐大家参考second.pytorch的环境配置教程。ok,让我们开始second.pytorch的环境配置苦练修行之路吧。

second.pytorch代码环境配置

  本文依赖nvidia-docker镜像下面安装的环境;这部分环境配置你可以直接参考github下面second.pytorch的readme.txt部分,我按照second.pytorch安装说明会出现一些问题,主要涉及软硬件的不匹配、编译问题,特此记录下来,配置完成的nvidia-docker镜像保存下来,不想参考本文的,可以直接进入文末下载nvidia-docker镜像。

second.pytorch官网github地址:
       https://github.com/traveller59/second.pytorch
我的电脑环境配置:
      GeForce RTX2080 + CUDA10.0 + Torch 1.1.0 + Python 3.7

前提条件:
  确保NVIDIA驱动、CUDA、docker、nvidida-docker安装提前配置成功。(cuda10.1测试编译spconv存在一些问题,建议安装cuda10.0)

nvidia-docker下环境配置

  目前安装成功的配置是cuda10.0+cudnn7.x系列,亲测在cuda10.1时候对second.pytorch依赖库spconv编译时候会出现问题,也是官网issues里面出现最多的cmake_device_link.o这些问题。建议使用cuda10.0版本

step 1 : 首先在nvidia-docker环境下将second代码pull下来

git clone https://github.com/traveller59/second.pytorch 
cd  ./second.pytorch/second

step 2 : 安装相关依赖项

  进入nvidia-docker镜像里面,建议安装Anaconda,去官网下载linux对应到镜像里面。

  Anaconda下载完成后,在docker镜像里面终端直接:(一路回车,需要输入就yes)

sh  Anaconda-xxx.sh  

安装其它依赖包:

conda install scikit-image scipy numba pillow matplotlib
pip install fire tensorboardX protobuf opencv-python

step 3: 编译spconv

单独将spconv拎出来是因为这里编译有点小坑需要避免一下:

  首先当然是clone spconv的代码部分:

git clone https://github.com/traveller59/spconv  --recursive

  spconv可能下载不成功,如果clone失败,报git clone fatal: The remote end hung up unexpectedly. 这个原因可能由于网络原因引起的。

通过设置一下git 配置的最低速度与最低速度时间来解决:

git config --global http.lowSpeedLimit 0
git config --global http.lowSpeedTime 999999 

  其次就是安装boost库进入docker的镜像系统头文件目录里面,可以直接敲如下命令即可:

apt-get install libboost-all-dev 

如果不想,去boost官网下载压缩包,解压后将头文件拷贝进spconv的头文件里面即可。

  再次要安装新版本的cmake > 3.13.2,同时将其添加进PATH目录;

  这一步,我是通过下载cmake源码对其进行编译安装的,cmake源码网站如下

wget http://www.cmake.org/files/v.3.13/cmake-3.13.2.tar.gz
tar xvf cmake-3.13.2.tar.gz
cd  cmake-3.13.2
./configure
make && make install 

检测cmake是否安装成功:

cmake --version

如果cmake的版本号没有改变,可能需要你添加一下软连接:

sudo ln -sf  /your_cmake_path/bin/*  /usr/bin/

如果出现error /usr/bin/cmake no such files … 等错误

将你的cmake-3.13.2路径下的cmake拷贝至/usr/bin下:

cp   /your_cmake_file_parent_path/cmake-3.13.2/bin/cmake    /usr/bin

cmake安装成功之后,不要忘记将cmake的文件路径添加至 .bashrc里面:

export  PATH=$PATH:/your_cmake_file_parent_path/cmake-3.13.2/bin

保存 .bashrc的更改

source .bashrc 

确定你已经安装pytorch>1.0+,如果没有,执行下面的命令:

conda install torch = 1.1.0
conda install torchvision 

到这里,编译sponcv的环境准备工作已经完成,直接进入sponcv目录下面,运行如下命令:

python  setup.py  bdist_wheel

结束后,会在dist目录下面生成对应的spconv-xxx-xxx.whl文件。继续运行如下命令:

cd  ./dist   
pip  install  spconv-xxx-xxx.whl  

  至此,spconv编译到此结束了。当然,如果你也用的cmake-3.13.2编译的spconv文件,可以直接下载我编译好的spconv文件,链接会在末尾给出。

step 4: 安装Apex

安装Apex比较简单,按照网页提示一把过:

git clone https://github.com/NVIDIA/apex
cd apex
pip install -v --no-cache-dir --global-option="--cpp_ext" --global-option="--cuda_ext" ./

step 5: 对cuda设置numba的环境

进入.bashrc里面进行编辑:

export NUMBAPRO_CUDA_DRIVER=/usr/lib/x86_64-linux-gnu/libcuda.so
export NUMBAPRO_NVVM=/usr/local/cuda/nvvm/lib64/libnvvm.so
export NUMBAPRO_LIBDEVICE=/usr/local/cuda/nvvm/libdevice

step 6: 添加second.pytorch至PYTHONPATH

进入.bashrc里面进行编辑:

export  PYTHONPATH=$PYTHONPATH:/your_second.pytorch_path/ 

至此,关于second.pytorch的nvidia-docker下面的环境依赖到此完美结束。

second.pytorch代码跑通调试bug修复(持续更新)

数据准备格式:

└── KITTI_DATASET_ROOT
       ├── training    <-- 7481 train data
       |   ├── image_2 <-- for visualization
       |   ├── calib
       |   ├── label_2
       |   ├── velodyne
       |   └── velodyne_reduced <-- empty directory
       └── testing     <-- 7580 test data
           ├── image_2 <-- for visualization
           ├── calib
           ├── velodyne
           └── velodyne_reduced <-- empty directory

参数配置文件修改:

train_input_reader: {
  ...
  database_sampler {
    database_info_path: "/path/to/dataset_dbinfos_train.pkl"
    ...
  }
  dataset: {
    dataset_class_name: "DATASET_NAME"
    kitti_info_path: "/path/to/dataset_infos_train.pkl"
    kitti_root_path: "DATASET_ROOT"
  }
}
...
eval_input_reader: {
  ...
  dataset: {
    dataset_class_name: "DATASET_NAME"
    kitti_info_path: "/path/to/dataset_infos_val.pkl"
    kitti_root_path: "DATASET_ROOT"
  }
}

  在second.pytorch/second/ 下面有个configs文件夹,里面有每个训练参数文件的配置。以car.fhd.config为例,打开文件找到对应上面的部分,进行数据路径配置修改成你的nvidia-docker映射的数据路径即可。

运行数据生成命令:

python create_data.py kitti_data_prep --data_path=KITTI_DATASET_ROOT

   这里需要将–data_path改成–root_path,因为create_data.py参数变量名为root_path。KITTI_DATASET_ROOT为你的nvidia-docker数据映射路径;

数据生成结束后,运行训练命令:

python ./pytorch/train.py train --config_path=./configs/car.fhd.config --model_dir=/path/to/model_dir

  训练阶段会出现–model_dir错误导致停止,其实就是需要你输入模型保存的路径,而且需要没有新建的文件夹:

  假设nvidia-docker的映射路径为/model_path/那么:

  你的模型路径为–model_dir=/model_path/model_20190809

它会新建一个文件夹model_20190809;

总结

  说实话,配置环境很费时间,软硬件版本的对应等等。还好有了docker的出现,以后复制环境相对方便许多,这个second.pytorch的环境我这边算是配置结束啦。过两天会上传对应的nvidia-docker镜像至docker-hub上面,方便大家进行下载直接使用。

  转到自动驾驶方向的激光雷达的深度学习算法了,目前还处于小白学习阶段。这块深度学习3d点云方面,还处于新兴发展阶段,目前主要将点云如何通过编解码方式有效的让CNN学习,或者对数据进行转换操作等等,加油,会有越来越多的人关注点云并推动深度学习在这个方向的发展。我就多摸鱼、捡漏的持续学习!

nvidia-docker镜像下载链接

second.pytorch的nvidia-docker镜像下载:
    docker pull smallmunich/ubt1804_second:v0

spconv经过cmake-3.13.2的whl文件下载:
    该文件在ubt1804_second镜像下面~/spconv/dist/ 里面

参考链接

https://github.com/traveller59/second.pytorch

https://github.com/traveller59/spconv

https://github.com/NVIDIA/apex

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐