点云数据的特性和挑战
1)点云具有不规则性,顺序不相关性,置换排序不变性对深度学习具有很大的挑战。
(Irregular(unordered):permutation invariance)
2)刚性变换(scale transorfmation ration)的鲁棒性(Robustness to rigid transformations)
3)点云损害,噪声,部分数据,大场景数据 (Robustness to corruption outlier,noise, partial data large-scale data)需要保持鲁棒性,高效性。
PointNet家族
PointNet是将深度学习应用与点云上的应用
PointNet = shared MLP + maxPool(多层感知机+对称函数)
inputPoints映射到高维空间(1024维)之后,maxpool保证了平移不变形
针对刚性变换,Pointnet提出了T-Net,用迷你网络transform-Net(3*3的变化)将输入点云进行对其alignment。无论如何刚性变换,它的表示是规范的。思想应用到深层的特征空间。
PointNet ++ = PointNet + 局部到全局学习泛式
卷积神经网络是有局部的概念的,但是pointnet并没有。作者模仿cnn的架构,让pointnet更好的捕捉局部的模式。于是有了pointnet++。从输入点云采样一些点,以这些点为中心找局部邻域,将局部邻域作为卷积作用域,局部邻域共享pointnet,和卷积中共享卷积核一样。实现了由局部到全局的优化。性能和局部模式的挖掘上有很大提升
Sampling+Grouping+PointNet(capture local pattens better CNN like)
Pointnet backbone做目标检测
https://openaccess.thecvf.com/content_cvpr_2018/papers/Qi_Frustum_PointNets_for_CVPR_2018_paper.pdf
2d 图像里面,用与训练过的detector 生成一些proposal,再利用图像和深度图中的信息得到Frustum Proposal(屏截头体,从2dproplsal恢复出3d的结构)。在做3d的instance segmetation。分割结果进行3d box的估计,利用tnet pointnet的设计进行3d box的网络。
用pointnet思想做场景光流的预测
https://openaccess.thecvf.com/content_CVPR_2019/papers/Liu_FlowNet3D_Learning_Scene_Flow_in_3D_Point_Clouds_CVPR_2019_paper.pdf
对于输入的两个特征,最后是得到场景光流估计。核心是找到两针时间的关系。核心是设计flow embending的模块。同时利用pointnet做上采样。
规则化处理(regular processing)
既然电云上不好做深度学习,我们能否做规则化处理,以方便我们做深度学习的研究。
VoxelNet = 3D grid + PointNet + 3DCNN
讲点云规则的划分成3Dgrid,每个grid用pointnet做紧凑的特征表示,然后用3DCNN来做目标检测。
https://arxiv.org/pdf/1711.06396.pdf
https://github.com/qianguih/voxelnet
SPLATNet = lattice + bilateral convolution + hash index
把点云映射到高维的晶格空间,用双边卷积的操作,利用哈希表高效处理,卷积之后的分割结果再投射回点云空间。参考 Lattice CNNs. ICLR 2015, Bilateral Neural Networks CVPR 2016.
https://arxiv.org/pdf/1802.08275.pdf
PCNN = 投射F到体积空间 保证特征共存是没有任何离散和近似的
我们在表达一个算法的时候经常用输入点云作为X,分类或分割结果输出 y=F(X)来表达。PCNN 把f投影到一个体积的规则空间,保证特征共存是没有任何离散和近似的(without any discretization & approximation)。
https://arxiv.org/pdf/1803.10091.pdf
塌方矩阵的思想优化点云端到端的训练。
p是局部点云中心点,F是特征。
1)归一化坐标到标准坐标 2)升维特征 3)级联原始特征和升维特征 4)MLP对特征进行加权和变换 输出K*K的塌方变换矩阵。核心idea通过MLP把输入点云规泛表示。5,6)常规的卷积。
https://arxiv.org/pdf/1801.07791.pdf
https://github.com/yangyanli/PointCNN
PointSIFT = SIFT + PointNet
https://arxiv.org/abs/1807.00652
https://github.com/MVIG-SJTU/pointSIFT
SIFT算子是对方向进行编码,对尺度也具有敏感性。
取每个局部邻域,找一个中心点。以中心点化xyz得到八个象限,取方向卷积,卷x,卷y,卷z得到最终的结果。作者认为对方向进行了编码。对于尺度变换,作者利用深度学习多层的特征进行concat,利用端到端的学习方式进行尺度敏感性。
SO-Net = Self-Organizing Map + MLP
用自组织映射的思想。自组织映射在点云空间中初始化一系列sym点,通过加上mlp学习的方式,将点在学习之后实现分布变换更换,更好的capture要处理的点云分布。利用这个方法去拟合或者近似输入。
Pointwise CNN
用暴力的方法画网格,画网格之后求和+归一化当成特征去卷积和学习。
Pointwise CNN CVPR 2018
Kd-Tree = KdTree 点云归一化
Kd-Net ICCV 2017 用kd树对点云进行划分,划分后的根节点进行分类的结果,也用decode-encode的方式进行分割。用数据结构的思想与深度学习相结合。
FCPN = 3d Grid + pointNet + 3dcnn
与voxelnet接近,划分grid之后,利用几何特征进行3dCNN。解决分割问题。
Graph-based modeling
用graph的思想进行点云数据处理。
DGCNN 动态图网络
https://github.com/WangYueFt/dgcnn
卷积的时候卷积周围点。concat特征进行全网络学习。方框代表聚合推近邻。利用特征空间中找近邻,每层graph特征是不一样的近邻也不一样,所以称作动态图。
Regularized GCNN
https://arxiv.org/pdf/1801.07829.pdf
用拉不拉斯矩阵进行filter。对filter进行多样式展开。正则化处理,对特征接近的点。再次确保训练过程不会跑飞。亮点kNN照动态k近邻。
GAN for point cloud
https://openaccess.thecvf.com/content_ICCV_2019/papers/Shu_3D_Point_Cloud_Generative_Adversarial_Network_Based_on_Tree_Structured_ICCV_2019_paper.pdf
点云的数据格式做GAN。GAN的生成网络图像是规则的,只要生成每个点上面的特征就可,点云中的生成网络输出的graph是未知的。所以不仅要学习特征,还需要学习graph的图结构。作者利用生成网络的前一层网络,用knn的思想,前一层的特征中找k近邻,当前一层输出的graph。
Spectral Graph Convolution 谱图卷积
https://openaccess.thecvf.com/content_ECCV_2018/papers/Chu_Wang_Local_Spectral_Graph_ECCV_2018_paper.pdf
在利用傅立叶变换在谱域进行卷积再利用傅立叶变换转换到实域。另外提出了Recusive pooling的做法
SuperPoint graph = minimal partition + GCN
https://openaccess.thecvf.com/content_cvpr_2018/papers/Landrieu_Large-Scale_Point_Cloud_CVPR_2018_paper.pdf
针对大型点云如何做深度学习。类似2d图像中的super pixel ,提出了super point,超点,再superPoint上建立Graph,也就是superpoint graph,这个superpoint graph是比原始数据点少很多。使用几何特征划分成最优化的问题,找到superpoint,后面就是普通的GCN。利用 gated GNN门控网络,且用了边缘条件卷积里,作者在CVPR2019 又提出了,oversegmentation 过分割方案来优化如何分割的更好的问题。
https://openaccess.thecvf.com/content_CVPR_2019/papers/Landrieu_Point_Cloud_Oversegmentation_With_Graph-Structured_Deep_Metric_Learning_CVPR_2019_paper.pdf
Deep GCNS = residual/dense connection dilated conv
在CNN中可以做的很深,但是graph中最多4-5层,无法做的很深。
于是利用2d的残差思想和密集链接思想来提升学习效果。同时用到了膨胀卷积的工作。在点云分割领域取得比较好的结果。
https://github.com/lightaime/deep_gcns_torch
https://openaccess.thecvf.com/content_ICCV_2019/papers/Li_DeepGCNs_Can_GCNs_Go_As_Deep_As_CNNs_ICCV_2019_paper.pdf
https://openaccess.thecvf.com/content_ICCV_2019/papers/Li_DeepGCNs_Can_GCNs_Go_As_Deep_As_CNNs_ICCV_2019_paper.pdf
Convolution Kernel
如何比较优雅的在点云上卷积呢
KC-Net CVPR 2018
像卷积核一样在点云中定义点云核。红色表示响应越大,不同的卷积核在局部有不同的响应。
点云配准的学习思想来定义核。剩下就是计算核相关,利用高斯做核核周围的点做核相关。
N*3 有点类似conv kernel 3个channel。
点云特征类似卷积进行concat进行操作。
KPConv
https://arxiv.org/pdf/1904.08889.pdf
2d卷积中,2d图像是规则的,利用kernel对局部结构作用,结果放到output中心点上面。
但是点云是不规则的,定义kernal后,设计k个点,用kenel利用局部点云作用,结果放到中心点上面。
kenal设计中,yi是邻居点计算相关度的加权计算获取filter。
MCCNN = Monte Carlo Convolution
https://arxiv.org/pdf/1806.01759.pdf
(f ∗ g)(x) = ∫ f (y)g(x − y)dy
蒙特卡洛卷积,对于标准信号卷积,利用蒙特卡罗积分进行离散化,利用特征和滤波器的作用后进行归一化。亮点:对抗点云非均匀分布特性。密度的引入到卷积计算中,是采样点点云邻居点,yi是密度的计算。
https://github.com/viscom-ulm/MCCNN
PointConv
类似蒙特卡罗卷积的工作,S是InverseDensityScale,W不是直接作用在特征上,是局部点云特征的权重
https://github.com/DylanWusee/pointconv
https://arxiv.org/pdf/1811.07246.pdf
Geo-CNN
如何更好的学习局部几何结构。以中心点做一个坐标系,把邻居点投影到坐标系上以向量表示。在坐标系上面利用权重,进行学习。考虑到点到中心点角度的关系。卷积过程中,更好的,学习局部的几何。
https://github.com/voidrank/Geo-CNN
https://arxiv.org/pdf/1811.07782.pdf
Tangent Conv CVPR 2018
原始点云中捕捉几何结构的优化,半径的局部点云做归一化,==》协方差矩阵==〉法向量 Np,确定切平面。用局部点云空间中点,投影到切平面上,得到稀疏点,然后做卷积。
可以处理百万级别的点。
https://openaccess.thecvf.com/content_cvpr_2018/papers/Tatarchenko_Tangent_Convolutions_for_CVPR_2018_paper.pdf
Consider a set of points q from a spherical neighborhood of p, such that kp−qk < R. The orientation of the tangent plane is determined by the eigenvectors of the covariance matrix C = P q rr⊤, where r = q − p.
A-CNN 环形CNN
PointNet++中有multiscale的操作。对于局部点云信息量不多,会有信息冗余,另外计算复杂度比较高,作者提出了环形点云,每次学这个环。另外还使用膨胀环。协方差矩阵==》法相==〉切平面==》随机选取点==〉顺时针排序点 ==》经典的卷积(例如1*3)
https://github.com/artemkomarichev/a-cnn
PointWeb CVPR 2019
用pointNet学习点云,用DGCNN学习中心点云的关系,
探究每个邻居点核中心点之间的关系来优化DGCNN,特征之间关系用MLP进行学习,利用边缘卷积的方式,用特征差来学习。
https://github.com/ziyan-wyq/PointWeb
Robustness
电晕涉及到很多刚提变换(平移,尺度变换,旋转)。对于平移和尺度变换问题可以通过归一化来解决。但是旋转是不容易解决的问题。X * R = (N x 3)(3 x 3)一个点云乘以旋转矩阵,每个点的坐标都会发生改变。对于深度神经网络来说,输入的每个点发生改变之后,输出不变是非常难学习的问题。使用数据增强和对其(Data augmentation or align)来增加神经网络的鲁棒性。但是这样的方式增加了很多计算量。参考 Qi et al. PointNet CVPR 2017
另外一个方法就是通过采分布来增加鲁棒性(Robustness to sampling density)
Multi-scale or Input dropout 用multi-scale的方法捕捉密度的变化,或者将输入的点随机的去掉(PointNet++)来做数据增强。
Monte Carlo integration 蒙特卡罗方法就是把密度放到学习中,提升密度的抗性。
Embedding density info
利用球的思想优化旋转不变形
Group Equivariant CNN ICML2016
SO(3) Equivariant Representations with Spherical CNNs
https://arxiv.org/pdf/1711.06721.pdf
Spherical CNNs ICLR 2018
ClusterNet CVPR 2019
https://openaccess.thecvf.com/content_CVPR_2019/papers/Chen_ClusterNet_Deep_Hierarchical_Cluster_Network_With_Rigorously_Rotation-Invariant_Representation_for_CVPR_2019_paper.pdf
离散旋转全等性,利用Group CNN的思想,对输入点云进行离散旋转(20,30,40度), 对于输出Equicariance 变换。属于输出特征进行置换。并设计网络进行旋转不变性的研究,利用SO-Equivariant ECCV
Li et al Discrete Rotation Equivatiance ICRA 2019
https://arxiv.org/pdf/1904.00319.pdf
把原始点云映射到球上面,利用球的对称性,做球CNN卷积,得到旋转不变性的优化。
Spherical CNNS ICLR 2018
目前最好的旋转不变性最好的工作是 清华大学的 SFCNN CVPR 2019。利用球形分形的网络,原始点云映射到分形球体上的顶点,球上面卷积解决旋转不变性的问题。https://raoyongming.github.io/files/SFCNN.pdf
Rigorously Rotation-INvariant RRI Representation
严格旋转不变的表示|| Rx||2 = ||x||2 内积,二方树是不变的。