DeepLiDAR: Deep Surface Normal Guided Depth Prediction for Outdoor Scene from Sparse LiDAR

2023-05-16

DeepLiDAR复现

  • 一、下载
  • 二、配置环境依赖
  • 三、数据集准备
  • 四、预处理
    • 1.表面法线[surface-normal](https://github.com/valgur/surface-normal)
    • 2.运行设置
      • (1)报错1
      • (2)报错2
      • (3)报错3
      • (4)报错4
    • 3.路径设置
    • 4.生成data_depth_normals
    • 5.有关具体思路
  • 五、训练

一、下载

请添加图片描述1.DeepLiDAR_cyshih704

git clone https://github.com/cyshih704/DeepLiDAR

二、配置环境依赖

sudo sh cuda_10.2.89_440.33.01_linux.run
nvcc -V
conda create -n dl python=3.6
conda activate dl
#下面有requirements安装,下面这步可以先不跑
#conda install pytorch==1.11.0 torchvision==0.12.0 torchaudio==0.11.0 cudatoolkit=10.2 -c pytorch

三、数据集准备

1.kitti深度补全
请添加图片描述
2.使用以下脚本从原始数据集中提取相应的 RGB 图像

./download/rgb_train_downloader.sh
./download/rgb_val_downloader.sh
整体代码、数据和结果目录结构如下
    data_depth_annotated:地面实况数据(密集深度)
    data_depth_velodyne:稀疏数据(激光雷达)
    data_rgb:RGB 图像
    data_depth_annotated:用于训练表面法线, data_depth_annotated 使用 生成

.
├── KITTI_data
| ├── data_depth_annotated
| | ├── train
| | | ├── 2011_09_26_drive_0001_sync
| | | ├── proj_depth
| | | ├── groundtruch
| | | ├── image02
| | | ├── image03ubuntu18.04中安装opencv3.2
| | ├── val
| | | ├── (the same as train)
| ├── data_depth_velodyne
| | ├── train
| | | ├── 2011_09_26_drive_0001_sync
| | | ├── proj_depth
| | | ├── velodyne_raw
| | | ├── image_02
| | | ├── image_03
| | ├── val
| | | ├── (the same as train)
| ├── data_rgb
| | ├── train
| | | ├── 2011_09_26_drive_0001_sync
| | | ├── image_02
| | | ├── image_03
| | ├── val
| | | ├── (the same as train)
| ├── data_depth_normals
| | ├── (the same as data_depth_annotated)
| └── depth_selection
| | ├── test_depth_completion_anonymous
| | ├── test_depth_prediction_anonymous
| | ├── val_selection_cropped

3.基于 CARLA 的合成数据集
4.预训练模型
全都下载下来

四、预处理

预处理的目的是得到法线输出:获取深度图像(例如 KITTI 深度完成数据集 ) 作为输入并将估计的法线作为 RGB 图像输出。 深度值的比例无关紧要。

1.表面法线surface-normal

构建并安装库。 需要 CMake 3.11+、OpenCV 3+ 和 Eigen3。 支持 Python 2 和 3。
参考:
CMake 3.11+ 版本升级CMake3.18.3
OpenCV 3+(这里我用的3.4也ok的)
ubuntu18.04中安装opencv3.2
Eigen3.3.4

sudo apt-get install libeigen3-dev

2.运行设置

对于 CUDA 支持,可能需要使用适当的值设置以下环境变量:

conda activate dl
export CUDACXX=/usr/local/cuda-10.2/bin/nvcc
# if the default compiler is not yet supported by CUDA

安装 surface_normal

python setup.py install

或者执行

cmake ..
make -j8

或直接执行

pip install -v git+https://github.com/valgur/surface-normal.git

(1)报错1

请添加图片描述
原因:一开始以为是eigen的问题,其实不是,是在编译pcl gpu版本时,遇到找不到 math_functions.hpp报错。将 math_functions.hpp的42行改为cuda_runtime.h

(2)报错2

请添加图片描述
原因:eigen和cuda兼容问题
解决:都给它注释掉

cd /usr/local/cuda-10.2/include/crt
sudo gedit common_functions.h
将第74行对应内容直接注释

请添加图片描述
解决:

cd /usr/include/eigen3/Eigen/src/Core/arch/CUDA
sudo gedit Half.h
将596行直接注释

(3)报错3

请添加图片描述
原因:对’xx’引用不明确
说明程序中出现了两个相同变量,但代码中只出现了一个,c++中内置的库函数与xx重名了
pybind11里面的类型或者函数有一样的名字导致的冲突,
然后就是去掉using namespace,后面加作用域,比如py::,cv::等。
解决:

cd /home/flycar/DeepLiDAR/surface-normal/src
将 python.cpp 中 namespace py = pybind11;注释掉

请添加图片描述再次编译make -j8

(4)报错4

请添加图片描述
原因:编译器发出的错误,是在链接动态链接库surface_normal.cpython-36m-x86_64-linux-gnu.so时,R_X86_64_PC32和某个symbol发生冲突
解决:
在编译时加上-fPIC参数,重新编译
打开/home/flycar/DeepLiDAR/surface-normal下的CMakeLists.txt文件
在里面添加语句

set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -fpic")

  set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fpic")

请添加图片描述再次make -j8,成功
请添加图片描述

3.路径设置

在/home/flycar/DeepLiDAR/env.py中注释掉原来的添加你的数据集存储路径

#可以找到你放置的数据集位置
KITTI_DATASET_PATH='/media/flycar/Lab/kitti_depth/'
#训练保存路径
SAVED_MODEL_PATH='/home/nj/DeepLiDAR/runs/'

在这里插入图片描述

4.生成data_depth_normals

(1)附(此点可略过):之前运行以下命令后,出现过如下情况,分析原因是未安装apex库(用于多线程)但好像apex好像暂时也没用到

pip install -v git+https://github.com/valgur/surface-normal.git

请添加图片描述
未安装apex库(用于多线程)
安装 Apex CUDA 和 C++ 扩展
还支持通过Python 构建

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

请添加图片描述
(2)运行以下脚本生成 data_depth_normals

python3 generate_normals.py

缺tqdm就pip

pip install tqdm

请添加图片描述
刚开始一直显示out of memory内存不足啥的,打算修改每次送入的张数改小,还未修改又试了一次,自己开始跑了,莫名其妙
92606张图,很快就能生成

5.有关具体思路

输入:16bit 单通道深度图像。 输出:RGB 图像(表面法线)。

一般程序:

设置窗口大小=15

对于 src 中的每个有效深度点:

搜索windowsize附近区域,收集窗口内所有有效深度点

使用最小二乘法估计平面和曲面法线。

得到平面的法线作为这个深度点的法线

五、训练

1.在.bashrc文件中添加第三方python路径,以便可以找到训练所需的dataloader

export PYTHONPATH=/home/flycar/DeepLiDAR/

请添加图片描述
2.执行

python3 main.py -b <BATCH_SIZE> -e <EPOCH> -m <SAVED_MODEL_NAME> -l <MODEL_PATH> -n <NUM_DATA> -cpu
    -b <BATCH_SIZE>
        batch size used for training and validation
    -e <EPOCH>
        the number of epoch for training and validation
    -m <SAVED_MODEL_NAME>
        the model name (be saved in SAVED_MODEL_PATH)
    -l <MODEL_PATH>
        specified the model path if you want to load previous model
    -n <NUM_DATA>
        the number of data used for training. (set -1 if you want to use all the training data (85898))
    -cpu
        if you want to use CPU to train

训练模型分为三个不同的阶段。

(N) 训练表面法线
(D) 颜色通路和正常通路的训练深度
(A) 训练整个网络(修复表面法线网络)

我们用 3 种不同的设置测试模型
(模型我放在dataloader中)

(A) N 阶段训练 15 个 epoch,D 阶段训练 15 个 epoch,然后 A 阶段训练 15 个 epoch( 下载A )

(B) 训练A 12 epochs(由于提前停止耐心10,deepLidar.normal(随机)没有更新参数)( 下载B )

© 训练 A 10 个 epochs(deepLidar.normal 的更新参数)( 下载C )

我用的训练命令

python3 main.py -b 48 -e 1000 -m model1 -n 20000

报错参考下面修改
3.修改
找到/DeepLiDAR/dataloader/dataloader.py,
修改:
(1)训练batch_size和num_workers
在这里插入图片描述(2)intrinsics = INTRINSICS[date]报错,断点调试可以看到它对rgb图像路径读取到第几位的意思,这里将6改为7需要取到10
例如:文件名为:2011_09_26_drive_0001_sync
执行print后输出:2011_09_26
在这里插入图片描述
(3)修改这里的path,红色部分,改为你的存储路径
这里其实就是要训练用到的三个输入:深度图(原本下载的kitti),rgb(3.2提取的),生成的表面法线的RGB图(4.4生成的)
在这里插入图片描述(4)报错Keyerros:‘val’
添加一行split='train'
在这里插入图片描述(5)训练模型选择
同上述5.2匹配即可
在这里插入图片描述
4.训练表面法线(N)
在这里插入图片描述
dataloader 代码中写了列出所有张数的代码,故显示的总是85898张,但实际你给num_workers赋值多少就会训多少。
epoch设置为15就可以

5.颜色通路和正常通路的训练深度(D)

在这里插入图片描述
6.训练整个网络(修复表面法线网络)(A)
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

DeepLiDAR: Deep Surface Normal Guided Depth Prediction for Outdoor Scene from Sparse LiDAR 的相关文章

随机推荐