基于pytorch的CREStereo立体匹配算法

news2024/11/25 7:02:44

文章目录

  • 前言
  • 一、CREStereo是什么?
    • 1.自适应群相关层
      • 局部特征注意力
      • 2D-1D转换局部搜索
      • 可变形的搜索窗口
      • Group-wise相关性
    • 2.级联的网络
    • 3.叠加级联推理
    • 4.叠加级联推理损失函数
  • 二、基于pytorch的CREStereo立体匹配算法


前言

  CREStereo目前在middlebury上的排名第三(前两名是cvpr2023的文章),非常值得学习和借鉴。
在这里插入图片描述
  CREStereo还提出了新的数据集,作者利用Blender生成我们的合成训练数据。每个场景由左右图像对和对应像素精确的密集视差图组成,由双虚拟相机和习惯位置的物体捕获。
  新的数据集大约400个g,奈何电脑不行,就没下载了,作者开源代码megvii-research/CREStereo提供了两种方式:
(1)Download using shell scripts dataset_download.sh

sh dataset_download.sh

(2)百度网盘crestereo_dataset
密码为:aa3g

一、CREStereo是什么?

  CREStereo(Cascaded Recurrent Network Stereo),即级联立体匹配网络。
  CREStereo旨在通过使用上下文推理来更好地理解场景中不同物体和表面之间的关系,从而提高立体匹配的准确性和效率。这使得网络能够更加确切地决定每个像素的深度,从而产生更准确的深度图和3D重建。

1.自适应群相关层

  作者观察到,很难为现实世界的立体相机实现完美的校准。例如,两个相机可能不会严格放置在水平外极线上,导致在三维空间中轻微旋转;或者相机镜头的图像即使经过修正后也会有残余失真。因此,对于立体图像对,对应的点可能不位于同一扫描线上。因此,作者提出了一种自适应群相关层(AGCL)来减少这种情况下的匹配模糊性,在只计算局部相关的情况下,比全对匹配获得更好的性能。

局部特征注意力

  作者不计算每对像素的全局相关性,而是只匹配一个局部窗口中的点,以避免大量的内存消耗和计算成本。针对稀疏特征匹配的LoFTR特征匹配,在级联第一阶段的相关计算之前添加了一个注意模块,以便将全局上下文信息聚合到单个或交叉特征图中。在之后,在主干输出中添加了位置编码,这增强了特征映射的位置依赖性。交替计算自注意和交叉注意,其中使用线性注意层来降低计算复杂度。

2D-1D转换局部搜索

  不同于流量估计网络RAFT及其立体版本,其中全对相关性由两个C×H×W特征图的矩阵乘法计算,输出4DH×W×W×W或3DH×W×W成本量,只在一个局部搜索窗口中计算相关性,该窗口输出更小体积的H×W×D,以节省内存和计算成本。H和W表示特征图的高度和宽度,D是相关对的数量远小于W。作者的相关计算也不同于基于成本体积立体网络搜索范围与前景对象的最大位移。这个固定的范围比作者使用的局部相关对的数量要大得多,这导致了更多的噪声干扰。此外,当模型推广到具有不同基线的立体声对时,不需要预设范围。
  给定两个重新采样和参与的特征图F1和F2,在位置(x,y)上的局部相关性可记为:
在这里插入图片描述
  传统上,在立体匹配中,两个校正图像之间的搜索方向只位于外极线上。为了处理非理想的立体整流情况,我们采用了2D-1D替代局部搜索策略来提高匹配精度。在一维搜索模式下,我们设置g(d)=0和f(d)∈[−r,r],其中r=4。保留f(d)的正位移值,以便在每次迭代采样后调整不准确的结果。由等式计算的结果1被堆叠并连接在通道维度上,以获得最终的相关V。在二维搜索模式中,使用与扩张卷积相似的k×k网格进行相关计算。设置了k=√2r+1来确保特征具有相同数量的通道,因此它们可以被输入到一个共享权重的更新块中。与迭代重采样合作,交替局部搜索也作为循环细化的传播模块,其中网络学习用其更准确的邻居替换对当前位置的有偏预测。

