CVPR24《Neural Markov Random Field for Stereo Matching》

论文地址: https://arxiv.org/abs/2403.11193
源码地址: https://github.com/aeolusguan/NMRF


概述

  手工设计的MRF模型在传统的立体匹配中占据主导地位,但与端到端的深度学习模型相比,其建模准确性不足。尽管深度学习大大改进了MRF模型中的一元项(即单个像素的匹配成本),但整体准确性仍然受到手工设计的二元项(即像素对之间的平滑性约束)和消息传递机制的限制。为了克服这些问题,论文提出了一种神经MRF模型,使用数据驱动的神经网络来设计潜在函数和消息传递机制。这个模型基于变分推理理论构建,以避免收敛问题并保留立体MRF的图结构偏差。为了使推理变得可行并能很好地扩展到高分辨率图像,论文提出了DPN,可以自适应地修剪视差搜索空间。所提出的方法在KITTI 2012和2015排行榜上名列第一,且运行时间快于100毫秒。与之前的方法相比,显著降低了错误率,如在KITTI 2015上将D1指标降低了50%以上。该方法展示了强大的跨领域泛化能力,能够在合成数据集和真实数据集(如KITTI、Middlebury、ETH3D)之间取得良好效果,并能够恢复清晰的边缘。


模型架构

在这里插入图片描述

  本文的方法分为两个阶段,首先在低分辨率特征图上进行视差估计,然后在高分辨率特征图上进行细化。
局部特征提取 使用一个Siamese卷积神经网络从图像对中提取多层次特征。该网络由一系列残差块、实例归一化层和下采样层组成。低分辨率(1/8)的特征图用于初步视差估计,高分辨率(1/4)的特征图用于视差细化。

神经MRF模型

神经MRF模型公式

利用离散候选标签集为每个像素构建概率图。图的节点对应于候选标签,边则连接相邻像素的标签对,具体公式如下:
p ( { x v } , { z v } ) ∝ ∏ v ∈ V Φ ( x v , z v ) ∏ ( u , v ) ∈ E Ψ ( z u , z v ) (1) p(\{x_v\}, \{z_v\}) \propto \prod_{v \in V} \Phi(x_v, z_v) \prod_{(u,v) \in E} \Psi(z_u, z_v) \tag{1} p({xv},{zv})vVΦ(xv,zv)(u,v)EΨ(zu,zv)(1)
其中 v v v 对应于候选标签,边 ( u , v ) (u, v) (u,v) 连接相邻像素的标签对。函数 Φ , Ψ \Phi, \Psi Φ,Ψ 分别表示数据似然和二元潜在函数。 ∏ v ∈ V Φ ( x v , z v ) \prod_{v \in V} \Phi(x_v, z_v) vVΦ(xv,zv) 这一项表示每个节点的独立概率,乘积遍历了图中的所有节点 v v v ,它衡量了给定标签 z v z_v zv 的情况下,观测到的节点特征 x v x_v xv 的概率。节点 x v x_v xv 结合了左视图和右视图的匹配线索,通常通过一个卷积神经网络(CNN)进行特征提取和匹配计算。 ∏ ( u , v ) ∈ E Ψ ( z u , z v ) \prod_{(u,v) \in E} \Psi(z_u, z_v) (u,v)EΨ(zu,zv) 表示表示每对相邻标签 ( z u , z v ) (z_u, z_v) (zu,zv) 之间的相互作用,控制标签对之间的相互作用,通常根据标签差异和图像内容来定义。文中通过神经网络学习潜在函数,以捕获复杂的像素关系和几何信息, 乘积遍历了图中的所有边 ( u , v ) (u,v) (u,v), 它衡量了标签 ( z u , z v ) (z_u, z_v) (zu,zv)之间的相容性。该公式表示整个图模型的概率是所有节点的概率和边的概率的乘积。通过这种方式,可以捕捉到图像中各个像素之间的复杂关系。

嵌入均值场推理

