Semantic3D数据集----Open3D_PointNet2_Semantic3D_master实现

1.下载

下载数据集Semantic3D并通过运行以下命令将其提取:

cd数据集/ semantic_raw。

bash download_semantic3d.sh

Open3D-PointNet2-Semantic3D /数据集/ semantic_raw
├──bildstein_station1_xyz_intensity_rgb.labels
├──bildstein_station1_xyz_intensity_rgb.txt
├──bildstein_station3_xyz_intensity_rgb.labels
├──bildstein_station3_xyz_intensity_rgb.txt
├──…

当然你也可以直接在数据集的官方下载,一共30个数据集,对该数据集不了解的可看我之前的博客Semantic3D介绍

2.将txt转换为pcd文件

python preprocess.py

Open3D能够更有效地读取.pcd文件。
open3d提供了read_point_cloud()和write_point_cloud()函数进行数据集的读写。对open3d函数的学习可看我的open3d教程学习


代码修改:

point_cloud = open3d.read_point_cloud(pts_file)
open3d.write_point_cloud(pcd_file, point_cloud)

改成:

point_cloud = open3d.io.read_point_cloud(pts_file)
open3d.io.write_point_cloud(pcd_file, point_cloud)

代码实现过程:

Semantic数据集的格式为(x,y,z,i,r,g,b),这种点云数据格式为pts格式,现存在txt文件中,首先打开txt文件,每行逐行写进pts文件中,再利用open3d写进pcd文件中。


Open3D-PointNet2-Semantic3D /数据集/ semantic_raw
├──bildstein_station1_xyz_intensity_rgb.labels
├──bildstein_station1_xyz_intensity_rgb.pcd(新)
├──bildstein_station1_xyz_intensity_rgb.txt
├──bildstein_station3_xyz_intensity_rgb.labels
├──bildstein_station3_xyz_intensity_rgb.pcd(新)
├──bildstein_station3_xyz_intensity_rgb.txt
├──…

3.下采样

python downsample.py

下采样的数据集将被写入dataset / semantic_downsampled。在下采样期间将排除标签为0(未标记)的点。


代码实现过程:
30个数据集全部进行下采样,0标签没有真实地面,不应该用于训练,故此先对训练集排除标签0采样。再利用open3d中的voxel_down_sample_and_trace()进行体素下的采样,设置体素大小。


由于我没有看到open3d的voxel_down_sample_and_trace()的源码,对于该函数的如何实现我不知道,如果有朋友知晓,请务必帮我解惑,谢谢~


Open3D-PointNet2-Semantic3D /数据集/ semantic_downsampled
├──bildstein_station1_xyz_intensity_rgb.labels
├──bildstein_station1_xyz_intensity_rgb.pcd
├──bildstein_station3_xyz_intensity_rgb.labels
├──bildstein_station3_xyz_intensity_rgb.pcd
├──…

4.编译TF Ops

我们需要在tf_ops中构建TF内核。首先,激活virtualenv并确保可以在当前python中找到TF。下一行应无错误运行。


python -c “import tensorflow as tf”
Then build TF ops. You’ll need CUDA and CMake 3.8+.

cd tf_ops
mkdir build
cd build
cmake …
make
After compilation the following .so files shall be in the build directory.


在这个部分,我没有编译成功,提示找不到Open3d的位置,我直接将pointnet++中编译好的三个.so文件复制到build文件夹可成功运行直到预测代码,但原作者在插值部分增加了一个label和color插值的部分,没法运行,故此最后的interpolate没有办法运行。


5.训练

python train.py

默认情况下,训练集将用于训练,而验证集将用于验证。要同时使用训练和验证集进行训练,请使用–train_set = train_full标志。检查点将输出到日志/语义。

6.预测

选择一个检查点并运行predict.py脚本。预测数据集由–set配置。由于PointNet2每向前通过仅获取几千个点,因此我们需要多次从预测数据集中进行采样,以很好地覆盖这些点。每个样本都包含PointNet2所需的几千个点。要指定每个场景中此类样本的数量,请使用–num_samples标志。

python Forecast.py

–ckpt日志/语义/best_model_epoch_040.ckpt
–set =验证
–num_samples = 500

预测结果将写入结果/稀疏。

Open3D-PointNet2-Semantic3D /结果/稀疏
├──sg27_station4_intensity_rgb.labels
├──sg27_station4_intensity_rgb.pcd
├──sg27_station5_intensity_rgb.labels
├──sg27_station5_intensity_rgb.pcd
├──…

效果展示

在这里插入图片描述
在这里插入图片描述
可在xianyu搜索标题提供代码

  • 4
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 30
    评论
open3d_pointnet2_semantic3d_master 是一个实现点云语义分割的项目。点云语义分割是指将点云数据中的每个点分配到特定的语义类别中,这对于机器人导航、三维重建等任务非常重要。 在 open3d_pointnet2_semantic3d_master 项目中,采用了 PointNet++ 网络结构来对点云数据进行处理。PointNet++ 是一种基于深度学习方法的点云处理网络,它能够有效地对不规则的点云数据进行分类和分割。 具体实现过程分为以下几个步骤: 1. 数据预处理:将原始的点云数据转换成适合网络处理的格式。这包括将点云数据转换成张量形式,并进行归一化操作。 2. 构建神经网络模型:在 open3d_pointnet2_semantic3d_master 中,使用了 PointNet++ 网络结构。该网络通过一系列的点卷积、采样和池化等操作,逐渐提取并聚合点云数据中的特征信息。 3. 训练模型:使用训练数据对构建的神经网络模型进行训练。在训练过程中,通过最小化损失函数来优化网络参数,以使网络能够更准确地进行语义分割。 4. 测试模型:利用测试数据对训练好的模型进行评估。通过计算模型在测试数据上的准确率、召回率等评价指标,来评估模型的性能。 open3d_pointnet2_semantic3d_master实现提供了一个简单易用的实验环境,使得研究人员和开发者可以快速地进行点云语义分割任务的研究和实践。通过该项目,我们可以更好地理解和利用点云数据中的语义信息,并将其应用到实际的应用场景中。
评论 30
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值