【学习笔记·翻译】 Computing the Stereo Matching Cost with a Convolutional Neural Network 使用卷积神经网络计算立体匹配代价
原文链接
Jure
Z˘
Z
˘
bontar University of Ljubljana jure.zbontar@fri.uni-lj.si
Yann LeCun New York University yann@cs.nyu.edu
译者:suzhiwei
摘要
我们提供一种从校正后的图像对提取深度信息的方法。我们通过训练卷积神经网络来预测两个图像块的匹配程度,使用它来计算立体匹配代价。代价定义为基于交叉的代价聚合(cross-based cost aggregation)和半全局匹配(semiglobal matching),跟随一个左右一致性检查(consistency check)来消除在遮挡区域(occluded regions)的误差。我们的立体方法在KITTI立体数据集达到2.61%的错误率,并且是目前为止(2014年8月)在这个数据集里性能最高的方法。
1. Introduction 介绍
考虑以下问题:给定两张从放置在不同水平位置的相机获取的图片,目标是去计算左图每个像素点的视差
d
d
。视差是根据一个物体在水平位置左右图像的不同——一个目标点在左图位置会出现在右图位置
(x−d,y)
(
x
−
d
,
y
)
。知道了视差
d
d
, 我们就可以计算出他的深度(例如目标点到相机的距离)通过以下的关系:
其中 f f 是相机焦距的长度,是两个相机的光心距离。以上表述的问题是立体重建的子问题,其中目的是从一个到多个图像中提取3D形状。根据Scharstein and Szeliski [14]的分类, 一个典型的立体算法包括四个步骤:(1)匹配代价计算,(2)代价聚合,(3)优化,(4)视差精细化。根据Hirschmuller and Scharstein [5], 我们参考步骤(1)和步骤(2)作为计算匹配代价和步骤(3)和步骤(4)作为立体法。我们提议在多对图像块中训练一个卷积神经网络[9] ,其中真实视差是已知的(例如通过LIDAR获取)。网络的输出用来初始化块对之间的匹配代价。匹配代价由相似图像强度的邻近像素点之间融合而成,使用基于交叉(cross-base)的代价聚合(cost aggregation)。平滑约束(Smoothness constraints)通过半全局匹配加强,且左右一致性检查(left-right consistency check)用于在遮挡边界区域(occluded regions)检测和消除误差。本文的两个贡献是:
- 我们说明了一个卷积神经网络如何用来计算立体匹配代价。
- 我们在KITTI stereo dataset 达到了2.61%的误差率, 改进了之前最好的成绩2.83%。
2. Related work 相关工作
在介绍大立体数据集 [2, 13]之前, 相对较少的立体算法使用基准真值(ground-truth)信息来学习它们模型的参数;本节我们回顾了那些做法。关于立体算法的总体概述参考[14]。
Kong 和 Tao [6] 使用距离平方和来计算匹配代价(matching cost)初始值。他们训练了一个模型来预测三个分类的概率分布。Kong 和 Tao [7] 后来在不同窗口大小和中心之上通过计算归一化互相关(normalized cross-correlation)融合的预测值来扩展他们的工作。Peris et al. [12] 用 AD-Census [11] 和使用多类线性判别式分析(multiclass linear discriminant analysis)来学习从计算好的匹配代价到最终视差的一个映射。
基准真值(ground-truth)数据也曾用来学习图形模型的参数。Zhang 和 Seitz [22] 使用交替优化算法(alternative optimization algorithm)来估计马尔可夫随机场超参数(Markov random field hyperparameters)的优化值。Li 和Huttenlocher [10] 提供了使用非参数代价函数的条件随机场模型并使用一个结构化的支持向量机来学习模型参数。
最近的工作 [3, 15]集中在估计计算出的匹配代价的置信度。Haeusler et al. [3]使用了一个随机森林分类器来预测匹配代价的置信度并使用预测值作为在马尔科夫随机场的软约束来减少立体方法的误差。
图1。输入是一个来自左右相机的图像对。两个输入图像的不同大部分来自于物体的水平位置。注意到靠近相机的物体视差相对于远离相机的物体的视差更大。输出是如右图所示的稠密视差映射图,用暖色代表较大的视差值(和较小的深度)。
3. Computing the matching cost 计算匹配代价
一个典型的立体算法从对于所有视差
d
d
,在考虑中的每个位置点p,计算匹配代价 p
,d)
,
d
)
开始。一个简单的例子是绝对差值和( sum of absolute differences,SAD):
其中
IL(p)
I
L
(
p
)
和
IR(p)
I
R
(
p
)
是左右图像在位置点
p
p
的图像强度且
Np
N
p
是局限在以
p
p
为中兴的固定矩形窗口的位置集。我们使用黑体小写字母 (
p
p
,
q
q
, and
r
r
) 来表示实数对。附加一个小写
b
b
有以下含义:如果
p=(x,y)
p
=
(
x
,
y
)
则
pd=(xd,y)
p
d
=
(
x
d
,
y
)
.
公式(2)可以解释为结合用一个以位置
pd
p
d
为中心的右图小块匹配一个以位置
p
p
为中心的左图小块来度量代价函数。由于好坏匹配的例子可以从公开可用的数据集中获取,例如KITTI [2]和Middlebury [14],我们可以尝试通过有监督学习(supervised learning)的途径去解决匹配问题。
3.1. Creating the dataset 建立数据集
一个训练的例子包含两部分,一个来自左图和一个来自右图:
其中 PL9×9(p) P 9 × 9 L ( p ) 表示一个 9×9 9 × 9 的左图小块,中心在 p=(x,y) p = ( x , y ) 。对于每一个已知真实视差值 d d 的位置,我们提取一个负和一个正的例子。一个负的例子的获取是通过设置右图小块中心 q q 到
其中
oneg
o
n
e
g
是一个影响匹配的偏移量,从集合
{Nhi,...,Nlo,Nlo,...,Nhi}
{
N
h
i
,
.
.
.
,
N
l
o
,
N
l
o
,
.
.
.
,
N
h
i
}
中随机选取。类似地,一个正的例子的是通过设置
其中 opos o p o s 是从集合 {−Phi,...,Phi} { − P h i , . . . , P h i } 中随机选择的。包含 opos o p o s 而不是把它设置为零的原因与随后使用的立体方法有关。特别地,我们发现,当网络把低匹配代价指派给好匹配,基于交叉的代价聚合(cross-based cost aggregation)表现地更好,和相邻匹配一样。 Nlo N l o , Nhi N h i , Phi P h i ,和图像块的大小 n n 是这方法的超参数。
3.2. Network architecture 网络结构
我们所使用的网络架构由图 2 所描绘。该网络包含八层, 到
L8
L
8
。 第一层是卷积的,同时所有其他层是完全连接的。 网络的输入是两个
9×9
9
×
9
的灰度图像块。第一个卷积层包含了32个大小为
5×5×1
5
×
5
×
1
的核心。层
L2
L
2
和
L3
L
3
每个是通过200个神经元完全连接的。在
L3
L
3
之后两个200维的向量连接到一个400维的向量且传递到
L4
L
4
到
L7
L
7
这四个完全连接的层,每层用了300个神经元。最后一层
L8
L
8
将输出投射到两个实数,这些实数通过softmax函数馈送,在两个类上产生一个分布(好匹配和坏匹配)。绑定了用于左右图像块的网络在
L1
L
1
、
L2
L
2
和
L3
L
3
的权重。除L8外,校正过的线性单元跟随每一层。我们没有在架构中使用池化( pooling)。网络包含接近600千个参数。该架构适用于灰度图像,但可以容易地通过在
L1
L
1
学习
5×5×3
5
×
5
×
3
而不是
5×5×1
5
×
5
×
1
滤波器而扩展到处理RGB图像。网络最优超参数(hyperparameters )(例如层数,每层的神经元数,输入块(patches)的大小)从一个数据集到另一个数据集将有所不同。我们选择这种架构因为他在KITTI stereo dataset中表现地很好。
图 2. 我们的卷积神经网络的架构。
3.3. Matching cost 匹配代价
匹配代价
CCNN(p,d)
C
C
N
N
(
p
,
d
)
是从输出网络中直接计算出来的:
其中 fneg(<PL,PR>) f n e g ( < P L , P R > ) 是当运行在输入块 PL P L 和 PR P R 对于负类的网络的输出。
自然地,我们必须对每个图像位置p和在考虑中的每个视差进行向前传递。以下三个实现细节来确保运行时的可管理性:
1. 层 L1 L 1 、 L2 L 2 和 L3 L 3 的输出只需要计算每一个位置 p p 一次,并且不需要重新计算每个视差 d d 。
2. L3 L 3 的输出可以通过馈送网络全分辨率图像而不是 9×9 9 × 9 图像块来计算单个前向通道中的所有位置。为了实现这一点,我们卷积地应用层 L2 L 2 和 L3 L 3 ——层 L2 L 2 使用滤波器的大小为 5×5×32 5 × 5 × 32 和层L3使用滤波器的大小为 1×1×200 1 × 1 × 200 ,都输出200个特征图。
3. 类似地, L4 L 4 到 L8 L 8 可以用大小为 1×1 1 × 1 的卷积滤波器来代替,以计算在单个前向传递中的所有位置的输出。不幸的是,我们仍然需要对每个视差进行前向传递。
4. Stereo method 立体方法
为了有意义地评估匹配代价,我们需要将它与立体方法对比。我们使用的立体方法受到Mei et al. [11]的启发.
4.1. Crossbased cost aggregation 基于交叉的代价聚合
可以通过在固定窗口上平均匹配代价来融合邻近像素的信息。这种方法在深度不连续的情况下失败,其中违反了窗口内深度不变的假设。我们可能倾向于一种自适应地选择每个像素的邻域的方法,以便仅从具有相似差异的像素中收集支持。在基于交叉的代价聚合( cross-based cost aggregation)[21]中,我们围绕每个位置建立一个局部邻域,形成具有相似图像强度值的像素。
基于交叉的代价聚合从在每个位置构建垂直的十字架开始。位置
p
p
的左支
pl
p
l
在以下两个条件下保持左延伸:
- |I(p)−I(pl)|<τ | I ( p ) − I ( p l ) | < τ . 在位置 p p 和 pl p l 的图像强度的绝对差值小于 τ τ .
- ||p−pl||<η | | p − p l | | < η . 在 p p 和 pl p l 之间的水平距离 (或者垂直距离, 在顶和底支的情况下) 小于 η η .
类似地构造右(right),低(bottom),顶(top)支(arm)。一旦四个支(arms)已知,我们可以定义支持区域(support region) 其中所有位置
q
q
的水平支(horizontal arms)的联合(union)躺在
p
p
的垂直支(vertical arm)(看图3)。 Zhang et al. [21]建议聚合(aggregation)应当考虑在一个立体对的两图像的支持区域(the support regions)。令
UL
U
L
和
UR
U
R
表示左右图像的支持区域( the support regions )。我们定义融合的支持区域(support regions)
Ud
U
d
为
匹配代价是在融合的支持区域的平均:
其中 i i 是迭代数字。我们重复该平均过程四次;基于交叉代价聚合是.