【PMF代码复现及可视化】ICCV 2021 基于视觉感知的多传感器融合点云语义分割

  • 前言

本文在Ubuntu18.04下,使用python3.6      pytorch1.8.2 + torchvision0.9.2环境运行。

  • 电脑配置:NVIDIA GeForce RTX 3060。显卡不是特别好,运行训练代码花费4天11个小时
  • 数据集非常大,原始数据集按照数据集格式和架构配置完成165.2GB左右,生成semantic-kitti-fov数据集28.1G。如果没有足够的空间,不建议跑这个论文项目。
  • 考虑到数据集有人下载不方便(访问需要科学上网),已经放在文章下面评论区(百度网盘)

注意:文中所提供网站,建议大家都自行访问观看一下,网站中有更详细对于每一部分的解释。

最终结果:

视频效果是通过一帧帧图片播放形成。

单帧效果:

原始图像【PMF代码复现及可视化】ICCV 2021 基于视觉感知的多传感器融合点云语义分割_第1张图片

【PMF代码复现及可视化】ICCV 2021 基于视觉感知的多传感器融合点云语义分割_第2张图片

PMF论文地址:https://arxiv.org/abs/2106.15277

PMF代码地址:https://github.com/ICEORY/PMF

1.环境配置

本文环境Ubuntu18.04   CUDA 11.1  cuDNN8.0.4   pytorch1.8.2  torchvision0.9.2。

因本文环境与上一篇文章Randlanet环境一直,仅深度学习环境使用pytorch,故完全按照上一篇博客配置环境,上一篇博客地址:

Ubuntu18.04复现RandLA-Net(SemanticKITTTI数据集)----1.环境配置_复现randla-net网络-CSDN博客

从文章1.2开始,依次安装Anaconda   >>  显卡驱动 >> CUDA11.1 >> cuDNN8.0.4

安装完成后,安装pytorch1.8.2 + torchvision 0.9.2。步骤如下(如果使用1.8.0或者1.8.1版本的pytorch,可以自己到pytorch官网查找相应的安装命令):

# 1.使用anaconda创建环境
 conda create -n PMF python=3.6
 
 # 2.激活环境
 conda activate PMF
 
 # 3.安装 pytorch 1.8.2   torchvision  0.9.2   安装命令可以自己从pytorch官网查找
 
 conda install pytorch torchvision torchaudio cudatoolkit=11.1 -c pytorch-lts -c nvidia

安装完成后查看虚拟环境中安装的工具包:

conda list

【PMF代码复现及可视化】ICCV 2021 基于视觉感知的多传感器融合点云语义分割_第3张图片

验证torch:

# 1.在虚拟环境中导入python
python

# 2.导入pytorch模块

import torch

# 3.打印torch版本
print(torch.__version__)

# 4.验证torch是否可用
print(torch.cuda.is_available)

如下结果,证明torch可用:

至此,深度学习环境已配置完成。

2.代码复现

从论文源码网站下载并解压缩:

【PMF代码复现及可视化】ICCV 2021 基于视觉感知的多传感器融合点云语义分割_第4张图片

2.1 数据集准备

在PMF-master中创建data文件夹,用于存放semantickitti数据集。

所用数据集为KITTI Odometry Benchmark Velodyne point clouds (80 GB), KITTI Odometry Benchmark calibration data (1 MB) 和 SemanticKITTI label data (179MB)以及Download odometry data set (color, 65 GB)

链接如下:


http://semantic-kitti.org/dataset.html#download

【PMF代码复现及可视化】ICCV 2021 基于视觉感知的多传感器融合点云语义分割_第5张图片

The KITTI Vision Benchmark Suite

【PMF代码复现及可视化】ICCV 2021 基于视觉感知的多传感器融合点云语义分割_第6张图片

  • SemanticKitti文件位置

