论文地址: 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})∝v∈V∏Φ(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)
∏v∈VΦ(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})≈v∏qv(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))+u∈N(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,μvt−1,{μut−1}u∈N(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(t−1)} 的函数。这个函数可以通过神经网络来表示。
消息传递通过以下步骤实现:
聚合邻居节点信息:
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}
mE→v=u∈N(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)+mE→v)(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(qv⊤ku+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(i−z,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)模型进行推理。这一过程中,每个像素只有一个候选标签,因此推理过程更为高效。
视差残差: 通过解码节点嵌入,计算每个像素的视差残差。这些残差用于调整初步估计的视差值。
边际概率: 计算每个像素的边际概率分布,用于衡量视差估计的不确定性。
通过上述步骤得到的视差残差和边际概率,对初步视差图进行调整和细化。具体步骤如下:
- 初始化:使用初步视差估计作为细化过程的起点。
- 视差调整:根据计算得到的视差残差,逐像素调整初步视差值。
- 不确定性权重:利用边际概率分布,对视差调整过程进行加权,确保在高不确定性区域进行更谨慎的调整。
视差细化过程显著提高了视差估计的精度,尤其是在细节和边界区域。通过结合高分辨率特征图和自注意力机制,细化步骤能够有效地减少初步估计中的误差,为立体匹配任务提供了更加精确和可靠的视差图。
损失函数
提议损失(Proposal Loss)
提议损失用于优化视差提议网络(DPN),确保网络能够准确预测各像素的视差。此损失旨在最小化网络提议的视差值与真实视差值之间的误差:
L
p
r
o
p
=
∑
k
Smooth
L
1
(
z
k
∗
−
z
^
σ
^
(
k
)
)
(0)
L^{prop} = \sum_{k}\text{Smooth}_{L1}(z^*_k- \hat{z}_{\hat{\sigma}(k)})\tag{0}
Lprop=k∑SmoothL1(zk∗−z^σ^(k))(0)
- Smooth L 1 \text{Smooth}_{L1} SmoothL1 是一种平滑L1损失,它在误差较小时表现类似L2损失,在误差较大时表现类似L1损失,有助于减少离群点的影响。
- z k ∗ z^*_k zk∗ 是真实的视差值。
- z ^ σ ^ ( k ) \hat{z}_{\hat{\sigma}(k)} z^σ^(k)是网络提议的视差值。
- σ \sigma σ 表示在最佳双边匹配中选择的索引。
视差损失(Disparity Loss)
视差损失用于评估神经MRF模型在预测视差时的准确性。这种损失考虑了预测视差与真实视差之间的差异,用于优化模型的整体视差估计性能。
L
disp
=
∑
z
′
p
(
z
′
)
∣
z
′
−
z
∗
∣
(10)
L_{\text{disp}} = \sum_{z'} p(z') |z' - z^*|\tag{10}
Ldisp=z′∑p(z′)∣z′−z∗∣(10)
- z ′ z' z′ 是模型预测的视差值;
- p ( z ′ ) p(z') p(z′) 是模型预测的视差值 z ′ z' z′ 的后验概率;
-
z
∗
z^*
z∗ 是真实视差。
此损失计算每个预测视差值与真实视差值之间的差的绝对值,并根据模型对该视差值的置信度进行加权。
实验结果