Consistent Video Depth Estimation - 时序一致的视频深度估计算法

Paper name

Consistent Video Depth Estimation

Paper Reading Note

URL: https://arxiv.org/pdf/2004.15021.pdf
代码 URL:https://github.com/facebookresearch/consistent_depth

TL;DR

SIGGRAPH 2020 的文章,提出了一种基于视频的重建方案,结合基于深度学习的深度估计方法及传统的基于几何约束的方法,来得到准确和一致的深度;具体采用的方法是在测试时对单帧深度估计网络进行 finetune,让模型学会满足特定场景的几何约束,同时也保持合成合理深度的能力


Introduction

  • 基于手持的相机或手机采集到的视频进行场景的 3D 重建有重要的利用价值,比如可以进行视频特效处理、场景三维建模,然而难度也很大,典型问题有低纹理区域、重复纹理、遮挡以及视频采集可能带来的高噪声、抖动、运动模糊、 卷帘变形(rolling shutter deformations)、相邻帧 baseline 过小、运动物体等问题,所以传统方法一般效果都不太好,比如下图的 b (部分区域深度缺失)和 c(几何不连续、抖动的深度) 所示
    在这里插入图片描述
  • 传统重建方法(如 colmap)结合稀疏 sfm 和稠密 multi-view stereo,因为基线匹配中的噪声,通常会加入启发式平滑先验,这通常会导致受影响区域几何不正确,这些方法往往就直接将低置信度的区域丢弃了(上图b中的空洞)
  • 现在基于深度学习的方法在单帧上重建效果较好,能得到稠密的深度图,并且由于是单帧处理,也不会收到视频中运动物体的影响,然而这些方法在处理视频时产生的深度抖动较大,另外也存在不是米制的绝对深度(与绝对深度差一个 scale),这就导致了单帧方法在处理视频时有几何不一致问题。目前已有的视频深度估计方式无论是隐式得基于 RNN 的方法或者基于多视角重建的显式方法,都局限于静态场景建模
  • 本文提出了一种基于视频的重建方案,结合基于深度学习的深度估计方法及传统的基于几何约束的方法,来得到准确和一致的深度;具体采用的方法是在测试时对单帧深度估计网络进行 finetune,让模型学会满足特定场景的几何约束,同时也保持合成合理深度的能力

Dataset/Algorithm/Model/Experiment Detail

实现方式

在这里插入图片描述 整个 PPL 分为两个阶段:预处理、测试时训练

  • 预处理
    • 基于 colmap 进行传统的 SFM 重建,基于 Mask RCNN 过滤场景中的人来提升特征点提取与匹配的准确性,得到相机准确的内参与外参以及场景的稀疏点云
    • 基于光流估计不同帧之间的稠密匹配关系
  • 测试时训练
    • 对单帧深度估计模型进行 finetune,如上图所示,基于不同帧的稠密匹配关系采样匹配帧,将匹配帧送入单帧深度估计网络得到估计的深度图,通过对估计的深度图进行重投影,并对重投影结果的稠密匹配进行对比可以确认估计的深度图是否满足几何一致性,最后设计了 spatial loss 和 disparity loss 来对网络进行 finetune
预处理细节
  • scale 匹配: SFM(colmap) 与深度估计网络的 scale 一般是不匹配的,也即两者估计的深度的值域范围不同,这里通过调节 SFM 的 scale 来进行匹配,因为只需要简单在相机内参上乘上一个 sacle,匹配方式为对每张深度图进行中值对齐配准:
    在这里插入图片描述
    其中 D i N N D_{i}^{NN} DiNN 为深度估计网络得到的深度, D i M V S D_{i}^{MVS} DiMVS 为 colmap 产生的深度, D(x) 代表 pixel x 处的深度
    • 整体 scale 就是对所有深度图 scale 取平均
      在这里插入图片描述
    • 对相机内参进行更新
      在这里插入图片描述
  • 匹配帧选取: 因为直接选取所有匹配对是 O(N2) 的时间复杂度,所以这里采用的是对相邻帧及逐步稀疏采样的帧进行光流计算,从而在 O(N) 时间复杂度下处理
    在这里插入图片描述
    在这里插入图片描述在这里插入图片描述
  • 光流计算: 这里光流计算需要先基于 homography warp 保证匹配帧之间的重合区域足够多,从而确保光流估计的效果;为了处理运动物体及遮挡问题,这里使用前向后向一致性检查:移除前向-后向误差大于 1 pixel 的像素
    • 另外移除 overlap 太小的匹配帧:有效像素匹配小于 20%
测试时训练
  • Geometric loss
    1. 基于光流得到匹配帧 i,j 之间的对应关系
      在这里插入图片描述
    2. 将 i 帧中的点基于内参和深度映射到相机坐标系中
      在这里插入图片描述
    3. 将 i 帧相机坐标系中的点通过相机外参转换到 j 帧的相机坐标系中
      在这里插入图片描述
    4. 将 i 帧中转换到 j 帧的点重新映射会图像坐标系
      在这里插入图片描述
    • image-space loss(图像空间损失):即对比光流映射得到的图像像素( f i → j ( x ) f_{i \to j}(x) fij(x) )与基于重投影得到的像素( p i → j ( x ) p_{i \to j}(x) pij(x) )计算 L2 损失
      在这里插入图片描述

    • disparity loss(视差损失): 约束不同相机坐标系下的视差一致,也即希望同一个空间点在不同帧预测的深度图中深度保持一致(几何一致性)
      在这里插入图片描述
      其中 u i u_{i} ui 是 i 帧的焦距, z i z_{i} zi z i → j z_{i \to j} zij 分别是是将 i 帧相机坐标系与 i 到 j 的 z 分量 (深度)

  • 整体损失:
    在这里插入图片描述

