公开课《利用深度学习实现高精地图的点云配准》学习

直播入口:https://appoSCMf8kb5033.h5.xeknow.com/st/7nYQiaB11 百度卢维欣
PPT链接: https://pan.baidu.com/s/1mGz1PREv5Vf34Gleq_OzUA 密码: 7791
-深度学习处理点云有多个方面,比如检测,分割,识别这些应用层面,最终核心的层面都是对点云的特征的学习,这里主要讲解深度学习的点云特征的学习

基于学习的点云拼接的算法

pointnet网络:核心使用mlp对单点提取特征,对单点提取特征解决点云无序的问题
使用mapsgrounding 对称式的结构解决提取点云无规则带来的问题
和传统的卷积神经网络不太一样 ,传统的卷积是加权并且求和两个部分,这个网络只是有一个加权而没有求和
和pointnet类似的是 pointnet++ pointnetsave 他们都是想要解决局部特征学习的问题,而没有解决每个点如何单独提取特征这个问题
rscnn就和传统的卷积很相似了
另外一种提取特征的方式 ,把无序无规则的点云转化为有序有规则的结构
代表性的pointcnn,其中有一个查变换结构,这个结构把输入网络的结构做一个变换,使点云成为有顺序的结构
类似的有so-net, ocnn
这种方式现在用的已经不太多了,用于点云不太好,强制对点云赋予顺序可能对点云也是一种干扰

另一种点云处理方式 使用kdtree 来建立点和点的关系,利用点的一个k邻域求点的协方差矩阵,利用协方差矩阵,对点邻域的k个特征来加权求和,和传统的卷积方式很类似了,而且符合传统几何方法处理点云的方式。
比较典型的网络是一个2018cvpr deep parametric continuoous cnns
在点云处理过程中使用kdtree 每次用kdtree的k个邻域去学习一个协方差矩阵,这个协方差矩阵实际上是一个协方差权重阵,和当前的k邻域的特征矩阵进行加权求和得到一个新的feature阵,和前两种处理方式相比差别是没有topsample downsample的操作,比较符合传统点云处理的方式,也比较符合卷积的处理方式。
类似的还有DGCNN和 LPD-Net,只是执行knn时是在特征空间,在特征空间执行knn可以做一个聚类,对抓取整个点云的feature比较有用,可以做一个场景的识别,可以做一个类似路谱检测的工作。

重点介绍的一个点云处理方法是 bps 即bases point set
假如现在有个object需要进行分类,需要先对object进行encode,如何进行encode呢 ,先把object缩放然后放置在一个单位球中,
在单位球种放置一个bases point set ,在基础点集上寻找一个距离object最近的的那些点 把最近的 点的距离encode成一个vector
这个vector就是 基础点集里面,每个点距离最近的一个object的距离
如果 object的点有一万个的话 但是基础点集的个数只有1024个 那么encode后 成为i1024
1个的个数,而原来是100003的参数个数,
通过这个方式可以encode的 效率比较高

但即使在这总有 损失的情况下 也能在比pointnet小两个数量级hi的额计算量和比pointnet小一个数量级的参数量的情况下和pointnet相似的精度
另外一个encode的方式是kpconv 这个方式和bps一样在球形邻域内随机放置一些点,但不是只encode最近的点,而是把所有的bps点和object的点组成协方差矩阵,其中矩阵的额值是和特征点到object的点的距离相关的,而且每个bps的点都有一个影响的距离超过这个距离就把协方差矩阵的额值设零。这种encode方式比较优雅,信息损失比较少。
类似的有kpconv 和A-CNN
这种方式的特点就是使用固定的bps对无序的点云进行encode ,encode后的信息是有序的并且计算量小很多。会取得比较好的效果

基于学习的点云拼接的任务

什么是点云拼接的任务、

可能好几个视点采集了一个object的点云,如何把这个多个视点的点云拼接起来。
3D的点云地图是通过单针的点云融合的来的,需要进行点云拼接。

点云拼接pipeline

对于没有任何初始信息的时候对两个点云进行拼接的方式是首先进行粗拼接,用的比较多的是基于特征点的方式,传统的基于特征点的方式比较著名的方式是pfh 即点云特征直方图。还有fpfh
此外还有针对global分布拼接的方案gmmreg 和cpd ,cpd对自动驾驶场景比较合适 成功率比较高
还有一些基于深度学习的方式 3DMatch、PPFNet、 3DFeatNet

完成粗拼接后还会进行精拼接 算法以icp和ndt为主
deepvcp是一种精拼接的方法。
精拼接在自动驾驶中更有价值一些。

点云拼接算法简介