嵌入均值场推理是一种技术,用于简化复杂概率图模型的推理过程。通过均值场理论,后验分布可以近似为每个节点的独立边缘分布的乘积。这使得推理变得更加高效。为了简化推理过程,本文利用均值场理论将后验分布近似为独立边缘分布的乘积,即:
p ( { z v } ∣ { x v } ) ≈ ∏ v q v ( z v ) (2) p(\{z_v\}|\{x_v\}) \approx \prod_vq_v(z_v)\tag{2} p({zv}{xv})vqv(zv)(2)
通过最小化近似后验分布和真实后验分布之间的KL散度,得到每个节点 v v v 的边缘分布 q v ( z v ) q_v(z_v) qv(zv) 的最优解。该解满足以下的固定方程:
log ⁡ ( q v ( z v ) ) = c v + log ⁡ ( Φ ( x v , z v ) ) + ∑ u ∈ N ( v ) ∫ R d q u ( z u ) log ⁡ ( Ψ ( z u , z v ) ) d z u , (3) \begin{aligned}\log(q_v(\mathbf{z}_v))&=c_v+\log(\Phi(\mathbf{x}_v,\mathbf{z}_v))+\sum_{u\in\mathcal{N}(v)}\int_{\mathbb{R}^d}q_u(\mathbf{z}_u)\log(\Psi(\mathbf{z}_u,\mathbf{z}_v))\mathrm{d}\mathbf{z}_u,\end{aligned}\tag{3} log(qv(zv))=cv+log(Φ(xv,zv))+uN(v)Rdqu(zu)log(Ψ(zu,zv))dzu,(3)

消息传递更新机制

