Predict Consistently Depth From Input Video Frames

1. 概述

前言: 如今CV在2D领域取得较为不错的结果,随着自动驾驶的兴起越来愈多的注意力被吸引到3D场景下的各式任务中去,其中深度估计算是一种2D到3D的转换桥梁,赋予了2D图像更多信息。在这本篇文章中将会围绕深度估计算法讨论在视频场景下的深度估计任务,并根据本人在该方向上的一些浅薄认知介绍几种适用于视频场景的连续深度估计方法,不足或不全请见谅。

单帧图像场景下的深度估计与存在的问题:
对于单张图像的深度估计任务在之前的很多文章里面已经介绍过了,如经典监督学习方法Midas和自监督学习方法MonoDepeth2,这些方法在对应单帧图像深度估计任务中表现出了很好的性能,也切实满足了一些实际业务场景需求。但是将这些适用于单帧图像深度估计的算法用于拥有连续视频帧的视频场景时便会出现图像中系统区域深度估计不一致的情况,具体表现出来的现象便是深度结果闪烁,这必然将会对后序的处理带来较大影响。

视频场景下的深度估计:
直接将适用于单帧图像的深度估计模型运用于视频场景会存在闪烁的问题,那么一个很自然的想法便是在现有深度估计网络的基础上使用offline fine-tune的形式去优化深度估计的结果。但是这样的方法存在处理耗时长的问题,对此最为直接的方式便是使得网络能够感知到视频场景下物体的运动,并通过网络学习的形式产生连续深度估计结果,这样就可以排除掉耗时的后处理部分。

在深度估计应用基础上使用稳像技术:
一般来讲深度估计任务都是另外一些后期任务的基础,若是实在通过技术手段无法生成对应深度,那么造成后期视频效果问题可以通过视频稳像的方式进行优化。在这里给出几篇文献作为引子,对应的稳像技术可以在此基础上进行扩展探索:

  1. Blind Video Temporal Consistency
  2. Learning Blind Video Temporal Consistency
  3. deep-video-prior (DVP): Blind Video Temporal Consistency via Deep Video Prior

对于稳像这部分内容不是这篇文章需要讨论的,这里不做进步展开。

2. 基于后处理的视频深度估计

2.1 CVD系列视频深度后处理

CVD系列方法是属于视频深度后处理的方法,都是需要一个预先训练的好的深度估计模型去估计视频帧的深度结果,在此之外或使用COLMAP、Ceres、FlowNet之类的附加处理工具参与到连续深度的约束中。

Consistent Video Depth Estimation:
像下图展示的便是经典CVD方法的pipeline:

对照上图中对整体pipeline的描述,其需要如下组件:

  • 1)一个初始深度估计网络,用于估计输入视频帧的深度;
  • 2)一个光流估计网络(FlowNet),用于寻找视频帧之间像素的偏移映射关系;
  • 3)COLMAP用于解算视频帧的相机位姿;
  • 4)一套基于spatial和disparity的约束度量,实现深度网络的梯度反传;

论文:Consistent Video Depth Estimation
项目地址:Consistent Video Depth Estimation

Robust Consistent Video Depth Estimation:
这篇文章的思路与前面降到的CVD有一定类似,不过其在处理pipeline上与CVD方法不同,这里是固定了深度估计网络部分,着力于视频帧的后处理,其pipeline见下图所示:
Predict Consistently Depth From Input Video Frames_第1张图片
对照上图pipeline的处理流程,其处理流程可以大致划分为3步:

  • 1)使用MiDas作为单帧深度估计方法,从而估计得到单帧图像的初始深度信息。使用Ceres Library等从视频序列中去计算初始相机位姿;
  • 2)使用finetune训练的形式从输入的视频序列中交替优化深度估计结果与相机位姿信息,在相机位姿估计过程中使用样条差值的形式实现深度对齐,从而使得相机位姿估计的结果稳定;
  • 3)使用几何感知的深度滤波器在多帧之间进行滤波保留和优化深度估计中的高频信息;

论文:Robust Consistent Video Depth Estimation
论文笔记:《Robust Consistent Video Depth Estimation》论文笔记

2.2 dynamic-video-depth

这篇文章关注的还是在后处理阶段的深度一致性研究,这篇文章在其中使用了更多和更高维度的信息用于约束深度的一致性。其在fine-tune阶段会同更新深度估计部分网络参数 F θ s F_{\theta_s} Fθs,以及通过多个全连接层构成的的3D维度点云偏移向量预测网络 G θ s G_{\theta_s} Gθs(这一点有点类似NERF的思想,也通过位置编码输入之后经过全连接层得到最后输出)。其整体的pipeline流程见下图所示:
Predict Consistently Depth From Input Video Frames_第2张图片
在前期数据处理阶段,会首先使用ORB SLAM2对视频帧进行处理得到每一帧的相机位姿,之后使用该相机位姿作为COLMAP的初始值从而得到每张图的稀疏深度图 D i s f m D_i^{sfm} Disfm。得到上述信息之后还会使用深度估计网络估计得到初始深度与使用光流估计网络得到光流信息。那么接下来重要的流程便是建立约束关系了,这里建立的约束关系主要可以划分为3个分量。

2D层面的约束:
这部分的约束是建立在图像像素偏移的基础上的,只不错这里的偏移使用的两种实现路径:

  • 1)光流方式:在这部分约束中会首先使用 i i i j j j的光流信息实现像素的偏移: p i → j = x + v i → j p_{i\rightarrow j}=x+v_{i\rightarrow j} pij=x+vij
  • 2)3D点偏移方式:这里会借用之前 i i i处估计出的深度、相机相对位姿和 G θ s G_{\theta_s} Gθs(3D维度的偏移),实现从2D到3D再添加偏移之后从3D到2D的映射,这里将其描述为: M j ( X x → j ( x ) ) M_j(X_{x\rightarrow j}(x)) Mj

你可能感兴趣的:(#,Depth,Estimation,3d,计算机视觉,深度学习)