可变形的搜索窗口

  立体匹配经常存在遮挡或无文本区域。在一个固定形状的局部搜索窗口中计算的相关性往往容易受到这些情况的影响。将可变形卷积扩展到相关计算中,使用内容自适应搜索窗口来生成相关对,这与AANet不同,后者仅在成本聚合中采用类似的策略。利用学习到的附加偏移量dx和dy,新的相关性可以计算为
在这里插入图片描述
在这里插入图片描述

Group-wise相关性

  受引入组级4D代价体积的启发,我们将特征图分成G组,分别计算局部相关性。最后,我们将G相关体积串联起来。在通道维度上的D × H × W,得到GD × H × W的输出量。过程如图。
在这里插入图片描述

2.级联的网络

   对于非纹理或重复纹理区域,由于接受域大、语义信息充足,使用低分辨率和高级特征映射进行匹配更加鲁棒。 然而,在这种特征图中,精细结构的细节可能会丢失。为了保持鲁棒性,同时保留高分辨率输入中的细节,作者提出了级联迭代精化的相关计算和视差更新。 循环更新模块:我们基于GRU块和自适应组相关层(AGCL)构建了循环更新模块(RUM)。与PAFT不同的是,特征金字塔构建在单个相关层中,输出合并为一个卷,我们分别计算每个特征映射在不同级联级别的相关性,并单独细化几个迭代的视差。“sampler”以fn导出的坐标网格为输入,对分组特征的位置进行采样。{f1,…, fn}为初始化f0的n次迭代的中间预测。电流相关体积由学习到的偏移量o∈R2×(2r+1)×h×w构造。GRU块更新当前预测并在下一次迭代时反馈给AGCL。 级联改进:除了级联的第一级(从输入分辨率的1/16开始,视差初始化为所有0),其他级别将从前一级的预测的上采样版本作为初始化。虽然处理不同层次的细化,所有RUMs的重量相同。在最后一级细化后,进行凸上采样,得到输入分辨率下的最终预测结果。

3.叠加级联推理

   正如前几节所讨论的,在训练过程中,作者使用固定分辨率的三层特征金字塔进行层次细化。然而,对于分辨率较高的图像作为输入,需要进行更多的降采样,以扩大接收域,进行特征提取和相关计算。但对于高分辨率图像中位移较大的小目标,直接下采样可能会使这些区域的特征退化。为了解决这一问题,作者设计了一种具有推理快捷方式的堆叠级联架构。特别的,作者预先对图像对进行下采样,构建一个图像金字塔,并将它们输入到同一个训练好的特征提取网络中,以利用多层次的上下文。图下图右侧显示了堆叠级联架构的概览,为了简洁起见,没有显示同一阶段的跳跃连接。对于堆叠级联的某一特定阶段,该阶段的所有RUM将与更高分辨率阶段的最后一个RUM一起使用。叠层梯级的所有阶段在训练中都有相同的重量,所以没有精细的调整。
在这里插入图片描述

4.叠加级联推理损失函数

   对于每个阶段s∈{116, 18, 41}的特征金字塔,作者用上采样算子µs将输出{fis,···,f sn}的序列调整到完全预测分辨率,并使用类似RAFT的指数加权l1距离为损失函数(γ设为0.9)。给定ground truth视差dgt,总损失定义为:
在这里插入图片描述
   其他合成数据集和实验细节等都不介绍啦,可以直接看原文章,链接放到这里啦:CREStereo

二、基于pytorch的CREStereo立体匹配算法

  原作者开源的代码使用的是MegEngine(开源深度学习框架旷视天元(MegEngine)是旷视自主研发的国产工业级深度学习框架),国产哦,有机会还是要支持一下哦!
  源码链接放到这里啦:https://github.com/megvii-research/CREStereo
  这里我们使用另一位大佬提供的开源代码,是基于pytorch的,源码链接:https://github.com/ibaiGorordo/CREStereo-Pytorch
  作者提供了从原始模型转换出来的Pretrained modelPretrained model,因为训练集太大了,只能使用提供的训练模型啦,感兴趣的可以自己训练一下。
  把下载好的权重放到models文件夹下:
在这里插入图片描述
  在test_model中修改左右图像路径就可以啦!
