用RandLA-Net 训练Semantic3D

RandLA-Net 细节介绍(代码)

  • RandLA-Net 亮点1------基于概率的训练样本选取和随机下采样

       https://blog.youkuaiyun.com/qq_24505417/article/details/108977386

  • RandLA-Net 亮点2------local feature aggregation: 

       https://blog.youkuaiyun.com/qq_24505417/article/details/108982154

  • RandLA-Net Decoder:

       https://blog.youkuaiyun.com/qq_24505417/article/details/108988259

 

训练参数

显卡: NVIDA TITAN Xp

训练次数: 100个epoch, 每个epoch 500 steps, batch_size ==4

learning_rate: 1e-2

optimizer: Adam

训练时间: 8h

 

1. 下载数据并放置在合适位置

使用sh utils/download_semantic3d.sh 下载 或者去官网下载.

下载的原始数据放置在data/semantic3d/original_data文件夹下

2. 数据预处理

python utils/data_prepare_semantic3d.py

这一步是对原始点云数据进行网格采样, 包含0.01 和0.06 两次, 最终用于训练的数据是0.06采样后的点云.

3. 训练

python main_Semantic3D.py --mode train --gpu 0

训练结果:

只有下一个epoch的训练结果(Mean IoU)好于当前epoch,才会保存模型训练结果. 最后一个epoch的模型并不一定是最优模型.

训练保存的模型文件在results里面

38501/500 ~= 77 (epoch 从0开始计数,也就是epoch==76时)

最优epoch所对应的训练日志:

****EPOCH 76****
Step 00038050 L_out=1.568 Acc=0.95 ---  603.29 ms/batch
Step 00038100 L_out=1.141 Acc=0.95 ---  591.83 ms/batch
Step 00038150 L_out=0.868 Acc=0.96 ---  582.45 ms/batch
Step 00038200 L_out=0.822 Acc=0.96 ---  594.24 ms/batch
Step 00038250 L_out=0.673 Acc=0.95 ---  591.06 ms/batch
Step 00038300 L_out=1.119 Acc=0.97 ---  595.11 ms/batch
Step 00038350 L_out=1.058 Acc=0.96 ---  601.45 ms/batch
Step 00038400 L_out=1.346 Acc=0.96 ---  615.70 ms/batch
Step 00038450 L_out=0.771 Acc=0.97 ---  597.55 ms/batch
Step 00038500 L_out=0.634 Acc=0.94 ---  706.30 ms/batch
eval accuracy: 0.9015642582695459
mean IOU:0.697714954433361
Mean IoU = 69.8%
--------------------------------------------------------
69.77 | 95.32 84.13 82.35 32.68 85.45 24.94 61.43 91.88
--------------------------------------------------------

Best m_IoU is: 69.771

 

4. 测试:

python main_Semantic3D.py --mode test --gpu 0

测试标签文件:

 

效果展示(reduce-8):

展示动画:https://www.bilibili.com/video/av328567728/)

场景1: MarketplaceFeldkirch_Station4_rgb_intensity-reduced(上:原图;下图:预测结果)

场景2 : sg27_station10_rgb_intensity-reduced

 

