SGM-Nets: Semi-global matching with neural networks

针对的问题

SGM的惩罚参数是通过经验方法计算得到的,难以对其进行调整,以控制视差图的平滑度。

解决方法

提出基于学习的惩罚参数估计方法SGM-Nets。输入image patch和对应的位置,即可输出三维物体结构的惩罚参数。同时惩罚参数会根据正负视差的变化而产生变化,从而可以更加有区别的表示物体结构。

同时,引入了一种损失函数,可以利用稀疏注释的视差图,比如激光传感器捕获的真值。

因此,本文贡献如下:

1.首次提出将神经网络用于SGM,并且引入了新的损失函数。

2.新的SGM参数化可以把正负视差变化分开,以便更加有区分度地表示物体结构。

3.2017年kitti数据集的SOTA

背景介绍 Semi-global matching

SGM中的能量函数定义如下:

E ( D ) = ∑ x ( C ( x , d x ) + ∑ y ∈ N x P 1 T [ ∣ d x − d y ∣ = 1 ] + ∑ y ∈ N x P 2 T [ ∣ d x − d y > 1 ∣ ] ) E(D) = \sum_{x}(C(x,d^x)+\sum_{y\in N_x}P_1T[|d^x-d^y|=1]+\sum_{y \in N_x}P_2T[|d^x-d^y>1|]) E(D)=x(C(x,dx)+yNxP1T[dxdy=1]+yNxP2T[dxdy>1])

其中 C ( x , d x ) C(x,d^x) C(x,dx)代表了 x x x点处视差值为 d x d^x dx​​的匹配代价。​因此,第一项代表了所有像素对视差图D的匹配代价之和。

第二项表示了x的邻域像素y对x的倾斜表面惩罚。

第三项表示了邻域像素y对x不连续视差的惩罚。 P 2 P_2 P2通常根据图像梯度设置的,例如 P 2 = P 2 ′ / ∣ I ( x ) − I ( y ) ∣ P_2 = P'_2/|I(x)-I(y)| P2=P2/I(x)I(y),从而可以区分出视差不连续的区域。

T [ ⋅ ] T[\cdot] T[]代表了Kronecker delta函数,条件满足时,值为1;否则,值为0.

为了最小化 E ( D ) E(D) E(D),在x像素点处视差为d的沿r方向的代价值 L r ′ ( x , d ) L'_r(x,d) Lr(x,d)如下所示:

在这里插入图片描述

x 1 x_1 x1代表了前一个像素 ( x 0 − r ) (x_0-r) (x0r)

c ( x , d ) c(x,d) c(x,d)​代表了像素级的匹配代价。

在这里插入图片描述

为了避免累加带来的巨大数值,将减去 x 1 x_1 x1的最小路径代价。

在这里插入图片描述

那么,采用WTA的策略整合所有方向的聚合代价,得到 x 0 x_0 x0处的视差值 D D D

在这里插入图片描述

在这里插入图片描述

方法SGM-Net

在这里插入图片描述

在训练阶段,SGM-Net迭代训练从而最小化Path Cost和Neighbor Cost。

在测试阶段,通过SGM-Net估计 P 1 P_1 P1 P 2 P_2 P2,通过SGM估计稠密视差图。

1.标准参数化

Path Cost(平滑项)

对于上述方法,获得正确视差的必要条件如下:
L r ( x 0 , d i x 0 ) > L r ( x 0 , d g t x 0 ) , ∀ d i ∈ [ 0 , d m a x ] ≠ d g t L_r(x_0,d_i^{x_0})>L_r(x_0,d_{gt}^{x_0}),\qquad\forall d_i \in [0,d_{max}] \not=d_{gt} Lr(x0,dix0)>Lr(x0,dgtx0),di[0,dmax]=dgt
因此,设计了损失函数如下:

在这里插入图片描述

与softmax等损失函数相比,该损失函数更容易进行反向传播。为此,首先计算 E g E_g Eg关于 P 1 P_1 P1 P 2 P_2 P2的损失函数。

为此,观察下图,

在这里插入图片描述

x 0 x_0 x0视差为 d 5 x 0 d_5^{x_0} d5x0 d g t 5 d_{gt}^5 dgt5的路径cost

在这里插入图片描述

其中 β \beta β代表了 m i n k L r ( x 1 , k ) min_{k}L_r(x_1,k) minkLr(x1,k)

把上式进行推广,则路径cost如下所示:

在这里插入图片描述

其中, δ d x n ← d i x 0 = { d x k − d x k − 1 } ∀ k ∈ [ 1 , n ] \delta d^{x_n \gets d_i^{x_0}}=\{d^{x_k}-d^{x_{k-1}} \} \qquad \forall k\in[1,n] δdxndix0={dxkdxk1}k[1,n]​ 其中 x 0 x_0 x0最终的视差为 d i x 0 d^{x_0}_i dix0​​​

γ = ∑ i = 1 n c ( x i , d ) − m i n k L ( x i , k ) \gamma=\sum_{i=1}^n c(x_i,d)-min_kL(x_i,k) γ=i=1nc(xi,d)minkL(xi,k)​, γ \gamma γ不包括 P 1 P_1 P1 P 2 P_2 P2

把上式代入 E g E_g Eg并对 P 1 P_1 P1 P 2 P_2 P2求微分,可得到下式:

在这里插入图片描述

根据这些方程就可以通过前向和反向传播来最小化损失函数。

但这个损失函数不考虑中间路径,例如上图中红点线表示每个像素穿过正确的视差路径,橙色线在 x 2 x_2 x2前后与正确路径不同,这会导致 x 3 x_3 x3 x 2 x_2 x2处的惩罚项出现错误。

Neighbor cost

为了移除视差路径上视差值的模棱两可,引入Neighbor cost。基本思想是在连续像素处穿过正确视差的路径的cost一定是所有路径中最小的。

在这里插入图片描述

Border边界,Slant倾斜平面,Flat光滑。红色代表正确路径,蓝绿色代表错误路径。

在上图中,意味着 F b ( ⋅ ) F_b(\cdot) Fb() F s ( ⋅ ) F_s(\cdot) Fs() F f ( ⋅ ) F_f(\cdot) Ff()小于 N ( ⋅ ) N(\cdot) N()

因此可以给出Neighbor cost如下式所示:

在这里插入图片描述

其中
在这里插入图片描述

F X F_X FX根据 x 1 , x 0 x_1,x_0 x1,x0是连续,倾斜还是平坦,分为三种情况 F b , F s , F f F_b,F_s,F_f Fb,Fs,Ff

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

Neighbor cost使用的前提是 x 1 x_1 x1处的视差值计算正确,即 L r ( x 1 , d g t x 1 ) L_r(x_1,d_{gt}^{x_1}) Lr(x1,dgtx1)必须对所有视差具有最小的累计cost。否则,不太可能正确预测像素 x0 处的视差。

优点是两个连续像素的聚合成本应该在正确的视差下最小化。 同时,由于必要条件,很难将邻居成本应用于所有像素。

Loss

在这里插入图片描述

对于neighbor cost,针对每一种方向r,随机提取了同样数目的边界 G b G_b Gb,倾斜 G s G_s Gs,平面 G f G_f Gf。这些像素都具有视差真值。

对于path cost,随机从具有真值的像素中选择训练集。

最终的训练流程如算法框图所示,是迭代训练的。

训练过程中,应该是一个patch共用SGM的八个输出,即 [ P 1 , P 2 ] × [ 4 × d i r e c t i o n s ] [P_1,P_2]\times [4\times directions] [P1,P2]×[4×directions]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值