在这里插入图片描述
  运行效果如下:
在这里插入图片描述

参考文献:CREStereo: Practical Stereo Matching via Cascaded Recurrent Networkwith Adaptive Correlation-论文阅读

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/144003.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java高手速成 | Spring、JPA与Hibernate的整合

01、设置Spring的配置文件 在Spring的配置文件applicationContext.xml中&#xff0c;配置C3P0数据源、EntityManagerFactory和JpaTransactionManager等Bean组件。以下是applicationContext.xml文件的源程序。 /* applicationContext.xml */ <?xml version"1.0" …

【财务】FMS财务管理系统---审计流程

本文是电商系列的终结篇&#xff0c;笔者在本文介绍了审计流程及注意事项。 本篇是介绍财务审计的&#xff0c;作为电商系列的终结篇。后续计划去完成供应链后台的相关系统的梳理与学习&#xff0c;非常感谢朋友们在阅读过程中提出的问题与建议。 一、审计及流程 财务审计是每…

吴晓波年终秀原版PPT下载

省时查报告-专业、及时、全面的行研报告库省时查方案-专业、及时、全面的营销策划方案库【免费下载】2022年11月份热门报告盘点2023年&#xff0c;如何科学制定年度规划&#xff1f;罗振宇2023年跨年演讲PPT原稿《底层逻辑》高清配图清华大学256页PPT元宇宙研究报告.pdf&#x…

nginx学习笔记2(小d课堂)

nginx目录文件讲解&#xff1a; 我们这里要去了解我们画红框了的这四个目录。 我们一般只用这两个文件&#xff0c;nginx.conf.default是nginx的默认模板。 我们先来看看这个默认模板&#xff1a; 这里面会有特别多的配置&#xff0c;我们后面的课会去学到。我们可能以后改哪个…

【实战篇】37 # 如何使用 QCharts 图表库绘制常用数据图表?

说明 【跟月影学可视化】学习笔记。 QCharts 图表库 QCharts 是一个基于 spritejs 封装的图表库&#xff0c;可以让用户以组件的形式组合出各种图表&#xff1a;https://www.qcharts.cn/#/home QCharts 图表的基本用法 最简单的方式是&#xff0c;直接通过 CDN&#xff0c;…

Mac 几款不错的文件管理工具

Default Folder X 文件快捷访问工具 Default Folder X V6.9d19 是一款 Mac 上的文件夹快捷访问工具&#xff0c;您可以访问您最近的&#xff0c;最喜欢的&#xff0c;并打开文件夹的默认文件夹X的工具栏右侧的内容。扩大你把鼠标移到他们的层次弹出菜单&#xff0c;让您浏览您…

【胖虎的逆向之路】动态加载和类加载机制详解

胖虎的逆向之路 —— 动态加载和类加载机制详解一、前言二、类的加载器1. 双亲委派模式2. Android 中的类加载机制1&#xff09;Android 基本类的预加载2&#xff09;Android类加载器层级关系及分析3&#xff09;BootClassLoader4&#xff09;Class文件加载5&#xff09;PathCl…

从 Redshift 迁移数据到 DolphinDB

AWS Redshift 是最早的云数据仓库之一&#xff0c;为用户提供完全托管的 PB 级云中数据仓库服务。用户可以使用标准 SQL 和现有的商业智能工具&#xff0c;经济高效地进行数据分析。但 AWS Redshift 上手难度较大&#xff0c;对知识储备要求较高&#xff0c;设计和优化相当复杂…

PCB设计中的屏蔽罩设计

屏蔽罩是一个合金金属罩&#xff0c;是减少显示器辐射至关重要的部件&#xff0c;应用在MID或VR产品中可以有效的减少模块与模块之间的相互干扰&#xff0c;如图3-54所示&#xff0c;常见于主控功能模块和电源模块及Wifi模块之间的隔离。图3-54 屏蔽罩的使用 01 屏蔽罩夹子一般…

前端沙箱浅析

前言 沙箱&#xff0c;即sandbox。 通常解释为&#xff1a;沙箱是一种安全机制&#xff0c;为运行中的程序提供隔离环境。常用于执行未经测试或者不受信任的程序或代码&#xff0c;它会为待执行的程序创建一个独立的执行环境&#xff0c;内部程序的执行不会影响外部程序的运行…

