PointNet:深度学习在3D点云分类与分割上的应用

Stella981
• 阅读 965

大家好!我是【AI 菌】,一枚爱弹吉他的程序员。我热爱AI、热爱分享、热爱开源! 这博客是我对学习的一点总结与思考。如果您也对 深度学习、机器视觉、数据结构与算法、编程 等感兴趣,可以关注我的动态,我们一起学习,一起进步~
我的博客地址为:【AI 菌】的博客
我的Github项目地址是:【AI 菌】的Github

资源传送门:
原论文地址:PointNet: Deep Learning on Point Sets for 3D Classification and Segmentation
开源项目地址:TensorFlow1.0实现PyTorch1.0实现

文章目录

  • 1. PointNet简介
  • 2. 提出背景
  • 3. 网络结构
  • 4. 模型的特点
  • 5. 理论分析
  • 6. 性能与效果

1. PointNet简介

点云是一种重要的几何数据结构。由于其格式不规则,大多数研究人员将这些数据转换为规则的三维体素网格(Voxel)或图像,以便于通过深度学习中的卷积操作进行权值共享、优化kernel参数等。但是,这会使得数据变得不必要的庞大,并导致一些问题。

PointNet,由斯坦福大学的Charles R. Qi等人在CVPR2017上发表,是一个端对端的神经网络,可以直接将点云数据作为输入,通过学习,实现对3D点云数据目标的分类与分割

PointNet的效果很好,并且对输入的扰动等具有很好的鲁棒性,它的表现性能达到了当时最先进的水平。

PointNet的三个重要应用方面:
PointNet:深度学习在3D点云分类与分割上的应用

2. 提出背景

从数据结构的角度来看,点云是一组无序的向量。虽然深度学习的大部分工作都集中在常规的输入表示上,如序列(语音和语言处理)、图像和体积(视频或三维数据),但在点云的深度学习方面却做得很少。这主要是因为点云具有三个特征:无序性、稀疏性、信息量有限

Oriol Vinyals等人最近的一项工作研究了这个问题。他们使用带注意机制的读写网络来输入无序的集合,并显示他们的网络具有对数字排序的能力。

在欧式空间中的点云集合具有三个特点:

  1. 无序性。点云是一组没有特定顺序的点。
  2. 点之间的相互作用。这些点来自具有距离度量的空间,这意味着点不是孤立的,相邻的点可以形成一个有意义的子集。因此,模型需要能够从邻近点捕捉局部结构,以及局部结构之间的相互作用。
  3. 变换下的不变性。比如点云整体的旋转和平移不应该影响它的分类或者分割。

3. 网络结构

PointNet:深度学习在3D点云分类与分割上的应用
输入是包含n个点的三维点云(x, y, z) , 原始数据通过一个3D 空间变换矩阵预测网络 T-Net(3),估计出3x3的变换矩阵T(3) 并作用在原始数据上,实现数据的对齐。对齐后的数据会以点为单位,通过一个共享参数的双层感知机模型mlp进行特征提取 。每个点提取出64维的特征,再通过特征空间变换矩阵预测网络 T-Net(64) 预测64x64的变换矩阵,作用到特征上,实现对特征的对齐。然后继续利用三层感知机(64,128,1024)进行以特征点为单位的特征提取,直到把特征的维度变为1024,继而在特征空间的维度上进行Max Pooling,提取出点云的全局特征向量global feature。

  1. 一方面,全局特征向量经过三层感知机模型,得到k分类输出,实现k分类任务。
  2. 另一方面,全局特征向量与前面的64维特征向量concat,通过三层感知机模型得到128维的点特征point features,再经过两层感知机模型,得到n*m的特征向量。n表示输入点的个数,m表示每个点所属的类别信息,从而完成分割任务。

4. 模型的特点

无序输入的对称函数。为了使模型对输入排列保持不变性,有三种策略:1)将输入按规范顺序排序;2)将输入视为训练RNN的序列,但通过各种置换来扩充训练数据;3)使用简单的对称函数来聚合每个点的信息。这里,一个对称函数以n个向量作为输入,并输出一个新的向量,该向量与输入顺序不变。例如,+和*运算符是对称的二进制函数。
PointNet:深度学习在3D点云分类与分割上的应用

用一个多层感知器网络来近似h,用一个单变量函数和一个最大池函数的组合来近似g。实验证明这种方法很有效。通过h的集合,我们可以学习一些f来捕捉集合的不同性质。