<think>好的,我现在需要帮助用户了解如何使用PointNet++模型处理Semantic3D数据集。首先,我得回顾一下之前用户提供的引用内容,看看有哪些相关信息可以利用。 根据引用[1],用户提到PointNet++训练自定义数据集的关键在于修改几个参数,特别是数据路径和类别信息。引用[2]和[4]都涉及Semantic3D数据集的处理,尤其是使用Open3D库来读取和预处理.pcd文件。引用[4]还提到了采样方法,比如从数据集中随机选取中心点。引用[3]虽然主要讲RandLA-Net,但也提到了调整模型结构和参数的重要性。 用户的问题集中在PointNet++和Semantic3D的使用教程和实现方法。我需要整合这些信息,分步骤说明处理流程。首先,数据准备部分需要指导用户如何下载数据集,并用Open3D进行读取和预处理,如降采样和归一化。然后,数据采样部分需要解释如何生成训练样本,比如随机选取中心点和区块提取。接下来是模型配置,根据引用[1],需要调整数据路径、类别数和输入维度。训练参数部分应包括学习率、批次大小和epoch数。最后是训练和验证过程,以及可视化方法,可能涉及TensorBoard的使用。 还要注意用户可能遇到的常见问题,比如数据路径错误、显存不足等,需要给出解决方案。另外,生成相关问题时,要考虑用户可能进一步的需求,比如调参技巧、与其他模型的对比,以及自定义数据集的扩展应用。 需要确保回答结构清晰,步骤分明,每个部分都引用对应的资料。同时,按照系统级指令,数学公式用$...$,独立公式用$$...$$,但当前内容可能较少涉及数学公式,不过如果有提到损失函数或评估指标,可能需要应用。例如,交叉熵损失函数可以写成$L = -\sum y_i \log(p_i)$。 最后,检查是否符合中文回答,LaTeX语法正确,没有使用任何markdown格式,代码块用三个反引号包裹,并正确添加引用标识。确保问题部分涵盖用户可能关心的其他方面,如性能优化、参数调整和应用场景。</think>以下是指使用PointNet++模型处理Semantic3D数据集的实现方法详解: ### 一、数据准备与预处理 1. **数据集下载** Semantic3D提供8个类别的激光扫描点云数据,包含训练集(约15亿点)和测试集(约4亿点)。文件格式为.pcd,需通过Open3D库读取: ```python import open3d as o3d pcd = o3d.io.read_point_cloud("station1_xyz_intensity_rgb.pcd")[^2] 2. **数据预处理** - 降采样:使用体素滤波减少点云密度 ```python down_pcd = pcd.voxel_down_sample(voxel_size=0.05) ``` - 归一化:将坐标归一化到[-1,1]范围 - 特征增强:添加强度(intensity)和RGB值作为附加特征[^4] ### 二、数据采样方法 采用分层采样策略: 1. 从完整场景中随机选取中心点$c_i$ 2. 提取半径$r=2m$的球形区域点云区块 3. 区块内固定采样4096个点(不足时重复采样) ```python def sample_block(center, radius, points): distances = np.linalg.norm(points - center, axis=1) return points[distances < radius][:4096][^4] ``` ### 三、模型配置参数 修改`semantic3d.yaml`配置文件: ```yaml data: train_dir: "/path_to/semantic3d/train" test_dir: "/path_to/semantic3d/test" num_classes: 8 # 语义类别数 model: input_dims: 6 # xyz + intensity + rgb sa_radius: [0.1, 0.2, 0.4] # 采样半径层级 ``` [^1] ### 四、训练参数设置 推荐使用Adam优化器: $$ lr = 0.001 \times 0.5^{\lfloor epoch/20 \rfloor} $$ 批次大小设置为16(需根据GPU显存调整),训练约100个epoch ### 五、训练与验证流程 ```python python train_semantic3d.py --log_dir log_s3d --cfg_file cfgs/semantic3d.yaml ``` 验证时使用交并比(mIoU)作为评估指标: $$ \text{mIoU} = \frac{1}{C}\sum_{c=1}^C \frac{TP_c}{TP_c + FP_c + FN_c} $$ ### 六、可视化实现 1. 预测结果着色显示 ```python o3d.visualization.draw_geometries([pred_pcd]) ``` 2. 使用TensorBoard查看特征学习过程 ```bash tensorboard --logdir=log_s3d ``` ### 常见问题解决 1. **显存不足**:减小`batch_size`或`num_points` 2. **类别不平衡**:在损失函数中添加类别权重 ```python weights = 1 / class_frequency criterion = nn.CrossEntropyLoss(weight=weights) ``` 3. **数据加载慢**:启用多线程数据加载(推荐设置`num_workers=4`)
评论 46
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值