简单记一下最近看的六篇场景流论文~其中3篇是关于RGBD图像的场景流,另外3篇是关于点云的场景流。
来源:https://zhuanlan.zhihu.com/p/85663856
作者:林小北
所谓场景流,就是光流的三维版本,表述了图像/点云中每个点在前后两帧的变化情况。目前对场景流的研究还局限在实验室阶段,由于缺乏实际数据(打标成本太高)以及客观的评价指标,离工程应用还有不小的距离。此外,巨大的计算量也是一个瓶颈。以下论文可以在文末直接下载。
《Deep Rigid Instance Scene Flow》 CVPR 2019
输入:双目摄像头的前后帧左右图像
核心思想:把场景流分割成多个actor的运动,利用MaskRCNN进行Instance Segmentation,每个Instance的Motion都应该与深度和光流一致。
首先,利用三个预先训练好的子网络提取视觉线索:
a. 利用MaskRCNN进行Instance Segmentation
b. 利用PSM-Net计算深度图(disparity map)
c. 利用PWC-Net计算光流
之后,采用高斯牛顿法最小化下面三个能量函数之和得到3D motion:
a. Photometric Error:前一帧左边图像的inlier像素点,与第二帧的投影位置的像素点必须尽量一致
b. Rigid Fitting:估计出的刚体运动必须与观察到的深度和光流信息一致
c. Flow Consistency:估计出的刚体运动在2d上的投影必须和光流一致
《Learning Rigidity in Dynamic Scenes with a Moving Camera for 3D Motion Field Estimation》 ECCV 2018
输入:前后帧图像的RGBD信息
核心思想:把图像分割为rigid/no-rigid区域,计算rigid区域的ego motion后再结合光流即可得到scene flow。
先利用两个预先训练好的子网络提取特征:
a. 利用PWCNet提取前后两帧的光流
b. 利用 rigidity-transform network (RTN)预测ego-motion以及rigidity mask
之后,结合光流、rigidity mask对ego motioon进行refine,保证rigity里面的像素点的光流与ego-motion一致。
最后,综合利用光流、rigidity mask、ego motioon信息即可得到scene flow。
备注:本文的另一个贡献是提出了一个用于场景流的数据库REFRESH。在kitti的inference结果如下,不是很好。
《Every Pixel Counts ++: Joint Learning of Geometry and Motion with 3D Holistic Understanding》TPAMI
输入:单目/双目摄像头的前后帧图像
核心思想:先用三个子网络估计光流、深度、camera motion,送入holistic 3D motion parser (HMP) 按照几何关系即可计算出rigid background的motion和moving objects的motion。
三个子网络先分别进行预训练,再结合HMP考虑如下loss优化三个子网络:
a. Rigid-aware structural matching:按照3D motion投影后rigid部分的结构特点应该match
b. Edge-aware local smoothness:投影后的深度和光流的应该保持smoothness
c. Rigid-aware 3D motion consistency:rigid background的moving object motion值应该尽量小
d. Flow motion consistency in occluded regions:occluded regions的光流前后映射应该一致
e. Multi-scale penalization:累加4个尺度的loss
备注:在双目摄像头的表现优于单目。通过joint learning,光流、深度、camera motion的表现均有提升。
在Kitti上的表现如下,算是差强人意吧。
本文作者还有一篇工作《Every Pixel Counts: Unsupervised Geometry Learning with Holistic 3D Motion Understanding》,是关于估计ego motion的。
《FlowNet3D: Learning Scene Flow in 3D Point Clouds》 CVPR 2018
输入:仅使用点云数据
核心思想:采用pointnet++作为基本模块,提取前后两帧点云特征并进行融合、上采样,直接拟合出scene flow
网络结构如下:
a. 4组set conv layer:pointnet++ 提取点云特征
b. 1组flow embedding layer: 把前后两帧的点云特征mix,第一帧的取中心点,其临近点从第二帧取,再提取特征
c. 4组set upconv layer:上采样,新增点从邻近点获取特征
loss为smooth L1 loss
备注:在合成数据集上训练的模型可以直接在kitti上work,但与图像场景流的论文不同,没有把background和moving object做区分,没有考虑ego motion。
《HPLFlowNet: Hierarchical Permutohedral Lattice FlowNet for Scene Flow Estimation on Large-scale Point Clouds》 CVPR 2019
输入:仅使用点云数据
核心思想:采用Bilateral Convolutional Layers作为基本模块,提取前后两帧点云特征并进行融合、上采样,直接拟合出scene flow。
备注:与FlowNet3D的整体结构一样,都是下采样-融合-上采样。Bilateral Convolutional Layers能够快速处理高维稀疏数据,是不同于PointNet的一种滤波操作。
《PointFlowNet: Learning Representations for Rigid Motion Estimation from Point Clouds》 CVPR 2019
输入:仅使用点云数据
核心思想:利用点云数据提取特征后,分别生成ego motion、scene flow、rigid motion、objection location,再整合结果输出
细节如下:
a. 采用VolexNet作为feature encoder
b. 把前后两帧的特征进行concate,接入context encoder
c. 之后,接入三个分支:
i. ego-miotion regressor
ii. sceneflow decoder -> rigid motion decoder(证明了rigid motion decoder 无法使用卷积层,故此处采用了fc)
iii. objection location decoder
d. 把检测出的object和motion融合得到结果
loss为 Scene Flow Loss + Rigid Motion Loss + Ego-motion Loss + Detection Loss
备注:本文思路与图像类方法很像,也是考虑各个instance的motion。
总结
- Deep Rigid Instance Scene Flow:
输入为双目图像,用MaskRCNN把动静态障碍物分开。三个子网络分别独立训练并计算出Instance Segmentation、深度图、光流,利用三个子网络的结果计算motion,进而得到scene flow。
- Learning Rigidity in Dynamic Scenes with a Moving Camera for 3D Motion Field Estimation:
输入为RGBD图像,两个子网络分别独立训练并算出光流、ego-motion&rigid mask,refine ego motion后算出scene flow。
- Every Pixel Counts ++:
输入为单目/双目摄像头,先用三个子网络估计光流、深度、camera motion,再按照几何关系计算出rigid background的motion和moving objects的motion,之后根据一致性对三个子网络进行优化。
- FlowNet3D 以及 HPLFlowNet:
分别对前后两帧点云下采样提取特征并进行融合、上采样,直接拟合出scene flow。
- PointFlowNet(思路类似Deep Rigid Instance Scene Flow):
采用volexnet提取前后两帧点云特征并融合,先检测出object、计算出ego motion、scene flow,再去回归各个object的motion。
推荐阅读
更多深度学习,GAN相关论文阅读笔记请关注深度学习论文阅读笔记专栏。
关于作者林小北:毕业于清华大学自动化系,京东算法工程师。
欢迎关注知乎专栏:https://zhuanlan.zhihu.com/c_1080771046889623552