项目介绍:Open3D-PointNet2-Semantic3D
Open3D-PointNet2-Semantic3D 是一个示范项目,展示如何利用 Open3D 和 PointNet++ 在 Semantic3D 数据集上进行语义分割。该项目旨在演示如何在深度学习流程中使用 Open3D,并为 Semantic3D 数据集提供一个干净的基准实现。这个项目的特点体现在其对 3D 数据的处理能力和点云数据的高效操作。
什么是 Open3D?
Open3D 是一个开源库,支持快速开发与 3D 数据处理相关的软件。它的前端提供了一系列精心挑选的数据结构和算法,支持 C++ 和 Python,而其后端则进行了高度优化,并支持并行计算。这个项目利用 Open3D 来完成以下任务:
- 点云数据的加载、写入和可视化。
- 数据的预处理,尤其是基于体素的降采样。
- 点云插值,尤其是快速的最近邻搜索用于标签插值。
项目的来源
该项目是由 Mathieu Orhan 和 Guillaume Dekeyser 的项目演变而来,而他们的项目又源于原始的 PointNet2 项目。我们感谢原作者们的贡献。
使用步骤
1. 下载数据集
首先,用户需下载 Semantic3D 数据集并解压。可以通过运行以下命令来完成:
cd dataset/semantic_raw
bash download_semantic3d.sh
这将下载并解压数据集到指定目录下。
2. 转换数据格式
接着,需要将 .txt
文件转换为 .pcd
文件,使得 Open3D 能更高效地读取:
python preprocess.py
这会生成新的 .pcd
文件,方便后续处理。
3. 降采样数据
降采样可以通过以下命令实现:
python downsample.py
降采样后,数据将保存到 dataset/semantic_downsampled
目录中,未标记(标签为 0)的点会被排除。
4. 编译 TensorFlow 操作
在进行训练之前,需要编译 TensorFlow 的一些操作。用户需要激活 Python 虚拟环境,并确保已经安装了 TensorFlow:
python -c "import tensorflow as tf"
然后进行编译:
cd tf_ops
mkdir build
cd build
cmake ..
make
确保编译后的 .so
文件存在于 build
目录中,并通过测试:
python test_tf_ops.py
5. 模型训练
开始训练模型:
python train.py
默认使用训练集进行训练,验证集进行验证。
6. 进行预测
选择一个检查点,运行预测脚本:
python predict.py --ckpt log/semantic/best_model_epoch_040.ckpt --set=validation --num_samples=500
预测结果将被写入 result/sparse
目录。
7. 插值预测结果
将稀疏的预测结果插值到完整点云上:
python interpolate.py
生成的密集预测结果将被保存到 result/dense
目录。
8. 提交结果
如果需要向 Semantic3D 基准测试提交结果,可以使用工具重命名提交文件:
python renamer.py
目录总结
dataset/semantic_raw
: 包含原始的 Semantic3D 数据以及由preprocess.py
生成的.pcd
文件。dataset/semantic_downsampled
: 由downsample.py
生成的降采样数据。result/sparse
: 由predict.py
生成的稀疏预测结果。result/dense
: 包含密集预测结果。
这个项目展示了如何在 3D 数据处理中利用先进的工具和算法,提供了一个很好的学习案例和工作基准,为研究和应用拓展了新的可能性。