将均值场推理中的复杂非线性依赖关系参数化为神经网络进行消息传递操作:
μ v t = f ~ ( x v , μ v t − 1 , { μ u t − 1 } u ∈ N ( v ) ) , (4) \mu_v^t=\tilde f(\mathbf{x}_v,\mu_v^{t-1},\{\mu_u^{t-1}\}_{u\in\mathcal{N}(v)}), \tag{4} μvt=f~(xv,μvt1,{μut1}uN(v)),(4)
在每一层 t t t ,节点 v v v 的嵌入 μ u ( t ) \mu_u^{(t)} μu(t) 是节点特征 x v x_v xv 和邻居节点嵌入 { μ u ( t − 1 ) } \{\mu_u^{(t-1)}\} {μu(t1)} 的函数。这个函数可以通过神经网络来表示。
消息传递通过以下步骤实现:
聚合邻居节点信息
m E → v = ∑ u ∈ N ( v ) α u v (Value from  u )  (5) m_{E\to v} = \sum_{u \in N(v)} \alpha_{uv} \text{ (Value from } u \text{) }\tag{5} mEv=uN(v)αuv (Value from u(5)
( α u v ) (\alpha_{uv}) (αuv):邻居节点 u u u v v v 之间的注意力权重。值的聚合通过加权邻居节点的值来实现。
更新节点嵌入:
μ v ( t + 1 ) = MLP ( μ v ( t ) + m E → v ) (6) \mu_v^{(t+1)} = \text{MLP}(\mu_v^{(t)} + m_{E\to v})\tag{6} μv(t+1)=MLP(μv(t)+mEv)(6)
使用多层感知机(MLP)更新节点嵌入。
自注意力机制:
在神经消息传递过程中,使用自注意力机制来计算消息传递的权重。自注意力机制能够根据节点特征和邻居节点特征动态调整信息聚合的权重:
α u v = softmax ( q v ⊤ k u + r u v ) (7) \alpha_{uv} = \text{softmax}(q_v^\top k_u + r_{uv})\tag{7} αuv=softmax(qvku+ruv)(7)
r u v r_{uv} ruv: 位置编码。
视差估计:
通过解码节点嵌入 μ v \mu_v μv 来得到视差估计和对应的概率。

视差提议网络

为了使神经MRF推理在高分辨率图像上变得可行,并保持高效,文中提出了视差提议网络(DPN)。DPN的主要目的是自适应地修剪视差搜索空间,从而降低计算负担,同时保持良好的性能。 在立体匹配任务中,计算每个像素的视差是一项计算密集型任务。传统方法通常需要在大量的视差候选集中进行搜索,这对于高分辨率图像尤其耗时。因此,有效地减少视差候选集的大小,同时保证视差估计的准确性,是提升立体匹配效率的关键。DPN通过两个主要步骤实现高效的视差估计:候选标签提议和标签种子传播。

候选标签提议(Top k Label Seeds)

初始匹配得分计算:
DPN首先计算每个像素的初始匹配得分。具体来说,对于像素 o = ( i , j ) o = (i, j) o=(i,j),计算视差范围 [ 0 , z max ⁡ ] [0, z_{\max}] [0,zmax] 内的匹配得分:
C ( i , j , z ) = ⟨ F ~ L ( i , j ) , F ~ R ( i − z , j ) ⟩ (8) C(i, j, z) = \langle \tilde{F}_L(i, j), \tilde{F}_R(i - z, j) \rangle \tag{8} C(i,j,z)=F~L(i,j),F~R(iz,j)⟩(8)
其中, F ~ L \tilde{F}_L F~L F ~ R \tilde{F}_R F~R 分别是左图和右图的特征。
识别视差模式
通过1D最大池化和topk操作得到计算初始匹配得分,每个模式由其位置 p p p 和匹配特征 d d d 表示,统称为标签种子。

标签种子传播(Label Seeds Propagation)

特征增强:
初始标签种子可能在纹理少或被遮挡的区域表现不佳。DPN通过消息传递网络增强标签种子的匹配特征,以纠正错误的标签种子。

消息传递网络:
使用交叉窗口自注意力机制(Cross-shaped Window Self-Attention)在标签种子之间交换信息,高效聚合匹配特征。这种机制可以在长距离范围内有效地交换信息,处理遮挡和大面积纹理缺失区域。

视差估计:
通过对增强后的标签种子进行解码,DPN生成每个像素的候选标签集。每个像素的视差估计通过从候选标签集中选择最佳标签来确定。
视差提议网络(DPN)通过有效地修剪视差搜索空间,大大降低了计算复杂度,同时保证了高精度的视差估计。其核心步骤包括计算初始匹配得分、识别视差模式、增强标签种子特征和最终的视差估计。这种方法不仅提高了立体匹配的效率,还在处理高分辨率图像时表现出色。

视差细化

在细化过程中,首先需要在1/4分辨率的特征图上提取更多细节信息。这些高分辨率特征图由一个局部特征卷积神经网络(CNN)生成,包含丰富的纹理和边界信息,有助于视差细化。在高分辨率特征图上,利用神经马尔可夫随机场(Neural MRF)模型进行推理。这一过程中,每个像素只有一个候选标签,因此推理过程更为高效。
视差残差: 通过解码节点嵌入,计算每个像素的视差残差。这些残差用于调整初步估计的视差值。
边际概率: 计算每个像素的边际概率分布,用于衡量视差估计的不确定性。
通过上述步骤得到的视差残差和边际概率,对初步视差图进行调整和细化。具体步骤如下:

  1. 初始化:使用初步视差估计作为细化过程的起点。
  2. 视差调整:根据计算得到的视差残差,逐像素调整初步视差值。
  3. 不确定性权重:利用边际概率分布,对视差调整过程进行加权,确保在高不确定性区域进行更谨慎的调整。

视差细化过程显著提高了视差估计的精度,尤其是在细节和边界区域。通过结合高分辨率特征图和自注意力机制,细化步骤能够有效地减少初步估计中的误差,为立体匹配任务提供了更加精确和可靠的视差图。


损失函数


实验结果

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

GraphSAGE (SAmple and aggreGatE)知识总结

1.前置知识 inductive和transductive 模型训练: Transductive learning在训练过程中已经用到测试集数据(不带标签)中的信息,而Inductive learning仅仅只用到训练集中数据的信息。 模型预测: Transductive learning只能…

作业练习1

要求:R1-R2-R3-R4-R5 RIP 100 运行版本2 R6-R7 RIP 200 运行版本1 1.使用合理IP地址规划网络,各自创建环回接口 2.R1创建环回 172.16.1.1/24 172.16.2.1/24 172.16.3.1/24 3.要求R3使用R2访问R1环回 4.减少路由条目数量,R1-R2之间增加路由传递…

C++进阶之C++11

个人主页:点我进入主页 专栏分类:C语言初阶 C语言进阶 数据结构初阶 Linux C初阶 算法 C进阶 欢迎大家点赞,评论,收藏。 一起努力,一起奔赴大厂 目录 一.列表初始化 1.1一切皆可用列表初始化 1.2init…

U盘数据丢失?一招教你如何使用四种技巧轻松找回!

每一个打工人可能都是被各种文件所困扰的,而且现在不仅仅是工作上,还有学习以及日常的生活记录也需要接触到各类的数据,拿我们平时用软件时产生的文件、图片、视频等等来说,就占据了磁盘的大部分空间,当然有时候也会选…

CTFHub——XSS——反射型

1、反射型: 发现为表单式,猜测哪个可能存在注入漏洞,分别做测试注入发现name框存在xss漏洞 输入发现有回显但不是对方cookie,参考wp发现要用xss线上平台 将xss平台测试语句注入,将得到的url编码地址填入url框&#xf…

《学会 SpringMVC 系列 · 写入拦截器 ResponseBodyAdvice》

📢 大家好,我是 【战神刘玉栋】,有10多年的研发经验,致力于前后端技术栈的知识沉淀和传播。 💗 🌻 CSDN入驻不久,希望大家多多支持,后续会继续提升文章质量,绝不滥竽充数…

MATLAB画散点密度图(附代码和测试数据的压缩包)

1. 有关 Matlab 获取代码关注WZZHHH回复关键词,或者咸鱼关注:WZZHHH123 怀俄明探空站数据解算PWV和Tm:怀俄明探空站数据解算PWV和Tm 怀俄明多线程下载探空站数据(包括检查和下载遗漏数据的代码):怀俄明多线…

VMware安装Win10系统(保姆级教程)

需要自己先下载并安装VMware 和Win10系统镜像: VMware官网:VMware - Delivering a Digital Foundation For Businesses Win10下载地址:MSDN,我告诉你 1.新建虚拟机设置 2.启动Win10虚拟机设置 注意: 当出现有字体的时候&#…

一款绿色免费免安装的hosts文件编辑器

BlueLife Hosts Editor 是一款免费的 Hosts 文件编辑工具,主要用于管理和修改电脑系统的 Hosts 文件。该软件具有多种功能,包括添加、删除和更新域名记录,以及调整 IP 与网域名称的交叉对应关系,类似于 DNS 的功能。 该软件特别适…

filebeat

1、作用 1、可以在本机收集日志2、也可以远程收集日志3、轻量级的日志收集系统,可以在非java环境运行。logstash是在jmv环境中运行,资源消耗很大,启动一个logstash要消耗500M左右的内存,filebeat只消耗10M左右的内存。收集nginx的…

Qt 学习第四天:信号和槽机制(核心特征)

信号和槽的简介 信号和插槽用于对象之间的通信。信号和插槽机制是Qt的核心特征,可能是不同的部分大部分来自其他框架提供的特性。信号和槽是由Qt的元对象系统实现的。介绍(来自Qt帮助文档Signals & Slots) 在GUI编程中,当我们…

使用 Rough.js 创建动态可视化网络图

本文由ScriptEcho平台提供技术支持 项目地址:传送门 使用 Rough.js 创建动态可视化网络图 应用场景 Rough.js 是一个 JavaScript 库,它允许开发人员使用毛边风格创建可视化效果。该库适用于各种应用程序,例如: 数据可视化地图…

计算机基础(Windows 10+Office 2016)教程 —— 第8章 多媒体技术及应用

多媒体技术及应用 8.1 多媒体技术的概述8.1.1 多媒体技术的定义和特点8.1.2  多媒体的关键技术8.1.3 多媒体技术的发展趋势8.1.4 多媒体文件格式的转换8.1.5 多媒体技术的应用 8.2 多媒体计算机系统的构成8.2.1 多媒体计算机系统的硬件系统8.2.2 多媒体计算机系统的软件系统…

APP逆向 day26unidbg下-pdd(anti)案例

一.前言 今天我们讲unidbg的下篇,也就是unidbg基础的最后一个部分,我们上节课也有补环境,比如补java环境,补安卓环境,这节课我们讲的肯定比这些都要难,我会给出一个之前讲过的案例,然后会讲一个…

多 NodeJS 环境管理

前言 对于某个项目依赖特定版本的 NodeJS,或几个项目的 NodeJS 版本冲突时,需要在系统中安装多个版本的 NodeJS,这时可以使用一些工具来进行多个 NodeJS 的管理。 有很多类似的 NodeJS 管理工具,如 nvm, nvs, n 等,接…

深入理解单元测试与JUnit:从基础概念到实践操作

文章目录 前言一、单元测试是什么?单元测试的特点单元测试的好处 二、junit是什么?三、操作步骤1.junit安装2.maven新建项目3. 新建java文件4. 生成测试类5. 编写测试方法6. 测试结果 总结 前言 随着软件开发行业的不断发展,测试的重要性日益…

C++自定义接口类设计器之函数解析二

关键代码 // 解析为函数 bool FunctionCreator::parse(const QString& lineFunc) {auto trimFunc lineFunc.trimmed();auto list trimFunc.split(" ");bool bHasReturn false;// 返回值和函数名解析for (const auto& key : list) {auto trimKey key.trim…

串口应用编程-I.MX6U嵌入式Linux C应用编程学习笔记基于正点原子阿尔法开发板

串口应用编程 串口应用编程介绍 介绍 串口定义:串行接口,数据按顺序传输 串口特点:通信线路简单,距离远,速度较低 应用领域:常用工业接口 Linux系统中的作用 作为标准输入输出设备 系统打印信息输出 用户与系统交互 串口与终端:在Linux系统中,串口被视为一种终端&#…

2024年软件测试岗必问的100+个面试题【含答案】

一、基础理论 1、开场介绍 介绍要领:个人基本信息、工作经历、之前所做过的工作及个人专长或者技能优势。扬长避短,一定要口语化,语速适中。沟通好的就多说几句,沟通不好的话就尽量少说两句。举例如下: 面试官你好&…

前端Web-JavaScript(下)

主要是补全一下JavaScript 基本对象: String对象 语法格式 方式1: var 变量名 new String("…") ; //方式一 例如: var str new String("Hello String"); 方式2: var 变量名 … ; //方式二 例如: var …