使用稀疏4D卷积对3D LiDAR数据中的后退移动物体进行分割
我们在未见过的SemanticKITTI测试序列18和21上进行的移动物体分割。红色点被预测为移动物体。
目录
发表论文
如果您在学术工作中使用我们的代码,请引用相应的论文:
@article{mersch2022ral,
author = {B. Mersch and X. Chen and I. Vizzo and L. Nunes and J. Behley and C. Stachniss},
title = {{使用稀疏4D卷积对3D LiDAR数据中的后退移动物体进行分割}},
journal={IEEE机器人与自动化快报(RA-L)},
year = 2022,
volume = {7},
number = {3},
pages = {7503--7510},
}
相关视频请点击这里。
概述
给定一系列点云,我们的方法将移动(红色)和非移动(黑色)点进行分割。
我们首先创建给定后退窗口中所有点的稀疏4D点云。我们使用MinkowskiEngine的稀疏4D卷积来提取时空特征并预测每个点的移动物体分数。
数据
从官方网站下载SemanticKITTI数据。
./
└── sequences
├── 00/
│ ├── velodyne/
| | ├── 000000.bin
| | ├── 000001.bin
| | └── ...
│ └── labels/
| ├── 000000.label
| ├── 000001.label
| └── ...
├── 01/ # 00-10用于训练
├── 08/ # 用于验证
├── 11/ # 11-21用于测试
└── ...
安装
使用以下命令在您的工作空间中克隆此仓库
git clone https://github.com/PRBonn/4DMOS
使用Docker
我们提供了一个Dockerfile
和一个docker-compose.yaml
文件,可以使用简单的Makefile
运行所有Docker命令。
使用它,您需要
- 安装Docker
- 在Ubuntu中,使用以下命令安装docker-compose
sudo apt-get install docker-compose
请注意,这将安装 docker-compose v1.25,这是推荐的版本,因为使用 docker-compose v2 在构建时访问 GPU 目前是一个未解决的问题。
-
重要 为了在构建阶段访问 GPU,请在
/etc/docker/daemon.json
中将nvidia
设置为默认运行时:{ "runtimes": { "nvidia": { "path": "/usr/bin/nvidia-container-runtime", "runtimeArgs": [] } }, "default-runtime": "nvidia" }
保存文件并运行
sudo systemctl restart docker
重启 docker。 -
使用以下命令构建包含所有依赖项的镜像
make build
在运行容器之前,您需要设置数据集的路径:
export DATA=path/to/dataset/sequences
要测试您的容器是否正常运行,请执行
make test
最后,运行容器
make run
现在您可以在容器内工作并运行训练和推理脚本。
不使用 Docker
如果不使用 Docker,您需要安装 setup.py
中指定的依赖项。可以通过以下命令以可编辑模式安装:
python3 -m pip install --editable .
现在根据 MinkowskiEngine 的安装维基页面安装它。安装 MinkowskiEngine 时,您的 CUDA 版本必须与用于编译 PyTorch 的 CUDA 版本相匹配。
运行代码
如果尚未完成,请指定 SemanticKITTI 数据的路径:
export DATA=path/to/dataset/sequences
如果您使用 Docker,现在需要使用 make run
运行容器。
训练
要使用 config/config.yaml
中指定的参数训练模型,请运行
python scripts/train.py
通过向上述命令传递 --help
标志,可以找到更多选项,如从预训练模型加载权重或设置检查点。
推理
推理分两步进行。首先,预测移动对象置信度分数,然后融合多个置信度值以获得最终预测(非重叠策略或二进制贝叶斯滤波器)。
要对 path/to/model.ckpt
处的模型检查点进行每点置信度分数推理,请运行
python scripts/predict_confidences.py -w path/to/model.ckpt
我们提供了几个额外的选项,详见 --help
标志。置信度分数存储在 predictions/ID/POSES/confidences
中,以区分使用不同模型 ID 和姿态文件的设置。
接下来,可以通过以下命令获得最终的移动对象预测:
python scripts/confidences_to_labels.py -p predictions/ID/POSES
您可以使用 --strategy
参数来选择论文中的非重叠策略或贝叶斯滤波器策略。运行 --help
查看更多选项。最终预测存储在 predictions/ID/POSES/labels/
中。
评估和可视化
我们使用 SemanticKITTI API 来评估移动类的交并比(IOU)以及可视化预测结果。在您的工作空间中克隆该仓库,安装依赖项,然后运行以下命令来可视化您的预测结果,例如序列 8:
cd semantic-kitti-api
./visualize_mos.py --sequence 8 --dataset /path/to/dataset --predictions /path/to/4DMOS/predictions/ID/POSES/labels/STRATEGY/
基准测试
要将结果提交到 LiDAR-MOS 基准测试,请按照此处的说明进行操作。
预训练模型
* [模型 [A]: 5次扫描 @ 0.1秒](https://www.ipb.uni-bonn.de/html/projects/4DMOS/5_scans.zip) * [模型 [B]: 5次扫描 @ 0.2秒](https://www.ipb.uni-bonn.de/html/projects/4DMOS/5_scans_dt_0p2.zip) * [模型 [C]: 5次扫描 @ 0.3秒](https://www.ipb.uni-bonn.de/html/projects/4DMOS/5_scans_dt_0p3.zip) * [模型 [D]: 5次扫描,无位姿](https://www.ipb.uni-bonn.de/html/projects/4DMOS/5_scans_no_poses.zip) * [模型 [E]: 5次扫描输入,1次扫描输出](https://www.ipb.uni-bonn.de/html/projects/4DMOS/5_scans_single_output.zip) * [模型 [F]: 2次扫描](https://www.ipb.uni-bonn.de/html/projects/4DMOS/2_scans.zip) * [模型 [G]: 10次扫描](https://www.ipb.uni-bonn.de/html/projects/4DMOS/10_scans.zip)
许可证
本项目是根据MIT许可证提供的免费软件。详情请参阅LICENSE文件。