CVPR 2021|Deep-SfM-Revisited:DeepLearn+经典SfM流程

简介: 随着深度学习的兴起,最近一些研究人员探索了基于神经网络的两视图SfM的解决方案。这些方法中的大多数可分为以下两类。

🏆前言:文章回顾了深度学习在SfM中的应用,并提出了一种新的深度两视图SfM框架。该框架结合了深度学习和经典SfM几何算法的优点。在各个数据集上取得较好的结果。


a309bd1f9b77693f6b08bbce69a65e1a.png


会议/期刊:2021CVPR


论文题目:《Deep Two-View Structure-from-Motion Revisited》

论文链接:[2104.00556] Deep Two-View Structure-from-Motion Revisited (arxiv.org)

开源代码:jytime/Deep-SfM-Revisited (github.com)

解决的问题


  • 传统的SfM算法只能恢复相对相机运动和相对场景深度。在没有场景比例或可识别对象的先验知识的情况下,无法推断出绝对比例。并且传统的匹配算法在非朗伯曲面、模糊曲面和无纹理曲面上往往存在精度低的问题。


  • 随着深度学习的兴起,最近一些研究人员探索了基于神经网络的两视图SfM的解决方案。这些方法中的大多数可分为以下两类。


。在第一类中,我们将其称为类型I(如下图中的a),该问题被视为单目深度和姿态回归的联合优化任务,具体地说,它使用了两种网络:一种是从一幅图像中估计出符合标准的深度,另一种是根据两幅输入图像预测出符合标准的摄像机姿态。在推理过程中,两个网络都独立运行。比如SfMLearner、GeoNet等


。在表示为类型II的第二类中(如下图中的b),从图像对推断经缩放的相机姿势和经缩放的深度,并通过多视点几何进行迭代细化。这类方法包括DeMoN、BANet、DeepV2D、DeepSFM等


。虽然深度学习的能力使类型I和类型II都能获得较好的结果,但我们注意到它们难以解决ill-posed问题(依据Ill-posed problems in early vision论文所述,ill-posed problem包括the recovery of motion and optical flow, shape from shading, surface interpolation, and edge detection等)


基本流程


708de7c21eba008faf7655378c59d3c8.png


如上图c,Deep-SfM-Revisited流程总结为:


  1. 匹配帧之间的对应点,
  2. 估计基本矩阵,从而估计相对相机姿态,
  3. 估计高达未知比例因子的密集深度图


具体来说:


1.使用深度光流网络估计两帧之间的密集匹配点,然后采样一组高度可匹配点

2.使用经过GPU加速的经典五点RANSAC算法计算相机的相对位姿

3.由于这些相机的相对位姿具有尺度不确定性,所以估计的深度也会受到尺度不确定性的影响。因此,为了groundtruth来监督估计的尺度不确定性深度,论文提出了一种结合尺度特定损失的尺度不变性深度估计网络来估计最终的相对深度图

4.由于存在相机相对位姿,所以深度估计网络受极线约束的影响,从而得到一个更高的精度


实施细节


光流估计


深度光流方法可以处理大位移以及无纹理、遮挡和非朗伯曲面,弥补了传统方法的缺点。注意,作者使用DICLFlow在两个连续的帧之间生成密集的匹配点。光流估计的目的是为了下一步更好的相机位姿估计


相机位姿估计


cd117f690d81fa98fbff97bd1f9bba9e.png


与以前所有基于深度学习的从输入图像回归相机位姿的方法不同,论文使用匹配点来计算相机位姿。


关键问题是:如何从光流中稳健地过滤掉噪声密集的匹配,以仅保留高质量的匹配?

作者发现,只需简单地使用SIFT关键点位置(注意,这里不是使用SIFT进行匹配)生成mask(即保留图像中的SIFT关键点),即可在所有数据集中都获得很好的结果。因为光流在纹理丰富的区域可以获得更准确的结果,mask内各个经过光流匹配的SIFT关键点,由经过GPU加速的RANSAC进行过滤(这种方法可以避免帧间运动物体的干扰),在获得基本矩阵E后,将使用矩阵分解恢复相机姿态(R,t)


尺度不变的深度估计


论文提出了一种Scale-Invariant Matching方法来恢复尺度模糊的密集深度图,具体来说:


  • 给定一个像点x,生成L个匹配候选点。


  • 在标准平面扫描问题中,匹配候选对象的采样分布根据比例因子α而变,如下图所示。


  • 此外,由于不知道问题中的绝对尺度,论文将平移向量t进行了归一化。


  • 然后,将预测的深度d固定住,那么匹配候选点的分布就是尺度不变的了。


  • 最后,为了使估计深度和深度真值兼容,需要相应地对估计深度进行缩放来匹配深度真值;如下,α g t 表示相对深度到绝对深度的缩放因子


image.png

29e10e6d9cfa8a598a160e98cec41f21.png


这种尺度不变方法在本论文起着至关重要的作用,因为它使深度估计网络不再受到尺度模糊问题的困扰。先前的算法无法从尺度不变匹配中受益,因为他们通常通过CNN直接预测绝对比例来避免尺度模糊问题。


a41653c9b7ee26f1adab11e1d9ae10a1.png


损失函数


上面的尺度变换因子α g t 将用于构建深度估计的损失函数,论文中使用Huber损失来计算预测深度和深度真值之间的差异:


image.png


如果相机位姿真值和深度真值都给定,还可以通过计算2D点的刚性流(rigid flow)来更新光流网络:


image.png


总结


  • 文章回顾了深度学习在SfM中的应用,并提出了一种新的深度两视图SfM框架。该框架结合了深度学习和经典SfM几何算法的优点
  • 使用深度光流方法估计SIFT匹配点,可以处理大位移以及无纹理、遮挡和非朗伯曲面,弥补了传统方法的缺点
  • 经过光流匹配的SIFT关键点将会被赋予mask,由经过GPU加速的RANSAC进行过滤,这种方法可以避免帧间运动物体的干扰
  • 提出了一种尺度不变的深度估计模块,来处理groundtruth深度与预测的深度之间的尺度不匹配的问题


参考资料


2021年CVPR论文Deep Two-View Structure-from-Motion Revisited阅读笔记_zeeq_的博客-CSDN博客_deep two-view structure-from-motion revisited

相关文章
|
数据采集 数据可视化 Ubuntu
相机和livox激光雷达外参标定:ROS功能包---livox_camera_lidar_calibration 使用方法
该功能包提供了一个手动校准Livox雷达和相机之间外参的方法,已经在Mid-40,Horizon和Tele-15上进行了验证。其中包含了计算相机内参,获得标定数据,优化计算外参和雷达相机融合应用相关的代码。本方案中使用了标定板角点作为标定目标物,由于Livox雷达非重复性扫描的特点,点云的密度较大,比较易于找到雷达点云中角点的准确位置。相机雷达的标定和融合也可以得到不错的结果。
相机和livox激光雷达外参标定:ROS功能包---livox_camera_lidar_calibration 使用方法
|
机器学习/深度学习 缓存 自然语言处理
一文揭秘|预训练一个72b模型需要多久?
本文讲述评估和量化训练大规模语言模型,尤其是Qwen2-72B模型,所需的时间、资源和计算能力。
984 12
|
机器学习/深度学习 传感器 编解码
2023最新 | 单目深度估计网络结构的通用性研究
单目深度估计已经被广泛研究,最近已经报道了许多在性能上显著改进的方法。然而,大多数先前的工作都是在一些基准数据集(如KITTI数据集)上进行评估的,并且没有一项工作对单目深度估计的泛化性能进行深入分析。本文深入研究了各种骨干网络(例如CNN和Transformer模型),以推广单目深度估计。首先,评估了分布内和分布外数据集上的SOTA模型,这在网络训练期间从未见过。然后,使用合成纹理移位数据集研究了基于CNN和Transformer的模型中间层表示的内部属性。通过大量实验,观察到transformer呈现出强烈的形状偏差,而CNN具有强烈纹理偏差。
2023最新 | 单目深度估计网络结构的通用性研究
|
JSON API 数据安全/隐私保护
python小知识-数据验证和解析神器pydantic
Pydantic是一个Python库,用于数据验证和设置管理,基于类型提示提供数据模型验证。它可以用于用户输入验证、JSON序列化和解析,以及API交互中的数据校验。安装Pydantic可使用`pip install -U pydantic`或`conda install pydantic -c conda-forge`。通过定义BaseModel子类并使用Field进行约束,可以创建数据模型并进行验证。例如,定义User模型验证用户名、邮箱和年龄。Pydantic还支持自定义验证器,允许在字段赋值时执行特定逻辑,如密码强度检查和哈希处理。5月更文挑战第19天
1007 1
|
存储 Python
Python提取出多个NC文件中的时间信息数据
【2月更文挑战第2天】本文介绍基于Python语言,逐一读取大量.nc格式的多时相栅格文件,导出其中所具有的全部时间信息的方法~
597 5
Python提取出多个NC文件中的时间信息数据
|
机器学习/深度学习 存储 编解码
利用深度学习优化视频压缩算法
【4月更文挑战第28天】随着数字媒体时代的到来,视频数据量急剧增加,有效的视频压缩技术变得尤为重要。本文探讨了一种基于深度学习的视频压缩框架,旨在提高压缩效率同时保持较高的视频质量。通过使用卷积神经网络(CNN)对视频帧进行特征提取,并结合先进的编码技术,本研究提出了一种新的率失真优化算法。实验结果表明,该算法在多个标准测试序列上相比传统方法能显著降低比特率,同时维持了良好的视觉质量。
|
机器学习/深度学习 算法 数据可视化
PCA(主成分分析法)原理以及应用+代码实现
PCA(主成分分析法)原理以及应用+代码实现
1363 0
PCA(主成分分析法)原理以及应用+代码实现
|
缓存 并行计算 Ubuntu
科研GPU环境配置-快让师兄弟们优雅地享受共享环境吧!
以下列举我对实验室4090的操作,目的是为了让实验室所有人都有隔离的沙盒环境,节省硬盘以及更方便 一听说老师买了24G 4090,真的超级兴奋!!!
491 0
科研GPU环境配置-快让师兄弟们优雅地享受共享环境吧!
|
数据可视化 Java Linux
数据导入与预处理-第7章-数据清理工具OpenRefine
数据导入与预处理-第7章-数据清理工具OpenRefine
|
存储 安全 Java
JDK21更新特性详解(二)
JDK21更新特性详解(二)