一些基于深度学习的方式
PPFNet:首先在两个点云里面随机的选择一些点然后对这些点使用pointnet提取特征,之后对这些特征进行两两匹配然后利用匹配的结果寻找corresponds,两个特征的距离越小的话是匹配帧的概率越大。就可以使用弱监督的方法获取匹配信息。比传统pfh的概率高但是总体概率还是比较低的,所以需要执行roundseek ,但是roundseek还是比较耗时的,这是一个劣势。
3DFeatNet:本来是做路谱检测的任务
输入是三振点云 anchor、 positive、 negative
anchor 和 positive组成pair 指代这两帧点云能够匹配
anchor、 negative无法匹配的点云,
这个网络的功能是检测两个点云能不能匹配,非常有利于做路普匹配。
anchor 和 positive组成pair的defference比anchor、 negative无法匹配的点云,的defference药效
FlowNet3D:不是专门用来点云拼接的任务 把两针点云得到的featuremap 在featuremap的空间做一个flowenbedding的操作
flowebedding的操作就是把source在target点云中寻找临近的点,把特征用线性插值的方式得到 把两个特征做一个减法 ,然后把减的结果通过upconv的操作
用线性差值的方式通过decode的方式 得到每一个点的flow
这个网络结构可以得到每个点的flow 如果只保留静态物的flow 可以做点云拼接 如果对动态物的flow 可以是
完成粗拼接后还会进行精拼接 算法以icp和ndt为主

L3-Net:
完成点云定位的工作,解决三个自由度 解空间只有三个维度,在解空间进行搜索 ,
寻找keypoint的时候使用的传统特征。

deepvcp 端到端的点云配准网络
自动驾驶中 点云拼接的问题 icp配准的连续帧可能没问题,但是如果不是连续帧,那么当车开走了之后,在车的位置可能会寻找到干扰点,所以自动驾驶中点云配准应该以那些不运动的点作为关键点,所以应该使用语义信息。同时配准是是使用组合导航的初始值的,ICP对初值比较敏感,如果初始值特别糟糕的话应该怎么处理。

自动驾驶中的匹配任务是
在有比较大的初始差的时候得到更准确的解,
需要把维度扩展到六个维度,xyz yrp
如何去除动态目标 目前只看到使用深度学习的方式 那么可以直接使用深度学习排除动态目标,同时使用深度学习完成匹配。

网络模块
1关键点检测
2corresponddings point generation
3融合局部和全局信息的losfunction
首先从source点云和target点云中各找一些关键点,然后把这些关键点投影到对象点云中间去,如 target点云就是source点云的对象点云,对target点云来说 ,source点云就是target点云的对象点云,然后再对象点云中间寻找一些搜索空间,在搜索空间中生成一些同名点。获得同名点之后使用svd就可以获得旋转平移矩阵。
keypoint的dectection模块核心idea是使用语义特征,来去除动态物的干扰,选择一些比较适合匹配的点作为关键点。
correspondes generation layer 是核心模块 ,对应的是icp中的同名点,icp是寻找欧式距离最接近的点。在自动驾驶中70m*70m中点有十万个点,怎么保证两帧点云都扫到了同样的object的点,这时没办法保证的是点的稀疏性保证的。如果使用ICP想要找到一个真正的同名点是不可能的,因为由于稀疏性,同名点可能是不存在的。
这个算法提出了一个使用深度学习的方法来学习点和点之间的相似度,通过相似度来生成一个同名点。比如在source点云中有一个桌子的一个桌角,在target中并没有这个桌角,只有一些桌角周围的点,通过桌角的特征和其他的点学习相似度,生成一个桌角的同名点。
lossfunction 融合了关键点的局部相似度和全局的几何约束的

算法的核心设计
输入网络是N*4(N个 x y z,和intensity) 输入point++ ,提取语义特征,局部提取几何特征(根据特征的感受野来决定,最终的感受野比较大,可以学习到一个点是在什么物体上,认为是语义特征)提取到segementationfeature ,在segementationfeature的基础上使用attentionlayer 把语义特征转化为权重, 权重是后面用来拼接时使用的权重, 这个步骤是根据语义点来判断 这个点是不是适合作为拼接任务使用的特征点。
所以这个步骤可以得到k个关键点 以及关键点权重,还有关键点的语义特征。
correspondes generation layer ,使用初始pose 把提取的关键点映射到对象点云里面去,把对象点云搜索空间划分为一个个的小格子,每个格子的中心都认为是一个候选的关键点。在关键点和候选同名点的邻域提取几何特征(匹配过程中使用的特征成为局部几何特征,匹配的时候只是在locale的局部)
提取浅层特征使用的minipointnet的结构 就是一个mlp+maxpooling 提取特征之后做一个featureconsel的操作 ,求特征和特征的L2 距离 得到一个
matching feature matrix 这个matrix 和搜索空间的大小是一样的。 然后使用3D CNN降维ie平滑 再使用softmax 转化为权重阵, 根据权重阵和之前候选同名点坐标 加权求和 得到corresponding point。
corresponding point 的过程 ,

未完
之所以用到车道及的高精度定位 是因为 感知、pnc 等模块不够鲁棒 后期如果增强学习 动态静态感知足够强大的时候就需要高精度的地图来支持

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

友情链接更多精彩内容