由 22 个立体序列组成,以无损 png 格式保存:我们提供 11 个带有地面实况轨迹的序列 (00-10) 用于训练,以及 11 个没有地面实况的序列 (11-21) 用于评估
data_odometry_calib---校准数据 calib.txt×.txt
data_odometry_color---对应每个序列的彩色RGB图像数据
data_odometry_labels---提供一个文件XXXXXX.label&poses.txt
每个序列中每次扫描的标签.bin结尾;
data_odometry_velodyne--- 每个序列中每次扫描的点云提供XXXXXX.bin
每次.bin扫描都是[x,y,z,remission]

下载完成后将以上数据整理为如下格式:

PMF-master/data/semantic-kitti/
                  └── sequences/
                          ├── 00/
                          │   ├── poses.txt
                          |   ├── calib.txt
                          |   ├── times.txt
                          │   ├── image_2/
                          │   ├── image_3/
                          │   ├── labels/
                          │   │     ├ 000000.label
                          │   │     ├ 000001.label
                          │   │     └ ...
                          │   └── velodyne/
                          │         ├ 000000.bin
                          │         ├ 000001.bin...
                          |         └ ...
                          ├── 01/
                          ├── 02/
                          .
                          .
                          .
                          └── 21/

整理后如下图:

【PMF代码复现及可视化】ICCV 2021 基于视觉感知的多传感器融合点云语义分割_第7张图片

2.2 semantic-kitti-fov数据集生成

1. 进入tasks/pmf_semantickitti_fov目录,修改文件create_fov_dataset.py中数据集配置路径src_root为实际semantic-kitti数据集路径:

  src_root="../../data/semantic-kitti/sequences", # path to the original semantic-kitti dataset

  dst_root="../../data/semantic-kitti-fov/sequences", # path to the generated semantic-kitti-fov dataset

2. 在创建好的环境中运行create_fov_dataset.py文件,生成semantic-kitti-fov数据集。

python create_fov_dataset.py

生成的semantic-kitti-fov数据集,只有00-10总共11个序列。

【PMF代码复现及可视化】ICCV 2021 基于视觉感知的多传感器融合点云语义分割_第8张图片

2.3 模型训练

1. 进入tasks/pmf目录,修改配置文件config_server_kitti.yaml中数据集路径data_root为实际数据集路径。

data_root: "../../data/semantic-kitti-fov/sequences"

根据自己的电脑配置,修改gpu,batch_size等参数

