最近在学3D方向的语义分析。
师兄推荐了一个哔哩大学的将门创投 | 斯坦福大学在读博士生祁芮中台:点云上的深度学习及其在三维场景理解中的应用!的宝藏视频,我会多看几遍,并写下每次观看笔记。up主的个人网页:http://stanford.edu/~rqi
下文的截图都源自讲解的PPT,在我的资源:祁芮中台点云讲解.pdf
全篇手码,内容较多会持续更新。 带问号的句子都是乘上引下的重点作用,文章分为三篇,这是第三篇,请耐心食用。
正文继续
前两篇介绍了PointNet++(PointNet)的网络结构以及其背后的原理,本篇为三维场景理解中的应用,主要讲解如何做三维目标检测(3D Object Detection),三维场景流(3D Scene Flow)暂不讨论。
如何做3D物体识别?如何用上PointNet和PointNet++?
我们的目标是得到物体的3D bounding(3D物体框)。 下图为在图片中的表达。 下图为在点云中可视化的例子。 (Previous Work)之前传统的工作是怎么处理三维物体识别的呢? 很多是基于下图这个思路,先在三维空间中做region proposal(区域提案),可能是基于点云投影到图片上,在图片中propose三维的bounding box,也可能是基于三维的CNN来做。propose完以后在把2D和3D的features结合到proposal中做一个分类。 这么做的缺点是三维空间的搜索非常大,计算量很大,3D的proposal因为点云的分辨率有限,很多时候很难发现小的物体。 另一种方法是基于图片,用RGB的图片来估计3D的bounding box,依赖一些物体大小的鲜艳知识,这时候很难精确估计物体深度和位置。另外depth image对领域的定义有局限,比如两个点可能距离很远,但投影后距离非常近。 所以在图片的表达的形势下,用2D的CNN还是有很多局限性,很难精确估计物体的深度和大小。 介绍一下本文做三维物体识别的思路,如何用上PointNet和PointNet++ 结合2D和3D的优点,针对RGB-D的input,先在RGB的图片上用一个2D detectors得到一个二维的物体区域。比如图片中的车先得到一个红色的方框,得到二维的区域之后,大部分任务我们知道camera intreseace,那么由二维区域生成到一个三维的视锥区域(2D region (from CNN) to 3D frustum),右边红色的锥状体表示。接下来对物体的搜索就可以在这是视锥内搜索,而且可以转化为在三维点云中搜索的问题。 这么做的优点在于:
- 利用2D的detector来缩小搜索的范围,从全图缩小到视锥,减少计算量和复杂度。
- 因为视锥内可以直接在点云上操作,我们可以利用点云的精确性,以及我们点云3D深度学习的工具,比如PointNet,直接分析和处理点云数据得到精确的3D bounding box。
框架起名叫Frustum-based 3D Object Detection(基于视锥的三维物体识别),这个识别有两个挑战,一个是下图中一个人在打电话,我们发现点云中有很多前景的遮挡(Foreground occluder)和后边干扰(Background Clutter)的出现。传统的方法很难应对这种情况。 如何解决上述有遮挡的问题呢? 我们的 方法是使用 PointNet解决这个问题,是一种基于3D点云数据的方法,大概的算法框架如下图。分三步:
-
先在2D的图片上得到一个2D detection的结果,然后我们根据camera intreseace可以把一个2D的box换到一个3D的区域对应一个视锥的范围,这个过程为Frustum Proposal(视锥方案)。 -
可以直接在视锥的点云里找这个3D的box,但因为有很多前景和后景的干扰,我们希望先把关键的点拿出来,而不受干扰的影响。我们做一个3D的物体分割的网络,也是由PointNet的分割网络实现。 -
我们把这个物体分割出来以后,再利用另外一个网络去精确的估计物体的三维bounding box,去估计他的姿态大小以及精确的3D位置。 在汽车的语义分割上,网络的优异结果如下图 在一些更小的物体上(行人、自行车)优势更大 为什么有这么优异的结果? 因为由2D到3D,直接在3D点云上分割。 另外,可以对输入做很容易的归一化,我们基于点云做操作,对点云的归一化可以简化学习的问题。举个栗子: 这是一个俯视图的视锥,有一辆汽车,汽车在左或右侧视锥的范围变化会非常大,x坐标的变化会非常大。 为了归一化这个问题,我们把坐标系进行旋转,这样所有的z轴都会指向视锥的中心方向。这样点在x轴的分布就会非常简化,学习的问题就会很容易。 进一步物体在深度上有很大区别,z有很大分布,我们基于3D物体的分割可以找到分割后物体的中心,这样物体的点会集中在原点附近,使得后面的学习问题大幅度继续简化。同时可以用另一个网络去估计这个物体真实的中心,红色的中心仅仅是物体分割的中心,物体的真实中心用另一个网络进一步估计。 最后在这个绿色的坐标系下进行最后bounding box的估计。 结果上,经过一系列的归一化操作,结果很棒,estimation accuracy飞速提升。而且这些操作很简单,只不过是一些矩阵的旋转、乘法(狗头)。 展示! 即便右下角就半个车,也能估计出来。 室内的检测:
总结
本文介绍了针对点云的网络结构pointnet,有对输入顺序的置换不变性,同时是轻量级的结构,能对数据的丢失很鲁棒,而且提供了一个统一的框架,可以为很多不同的任务服务。进而介绍了这个网络结构在很多场景中的应用,具体为3D识别的应用。还有很多场景,比如场景分割、局部特征的估计。 相关的文献: 完结完结! 其他两篇文章链接: 点云上的深度学习及其在三维场景理解中的应用————PointNet(一) 点云上的深度学习及其在三维场景理解中的应用————From PointNet to PointNet++(二)
|