Press "Enter" to skip to content

3D Deep Learning 入门(二)- Deep learning on point cloud

本站内容均来自兴趣收集,如不慎侵害的您的相关权益,请留言告知,我们将尽快删除.谢谢.

前言

 

继上次的 3D Deep Learning 入门(一)- Deep learning on regular structures ,今天要来讲第二部分 – 如何对 3D point cloud 做 deep learning。

 

 

为何 point cloud 重要?

 

因为 point cloud 很接近 sensor 吐出的 raw data,所以若能直接从 point cloud 中学到有用的资讯,就能达到 End-to-end 的学习(也就是直接拿 raw data 跟 ground truth,直接学习),不需要再额外做其他的转换(例如上次介绍的 multi-view ,你还是得决定要从哪些角度拍、拍几张、距离要多远等等)。

 

 

PointNet – 一个能做 classification 跟 segmentatino 的 seminal work

 

今天的第一篇,就要来介绍 PointNet 这篇算是一个 milestone 的论文。他具有代表性的地方主要在于提出一个架构,可以直接从 point cloud ,而且这个架构稍加变化就可以做到多种 task – classification 跟 segmentation。

 

 

point cloud data 的难点 – orderless

 

Point cloud data 并没有一个固定的顺序,而且在空间中的密度分布也很不均匀,所以在处理 point cloud data 跟有 regular structure 的 3D data 很不一样。对于没有顺序这个特性,等于是你的 function(或说 neural net)要能对抗 N! 的 permutation 变化。

 

 

PointNet 解决此问题的直觉方法 – 想办法逼近 symmetric function

 

因为 symmetric function 本身的特性就是不在乎 input variable 的顺序,所以可以想办法做出一个逼近 symmetric function 的架构。

 

 

于是产生出 PointNet 的基本架构:

 

 

这边的 symmetric function 就是用 max pooling,但如果直接对所有点取 max,可想而知结果不会太好,所以他们前面多套了一层 MLP 来学习。

 

 

除了 orderless 问题外,point cloud 的 pose 也需要 align

 

为了避免 point cloud 的 pose 不同影响辨识结果,所以这边用了额外的 T-Net 来 align point cloud 到同样的 pose:

 

 

PointNet classification

 

把上面提到的东西组合起来,就可以产生下面的架构啦:

 

 

稍微提醒一下,这边的 classification 是假设输入的 point cloud 都来自同一物体,所以最后直接取一个 global feature 来产生分类结果。

 

PointNet segmentation 架构

 

segmentation 因为会需要切出 point cloud 中间的 parts,所以这边的做法是把 local features 跟 global features 接起来,再多用一个 function 来计算各 point 的 class。

 

 

结果

 

从结果上看得出来 PointNet 不输 3D CNN 类型的方法,有些表现甚至还赢。

 

 

 

还有很多实验结果我就不放了,这边只放我觉得能够对直观理解有帮助的内容。

 

PointNet 的缺点

 

虽然 max pooling 解决了 N! permutation 问题,但 PointNet 直接从各个 point 学到 global feature,缺点就是少了局部的 feature:

 

 

这会造成 PointNet 很难 generalize 到各种 configuration(例如只要 input point cloud 没有先做 mean normalization,结果就会不太好),于是作者们又提出了 PointNet++。

 

PointNet++

 

主要概念

 

 

    1. 想办法做到 hierarchical learning,在过程中学到一些 local feature

 

    1. 想办法处理 point cloud 分布不均匀的问题

 

 

 

Hierarchical learning

 

首先,对于有 N 个点、每个点有 d+C 维的 vector data(d 是座标维度,以下图来说 d == 2;C 则是其他的 feature 维度,例如 RGB、normal vector 等等),先 sample 一些点,并用 N1 个小球来分群(同一个球里面的 point cloud 是同一群),开始有点 local group 的感觉:

 

 

这时再接上一个 PointNet,就能学习同一个 local group 里面的 feature:

 

 

继续扩展,就做到了 hierarchical learning:

 

 

这时跟 CNN 比较一下就能直观理解两者差别:

 

 

PointNet++ for classification

 

除了 hierarchical 的地方不同,取到 feature 之后的架构跟 PointNet 很像,我就不赘述了。

 

 

PointNet++ for segmentation

 

 

Density-invariant algorithm

 

而在处理 point cloud density 不均匀的问题上,作者们用的方法(MSG、MRG)基本上就是 multi-scale 的方法,这个方法从 SIFT 以来已经很常见,我就不赘述了。

 

 

结果

 

PointNet 的 hierarchical learning 能够更完整的表示 point cloud 里的 feature,所以分类结果比 PointNet 要好:

 

 

而在 density-invariant 方面,有使用 MSG 跟 MRG 的方法,对于 point cloud density 下降有更 robust 的表现:

 

 

从下图中也可以看出,比起 PointNet,PointNet++ 的 generalizability 也进步了不少:

 

 

总结

 

今天延续了上次的笔记,介绍了 3D point cloud 的 deep learning 研究,其实演讲中还有提到 3D point cloud synthesis 跟 Primitive-based shapes 的相关研究,不过个人比较没有兴趣,我就不写啦哈哈,有兴趣的话可以去看影片。

 

下一次就是最终回!之后陆续还会分享一些论文的读后心得或实作,想入门并建立 3D deep learning 知识体系的读者可以一起来参与(可以到 CoderBridge 写文章分享你的知识)。

 

Be First to Comment

发表评论

电子邮件地址不会被公开。 必填项已用*标注