局部和全局信息融合。点分割需要结合局部和全局知识。具体做法是:在计算出全局点云特征向量后,将全局特征与每个点特征连接起来,然后,基于合并的点特征通过3层mlp提取新的逐点特征,提取出的每点特征能同时感知局部和全局信息。

连结对齐网络。如果点云经过一定的几何变换,如刚性变换,则点云的语义标注必须是不变的。因此,我们期望由我们的点集学习的表示对这些变换是不变的。我们通过一个小型网络T-Net预测仿射变换矩阵,并将此变换直接应用于输入点的坐标。小网络本身类似于大网络,由点无关特征提取、最大池和全连通层等基本模块组成。
这种思想还可以进一步扩展到特征空间的对齐。我们可以在点特征上插入另一个对齐网络,并预测一个特征转换矩阵来对齐来自不同输入点云的特征。然而,特征空间中的变换矩阵维数远高于空间变换矩阵,这大大增加了优化的难度。因此,我们在softmax训练损失中添加了一个正则化项。我们将特征变换矩阵约束为接近正交矩阵:
PointNet:深度学习在3D点云分类与分割上的应用 其中A是由小型网络预测的特征对齐矩阵。正交变换不会丢失输入中的信息,因此是需要的。我们发现通过加入正则化项,优化变得更加稳定,我们的模型获得了更好的性能。

5. 理论分析

  1. 证明了神经网络对连续集函数的普遍逼近能力。通过集合函数的连续性,直观地看,对输入点集的一个小扰动不应使函数值发生很大的变化,如分类或分割得分。

PointNet:深度学习在3D点云分类与分割上的应用

  1. 定理2(a)说明对于任何输入数据集,都存在一个关键集和一个最大集,使得对和之间的任何集合,其网络输出都和一样。这也就是说,模型对输入数据在有噪声和有数据损坏的情况都是鲁棒的。
  2. 定理2(b)说明了关键集的数据多少由maxpooling操作输出数据的维度K给出上界(框架图中为1024)。个角度来讲,PointNet能够总结出表示某类物体形状的关键点,基于这些关键点PointNet能够判别物体的类别。这样的能力决定了PointNet对噪声和数据缺失的鲁棒性。
    PointNet:深度学习在3D点云分类与分割上的应用

6. 性能与效果

  1. 3D Object Classification 。在ModelNet40形状分类基准上评估模型,该数据集有12311个CAD模型,来自40个人造目标的类别,9843个数据作为训练集,2468个数据作为测试集。
    PointNet:深度学习在3D点云分类与分割上的应用

  2. 3D Object Part Segmentation。部件分割是一项具有挑战性的细粒度三维识别任务。给定3D扫描或网格模型,任务是为每个点或面指定部件类别标签(例如椅子腿、杯柄)。PointNet:深度学习在3D点云分类与分割上的应用

  3. Semantic Segmentation in Scenes。零部件分割网络可以很容易地扩展到语义场景分割,其中点标签变成语义目标类,而不是对象部分标签。
    PointNet:深度学习在3D点云分类与分割上的应用
    室内场景的目标分割效果:
    PointNet:深度学习在3D点云分类与分割上的应用


最好的关系是互相成就,各位的「三连」就是【AI 菌】创作的最大动力,我们下期见!

点赞
收藏
评论区
推荐文章
blmius blmius
2年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Jacquelyn38 Jacquelyn38
2年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Wesley13 Wesley13
2年前
PPDB:今晚老齐直播
【今晚老齐直播】今晚(本周三晚)20:0021:00小白开始“用”飞桨(https://www.oschina.net/action/visit/ad?id1185)由PPDE(飞桨(https://www.oschina.net/action/visit/ad?id1185)开发者专家计划)成员老齐,为深度学习小白指点迷津。
Wesley13 Wesley13
2年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
2年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
2年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Stella981 Stella981
2年前
Eclipse插件开发_学习_00_资源帖
一、官方资料 1.eclipseapi(https://www.oschina.net/action/GoToLink?urlhttp%3A%2F%2Fhelp.eclipse.org%2Fmars%2Findex.jsp%3Ftopic%3D%252Forg.eclipse.platform.doc.isv%252Fguide%2
Wesley13 Wesley13
2年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
3个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这