【论文阅读】CVPR2023 IGEV-Stereo

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

【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,通过它们的原始分辨率邻居的加权组合来输出全分辨率视差。

### 关于IGEV+的技术信息 IGEV作为一个强大的图形事件处理库,提供了简单易用的接口来帮助开发者构建高效的图形应用程序[^1]。然而,在当前可获取的信息中并未提及具体的“IGEV+”版本或其相关技术文档。这可能是由于以下原因: 1. **命名差异**:可能存在某种误解,“IGEV+”并非官方正式名称,而是使用者自行定义的一种扩展称呼。 2. **更新迭代**:如果确实存在名为“IGEV+”的新版,则该版本可能尚未被广泛记录或者传播。 对于希望深入了解此领域的朋友来说,可以考虑从以下几个方面入手寻找更多资源: - 官方网站或GitHub仓库:通常开源项目的主页会提供最权威的第一手资料,包括但不限于README文件、Wiki页面以及Release Notes等部分。 - 社区讨论平台:像Stack Overflow这样的问答社区里往往聚集着大量有经验的程序员们分享他们解决问题的经验教训;另外Reddit上的r/programming等相关子板块也可能成为挖掘隐藏知识点的好地方。 以下是基于现有知识给出的一些建议性代码片段用于演示如何初始化并注册基本回调函数至某个窗口对象上: ```python import igev # 假设已安装好对应模块 def on_mouse_move(event): """鼠标移动事件处理器""" print(f"Mouse moved to ({event.x}, {event.y})") window = igev.Window() # 创建新窗口实例 window.register_event('mousemove', on_mouse_move) # 注册监听器 window.run_loop() # 启动主循环等待交互发生 ``` 尽管如此, 如果目标是针对特定功能实现深入研究的话, 还需依赖具体应用场景下的详尽描述才能进一步展开探讨.
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值