实验结果

  • finetune 设置:一般训练 20 epoch,对于 244 帧的视频,在 4 NVIDIA Tesla M40 上需要训练 40 min
自采集数据实验
  • 因为现有数据集主要是合成场景,特定场景(自动驾驶),单张图片,静态场景的视频,所以这里使用了自采集的数据集,4个静态场景,3个动态场景
    • 注意采集设备是 stereo 相机,后续会利用右目数据及 stereo disparity 进行评测

在这里插入图片描述

  • 评价指标设定

    • Photometric error Ep : 利用左图估计的深度转换为视差,将左图的像素映射到右图上,计算 photometric loss
      • 单目深度尺度不确定性是通过将深度与 stereo disparity 的 scale 、shift进行对齐,stereo disparity 是利用了光流网络预测值的水平分量,对齐方式是基于 RANSAC 的线性回归
    • Instability Es : 衡量时序帧预测的稳定性,方式是基于 KLT tracker 得到 2D 的 track,基于预测的深度、相机内参、camera pose 映射到 3D 中对比映射点的稳定性,理论上同一个 track 映射到 3D 中应该是一个固定的点(注:这里值计算所有相邻帧的映射偏差)
    • Drift Ed:上面的指标 Es 只计算相邻帧的映射偏差,这里会以所有帧映射到 3D 的 track 的协方差矩阵的最大特征值作为评测指标,评测随着时间增加造成的累积误差
  • 对比实验结果
    在这里插入图片描述

  • 消融实验
    在这里插入图片描述

  • 仅用相邻帧的效果不如使用长时间约束的好
    在这里插入图片描述

  • 有了时序一致性较好的深度,可以支持更好的 CG 合成效果

在这里插入图片描述

公开数据集实验
  • 可视化(第一列是原图,第二列是通过时空体积的扫描线切片)
    在这里插入图片描述
  • 公开数据集点一般,据说主要是光流估计不太准(KITTI车前向移动较大),使用 monodepth2 作为基础网络,可以看到也没怎么掉点(作者具体调查发现在 80%的帧都是涨点的,视频可视化效果也是更好,但就是点更低,因为 COLMAP 生成的 camera pose 在动态目标下不够准,所以 finetune 后部分帧效果明显变差)
    在这里插入图片描述在这里插入图片描述
  • ScanNet 数据集下可以相比于 baseline 涨点

在这里插入图片描述

Thoughts

  • 以前的时序一致性约束的根本原理主要是在时序上增加时序一致性的 loss,比如深度估计里面基于 RNN 的隐式一致性约束,或基于光流的显示一致性约束,这里直接希望学习到的时序深度能满足几何空间的一致性约束,显然是更直接有效的约束方式
  • 预处理中众多繁琐的操作都是希望测试时训练的数据尽量准确,保证 finetune 时的数据准确性很关键
  • 其中 kitti 数据集相比于 pretrain 模型掉点作者给的解释方法值得借鉴,证明了该方法能在 80% 的帧涨点,只是剩下 20% 数据的掉点更严重导致了整体掉点
### 关于鲁棒一致视频深度计方法 在计算机视觉领域,鲁棒一致视频深度计算法旨在通过处理连续帧来提高深度图的质量和一致性。这些算法通常依赖多视图几何原理以及时间平滑技术。 一种常见的做法是利用光度不变性和空间-时间正则化来构建优化框架[^1]。具体来说,在给定一系列图像序列的情况下,该类模型会尝试找到能够最小化重投影误差并保持相邻时刻之间差异尽可能小的最佳解。这种方法不仅考虑到了单张图片内部的信息关联性,还充分挖掘了不同瞬间间的潜在联系,从而使得最终得到的结果更加稳定可靠。 为了进一步增强系统的抗噪能力和适应复杂场景的能力,研究者们引入了多种改进措施: - **特征匹配与跟踪**:通过对关键点进行跨帧追踪,可以有效减少由于物体运动造成的误配对现象; - **卷积神经网络(CNN)**:借助深度学习的强大表征能力,自动提取高层次语义特征用于指导深度预测过程; - **贝叶斯推理机制**:基于概率论的观点建模不确定性因素的影响,进而获得更为合理的置信区间计值。 此外,部分工作探索了如何结合事件相机的数据流来进行更加快速精准的时间戳同步操作,这有助于克服传统RGB-D传感器所面临的挑战之一 —— 即难以捕捉高速动态变化下的精确位置关系[^3]。 ```python import cv2 import numpy as np def robust_depth_estimation(frames): # 假设输入是一个包含多个彩色图像的列表 frames # 初始化 ORB 特征检测器 orb = cv2.ORB_create() keypoints_list = [] descriptors_list = [] for frame in frames: gray_frame = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) # 计算特征点及其描述符 kp, des = orb.detectAndCompute(gray_frame, None) keypoints_list.append(kp) descriptors_list.append(des) # 后续可加入更多高级处理逻辑... return keypoints_list, descriptors_list ``` 此代码片段展示了如何使用OpenCV库中的ORB算法来识别每帧内的兴趣点,并为后续可能涉及的姿态计或其他任务提供基础支持。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值