【论文阅读】CVPR2023 IGEV-Stereo

news2024/11/23 19:06:26

用于立体匹配的迭代几何编码代价体

【cvhub导读】【paper】【code_openi】

代码是启智社区的镜像仓库,不需要魔法,点击这里注册

🚀贡献

1️⃣现有主流方法

基于代价滤波的方法基于迭代优化的方法

  • 基于代价滤波的方法可以在cost volume中编码足够的非局部几何和上下文信息,这对于具有挑战性的区域中的视差预测至关重要。

  • 基于迭代优化的方法可以避免进行3D代价聚合所需的高计算和内存成本,但是仅基于All-pairs Correlations的方法在**病态区域(如遮挡、重复纹理、低纹理、高反等区域)**的能力较弱。

2️⃣本文贡献

思想:结合这两种方法的互补优势,提出一种新的立体匹配范式——迭代几何编码代价体(IGEV)

  • 解决病态区域引起的模糊性问题:使用一个极轻量级的3D正则化网络对cost volume进行聚合和正则化,得到一个几何编码体(GEV),与RAFT-Stereo的All-pairs Correlations相比,GEV在聚合后编码了更多的场景几何和上下文信息。

  • 解决边界和微小细节处出现过度平滑的情况将GEV和RAFT中的All-pairs Correlations相结合,形成了组合几何编码体 (Combined Geometry Encoding Volume, CGEV),并输入到 ConvGRU-based update operator 中进行迭代视差图优化。

⚛️方法

1️⃣整体架构

在这里插入图片描述

IGEV-Stereo由四部分组成:

  • 多尺度特征提取器 (Multi-Scale Feature Extractor)

  • 组合几何编码代价体 (Combined Geometry Encoding Volume)

  • 基于ConvGRU的迭代更新器 (ConvGRU-based Update Operator)

  • 空间上采样模块 (Spatial Upsampling Module)

2️⃣特征提取器

特征提取网络上下文提取网络

特征提取网络

提取多尺度特征用于cost volume构建和指导代价聚合,论文使用在ImageNet上预训练的MobileNet V2将输入图降采样到1/32,然后通过上采样得到多尺度特征:

{ f l , i ( f r , i ) ∈ R C i × H i × W i ( i = 4 , 8 , 16 , 32 ) \{\boldsymbol{f}_{l,i}(\boldsymbol{f}_{r,i}) \in \mathbb{R}^{C_i\times\frac{H}{i}\times\frac{W}{i}}(i=4,8,16,32) {fl,i(fr,i)RCi×iH×iW(i=4,8,16,32)

f l , 4 \boldsymbol{f}_{l,4} fl,4 f r , 4 \boldsymbol{f}_{r,4} fr,4用于构建代价体

上下文提取器

提取多尺度上下文特征用于ConvGRUs隐藏状态初始化和更新,同RAFT-Stereo一样,上下文网络由一系列残差块和下采样层组成,在输入128个通道图像分辨率的1/4、1/8和1/16处产生多尺度上下文特征。多尺度上下文特征用于初始化基于ConvGRU的更新操作符的隐藏状态,并在每次迭代时插入到ConvGRU中。

3️⃣组合几何编码代价体

CGEV = GEV + APC

GEV几何编码代价体

  • 构建分组相关代价体:将 f l , 4 \boldsymbol{f}_{l,4} fl,4 f r , 4 \boldsymbol{f}_{r,4} fr,4按照通道维度分成 N g = 8 N_g=8 Ng=8组,并计算各组的相关映射,形成一个4维的相关代价体:

C c o r r ( g , d , x , y ) = 1 N c / N g ⟨ f l , 4 g ( x , y ) , f r , 4 g ( x − d , y ) ⟩ \boldsymbol{C}_{corr}(g,d,x,y)=\frac{1}{N_c/N_g}\langle \boldsymbol{f}_{l,4}^{g}(x,y),\boldsymbol{f}_{r,4}^{g}(x-d,y)\rangle Ccorr(g,d,x,y)=Nc/Ng1fl,4g(x,y),fr,4g(xd,y)⟩

⟨ ⋅ , ⋅ ⟩ \langle \cdot, \cdot \rangle ,为向量内积;d为视差索引; N c N_c Nc为通道数; C c o r r \boldsymbol{C}_{corr} Ccorr仅使用特征相关性构建,缺乏全局几何信息,需要进行代价聚合

  • 轻量3D正则化网络 R \boldsymbol{R} R进行代价聚合

C G = R ( C c o r r ) \boldsymbol{C}_G=\boldsymbol{R}(\boldsymbol{C}_{corr}) CG=R(Ccorr)

正则化网络基于3D UNet,包含3个下采样模块和3个上采样模块,下采样模块包含两个 3 × 3 × 3 3\times3\times3 3×3×3的3D卷积,通道数分别为16,32,48,上采样模块包含一个 4 × 4 × 4 4\times4\times4 4×4×4的转置卷积和两个 3 × 3 × 3 3\times3\times3 3×3×3的3D卷积。

  • 参考CoEx,在3D正则化网络中插入引导代价体激励操作:在代价聚合过程中,对于一个 D i × H i × W i \frac{D}{i}\times\frac{H}{i}\times\frac{W}{i} iD×iH×iW的代价体 C i ( i = 4 , 8 , 16 , 32 ) \boldsymbol{C}_i(i=4,8,16,32) Ci(i=4,8,16,32),引导代价体激励可以描述为:

C i ′ = σ ( f l , i ) ⊙ C i \boldsymbol{C}^{'}_{i}=\sigma(\boldsymbol{f}_{l,i})\odot\boldsymbol{C}_{i} Ci=σ(fl,i)Ci

σ \sigma σ是sigmoid函数, ⊙ \odot 是哈达玛积,上面式子的思想是将左特征图计算得到的权重作为激励作用于代价体 C i \boldsymbol{C}_i Ci疑问: C i \boldsymbol{C}_i Ci到底是哪个层的?

该三维正则化网络插入了引导代价体激励操作,可以有效地推断和传播场景几何信息,得到几何编码体(GEV),也就是 C G \boldsymbol{C}_G CG

融合GEV和APC获得CGEV

  • 计算All-Pairs Correlations(APC),获得局部特征关联代价体 C A \boldsymbol{C}_A CA

  • 扩大感受野:使用1D平均池化,大小为2,步长为2,获得两个层次的 C G \boldsymbol{C}_G CG金字塔和 C A \boldsymbol{C}_A CA金字塔。

  • 结合这两个代价体金字塔,获得组合几何编码代价体(CGEV)

4️⃣基于ConvGRU的更新操作

计算初始视差

使用soft argmin从 C G \boldsymbol{C}_G CG中回归初始视差:

d 0 = ∑ d = 0 D − 1 d × S o f t m a x ( C G ( d ) ) \boldsymbol{d}_0=\sum^{D-1}_{d=0}d\times Softmax(\boldsymbol{C}_G(d)) d0=d=0D1d×Softmax(CG(d))

得到1/4分辨率的初始视差。

ConvGRU更新

使用3级ConvGRU从初始视差进行更新,这种设置有助于迭代视差优化的快速收敛。

  • 利用多尺度上下文特征来初始化ConvGRU的隐藏状态;

  • 每次迭代,使用当前视差dk通过线性插值从CGEV中进行索引,产生一组几何特征 G f \boldsymbol{G}_f Gf

G f = ∑ i = − r r C o n c a t { C G ( d k + i ) , C A ( d k + i ) , C G p ( d k / 2 + i ) , C A p ( d k / 2 + i ) } \boldsymbol{G}_f=\sum^{r}_{i=-r}Concat\{\boldsymbol{C}_G(\boldsymbol{d}_k+i),\boldsymbol{C}_A(\boldsymbol{d}_k+i),\boldsymbol{C}^p_G(\boldsymbol{d}_k/2+i),\boldsymbol{C}^p_A(\boldsymbol{d}_k/2+i)\} Gf=i=rrConcat{CG(dk+i),CA(dk+i),CGp(dk/2+i),CAp(dk/2+i)}

其中, d k \boldsymbol{d}_k dk是当前视差,r是索引半径,p表示池化操作。

  • ConvGRU更新隐藏状态,这些几何特征和当前视差 d k \boldsymbol{d}_k dk通过两个编码器层,然后与 d k \boldsymbol{d}_k dk级联以形成 x k x_k xk,然后使用ConvGRU将隐藏状态 h k − 1 h_{k-1} hk1更新:

x k = [ E n c o d e r g ( G f ) , E n c o d e r d ( ( d ) k ) , d k ] , z k = σ ( C o n v ( [ h k − 1 , x k ] , W z ) + c k ) , r k = σ ( C o n v [ C o n v ( [ h k − 1 , x k ] , W r ) + c r ) , h ~ k = t a n h ( C o n v ( r k ⊙ h k − 1 , x k ] , W h ) + c h ) , h k = ( 1 − z k ) ⊙ h k − 1 + z k ⊙ h ~ k x_k=[Encoder_g(\boldsymbol{G}_f),Encoder_d(\boldsymbol(d)_k),d_k], \\ z_k=\sigma(Conv([h_{k-1},x_k],W_z)+c_k), \\r_k=\sigma(Conv[Conv([h_{k-1},x_k],W_r)+c_r), \\ \tilde{h}_k=tanh(Conv(r_k\odot h_{k-1},x_k], W_h)+c_h), \\ h_k=(1-z_k)\odot h_{k-1}+z_k\odot \tilde{h}_k xk=[Encoderg(Gf),Encoderd((d)k),dk],zk=σ(Conv([hk1,xk],Wz)+ck),rk=σ(Conv[Conv([hk1,xk],Wr)+cr),h~k=tanh(Conv(rkhk1,xk],Wh)+ch),hk=(1zk)hk1+zkh~k

c k , c r , c h c_k,c_r,c_h ck,cr,ch是双下文特征,隐藏状态的维度为128,上下文特征维度同样为128, E n c o d e r g , E n c o d e r d Encoder_g, Encoder_d Encoderg,Encoderd分别包含两个卷积

基于隐藏状态 h k h_k hk,通过两个卷积层解码得到 △ d k \bigtriangleup \boldsymbol{d}_k dk更新视差:

d k + 1 = d k + △ d k \boldsymbol{d}_{k+1}=d_k+\bigtriangleup \boldsymbol{d}_k dk+1=dk+dk

5️⃣空间上采样

通过在1/4分辨率下的预测视差 d k \boldsymbol{d}_{k} dk的加权组合来输出全分辨率视差图,对隐藏状态进行卷积生成特征,然后将它们上采样到1/2分辨率。将上采样的特征与来自左图像的 f l , 2 \boldsymbol{f}_{l,2} fl,2级联来产生权重 W ∈ R H × W × 9 \boldsymbol{W}\in \mathbb{R}^{H\times W\times 9} WRH×W×9,通过它们的原始分辨率邻居的加权组合来输出全分辨率视差。

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

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

相关文章

大小字母转换

1.代码实例: public class UpString { public static void main(String[] args) { if(args!null && args.length 1){ String str new String(args[0]); System.out.println(“原字符:” str “\n”); String newA str.toUpperCase(); System.out.prin…

C语言分支和循环语句

目录 1.什么是语句😊 2.分支语句(选择结构)😊 2.1 if语句🐾 2.2 switch语句🐾 3.循环语句 😊 3.1 while循环🐾 3.2 for循环🐾 3.3 do...while()循环&#x1f43e…

太太太太太卷了,累了

我们聊到互联网行业的时候,一个不可避免的话题就是“内卷” 在程序员职场上,什么样的人最让人反感呢? 是技术不好的人吗?并不是。技术不好的同事,我们可以帮他。 是技术太强的人吗?也不是。技术很强的同事,可遇不可求&#xff…

C++内联函数的使用

1.内联函数概念 以inline修饰的函数叫做内联函数,编译时C编译器会在调用内联函数的地方展开,没有函数调用建立栈帧的开销,内联函数提升程序运行的效率。 如果在上述函数前增加inline关键字将其改成内联函数,在编译期间编译器会用…

[元来学NVMe协议] NVMe IO 指令集(NVM 指令集)| Flush 命令

声明 主页:元存储的博客_CSDN博客 依公开知识及经验整理,如有误请留言。 个人辛苦整理,付费内容,禁止转载。 内容摘要 前言 NVMe2.0 定义的三类命令集: 管理命令集、IO命令集、Fabrics命令集 Admin Command Set (管理命令集):用于控制器的管理,如创建/销毁IO提交队列…

春秋云境:CVE-2022-25401(任意文件读取漏洞)

目录 一、题目 二、curl访问flag文件 一、题目 介绍: Cuppa CMS v1.0 administrator/templates/default/html/windows/right.php文件存在任意文件读取漏洞 进入题目 是一个登录页面 sql和暴破都无解。 官方POC 国家信息安全漏洞库 cve漏洞介绍 官方给错了目录 …

初阶数据结构之顺序表的增删查改(二)

文章目录 [TOC](文章目录) 前言一、顺序表1.1顺序表的概念1.2顺序表的分类1.3、顺序表的接口定义 二.顺序表的完整实现2.1代码的完成实现 总结 前言 线性表的含义: 线性表(linear list)是n个具有相同特性的数据元素的有限序列。 线性表是一种…

CSAPP第五章 面向编译器的优化(2)

回顾 先复习一下之前的东西。 练习5.7 我们可以看到,相比combine4生成的基于指针的代码,GCC使用了C代码中数组引 用的更加直接的转换。循环索引i在寄存器rdx中,data的地址在寄存器rax中。和 前面一样,累积值acc在向量寄存器xm…

bthome协议分析及esp32上的实现

前言 最近自己搞了些智能家居的小节点,但由于wifi入网方式功耗太高,于是关注起了蓝牙 bthome是一种灵活的低功耗BLE数据格式协议,用于广播传感器数据,此协议支持数据加密,目前最新为v2版本。在home assistant中也支持…

( “树” 之 BST) 108. 将有序数组转换为二叉搜索树 ——【Leetcode每日一题】

108. 将有序数组转换为二叉搜索树 给你一个整数数组 nums ,其中元素已经按 升序 排列,请你将其转换为一棵 高度平衡 二叉搜索树。 高度平衡 二叉树是一棵满足「每个节点的左右两个子树的高度差的绝对值不超过 1 」的二叉树。 示例 1: 输入…

【pytorch函数笔记】torch.split

官方文档:https://pytorch.org/docs/stable/generated/torch.split.html?highlightsplit torch.split(tensor, split_size_or_sections, dim0) Splits the tensor into chunks. Each chunk is a view of the original tensor. If split_size_or_sections is an in…

栈的基本操作(C语言实现)创建,销毁,入栈,出栈

前言 栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶,另一端称为栈底。栈中的数据元素遵守后进先出LIFO(Last In First Out)的原则。 压栈:栈的…

Linux网络编程服务端的创建

文章目录 前言一、编程前的准备1.相关函数的了解二、accept函数特别注意点三、具体函数的实现四、运行客户端和服务端进行通信验证总结前言 上篇文章讲解了如何创建一个客户端,这篇文章将创建一个服务端用来和上篇文章的客户端进行通信。 一、编程前的准备 1.相关函数的了解…

服务(第九篇)tomcat的部署和优化

tomcat的介绍: 免费的、开放源代码的Web应用服务器(用java开发的) Apache软件基金会(Apache Software Foundation)Jakarta项目中的一个核心项目 由Apache、Sun和一些公司及个人共同开发而成 深受Java爱好者的喜爱,并得到部分软…

干货|实验操作难入门?快来看JoVE视频网站!

Hello,大家好! 这里是壹脑云科研圈,我是喵君姐姐~ 当导师要求我们学习、模仿一些学术大神所做的心理学实验,尤其是采用脑影像、脑电技术等高端仪器的实验时,我们往往会因为缺少对具体操作细节的了解而感到困惑或困难。…

【python视图2】基于networkx的10个绘图技巧

一、说明 networkx在02年5月产生,是用python语言编写的软件包,便于用户对复杂网络进行创建、操作和学习。利用networkx可以以标准化和非标准化的数据格式存储网络、生成多种随机网络和经典网络、分析网络结构、建立网络模型、设计新的网络算法、进行网络…

MIPI摄像头工程=7系列FPGA + OV5640(MIPI) + 15 分钟 + VITIS

项目使用东西 硬件 Spartan-7 SP701 FPGA 7系列FPGA电阻网络实现的MIPI接口 OV5640 MIPI接口 软件 AMD Vivado 2020 版本以上 AMD Vitis 2020 介绍 MIPI 接口现在非常流行,国产FPGA目前基本都带MIPI接口,而AMD-Xilinx是从U系列开始支持MIPI电平&#x…

使用CMake的CPack工具打包项目

为了介绍如何使用CMake的CPack工具进行项目打包,这里使用了前文CMake项目使用ctestgtest进行单元测试中的示例。 为了更接近实际开发中项目的情况,自行下载gtest并进行源码编译来模拟实际项目中的依赖项;在实际的开发中,可能会有…

chatgpt智能提效职场办公-ppt怎么压缩文件大小

作者:虚坏叔叔 博客:https://xuhss.com 早餐店不会开到晚上,想吃的人早就来了!😄 压缩PPT文件大小有以下几种方法: 压缩图片大小:在PPT当中,图片是占用存储空间最大的部分&#xff0…

物联网多协议、多场景自定义测试|XMeter Cloud 更新

近日,全球首个物联网 MQTT 负载测试云服务 XMeter Cloud 推出了自定义场景测试功能。 该功能将满足用户自主定义测试场景和测试更广泛协议的需求,实现对除 MQTT 以外的 TCP、WebSocket、HTTP 等其他网络协议的测试,帮助用户构建更复杂的测试…