用于立体匹配的迭代几何编码代价体
【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/Ng1⟨fl,4g(x,y),fr,4g(x−d,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=0∑D−1d×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=−r∑rConcat{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} hk−1更新:
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([hk−1,xk],Wz)+ck),rk=σ(Conv[Conv([hk−1,xk],Wr)+cr),h~k=tanh(Conv(rk⊙hk−1,xk],Wh)+ch),hk=(1−zk)⊙hk−1+zk⊙h~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} W∈RH×W×9,通过它们的原始分辨率邻居的加权组合来输出全分辨率视差。