文章目录
- 一、【点云分类】和【部件分割】:
- 1.1 复现结果展示
- 1.2 复现过程
- 1.3 复现过程中遇到的问题
- 1.3.1 分类遇到的问题
- 1.3.2 分类可视化(检验)遇到的问题
- 1.3.3 部件分割遇到的问题
- 1.3.4 部件分割可视化(检验)遇到的问题
- 1.3.5 思考
- 二、室内场景点云语义分割
- 2.1 复现结果展示
- 2.2 复现过程
一、【点云分类】和【部件分割】:
1.1 复现结果展示
1.2 复现过程
1.1.1 复现过程参考博客:1.1.2 代码下载:https://github.com/fxia22/pointnet.pytorch1.1.3 作者论文:https://arxiv.org/abs/1612.005931.1.4 PointNet算法解读:3D点云物体检测(唐宇迪)1.1.5 数据集:shapenetcore_partanno_segmentation_benchmark_v0
# 查看数据集中seg格式文件保存的标签数据,该文件保存了一行类别标签。
import numpy as np
fn = "D:\\PointNet\\pointnet.pytorch-master\\shapenetcore_partanno_segmentation_benchmark_v0\\02691156\points_label\\1a04e3eab45ca15dd86060f189eb133.seg"
seg = np.loadtxt(fn).astype(np.int64)
print(seg.shape, seg[0:199])
1.1.6 环境配置:跟着李沐大神配置 CUDA 和 GPU 版本的 torch
GPU 版本的 torch 配置注意事项:①,要先安装NVIDIA驱动。②,安装GPU版本的torch要在base环境。
1.3 复现过程中遇到的问题
1.3.1 分类遇到的问题
① 用编译器直接复现,要加一行
if __name__ == "__main__":
② 用 CPU 不用 GPU 的要在 if name == “main”: 后面加如下一行
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
# 把全部的 .cuda() 换成 .to(device)
然后把全部的 .cuda() 换成 .to(device)。如图所示,
③ 参数设置和代码修改如下图所示:
1.3.2 分类可视化(检验)遇到的问题
待补充…
1.3.3 部件分割遇到的问题
分割修改的代码如下图所示,
用 CPU 的可以和分类的操作一样,把全部的 .cuda() 换成 .to(device)
1.3.4 部件分割可视化(检验)遇到的问题
①、【dll = np.ctypeslib.load_library(‘render_balls_so’, ‘.’) OSError: no file with expected extension:】
点击链接下载【】(0积分下载)下载 render_balls_so.dll 替换 pointnet.pytorch-master\utils 文件夹下的 render_balls_so.dll。
1.3.5 思考
①、 代码中为什么有时候用 Conv1d 升维,有时候用 Conv1d 降维。有时候用 Linear() 降维。在查了其他人的博客以后,我发现当作用于一维数据的时候,一维卷积 Conv1d() 和 Linear() 的效果是一模一样的,那为什么 Pointnet 里面不全用 Conv1d() 或者全用 Linear() 呢?
首先我找到了下图的规律,如图所示。从下图可以看出,黄框部分,有好多点(n行)同时通过 MLP 的时候,就用 conv1d() ;绿框部分,有一行通过 MLP 的时候,用的是 Linear() 。
已经有人比较了在相同输入数据的条件下两者之间的区别:(1)Linear() 比 conv1d() 的计算速度快;(2)Conv1d() 的精度比 Linear() 的高;(3)在反向传播更新梯度的时候,数值有差异。
那么为什么这么设计呢?查了大量资料以后,我觉得这个答案最靠谱。当你必须保留语义分割中的空间信息时,使用卷积 Conv1d() 。当你不需要做任何与空间信息相关的事情时,比如在基本分类(mnist、猫狗分类器)中,使用线性层 Linear() 。
②、 感谢网友 Liu1998121 的提醒,CPU 运行精度明显低于 GPU 运行的精度的原因,可能是 CPU 和 GPU 默认的数据类型不一样。
二、室内场景点云语义分割
2.1 复现结果展示
用meshlab打开:
用paraview打开:
图例如下表所示,
类名 | ceiling | floor | wall | beam | column | window | door | table | chair | sofa | bookcase | board | clutter |
标签label | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 |
2.2 复现过程
2.2.1 复现过程参考博客:2.2.2 复现代码:https://github.com/hetao255/Pointnet_Pointnet2_pytorch2.2.3 数据集:S3DIS