Predict Consistently Depth From Input Video Frames

本文探讨了视频深度估计问题,指出单帧图像深度估计在视频场景中出现的闪烁问题,并介绍了几种解决方案。包括基于后处理的CVD系列方法,如Consistent Video Depth Estimation和Robust Consistent Video Depth Estimation,以及基于学习的视频深度估计方法,如ST-CLSTM、TCMonoDepth和DeepVideoMVS。这些方法通过利用时序信息、光流估计和深度先验来提高深度预测的连续性和准确性。

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

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见下图所示:
在这里插入图片描述
对照上图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流程见下图所示:
在这里插入图片描述
在前期数据处理阶段,会首先使用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
### TensorFlow Inference模块中Predict函数的使用 在TensorFlow框架下,`inference`模块通常用于执行推断操作。对于从该模块导入并使用的`predict()`函数而言,其核心功能在于利用已训练完成的模型对新数据做出预测[^1]。 具体来说,在调用此函数之前需先加载预训练模型以及准备待测样本集。之后可通过如下方式实现基本调用: ```python from tensorflow.keras.models import load_model import numpy as np # 加载保存下来的模型文件 model = load_model('path_to_saved_model') # 假设X_test是我们要进行预测的新数据集 predictions = model.predict(X_test) print(predictions) ``` 上述代码片段展示了如何基于Keras接口下的Sequential模型对象来调用`predict()`方法,并获取最终输出结果。值得注意的是,这里并没有直接提到`inference`模块内的同名函数;实际上,在大多数情况下,开发者会更倾向于直接通过模型实例访问这一成员函数而非单独引入其他包。 当涉及到更为复杂的场景时,比如批量处理或者异步请求,则可能需要额外配置参数选项以满足特定需求。例如设置batch_size控制每次送入网络计算的数量大小,verbose调整进度条显示模式等。 关于`predict_classes()`和`predict_proba()`这两个已被弃用的方法,官方文档推荐统一采用`predict()`替代之。前者返回类别标签而后者给出概率分布向量,现在这些行为都可以通过适当解析`predict()`的结果获得相同效果。 #### 预测性能评估 为了更好地理解模型的表现情况,可以依据训练好的模型对未来可能出现的不同规模的数据集做推理时间等方面的性能测试。这有助于提前规划部署环境资源分配策略,确保线上服务稳定运行[^3]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值