本文在Ubuntu18.04下,使用python3.6 pytorch1.8.2 + torchvision0.9.2环境运行。
注意:文中所提供网站,建议大家都自行访问观看一下,网站中有更详细对于每一部分的解释。
最终结果:
视频效果是通过一帧帧图片播放形成。
单帧效果:
PMF论文地址:https://arxiv.org/abs/2106.15277
PMF代码地址:https://github.com/ICEORY/PMF
本文环境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
验证torch:
# 1.在虚拟环境中导入python
python
# 2.导入pytorch模块
import torch
# 3.打印torch版本
print(torch.__version__)
# 4.验证torch是否可用
print(torch.cuda.is_available)
如下结果,证明torch可用:
至此,深度学习环境已配置完成。
从论文源码网站下载并解压缩:
在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
The KITTI Vision Benchmark Suite
由 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/
整理后如下图:
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个序列。
1. 进入tasks/pmf目录,修改配置文件config_server_kitti.yaml中数据集路径data_root为实际数据集路径。
data_root: "../../data/semantic-kitti-fov/sequences"
根据自己的电脑配置,修改gpu,batch_size等参数
2. 修改run.sh确保nproc_per_node的数值与yaml文件中配置的gpu数量一致(根据电脑中显卡个数设置,只有一个显卡的,nproc_per_node=1)
将nuscenes数据集训练命令注释(关闭),semantic kitti训练命令打开;
./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_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
运行结果,评估每个类别的指标:
3. 运行成功之后,会在训练模型所在目录下生成评估结果日志文件,文件夹目录结构如下:
|--- PMF/experiments/PMF-SemanticKitti/log_xxxx/ 训练结果路径
|--- Eval_xxxxx/ 评估结果路径
|--- code/ 代码备份
|--- log/ 控制台日志文件
|--- pred/ 用于提交评估的文件
可视化显示是通过semantic-kitti-api工具包进行可视化。
工具包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
sudo pip3 install -r requirements.txt
切换到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
运行后,打开点云的交互式 opengl 可视化以及每次扫描到 64 x 1024 图像的球形投影,如下图:
注意:
创作不易,希望大家能给个免费的赞!!!