《论文阅读》FlowStep3D: Model Unrolling for Self-Supervised Scene Flow Estimation

留个笔记自用

FlowStep3D: Model Unrolling for Self-Supervised Scene Flow Estimation

做什么

Scene Flow Estimation场景流预测
在这里插入图片描述
也就是提供两帧后估计场景中每个点的三维运动,可以理解成包含3D信息的场景配准

做了什么

《论文阅读》FlowStep3D: Model Unrolling for Self-Supervised Scene Flow Estimation_第1张图片
这里提出了一个迭代式的步骤,没有用端到端的方法学习,而是用步骤化来细化场景流预测,然后用强正则化方法证明了解的迭代收敛性

怎么做

首先是场景流的问题定义,就像前面所说的,输入是两组点云S和T,pi∈R3∈S,qj∈R3∈T,目标是估计第一个场景下每个点的运动矢量fi∈F,使得用这个矢量移动场景中点之后,能使移动后的S和T对齐
《论文阅读》FlowStep3D: Model Unrolling for Self-Supervised Scene Flow Estimation_第2张图片
整体结构按照问题定义设计,S和T分别是源点云和目标对齐点云,每一步的F均为平移矢量估算
然后是整体流程,首先通过一个local encoder和global encoder分别编码各自点云的全局信息和局部信息,然后构建一个核心global correlation unit全局相关模块来学习全局校准信息,这是最开始的初始化,然后用local update unit局部更新模块来再全局基础上对逐点进行局部信息更新,这里的local模块实现了迭代ICP,每步的F是由local模块进行refine输出。
首先是feature encoder部分
《论文阅读》FlowStep3D: Model Unrolling for Self-Supervised Scene Flow Estimation_第3张图片
这里模块内的组成部分有《Flownet3d: Learning scene flow in 3d point clouds》中用到的set conv,全局模块和局部模块就是由几层这种卷积组成。
《论文阅读》FlowStep3D: Model Unrolling for Self-Supervised Scene Flow Estimation_第4张图片
然后是初始化步骤的全局相关模块,这里输入两个全局特征,输出F1也就是逐点平移矢量的初始化
在这里插入图片描述
这里先用sin函数简单计算相似度,这里的h()函数就是对点的全局特征表示
然后用这个相似度得出相关矩阵
在这里插入图片描述
这样得到的矩阵M,每个位置(i,j)就是表示了P点云也就是S点云中点pi和Q点云也就是T点云中点qj之间的关系,一种相关对应关系
有了这个相关矩阵,就可以初步估算全局状态下的平移矢量F
《论文阅读》FlowStep3D: Model Unrolling for Self-Supervised Scene Flow Estimation_第5张图片
简单来说,这里就可以理解成对原点p来说,目标点云每个点位置根据这个相关矩阵而进行的加权平均
至此,由全局特征得到了初始化的一个场景流结果F1
然后是局部更新模块
《论文阅读》FlowStep3D: Model Unrolling for Self-Supervised Scene Flow Estimation_第6张图片
这个模块的输入是上一个迭代的模块输出(初始化的全局F或者迭代中的局部输出F)和源点云的local encoder
这里的理解就是使用上一步的F对原点云进行warp也就是配准的转移,然后用这个结果再进行一次feature提取,然后结合F进行对F的改进
在这里插入图片描述
这里的局部关系层用了《Flownet3d: Learning scene flow in 3d point clouds》中的flow embedding来提取特征
然后用GRU的方式进行迭代信息的选取
《论文阅读》FlowStep3D: Model Unrolling for Self-Supervised Scene Flow Estimation_第7张图片
这里的x是在这里插入图片描述
dlocal是warp后提取的特征,dcorr是flow embedding层得到的flow特征,dmotion视为前面迭代的流特征,这是构建了一个两层set conv得到的,也就是一个对过去信息的特征整合。
经过这个RNN部分,得到了信息保留的x特征,通过这个特征再构建一个两层set conv,得到逐点矢量变化△F
在这里插入图片描述
至此,就是一整个迭代步骤的过程
最后是模型的训练
《论文阅读》FlowStep3D: Model Unrolling for Self-Supervised Scene Flow Estimation_第8张图片
整体序列的loss就是每一次迭代的LOSS Lk的整和,所以主要就是这里每次迭代的LOSS,这里构造了两种方式,自监督方式和监督方式
首先是自监督方式
《论文阅读》FlowStep3D: Model Unrolling for Self-Supervised Scene Flow Estimation_第9张图片
这就是标准的Chamfer LOSS的写法,这里的SK就是原点云S+当前平移矢量TK得到的,这个loss就是希望转移后的点到目标点的最小距离之和最小,传统方式了
在此基础上,添加一些正则化loss
《论文阅读》FlowStep3D: Model Unrolling for Self-Supervised Scene Flow Estimation_第10张图片
这里的L是拉普拉斯函数,定义为点x到它的邻域内点的距离之和,即当根据预测流扭曲时,强制源保持其拉普拉斯性质
《论文阅读》FlowStep3D: Model Unrolling for Self-Supervised Scene Flow Estimation_第11张图片
然后是标准正则化LOSS
《论文阅读》FlowStep3D: Model Unrolling for Self-Supervised Scene Flow Estimation_第12张图片
最后将这两个LOSS相加
然后是第二个方式,全监督方式
《论文阅读》FlowStep3D: Model Unrolling for Self-Supervised Scene Flow Estimation_第13张图片
《论文阅读》FlowStep3D: Model Unrolling for Self-Supervised Scene Flow Estimation_第14张图片
这个LOSS就比较好理解了,就是根据GT直接计算转移后的L1距离

效果

《论文阅读》FlowStep3D: Model Unrolling for Self-Supervised Scene Flow Estimation_第15张图片
这里是用了两个数据集,FlyingThings和KITTI,分别在全监督和自监督的情况下进行的对比

总结

1.整体方法都比较好理解,一种迭代框架化的实现,这种方法能在很多领域进行范用

你可能感兴趣的:(计算机视觉,深度学习,深度学习,python,机器学习)