【论文阅读】【综述】从Optical Flow到Scene Flow

本文介绍了从Optical Flow到Scene Flow的发展,包括FlowNet、PWCNet、MaskFlowNet等关键方法。Scene Flow是3D光流,常用于自动驾驶等领域。文章特别讨论了PointFlowNet、FlowNet3D及其改进版,以及自监督学习的场景流估计方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Scene Flow可以理解为3D的光流,数据换成了点云,Flow是用xyz三个坐标表示。与目标检测相似,想要了解Scene Flow的发展,就得先了解Optical Flow的方法。我也是刚刚开始看这个领域,所以总结的不到位,欢迎各位看官批评指正。

我的关注点在于Scene Flow,所以Optical Flow的很多方法就没有放上来。只是放了一些对Scene Flow有启发的文章。

Optical Flow

FlowNet(2015ICCV)

早期的代表性方法,2015年resnet才被提出来。
该方法提出了两个网络,分别是FlowNetC和FlowNetS,如下图所示。
在这里插入图片描述
FlowNetS非常简单,就是把两张图片堆叠在一起,然后用分割的网络去预测。
FlowNetC则复杂一些,提出了两个feature map的correlation的概念。后续研究中,将其发展为cost volume。两个feature map的correlation的计算如下:
在这里插入图片描述
x 2 \bf{x}_2 x2取自于 x 1 \bf{x}_1 x1的一定矩形邻域内。取值时,文章中讲到:
在这里插入图片描述
可以看到,k取0,也就是每个算feature map1中每个像素的correlation时只与它自己有关。d则取得很大,是为了增大flow可以预测的范围。


FlowNet2.0(2017CVPR)

在这里插入图片描述
FlowNet2.0在网络架构上,将多个FlowNet串联起来,达到更好的效果。FlowNet-SD也可以看作为trick。除了在网络架构上做的创新,FlowNet2.0还探讨了如何训练的问题。


PWCNet(2018CVPR)

在这里插入图片描述
每一层的flow的预测过程如下:

  1. 将从上一层获得flow进行upsample
  2. 通过flow,将feature map2的feature warp到feature map1,
  3. 计算cost volume,方式与FlowNet一样
  4. 然后通过cost volume得到这一层的volume
  5. 在顶层加入Context network

对比PWC-Net与FlowNet,可以发现,区别基本在于FlowNet只计算一次cost volume,而PWC-Net则计算很多次。warp的操作在FlowNet中也有。


MaskFlowNet(2020CVPR)

MaskFlowNet是目前比较新的改进,在KITTI上的效果也很好。主要是针对在前景移动了之后,背景中会有一些被遮挡的区域的问题。针对该问题,设计了在预测flow的同时,也预测被遮挡的的子任务。

相比于PWC-Net,先将feature map2 warp然后再计算cost volume,如下图:
在这里插入图片描述
MaskFlowNet提出,对于warp后的feature map2(大小为[B, C, H, W]),先乘以预测的occlusion mask θ \theta θ (大小为[B, 1, H, W]),然后加上额外的特征 μ \mu μ(大小为[B, C, W, H])。得到如下结构:
在这里插入图片描述
" μ \mu μ acts as a trade-off term that facilitates the learning of occlusions, as it provides extra information at the masked areas."

最后再加入Deformable Conv,将warp时使用插值变为Deform. Conv.,如下图
在这里插入图片描述
这就得到了AsymOFMM模块,然后多个模块的堆叠如下:
在这里插入图片描述
由此,借鉴FlowNet2.0中将网络堆叠的方法,提高flow的预测精度,得到MaskFlowNet:
在这里插入图片描述
在ablation study中可以看到:
在这里插入图片描述
FMM对应PWC-Net中的模块,OFMM对应不加Deform. Conv.的模块。可以看到,其实Asym,也就是Deform. Conv.的提升非常大。


Sene Flow

Point-based

PointFlowNet(2019CVPR)

在这里插入图片描述
本方法也不是单纯的做Scene Flow,是把object detection结合起来。可以看到,做Scene Flow的部分其实就是FlowNetS


FlowNet3D(2019CVPR)

在这里插入图片描述
前面提取特征的主干网络是PointNet++,flow embedding部分如下:
在这里插入图片描述
其实就是把SA层变成了一个点云在另外一个点云中做group。相比于这相当于实现了FlowNetC中的correlation部分,就是feature map1中的每个点与feature map2中相关点求取correlation。但使用的MLP实现的。恢复原始点云的数量的过程upconv也是由SA实现的。

FlowNet3D++(2020WACV)

在这里插入图片描述
就是在FlowNet3D的基础上加了两个loss。一个配准常用

### SCENEFLOW 数据集概述 SCENEFLOW 是由 Freiburg 大学开发的一个用于研究立体视觉和光流估计的数据集[^2]。它包含了大量高质量的合成场景,这些场景具有精确标注的深度图、视差图以及光流场。数据集中还提供了多种类型的噪声模型,以便研究人员能够模拟真实世界中的复杂情况。 #### 下载地址 SCENEFLOW 数据集可以通过以下链接获取: [https://lmb.informatik.uni-freiburg.de/resources/datasets/SceneFlowDatasets.en.html](https://lmb.informatik.uni-freiburg.de/resources/datasets/SceneFlowDatasets.en.html) 在页面上,用户可以选择不同的子集进行下载,例如 FlyingThings3D 和 Monkaa 等。每个子集都针对特定的研究方向进行了优化设计。 #### 使用说明 使用 SCENEFLOW 数据集前需注意其文件结构较为复杂,通常会包含以下几个部分: - **图像序列**:提供多视角下的 RGB 图像。 - **地面真值信息**:包括但不限于视差图(disparity maps)、光流场(optical flow fields)以及其他辅助信息。 - **相机参数**:描述了虚拟摄像机的位置与姿态变化。 对于初学者来说,建议先阅读官方文档中给出的具体指导手册[^3],这有助于理解如何加载并处理所提供的各类数据形式。此外,在实际操作过程中可能需要用到一些专门库函数来读取非标准格式的二进制文件。 以下是简单的 Python 脚本示例展示如何加载一张 PNG 格式的 disparity map: ```python import numpy as np from PIL import Image def load_disparity(path): """ 加载 SCENEFLOW 数据集中的视差图 """ image = Image.open(path).convert('I') # 'I' 表示 32-bit 整型模式 array = np.array(image, dtype=np.float32) / 256.0 # 归一化到 [0,1] return array # 替换为您的本地路径 path_to_disparity_map = './data/disparities/example.png' disp_array = load_disparity(path_to_disparity_map) print(disp_array.shape) ``` 此脚本能帮助开发者快速验证自己的环境配置是否正确无误。 #### 关联论文 有关 SCENEFLOW 数据集的设计理念及其应用价值可参考原始发表文章《A Large Dataset to Train Convolutional Networks for Disparity, Optical Flow, and Scene Flow Estimation》。该作品详细阐述了为何创建这样一个综合性平台,并讨论了几种典型神经网络架构在此基础上取得的效果改进之处。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值