前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >点云深度学习的3D场景理解(上)

点云深度学习的3D场景理解(上)

作者头像
点云PCL博主
发布2019-07-30 16:33:32
2.4K0
发布2019-07-30 16:33:32
举报
文章被收录于专栏:点云PCL

本文主要是关于 pointNet,pointNet++,frustum point 的一些整理和总结,内容包括如何将点云进行深度学习,如何设计新型的网络架构,如何将架构应用的3D场景理解。文章由于篇幅过长,将分成上下两部分。

背景

近来很多3D的应用在兴起,3D传感器在进步,随着虚拟网络的发展转到物理实际中的应用,比如(ADAS,AR,MR)自动驾驶中需要理解 汽车行人交通标识,同时也需要理解三维物体的状态静止和移动。

AR头戴显示器有深度传感器,也需要做三维场景的理解。例如把todo_list合适的放到冰箱的门上,需要一种数据驱动的方式去理解和处理三维数据,3D deep learning。

三维表达的形式

三维数据本身有一定的复杂性,2D图像可以轻易的表示成矩阵,3D表达形式由应用驱动的:

  point cloud ,深度传感器扫描得到的深度数据,点云

  Mesh,三角面片在计算机图形学中渲染和建模话会很有用。

  Volumetric,将空间划分成三维网格,栅格化。

  Multi-View,用多个角度的图片表示物体。

Point c'loud 是一种非常适合于3D场景理解的数据,原因是:

  1、点云是非常接近原始传感器的数据集,激光雷达扫描之后的直接就是点云,深度传感器(深度图像)只不过是一个局部的点云,原始的数据可以做端到端的深度学习,挖掘原始数据中的模式

  2、点云在表达形式上是比较简单的,一组点。相比较来说 Mesh需要选择面片类型和如何连接

    网格需要选择多大的网格,分辨率。

    图像的选择,需要选择拍摄的角度,但是表达是不全面的。

之前的大部分工作都是集中在手工设计点云数据的

这些特征都是针对特定任务,有不同的假设,新的任务很难优化特征。希望用深度学习特征学习去解 决数据的问题。

  但是点云数据是一种不规则的数据,在空间上和数量上可以任意分布,之前的研究者在点云上会先把它转化成一个规则的数据,比如栅格让其均匀分布,然后再用3D-cnn 来处理栅格数据

缺点:

3D cnn 复杂度相当的高,三次方的增长,所以分辨率不高30*30*30 相比图像是很低的,带来了量化的噪声错误,限制识别的错误:

  1、但是如果考虑不计复杂度的栅格,会导致大量的栅格都是空白,智能扫描到表面,内部都是空白的。所以栅格并不是对3D点云很好的一种表达方式

  2、有人考虑过,用3D点云数据投影到2D平面上用2D cnn 进行训练,这样会损失3D的信息。还要决定的投影的角度

  3、点云中提取手工的特征,再接FC,这么做有很大的局限性

PointNet

 我们能否直接用一种在点云上学习的方法:统一的框架

PointNet网络设计

网络设计有两种点云的特点决定的:

1、点云是数据的表达点的集合,对点的顺序不敏感

 D维的特征,最简单的D=3,还可以有其他颜色,法向点集是无序的,可以做变化,背后的代表的是同一套点集,置换不变性。模型需要对N!网络需要做到置换的不变性。系统化的解决方案,对称函数,具有置换不变性。神经网络本质是一个函数。

如何用神经网络构建对称函数:最简单的例子:

虽然是置换不变的,但是这种方式只计算了最远点的边界,损失了很多有意义的几何信息,如何解决呢?

与其说直接做对称性可以先把每个点映射到高维空间,在高维空间中做对称性的操作,高维空间可以是一个冗余的,在max操作中通过冗余可以避免信息的丢失,可以保留足够的点云信息,再通过一个网络r来进一步  消化信息得到点云的特征。这就是函数hgγ的组合。每个点都做h低位到高位的映射,G是对称的那么整个结构就都是对称的。下图就是原始的pointnet结构。

可以用MLP多层感知器(Multilayer perceptron) 来描述h和γ,g max polling 效果最好。

  接下来有个很有意思的理论问题,用神经网络构建的pointnet中,保证了对称,那么在所有的对称函数中,point(vanilla)是什么样的位置呢?什么样的函数pointnet 能代表,什么函数不能代表

可以得到理论:

pointnet 可以任意的逼近在集合上的对称函数,只要是对称函数是在hausdorff空间是连续的,那么就可以通过任意的增加神经网络的宽度深度,来逼近这个函数

  上面解释了如果通过对称函数,来让点云输入顺序的不变

2、如何来应对输入点云的几何(视角)变换,比如一辆车在不同的角度点云的xyz都是不同的 但代表的都是车辆,我们希望网络也能应对视角的变换,如果spatial transform network

 增加了一个基于数据本身的变换函数模块,n个点(x,y,z) t-net 生成变换参数,之后的网络处理变换之后的点,目标是通过整体优化变换网络和后面的网络使得变换函数对齐输入,如果对齐了,不同视角的问题就可以简化。

实际中点云的变化很简单,不像图片做变换需要做插值,做矩阵乘法就可以。比如对于一个3*3的矩阵仅仅是一个正交变换,计算容易实现简单。我们可以推广这个操作,不仅仅在输入作此变换,还可以在中间做 N个点 K维特征,用另外网络生成k*k 来做特征空间的变化,生成另一组特征。

高维优化过程中,难度高,需要加正则化,比如希望矩阵更加接近正交矩阵,那么这些变换的网络如何和pointnet结合起来:得到分类和分割网络。

  首先输入一个n*3的矩阵,先做一个输入的矩阵变换,T-net 变成一个3*3的矩阵,然后通过mlp把每个点投射到64高维空间,在做一个高维空间的变换,形成一个更加归一化的64维矩阵,继续做MLP将64维映射到1024维,在1024中可以做对称性的操作,就是maxpooling,得到globle fearue,1024维度 ,通过级联的全连接网络生成k (分类)

 如何分割呢?可以定以成对每个点的分类问题,通过全局坐标是没法对每个点进行分割的,简单有效的做法是,将局部单个点的特征和全局的坐标结合起来,实现分割的功能。最简单的做法是将全局特征重复N遍,和每一个原来单个点的特征连接在一起,相当于单个点在全局特征中进行了一次检索,检索到在哪个位置就是哪个类别,对连接起来的特征进行MLP的变换,最后输出m类相当于m个score:(将单个点和总体的特征连接到一起,判定在总体中的位置,来决定是哪个分类)

文章转载自https://www.cnblogs.com/Libo-Master/p/9759130.html。

目前微信交流群不断壮大,由于人数太多,目前有两个群,为了鼓励大家分享,我们希望大家能在学习的同时积极分享,将您的问题或者小总结投稿发到群主邮箱主邮箱dianyunpcl@163.com。

以上内容如有错误或者需要补充的,请留言!同时欢迎大家关注微信公众号,积极分享投稿,或者加入3D视觉微信群或QQ交流群。

原创不易,转载请联系群主,注明出处

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-07-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 点云PCL 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
图像处理
图像处理基于腾讯云深度学习等人工智能技术,提供综合性的图像优化处理服务,包括图像质量评估、图像清晰度增强、图像智能裁剪等。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档