【PMF代码复现及可视化】ICCV 2021 基于视觉感知的多传感器融合点云语义分割_第9张图片
2. 修改run.sh确保nproc_per_node的数值与yaml文件中配置的gpu数量一致(根据电脑中显卡个数设置,只有一个显卡的,nproc_per_node=1

将nuscenes数据集训练命令注释(关闭),semantic kitti训练命令打开;

【PMF代码复现及可视化】ICCV 2021 基于视觉感知的多传感器融合点云语义分割_第10张图片
3. 运行以下指令执行训练脚本

./run.sh
# 或者 bash run.sh

中间可能会运行失败,提示缺少各种工具包,如遇到缺少的工具包,安装命令如下:

# ModuleNotFoundError: No module named 'yaml'
pip install pyyaml

# ModuleNotFoundError: No module named 'tensorboardX'
pip install tensorboardX

# ModuleNotFoundError: No module named 'pyquaternion'
pip install pyquaternion

# ModuleNotFoundError: No module named 'nuscenes'
pip install nuscenes-devkit

    # 失败  ERROR: Could not build wheels for opencv-python, which is required to install pyproject.toml-based projects
    pip install -i https://pypi.douban.com/simple/ pip install opencv-python==4.3.0.38
    
    
# RuntimeError: NCCL error in: /opt/conda/conda-bld/pytorch_1627336348344/work/torch/lib/c10d/ProcessGroupNCCL.cpp:825, invalid usage, NCCL version 2.7.8

    run.sh    --nproc_per_node=1

4. 执行成功之后会在 PMF/experiments/PMF-SemanticKitti路径下自动生成实验日志文件,目录结构如下:

|--- log_dataset_network_xxxx/
	|--- checkpoint/ 训练断点文件以及最佳模型参数
	|--- code/ 代码备份
	|--- log/ 控制台输出日志以及配置文件副本
	|--- events.out.tfevents.xxx tensorboard文件

控制台输出内容如下,其中最后的输出时间为实验预估时间

训练过程中,可以重新打开一个中端,输入一下命令,查看显卡使用情况:

watch -n 2 nvidia-smi

【PMF代码复现及可视化】ICCV 2021 基于视觉感知的多传感器融合点云语义分割_第11张图片

2.4 模型推理

模型推理代码目录结构

|--- pmf_eval_semantickitti/ SemanticKITTI评估代码
	|--- config_server_kitti.yaml 配置脚本
	|--- infer.py 推理脚本
	|--- option.py 配置解析脚本

1. 进入 tasks/pmf_eval_semantickitti目录,修改配置件 config_server_kitti.yaml中数据集路径 data_root 为实际数据集路径。

data_root: "../../data/semantic-kitti-fov/sequences"

修改pretrained_path指向训练生成的日志文件夹目录。

pretrained_path: "../../experiments/PMF-SemanticKitti/log_SemanticKitti_PMFNet-resnet34_bs8-lr0.001_baseline_timestamp"

 2. 运行如下命令执行脚本

python infer.py config_server_kitti.yaml

运行结果,评估每个类别的指标:

【PMF代码复现及可视化】ICCV 2021 基于视觉感知的多传感器融合点云语义分割_第12张图片

3.  运行成功之后,会在训练模型所在目录下生成评估结果日志文件,文件夹目录结构如下:

|--- PMF/experiments/PMF-SemanticKitti/log_xxxx/ 训练结果路径
	|--- Eval_xxxxx/ 评估结果路径
		|--- code/ 代码备份
		|--- log/ 控制台日志文件
		|--- pred/ 用于提交评估的文件

3. 结果可视化显示

可视化显示是通过semantic-kitti-api工具包进行可视化。

3.1 配置semantic-kitti-api-master工具包

工具包github路径:GitHub - PRBonn/semantic-kitti-api: SemanticKITTI API for visualizing dataset, processing data, and evaluating results.

下载工具包并解压。在PMF虚拟环境中进入semantic-kitti-api-master工具包,安装工具包需要的依赖:

  • 系统依赖
sudo apt install python3-dev python3-pip python3-pyqt5.qtopengl # for visualization
  • python依赖
sudo pip3 install -r requirements.txt

3.2 可视化运行

切换到semantic-kitti-api-master工具包,运行visualize.py脚本。(我使用的是另一个自己创建的虚拟环境的semantic-kitti-api-master工具包,本文使用PMF虚拟环境即可)

# sequence是要访问的序列。
# dataset是目录所在的 kitti 数据集的路径sequences
./visualize.py --sequence 08 --dataset /home/xiang/Desktop/PMF-master/data/semantic-kitti-fov

【PMF代码复现及可视化】ICCV 2021 基于视觉感知的多传感器融合点云语义分割_第13张图片

运行后,打开点云的交互式 opengl 可视化以及每次扫描到 64 x 1024 图像的球形投影,如下图:

【PMF代码复现及可视化】ICCV 2021 基于视觉感知的多传感器融合点云语义分割_第14张图片

注意:

  1. 可视化结果只能看到一个三维标志,是因为融合之后的投影图,只投影在了一侧。按住Ctrl+鼠标中间键,缩小即可看到融合分割后的结构。
  2. 视频效果,按住n或者b不停地执行下或上一帧数据即可看到视频效果。
  3. 退出。在终端中,按q,即可关闭显示窗口。

创作不易,希望大家能给个免费的赞!!!

你可能感兴趣的:(融合语义分割算法PMF,人工智能,计算机视觉)