Go第 7 章:数组与切片

Go第 7 章&#xff1a;数组与切片 7.1 为什么需要数组 7.2 数组介绍 数组可以存放多个同一类型数据。数组也是一种数据类型&#xff0c;在 Go 中&#xff0c;数组是值类型。 7.3 数组的快速入门 我们使用数组的方法来解决养鸡场的问题. 7.4 数组定义和内存布局 对上图的总…

QA | 关于信号发生器的扫频功能,您了解多少?

在上期文章中&#xff0c;我们介绍了可编程信号发生器使用中的相关问题&#xff0c;那么关于便携式信号发生器的扫频功能您是否有很多问题呢&#xff0c;今天我们将围绕信号源扫频功能详细解答大家感兴趣的几个问题&#xff0c;快来看看吧&#xff01;Q1&#xff1a;信号源是否…

Linux操作系统--文件管理(保姆级教程)

文件系统类型的含义 文件系统类型式指文件在存储介质上存放及存储的组织方法和数据结构。 Linux采用虚拟文件系统技术&#xff08;virtual file system)-VFS 一个世纪的文件系统想要被Linux支持&#xff0c;就必须提供一个符合VFS标准的接口&#xff0c;才能与VFS协同工作&am…

线程的创建与同步

线程的创建与同步线程的概念与实现方式线程的概念进程线程的区别线程使用线程相关的接口函数多线程代码线程并发线程的实现方式线程的同步信号量互斥锁读写锁条件变量线程的安全线程与fork线程的概念与实现方式 线程的概念 进程是正在执行的程序。线程是进程内部的一条执行路…

MXNet的Faster R-CNN(基于区域提议网络的实时目标检测)《4》

这篇主要了解语义分割(semantic segmentation)&#xff0c;语义分割是分类中的一个核心知识点&#xff0c;而且这些语义区域的标注和预测都是像素级的。在语义分割中有两个很相似的重要问题&#xff0c;需要注意下&#xff1a;图像分割(image segmentation)&#xff1a;将图像分…

一文解决用C语言实现一个链表(全都是细节)

目录前言单链表1.链表中的结点2.链表中的常见操作&#xff08;1&#xff09;相关声明格式&#xff08;2&#xff09;常见操作的实现&#xff08;定义&#xff09;&#xff08;5&#xff09;测试前言 链表是指数据使用一个一个的结点连接起来的数据结构&#xff0c;这样的数据结…

(框架)Deepracer Local - 001: 搭建本地环境

Deepracer - 阿里云1. 安装环境2. 预安装脚本3. 从 github 下载 deepracer 代码 并初始化4. 首次运行deepracer1. 安装环境 推荐本地环境: Ubuntu (如果windowns必要的话&#xff0c;就装双系统&#xff0c;我的台式机就是双系统) 云环境: 阿里云&#xff0c;配置如下&#xf…

python简单介绍及基础知识(二)

♥️作者&#xff1a;小刘在这里 ♥️每天分享云计算网络运维课堂笔记&#xff0c;疫情之下&#xff0c;你我素未谋面&#xff0c;但你一定要平平安安&#xff0c;一 起努力&#xff0c;共赴美好人生&#xff01; ♥️夕阳下&#xff0c;是最美的&#xff0c;绽放&#xff0c;…

Codeforces Round #839 (Div. 3)(A~F)

A. AB?给出长度为3的字符串&#xff0c;计算字符串表示的表达式的值。思路&#xff1a;。AC Code&#xff1a;#include <bits/stdc.h>typedef long long ll; const int N 2e5 5; int t; std::string s;int main() {std::ios::sync_with_stdio(false);std::cin.tie(0);…

立即放弃 TypeScript 的 17 个理由

如果你和我一样&#xff0c;你可能会因为被迫而使用 Typescript。你的公司决定它会成为未来的语言&#xff0c;所以你被迫学习它。起初&#xff0c;您很高兴使用 Typescript。你知道它有很大的潜力&#xff0c;可以帮助你制作更强大的应用程序。但在使用了一段时间后&#xff0…