3D点云|云上的卷积神经网络及其部分应用
本次公开课由深蓝学院开设,李伏欣老师主讲,主要介绍了涵盖3D点云领域的研究,并重点介绍了李老师近期的最新工作内容。
李伏欣
美国俄勒冈州立大学助理教授
本次分享首先介绍了最近几年两篇经典论文中的3D点云识别的工作,详细介绍了PointNet++与PointNet;接着由传统CNN入手,逐渐引入PointConv;最后将结合PointConv介绍了我们团队最近的工作内容。
随着深度传感器的普及,日后深度传感器在我们日常生活中将会变得更加普遍。我们都知道深度学习在2D图像识别中有了飞跃性的发展,研究点云CNN的目的就是使深度学习在点云上的应用更加广泛。
提到点云深度学习就一定离不开PointNet和PointNet++两篇经典的点云神经网络处理方法。PointNet中常用的有两种操作:1×1 convolution 和Max-pooling,然而只有这两种操作实际上对3D识别来讲是远远不够的。PointNet提取特征的方式是对所有点云数据提取了一个全局的特征,显然,这和目前流行的CNN逐层提取局部特征的方式不一样。
PointNet++作者使用的采样算法是farthest point sampling(最远点采样),相对于随机采样,这种采样算法能够更好地覆盖整个采样空间,包括点云数据特征信息和边角信息,这些都是随机采样所无法具备的。
为了引入点云CNN,首先我们来回顾一下传统的CNN。对于2D图片来说,某个位置的输出,不仅与该位置的输入有关,还与此位置周边位置的输入有关,不同位置的输入,具有不同的权重。下图中X(i,j,k)可以看做图像的原始像素,W为卷积核,G为邻域。卷积是一个加权求和的操作,由于位置坐标的像素值是固定值,卷积核上所有作用点以此作用于原始图像像素,并通过线性叠加把所有的作用结果累加,即是图像卷积的输出。
实验结果证明原结构大概需要8G内存,优化过后大概只需要占用100M,极大的节省了内存占用率,为后面构建大规模网络奠定了基础,这样一个PointConv layer就可以完整的对应到一层普通卷积层,优化过后的网络结构为:
当然,我们还可以来定义PointDeconv,在之前的PointNet++中,Deconvolution主要是通过插值的方法来实现的。例如在下层有了一个k邻域,上层的点直接做插值来实现。而有了Pointconv以后可以在每次插值加入一层Pointconv,这样PointDeconv 由两部分组成:插值和 PointConv。首先,使用一个线性插值算法来得到精细层的特征的初始值,再在精细层上进行一个 PointConv 进行优化特征,从而获得较高精度的特征值。
有了PointConv和PointDeConv,便可以根据传统的卷积神经网络结构搭建一个U-Net网络,用于点云的分类任务。如下图所示,将所有的点先通过PointConv得到非常少的点,再通过一系列PointDeConv点数逐渐增多直至回到初始的点数,再对每个点进行1×1的卷积,便得到了点云的U-Net。
根据上述提到的PointConv的有效性,可以把许多2D的工作进行推广,扩展到点云的应用,例如在计算机视觉中的运动估计。而在运动估计中最重要的环节就是配准,传统方法中的SIFT等方法是可以轻松实现,但是随着深度学习的推广,如何在物体一直运动的情况下有效匹配像素点成为了深度学习运动估计的难题。
最直接的想法就是在相邻两帧之间分别做CNN,得到W×H×D维的特征,在使用Cost Volume的方法用于像素匹配,Cost Volume方法的基本原理为:在W×H×D的特征中,每一个特征计算对应到另一个特征d×d邻域2范式,得到了W×H×D×d×d的匹配信息。尽管得到的匹配信息可能会很大,但是可以获得更好的配准效果。那么如何将配准问题运用到点云上呢?
大体思路为:在相邻的两帧点云Point Cloud1和Point Cloud2作为输入连接PointConv layer得到Point Feature1 和Point Feature2,设以第一帧为target,则在Point Feature1有N个点的基础上取k邻域,计算的N×K维的Point Cost Volume,在连接PointConv layer后与贴到Point Feature1上便可以得到相关的运动信息。
但是完整的实现还是需要完成许多细节,其中最重要的为coarse-to-fine,李老师的团队根据2D里的optic follow中有一个很好的方法PWC-Net,实现了3D 点云上的coarse-to-fine。原PWC-Net方法中是将输入图像变小(例如16×16),在两个16×16的基础上计算Cost Volume,之后应用16×16得到的运动结果,先对第一帧的32×32的图像进行移动,在和第二帧的32×32进行匹配计算Cost Volume,以此类推,把所有层的结果加在一起,便可以得到最终的计算结果。这样每次计算的Cost Volume取的邻域并不会很大,计算新的Cost Volume时,可以直接应用上一次的运动结果。
在李老师团队最新的工作PointPWC-Net中,因为有PointConv的存在,可以将PWC-Net中的downsample用PointConv替代,upsample用PointDeConv的方法替换,在Warping layer中,假设得到的输入运动估计为(Δi, Δj, Δk),与原有输入点(i, j, k)相加即可得到输出(Δi+i, Δj+j, Δk+k)。这样我们可以得到点云中的运动估计。点云里的Cost Volume可以把像素坐标值转换为点云数据,由于图像中的d×d是一个dense矩阵,而点云是找K nearest neighbor,得到的Cost Volume的大小就直接去取决于K取值的大小为N×K。
另外李老师团队介绍了另一个非常有意思的工作:如何清楚的知道CNN中是那些Feature起到了至关重要的作用呢?那么需要优化一个mask,对输入图像进行blur,将blur过后的图像重新放到之前CNN网络中预测,使预测的准确度尽可能的较低。例如在预测口琴的图像中,原图像的分类精度在99.9%,如果对人的嘴和手部与口琴接触的地方进行blur,得到的结果就只有11.9%,相反,如果我们只显示嘴部和手部与口琴接触的图像,分类预测的精度达到了81.9%。
李老师团队同时将这个有趣的工作推广到了点云中,但是与2D图像不同的是,2D图像可以通过blur进行操作就可以把图像的特征给去掉了,而点云中如果直接删除特征点,会在某些分类器中出现问题。基于上述问题,李老师团队提出了一种点云smooth方法,对部分点云进行smooth逐渐变成一个球,来起到2D图像blur的作用。这样在smooth的操作下将2D中优化mask的工作推广到了点云。例如人的点云图像分类中,如果把人的头部smooth掉后,人的点云分类精度就从原来的0.79降到了0.15,便可以了解到人的头部在点云分类起到了至关重要的作用。
在公开课的最后,李老师给到了我们一些学习深度学习的建议。点云与深度学习结合的应用范围十分广泛,例如三维重建、运动估计等,要想学好深度学习,首先需要学好机器学习的理论知识,例如Overfitting是什么等基础问题,写一写简单的SVM代码。
在对机器学习有了一定的认识之后,再开始学习深度学习,深度学习本身没有很难的知识点,难就难在做实验,例如如何提高精度、怎样对数据初始化可以得到较好的结果等。多学习别人在深度学习中使用的各种技巧,对提高深度学习代码精度有很大的帮助。很多时候自己写一个深度学习的网络不如直接下载一个开源的深度学习网络的代码,在现有的基础上对原工作进行修改。
相关文章
-
[Qi et al. CVPR 2017] C. Qi et al. PointNet: Deep Learning on Point Sets for 3D Classification and Segmentation. CVPR 2017
-
[Wu, Qi and Fuxin 2019] W. Wu, Z. Qi, L. Fuxin. PointConv: Deep Convolutional Networks on 3D Point Clouds. CVPR 2019
-
[Graham et al. 2018] B. Graham and L. van der Maaten. Submanifold Sparse Convolutional Networks. CVPR 2018
-
[Choy et al. 2019] C. Choy, JY. Gwak, S. Savarese. 4D Spatio-Temporal ConvNets: Minkowski Convolutional Neural Networks. ICCV 2019
-
[Qi et al. NeuRIPS 2017] C. Qi et al. PointNet++: Deep Hierarchical Feature Learning on Point Sets in a Metric Space. NeuRIPS 2017
-
[Su et al. 2018] H. Su et al. SPLATNet: Sparse Lattice Networks for Point Cloud Processing. CVPR 2018
-
[Xu et al. 2018] Y. Xu et al. SpiderCNN: Deep Learning on Point Sets with Parameterized Convolutional Filters. ECCV 2018
-
[Li et al. 2018] Y. Li et al. PointCNN: Convolution On X-Transformed Points. NeuRIPS 2018
-
[Jia et al. 2016] X. Jia et al. Dynamic Filter Networks. NeuRIPS 2016
-
[Simonovsky 2017] M. Simonovsky, N. Komodakis. Dynamic edgeconditioned filters in convolutional neural networks on graphs. CVPR 2017
-
[Wang et al. 2018] S. Wang et al. Deep parametric continuous convolutional neural networks. CVPR 2018
-
[D. Sun et al. 2018] D. Sun et al. PWC-Net: CNNs for Optical Flow Using Pyramid, Warping, and Cost Volume. CVPR 2018
-
[Wu et al. + Fuxin arXiv:1911.12408] W. Wu et al. PointPWC-Net: A Coarse-to-Fine Network for Supervised and Self-Supervised Scene Flow Estimation on 3D Point Clouds. arXiv:1911.12408
-
[Ziwen et al. + Fuxin arXiv:1911.10415] C. Ziwen et al. Visualizing Point Cloud Classifiers by Curvature Smoothing. arXiv:1911.10415
-
[Z. Qi, S. Khorram, L. Fuxin, AAAI 2020] Zhongang Qi, Saeed Khorram, LI Fuxin. Visualizing Deep Networks by Optimizing with Integrated Gradients. AAAI, 2020