Pytorch:复现PointNet
文章目录
- 一、【点云分类】和【部件分割】:
- 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 复现过程参考博客:https://blog.csdn.net/BIT_HXZ/article/details/123521410
1.1.2 代码下载:https://github.com/fxia22/pointnet.pytorch
1.1.3 作者论文:https://arxiv.org/abs/1612.00593
1.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:】
点击链接下载【https://download.csdn.net/download/qq_35591253/86507242】(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 复现过程参考博客:https://blog.csdn.net/weixin_42371376/article/details/118142529
2.2.2 复现代码:https://github.com/hetao255/Pointnet_Pointnet2_pytorch
2.2.3 数据集:S3DIS
Pytorch:复现PointNet相关推荐
- 我用 PyTorch 复现了 LeNet-5 神经网络(自定义数据集篇)!
大家好,我是红色石头! 在上三篇文章: 这可能是神经网络 LeNet-5 最详细的解释了! 我用 PyTorch 复现了 LeNet-5 神经网络(MNIST 手写数据集篇)! 我用 PyTorch ...
- 我用 PyTorch 复现了 LeNet-5 神经网络(CIFAR10 数据集篇)!
大家好,我是红色石头! 在上两篇文章: 这可能是神经网络 LeNet-5 最详细的解释了! 我用 PyTorch 复现了 LeNet-5 神经网络(MNIST 手写数据集篇)! 详细介绍了卷积神经网络 ...
- 【深度学习】我用 PyTorch 复现了 LeNet-5 神经网络(自定义数据集篇)!
在上三篇文章: 这可能是神经网络 LeNet-5 最详细的解释了! 我用 PyTorch 复现了 LeNet-5 神经网络(MNIST 手写数据集篇)! 我用 PyTorch 复现了 LeNet-5 ...
- NVIDIA新作解读:用GAN生成前所未有的高清图像(附PyTorch复现) | PaperDaily #15
在碎片化阅读充斥眼球的时代,越来越少的人会去关注每篇论文背后的探索和思考. 在这个栏目里,你会快速 get 每篇精选论文的亮点和痛点,时刻紧跟 AI 前沿成果. 点击本文底部的「阅读原文」即刻加入社区 ...
- 亚像素卷积网络(ESPCN)学习与Pytorch复现
论文内容 论文地址:Real-Time Single Image and Video Super-Resolution Using an Efficient Sub-Pixel Convolution ...
- 基于PyTorch实现PointNet++
PointNet++完整代码链接: https://github.com/zhulf0804/Pointnet2.PyTorch 关于点云的深度学习表示 PointNet / PointNet++是基 ...
- Pytorch复现FCN网络
Pytorch复现FCN网络详解(可复现) 1.环境配置 windows10,pytorch=1.3,python=3.6 参考博客:https://github.com/wkentaro/pytor ...
- CV+Deep Learning——网络架构Pytorch复现系列——Detection(一:SSD:Single Shot MultiBox Detector 4.推理Detect)
上一话 CV+Deep Learning--网络架构Pytorch复现系列--Detection(一:SSD:Single Shot MultiBox Detector 3.loss)https:// ...
- Resnet50 pytorch复现
Resnet50 pytorch复现 之前复现过Resnet18,今天复现与Resnet网络结构稍有不同的Resnet50 Resnet50的基本结构是1x1卷积->3x3卷积->1x1卷 ...
- 【医学图像分割网络】之Res U-Net网络PyTorch复现
[医学图像分割网络]之Res U-Net网络PyTorch复现 1.内容 U-Net网络算是医学图像分割领域的开山之作,我接触深度学习到现在大概将近大半年时间,看到了很多基于U-Net网络的变体,后续 ...
最新文章
- 2016 - 1- 21 - RunLoop使用(2016-1-24修改一次)(2016 - 1 - 24 再次修改)
- Linux state 方式 安装nginx 服务
- python自学教程变量_Python学习入门基础教程(learning Python)--2.2.1 Python下的变量解析...
- springboot+sockjs进行消息推送(广播模式)
- IDEA中使用Maven构建SSM项目
- C++走向远洋——52(十三周阅读程序)
- http协议-响应和请求
- 柳传志:如何看人和用人
- 再见,2016,你好,2017
- python爬取动态网页_Python实现爬取网页中动态加载的数据
- CentOS使用DNF配置
- tkinter--画布
- Linux文件锁内核VFS层源码实现讲解
- oracle 11g 新特性之动态绑定变量窥视(一)
- 剖析 SPI 在 Spring 中的应用
- 常用好的网址汇总(个人喜欢的)
- matlab2014simulink中的三相晶闸管整流桥怎么找_吴忠逆变电源逆变器设备,三相线性变频电源,信誉保障...
- 高性能计算--HPCC--他人评述
- 神经网络基础知识第一章
- linux0.11-文件系统
热门文章
- string类的常用方法有哪些以及用法
- 开发互动式电子书提高学生学习成绩的语境学习模式
- 基于ghOSt用户调度器的环境搭建
- 【STM32F407的DSP教程】第18章 DSP控制函数-更好用的SIN,COS计算
- php 商品价格区间表,ThinkPHP框架,按分类,计算商品价格区间,来完成价格搜索...
- 关于uxtheme.dll为无效的windows映像的问题
- 陈力:传智播客古代 珍宝币 泡泡龙游戏开发第30讲:PHP多维数组
- 外星人系统下载Alienware X17R2系统dell原厂预装版 WIN11-21H2外星人原厂WIN11系统下载,附创建带F12 SupportAssist OS Recovery恢复功能教程
- 使用Vue完成记事本
- 根据交换机端口分配固定地址的方法