点云的无序性_三维点云分类与分割-PointNet
PointNet是对点云数据直接进行学习的开山之作, 这里结合PointNet-Pytorch代码,对PointNet网络结构与其思想进行阐述和分析。
点云数据的特性:
点云数据不同于图像数据,他有三个重要的特征,也正是基于这些特征,才有PointNet网络的一系列的设计。
1)点云的无序性
这个要对比图像数据来理解,一团点云数据中有很多个点数据,这些点在点云文件里无论以什么顺序出现,它们指代的信息并不改变。相反,一张图片里的点在图像里已经按照固有的顺序排列好了。论文里利用了maxpooling这个对称函数来提取点云的数据特征。
2)点与点之间的空间关系
每个点都包含了空间坐标信息,这些信息之间构成一定的集合空间关系,为了利用这种关系,论文作者提出了将局部特征和全局特征进行串联的方式来聚合信息。
3)不变性
这样理解,一团点云数据进行旋转和平移,它代表的目标不会发生改变。论文在进行特征提取之前,先对点云数据进行对齐来保证不变性。 通过训练一个小型的网络得到一个旋转矩阵,用这个矩阵与点云数据相乘来实现对齐操作。
数据集
以论文里用到的数据集是shapenet, 包含了16类样本,以其中的一类Airplane的文件夹来说明,里面有很多.pts格式的文件,这就是不同飞机的点云格式,里面放的就是一个个坐标点,坐标经过了归一化处理。
在读取数据的dataloader里,对每个数据进行了中心化和随机增强,而且在输入网络前对样本进行了特定数量的重采样,这样保证了输入到网络里的样本的点数是一样的。
网络结构及其实现
1)对于一维卷积conv1d
假设对所有的样本进行了2500个点的重采样,样本的尺寸为2500*3,由于pytorch卷积的要求,输入前进行转置,变成3*2500,假定batch_size = 1, 输入尺寸就是1*3*2500,
假设做的第一步卷积操作是conv1 = torch.nn.Conv1d(3, 64, 1),即输入通道=3,输出通道=64,卷积核大的大小为1(在tensorflow里为1x3, 用conv2d实现,本质上是一样的),卷积核第二个维度是由in_channels来决定的,所以实际上卷积大小为in_channels*kerner_size,这里为3*1。
进一步理解一下,在第一个卷积层中,使用conv1对x进行卷积的时候,实际上是使用64个3*1的卷积核进行卷积,输出尺寸应该是1*64*2500,其中1还是batch size。
画了个草图来解释这个卷积过程
在了解了一维卷积之后,网络就变得很简单了。对于分类问题,如果把batch size记为n,样本在网络中的变化就是n*3*2500 ——> n*64*2500 ——> n*128*2500 ——> n*1024*2500 ——> n*1024*1(max pooling后) ——> n*512*1 ——> n*256*1 ——> n*16*1 (本次实验样本共有16类)
再来看网络结构:
mlp是通过共享权重的卷积实现的,第一层卷积核大小是1x3(因为每个点的维度是xyz),之后的每一层卷积核大小都是1x1。特征提取层只是把每个点连接起来而已。经过两个空间变换网络和两个mlp之后,对每一个点提取1024维特征,经过maxpool变成1x1024的全局特征。再经过一个mlp(代码中运用全连接)得到k个score。分类网络最后接的loss是softmax。
本文的两个亮点:
1.空间变换网络解决旋转问题:
三维的STN可以通过学习点云本身的位姿信息学习到一个最有利于网络进行分类或分割的DxD旋转矩阵(D代表特征维度,pointnet中D采用3和64)。其中的原理为,通过控制最后的loss来对变换矩阵进行调整,pointnet并不关心最后真正做了什么变换,只要有利于最后的结果都可以。
pointnet采用了两次STN,第一次input transform是对空间中点云进行调整,直观上理解是旋转出一个更有利于分类或分割的角度,比如把物体转到正面;第二次feature transform是对提取出的64维特征进行对齐,即在特征层面对点云进行变换。
2.maxpooling解决无序性问题:
当一个N×D在N的维度上随意的打乱之后,其表述的其实是同一个物体。因此针对点云的置换不变性(无序性),其设计的网络必须是一个对称的函数:
我们经常看到的SUM和MAX等函数其实都是对称函数
因此我们可以利用max函数设计一个很简单的点云网络,如下:
那么为什么要最后变换到1024维后再做MAX操作呢,这是因为在3维上,输出的全局特征仅仅继承了三个坐标轴上最大的那个特征,每个点损失的特征太多了,因此我们不妨先将点云上的每一个点映射到一个高维的空间(例如1024维),目的是使得再次做MAX操作,损失的信息不会那么多。
分割网络:
对于点云分割任务,我们需要将局部很全局信息结合起来。
这里,作者将经过特征变换后的信息称作局部信息,它们是与每一个点紧密相关的;我们将局部信息和全局信息简单地连接起来,就得到用于分割的全部信息。
点云的无序性_三维点云分类与分割-PointNet相关推荐
- 点云的无序性_基于深度学习的激光雷达点云物体识别方法总结
0. 前言: 激光雷达作为自动驾驶不可或缺的传感器,随着价格不断下降,各种基于深度学习的模型也层出不穷(坐等马斯克打脸); 激光雷达物体识别的任务: 输入: 激光点云(x, y, z, intensi ...
- pytorch 三维点分类_三维点云分类与分割-PointNet
PointNet是对点云数据直接进行学习的开山之作, 这里结合PointNet-Pytorch代码,对PointNet网络结构与其思想进行阐述和分析. 点云数据的特性: 点云数据不同于图像数据,他有三 ...
- 非抢占式优先算法例题_三维点云的经典算法与前沿技术有哪些?
三维点云是最重要的三维数据表达方式之一. 从技术角度看,SLAM.三维重建.机器人感知等领域,点云都是最简单且最普遍的表达方式:相对于图像,点云有其不可替代的优势--深度,即三维点云直接提供了三维空间 ...
- 点云的无序性_PU-Net:解决3D点云数据的上采样问题
作者:Danny明泽 论文下载: https://openaccess.thecvf.com/content_cvpr_2018/papers/Yu_PU-Net_Point_Cloud_CVPR_2 ...
- 小样本点云深度学习库_基于点云深度学习的点云数据集制作系统及方法与流程...
本发明涉及测控技术领域,尤其涉及一种基于点云深度学习的点云数据集制作系统及方法. 背景技术: 深度学习网络模型一般都是基于64线单帧激光数据集进行.但64线激光器和单帧的限定,造成了工程应用中点云数据 ...
- 云原生的本质_什么是云原生?云原生和传统软件有什么区别?有什么特征
云原生 很多人都会问"到底什么是云原生?"."云原生和传统软件有什么区别?". 背景 顾名思义,云原生应用即专门为在云平台部署和运行而设计的应用.云原生能够以可 ...
- 支持python的云虚拟主机价格_万网云虚拟主机密码怎么样,python 购买虚拟主机测评...
[腾讯云] 点击进入 高性能云服务器1核2G首年99元 [华为云]点击进入 2核4G5M企业级云主机707元/年 香港免备案主机129/年 [阿里云]点击进入 云服务器低至0.95折 1核2G EC ...
- 云原生应用程序_什么是云原生应用程序?
云原生应用程序 在六,七年前云计算开始大步向前时,人们苦苦挣扎的重要问题之一是:"如果我想在公共云,私有云或混合云中运行它们,我的应用程序将是什么样子? ? 当时有很多方法可以回答这个问题. ...
- 职教云python程序设计答案_智慧职教云课堂Python程序设计基础题目及答案
智慧职教云课堂Python程序设计基础题目及答案 更多相关问题 轻症感染合理应用抗菌药物A.内服给药疗效差B.治疗剂量高限,静脉滴注 C.治疗剂量低限,静脉滴注D. 传导速度最慢的是A.窦房结 B.心 ...
- gpu云服务器运行游戏_在滴滴云 GPU 服务器上使用NVIDIA NGX环境搭建
1.NGX 简介 NVIDIA NGX是一个新的深度学习技术,将基于AI的加速和增强图像.视频处理的功能直接集成到应用程序中.NVIDIA NGX利用Tensor Core最大限度地提高其运行效率,因 ...
最新文章
- easyui的datagrid的使用记录
- 3D打印机控制板 Ramps 1.4的原理图
- 一个项目涉及到的50个Sql语句(整理版)
- 程序员的修养--读书笔记
- hdu 5067(状态压缩dp)
- Pandas的学习(5.pandas中处理丢失数据和空值数据以及填充空值数据)
- 深入Java核心 Java内存分配原理精讲(3)
- 《四世同堂》金句摘抄(十七)
- 阿里巴巴2014研发project师实习生面试经历
- Flutter进阶—实现动画效果(五)
- 316. 去除重复字母
- Web App 前端构建(纯净版)
- mysql 优化 (1)
- Java Map 集合实现类
- 马斯克震撼演讲:世界上最可怕的事情,是没有内驱力
- 【神兵利器】介绍一款支持屏幕录制、滚动截图、高清长图、图片编辑、图片转PDF格式、屏幕取色的截图软件:FastStone Capture
- 设计一个对向车道的左转待转区提高十字路口的并行通行率
- mysql基于PHP的校园竞赛信息网站 毕业设计源码221230
- 【DNS】Windows查看和清理DNS缓存
- MinGW-w64安装教程