陶 洋,欧双江,唐 函,周婉怡
(重庆邮电大学 通信与信息工程学院,重庆 400065)
立体匹配,又称为视差估计,指的是在极线校正后的立体图像对中建立像素之间的紧密对应关系,从而得到视差,随后还可根据相机系统的焦距和基线等参数转换为深度.作为一种被动深度估计技术,它在许多计算机视觉应用领域中都扮演着重要的角色,如自动驾驶[1]、增强现实、目标检测[2]和3D模型重建[3]等.
作为经典的视觉任务,立体匹配被研究多年,在传统方法中诞生了很多较为经典的算法,如半全局匹配算法SGM[4]、AD-Census[5]、非局部代价聚合[6]等.一般来说,传统的立体匹配算法由4个步骤组成:匹配代价计算、代价聚合、视差计算和视差优化[7].通常,传统的立体方法侧重于利用输入图像的一些先验知识来提高匹配精度[5,8],但是其性能还是受到手工构建的匹配代价描述和后处理的限制.
随着卷积神经网络的不断发展,立体匹配也被视为一项学习任务,基于深度学习的立体匹配在这一领域得到了学者们的广泛研究,产生了许多高质量的模型[9-13]和规范化的数据集[14,15].基于学习的立体匹配主流方法通常也包含4个步骤:像素2D特征提取、匹配成本体构建、3D成本量聚合和视差回归[10,13].Zbontar和Lecun首次尝试将卷积神经网络引入立体匹配来计算匹配代价,结果表明,卷积神经网络可以从图像中学习更稳健的特征,并产生可靠的匹配代价[16],在这项工作之后,许多研究人员通过改变成本体构建、代价聚合等方法来提高匹配精度[9,10,13].
尽管基于卷积神经网络的立体匹配算法已经在多个基准上占据主导地位,但是传统卷积更倾向于提取外观信息,对于立体匹配这种存在图形变换,并且可能存在左右图像光亮不一致的场景任务来说效果欠佳,卷积核所提取的结构信息较少.由于图像变换,物体的外观可能发生改变从而引入误差,但其相应的结构特征改变较少[17],传统算法也早已注意到这一现象并加以应用,如AD-Census[5]中结合外观信息和结构信息提升匹配精度.以往的工作也已经证明整合传统的先验知识有助于模型的性能提升[18].由此启发,本文提出了一种将图像的结构信息和强度信息结合的特征提取模块,将中心差分卷积[19]融入特征提取主干形成差分卷积残差组(CDC-ResBlock-Groups)以充分提取像素级的中心梯度信息(见图1),与常规卷积相比,可以获取更为丰富的结构语义,增强特征的表达能力.
图1 融入差分卷积残差组的特征提取网络Fig.1 Feature extraction network incorporating differential convolutional residual sets
此外,本文还观察到现有的深度学习方法[10,13]存在一定的局限性,良好的立体匹配网络需要在捕获局部信息的同时还能充分的理解全局上下文.如GC-Net[9]、PSMNet[10]及GwcNet[13]中使用3D CNN进行成本量聚合,通过堆叠类UNet[20]结构扩大卷积感受野.然而随着卷积层的加深,来自底层或较远像素的影响会迅速衰减,缺乏对场景上下文足够的理解,导致模型在物体边缘处丢失大量细节,在遮挡、重复纹理等需要全局理解的病态区域中表现很差.因此,本文针对上述问题提出全局代价聚合的沙漏网络(Trans-Hrouglass),首次将Transformer[21]引入代价聚合并与3D Hrouglass融合,将成本代价体通过3D CNN,在提取局部信息的同时并进行下采样,使得输出结果能够有效捕获局部3D上下文信息,然后送入Transformer[21]进行全局特征建模以利用更多的全局上下文信息来进行代价聚合,在重复纹理、物体边缘部分取得了更好的效果.
本文提出的融合梯度特征和全局聚合的立体匹配网络GFGANet(Combines Gradient Features and Global Aggregation Stereo Matching Network)的具体实现,扩展了PSMNet[10],增加了可以提取结构信息的差分残差组和改进的具有全局建模能力的3D沙漏网络.具体的模型框架如图2所示,具体来说,包含5个部分:特征提取,代价体构建,代价聚合,视差回归和细化.首先,原始的RGB参考图像和目标图像输入到特征提取网络,提取到的特征用于构建4D代价体.然后,通过3D沙漏网络对代价体进行聚合及正则化.最后,通过视差预测模块输出预测的视差图.要说明的是构建代价体上,本文使用差分替换了原PSMNet[10]拼接建立的方式,以此增加匹配像素点之间的相似信息,而不用引入过多复杂的计算.
图2 GFGANet模型框架图Fig.2 GFGANet Model framework diagram
以往的立体匹配方法在特征提取部分往往只针对于如何更好的提取原始图像的外在强度信息,忽视了对图像结构信息的表征提取,本文在融合匹配代价算法的启发下[5],将图像的强度信息和梯度信息相融合.具体而言,GFGANet的特征提取部分采用了如其他立体匹配网络中常使用的类ResNet网络主干,但为了更好的引入梯度信息,在特征提取网络的前段嵌入了差分卷积残差组,实现了像素的中心梯度信息和强度信息的混合编码,而为了提取丰富的多尺度信息编码更多的上下文信息,本文参考RFBNet[22],在特征提取后段将RFB Module引入其中.
1.1.1 差分卷积残差组
本文将中心差分卷积(CDC-Conv)[19]纳入特征提取网络中的残差组,实现了像素中心梯度感知特征提取,可以利用空间显著信息增强像素的局部结构特征表示.这一特性和传统方法中的Census特征提取类似,针对传统的立体匹配算法而言,多维度的特征表示以可以有效的增强立体匹配算法性能在业界收到一致认可.
特征提取部分的结构如图2所示,具体而言,前3层均采用3×3的CDC-Conv[19],设置其卷积步长分别为2,1,1从而对原始图像进行下采样,然后跟随4个步长分别为1,2,1,1的嵌入CDC-Conv残差组(CDC-ResBlock-Groups),进一步提取原始图像信息并进行下采样,最后生成尺寸为原始输入图像1/4大小的特征图,GFGANet在每个残差组的初始阶段使用差分卷积,随后使用残差主干生成具有大范围和高密集采样的特征,从而增强特征提取能力.
以3×3的CDC-Conv为例,其详细运算过程如图3所示.具体而言,分为两个阶段,在第1阶段中3×3卷积区域的每个像素单独与中心像素做差分计算获得面向中心像素的梯度信息,而第2个阶段则将原有的区域像素信息与一阶段的梯度信息相加,并用可学习的卷积权重进行聚合获得整体输出.作为一种可学习的测度方式,其反映了像素点的空间局部显著性先验信息,数学表达如公式(1)所示:
图3 中心差分卷积及其运算过程Fig.3 Central differential convolution and its operation process
(1)
其中,p0=(0,0)表示卷积的中心;y(p0)为其对应位置像素的卷积输出;R是以p0对应像素为中心的3×3的像素区域;Pn则表示在R中的偏移位置;x(p0),x(p0+pn)表示对应位置像素的强度信息;w(p0+pn)为卷积核中对应位置的可学习权重;θ∈[0,1]为平衡梯度信息和强度信息的超参数,当为0时差分卷积退化为普通卷积,在本文算法中,θ被设置为0.7[19].
1.1.2 多尺度特征提取模块
为了进一步获得较大的接受域以便提取更加丰富的特征信息,PSMNet[10]中使用SPP来进行多层特征融合,并通过下采样的方式来扩大感受野,但是上下采样过程中会带来一定的性能损失.因此,本文将学习到的局部信息特征通过RFB模块[22]来进行聚合,如图2使用4分支的轻量级RBF模块,每一个分支由一个1×1的卷积,S×S 的等宽卷积和3×3的空洞卷积组成,进行局部信息扩展,最后将所有的分支进行拼接,不同与SPP等的是,通过RFB模块的每个分支输出的特征图尺寸和输入的相同,从而避免了上下采样的信息损失,有效聚合了像素的局部周边特征信息.
现有的高性能方法大多使用3D卷积来处理代价聚合阶段的任务,而3D卷积可以视为对传统SGM[4]算法中代价聚合阶段的模拟构造,虽然可以有效地聚集局部上下文,但受限于接受域的有效范围,其缺乏捕获全局依赖的能力,然而局部特征和全局特征对密集预测任务而言都是至关重要的,因此,本文在立体匹配的代价聚合中融合Transformer[21],这一聚合全局上下文信息的架构,提出Trans-Hourglass模块,将Transformer应用于立体匹配的代价聚合.
Trans-Hourglass的构造如图4所示,使用基本的Transformer[21]构建,但由于其计算复杂度是Token数量的二次型,因此将输入的4D代价体直接序列化后作为Transformer的输入是不切实际的,而如果采用类似VIT直接将4D数据分割成一个一个3D块,这种策略将阻碍Transformer跨空间、深度维度对代价体的相邻区域建模.因此,结合卷积可以局部聚合而消除部分冗余信息和Transformer可以全局信息建模的特点,在浅层,局部信息较为丰富,Trans-Hourglass则先在一个小的3D邻域中聚合上下文,编码局部关系,滤除冗余信息,而在深层再进行长距离依赖关系的建模.具体而言,先使用多个3×3×3的三维卷积对4D代价体进行下采样,逐步将原始代价体编码为 256×D/32×H/32×W/32的4D代价体,得以使得在输入Transformer前代价体中已经有效的嵌入丰富的局部3D上下文信息,并且大大节省比较Token的计算量,然后再将处理过的代价体输入到Transformer中,进一步学习具有全局上下文的长程关系.最后再反复应用卷积层进行上采样,产生高分辨率的代价聚合结果.
图4 Trans-Hourglass模块结构图Fig.4 Trans-Hourglass module structure diagram
Trans-Hourglass的编码器由多个Transformer[21]层组成,每一层都有一个标准的架构,如图4,该架构主要由3个部分组成:位置嵌入编码(PE),Multi-Head Attention(MHA)和前馈网络(FFN).其数学表达式如公式(2)所示:
(2)
其中,Xin∈Rd×N,N=D×H×W表示输入的Token序列;Norm(·)表示层归一化,而FFN则由两个线性层组成,每个线性层后使用GELU作为激活函数.
1.2.1 可学习的动态位置编码
Trans-Hourglass首先使用3D卷积对4D代价体进行局部编码与下采样,处理后的结果作为Transformer[21]层的输入,进行全局依赖信息的提取.但Transformer需要将空间维度和深度维度折叠成一维,为了对位置信息编码,以往的显式编码方法通常使用绝对或者相对位置嵌入解决这一问题,如此一来必须显式的指定Token序列的长度,受CPVT[23]中条件位置编码的启发,本文扩展其三维形式,使用一个三维卷积来隐式地编码位置信息并嵌入到输入的Token序列中,如公式(3)所示:
PE(Xin)=3DWConv(Xin)
(3)
其中,Xin∈Rd×N是输入的Token序列;3DWConv是一个可学习的3×3×3深度3D卷积.在CPVT[23]中已有表明,由于卷积的参数共享和局部性,DWPE可以克服置换不变性,对任意输入都较为友好,避免了显式位置编码需要指定Token序列长度的问题.
1.2.2 Transformer层和编解码
Trans-Hourglass将4D代价体展开为通道为256维的Token序列,通过位置编码后,再送入MHA进行全局区域相关性建模,最后通过一个FFN,将整体特征还原到输入Transformer层前的维度.
MHA子层由Head_Nums个并行的Self-Attention(SA)模块组成,具体来说,SA模块可以看成是一个参数化学习的函数,它学习Token序列X中查询q与对应的键k和值v表示之间的映射,通过将X中的两个元素做查询q和键k内积以计算相似性,然后对内积结果做SoftMax得到注意力权重,其数学描述如公式(4)所示:
(4)
其中,X∈Rd×N是Transformer中对MHA的输入;head_nums为MHA划分的子空间个数,本文算法中设置为8;Wq,Wk,Wv∈Rd×dh是MHA需要学习而将X进行线性变化得到q、k、v的权重矩阵,dh=d/head_nums;Wlinear∈Rd×d是MHA需要学习的多头可训练权重.
在解码器部分,本文采用同编码器一样的设计,使用三级3D卷积上采样逐步恢复特征图的尺寸,同时在同级编解码块之间使用了1×1卷积的跳跃连接,以此来补充底层信息,获得更加丰富的空间细节.
本文算法采用经典立体匹配模型中的做法,使用Soft-Argmin[9]来获取连续视差图,作为传统立体匹配算法中WTA[7]算法的可微实现,它可以利用反向传播进行训练,具体而言,首先使用SoftMax运算将匹配代价体中每个像素点的视差值Cd转换为该像素点在该视差的概率,然后使用概率加权每个视差的总和得到最后该点的亚像素视差.
现有的立体匹配网络模型中,一般设置视差的候选空间为192,在GFGANet中也是如此.但针对于具体的一个像素点的视差来说,其实际视差只接近192级视差中的一个,为了减轻类别不平衡而对亚像素视差回归造成的影响,本文算法对正确类别进行加窗限制,具体而言,定义一个加窗半径r,对于每个像素点,以其最后预测出的192个视差概率中最大值所在视差index为中心,以r为半径的窗口中的概率为其最终的概率值分布,用于最后该点的亚像素值预测,如公式(5)所示:
(5)
为了进一步提升初始视差图的细节,比如消除大感受野带来的边界平滑模糊,以及遮挡区域的视差值缺失等问题,本文使用了StereoDRNet[24]提出的视差后处理细化模块,将初始化视差结果经过其后,得到模型最终预测的视差图.
GFGANet以真实的视差图作为监督信息,并且执行端到端训练.为了更好的监督训练过程,本文对中间过程采用多级监督的策略,使用平滑L1损失(LSM)和交叉熵损失(LCE)分别监督最终的视差结果和视差概率分布,如公式(6)所示:
(6)
(7)
其中,x表示预测视差值和真实值的差值;Pi(d)是以真实视差构建的视差概率分布,为以视差地面Di为中心的归一化高斯分布,如公式(8)所示:
(8)
其中,Vard表示方差,用来控制概率分布的离散程度,本文设置为2.结合两个部分的损失计算,整体损失函数如公式(9)所示:
(9)
其中,对于GFGANet来说,整个损失函数监督代价聚合阶段进入Trans-hourglass前、Trans-hourglass后及视差细化模块后共3个部分的输出结果;λi是对应的输出权重,在本文实验中取0.5,0.7,1[10].
本文在公开数据集SceneFlow[15]以及KITTI 2012、KITTI 2015[14]上对所提出的立体匹配算法进行训练和评估.首先展示了本文关于网络设置和训练方法的实现细节,然后在SceneFlow上进行了消融实验,比较了GFGANet中不同组件对整体性能的贡献,最后将其与KITTI 2012和KITTI 2015数据集上的其他前沿算法的性能进行了对比.
2.1.1 数据集
1)SceneFlow[15]:SceneFlow是一个合成数据集,其包含35454个训练图片对和4370个测试图片对,分辨率为960×540,并且都拥有密集的真实视差标签.本文使用其作为GFGANet的预训练数据集.
2)KITTI[14]:KITTI分为KITTI 2012和KITTI 2015两个版本,是一个车载双目拍摄的真实街景数据集,并通过Lidar获取对应真实的稀疏视差标签.其中KITTI 2012包含194个训练图片对和195个测试图片对,分辨率为1226×370,KITTI 2015是对KITTI 2012的扩充,包含200对训练图像和200对测试图像,分辨率为1242×375,这两个版本都仅提供训练集对应的真实视差标签.对于KITTI数据集,在KITTI 2012上,本文随机选取训练集中的160个图像对进行训练,剩余的34个图像对用于测试,同样在KITTI 2015的训练集上,随机选择160对用于训练,剩余40对用于测试.
2.1.2 实验细节
本文采用PyTorch进行整体算法实现,使用Adam(β1=0.9,β2=0.999)优化器,在3块RTX2080Ti上进行了模型训练,批量大小设置为6,每块GPU上放置2个训练样本.在训练过程中,GFGANet首先在SceneFlow[15]上进行了16个epoch的预训练,初始学习率设置为0.001,在第10个epoch之后,下降为0.0001,最大视差值设置为192,并且为了有效评估GFGANet,本文删除了测试集中所有有效像素少于10%的图像,对于每个有效图像,也仅使用有效像素进行指标评估.而在KITTI 2015和KITTI 2012数据集上,本文分别对在SceneFlow上完成预训练的模型进行300个epoch的微调,初始学习率为0.001,200个epoch后调整为0.0001.
评估指标上,对于SceneFlow[15],本文使用惯例的端点误差(EPE)和异常值百分比(D1)分数来作为评价标准,其中端点误差是指以像素为单位的全图平均误差,而异常值定义为视差误差大于max(3px,0.05×Di)的像素,Di表示具体i点的真实视差.在KITTI[14]中,主要报告KITTI官网测试给出的评价指标,对于KITTI 2012,主要是非遮挡区域(Noc)和所有像素(All)的误匹配率,而对于KITTI 2015,则主要是针对于背景(bg)、前景区域(fg)和所有像素(all)的D1分数进行评估.
2.2.1 SceneFlow数据集
GFGANet扩展了PSMNet[10],在它的基础上,增加了提取结构信息的差分残差组(CDC-ResBlock-Group),使用无损的多尺度提取模块(RBF Module)避免了上下采样的性能损失,用差分的方式(Dif)构建代价体,使用改进具有全局建模能力的3D沙漏网络(Trans-hourglass),以及在视差回归部分进行加窗设计(WR),最后还使用了StereoDRNet[24]的后处理模块(RF).为了更好的评估GFGANet各个组件的有效性,本文首先使用不同设置进行实验,并在SceneFlow上进行对应的性能评估,以展现不同组件对于GFGANet的性能影响,对比实验结果如表1所示.
表1 SceneFlow[15]消融实验分析Table 1 SceneFlow[15] ablation experiment analysis
由表1可知:引入RFB模块与之前融合SPP的网络相比EPE有所下降;而引入加窗视差回归(WR)相比于没有引入的模型,D1-all下降到2.473%,精度提升了25.6%,同时EPE降低了0.045px,表明对视差回归进行加窗可以有效的减轻类别不平衡对亚像素视差回归精度造成的影响,降低了视差异常率;而差分残差组(CDC-ResBlock-Group)加入后,模型端点误差EPE下降到0.818px,D1-all分数下降到2.376%,表明引入空间局部显著性先验信息对模型整体具有较大的收益,可以显著提升模型的精度;而引入全局代价聚合(Trans-Hourglass)后,EPE进一步降低到0.772px,同时D1-al1下降到了2.154%,可以看到全局代价聚合的引入带来了巨大收益,在使用差分构建代价体,并且加入StereoDRNet的视差细化模块后,模型虽在D1-all上有一定的性能损失,但是EPE下降到了0.671px,而在实验7、8、9中,本文测试了不同Layer_Nums的Trans-Houglass对于算法的影响,可以看到当Layer_Nums为2的时候算法性能最优.
对于加窗视差回归的半径设置,本文在SceneFlow数据集上进行了实验,并在表2中展示了不同半径r对算法性能的影响.随着半径r扩大,视差回归范围增加,类别不平衡的情况加剧,算法性能降低.而当设置半径较小为3时,回归的亚像素视差精度又会受到影响,结果表明r取5的时候最为合适,算法达到了最优性能.
表2 在SceneFlow[15]中对不同半径r的消融分析Table 2 Ablation analysis in SceneFlow[15] for different radii r
同时本文将GFGANet分别与已有的一些性能方法在SceneFlow数据集上的误差结果(EPE)进行了对比,如表3所示,大部分结果摘抄自原文,除此之外,在图5给出了本文算法与PSMNet[10]、GwcNet[13]等性能算法在SceneFlow数据集上的可视化结果对比.
表3 与其他算法在SceneFlow[15]上的端点误差(EPE)对比Table 3 Endpoint Error(EPE)comparison with other algorithms on SceneFlow[15]
图5 在SceneFlow[15]上与PSMNet[10]、GwcNet[13]的可视化对比Fig.5 Visualization comparison with PSMNet[10] and GwcNet[13] on SceneFlow[15]
可以看到,得益于Trans-Hourglass的全局聚合能力,GFGANet对于场景的细薄结构部分表现非常优秀,在图5(1)中GFGANet预测的视差图中盆栽的枝叶结构清晰可见,而且可以看到GFGANet对于重复纹理区域也表现出强大的性能,在图5(2)GFGANet在架子的重复部分也能做到很好的细节展现,而在图5(3)在摩托车的后视镜与其余位置接连处,本文算法也取得了比其他两种主流算法更好的结果.
2.2.2 KITTI数据集
本文给出了KITTI 2012和KITTI 2015测试集上传到KITTI官网后的结果,在KITTI 2015数据集上的测试结果及排序如表4所示,其中“All”表示视差图所有区域的像素,而“Noc”表示只考虑测试图像的非遮挡区域,同时本文也在图6给出了在KITTI 2015上GFGANet与PSMNet[10]、GwcNet[13]预测结果的可视化对比.
表4 KITTI 2015数据集实验结果Table 4 Experimental results of KITTI 2015 dataset
图6 在KITTI 2015上与PSMNet[10]、GwcNet[13]的可视化结果和误差图对比Fig.6 Comparison of visualization results and error plots with PSMNet[10] and GwcNet[13] at KITTI 2015
由表4可知,相比于基准算法PSMNet[10]来说,GFGANet有明显的提升,整体像素(All)部分的D1-all分数从2.32%下降到2.04%,而非遮挡区域(Noc)则从2.14%下降到1.86%.值得关注的是,GFGANet在All和Noc的D1-fg(前景区域)上相比PSMNet[10]算法提升巨大,本文分析这是因为全局代价聚合能有效聚合全局上下文信息为前景区域提供支撑.
同时,由图6所示,本文展示了KITTI 2015测试集上“Test Image 3”和“Test Image 4”这两张图片与PSMNet、GwcNet对比的可视化结果,从上到下,分别是每个网络对应的视差图和error图.对于“Test Image 3”,由于角度关系,其左图中存在迎面汽车挡风玻璃造成的反光,而对应的右图没有相应的反光存在,该区域在左右两图中存在光线不一致的情况,属于病态区域,从结果中可以看到,在PSMNet[10]、GwcNet[13]中该区域均出现预测出错的情况,而由于本文在特征提取阶段引入了差分卷积残差组,显式提取结构信息,对强度信息进行相应补充,增大了匹配特征的抗干扰能力,使得GFGANet得以在该区域获得更加准确的描述信息,从而在该区域的结果得到了改善;对于“Test Image 4”,可以看到对于围栏处这种重复区域,GFGANet取得了比PSMNet[10]、GwcNet[13]都要好的结果,也说明了全局代价聚合针对于这种重复区域的有效性.
对于KITTI 2012,在表5中给出了其测试集提交结果中的“2-px”、“3-px”相应指标和排序情况,其中“Noc”表示非遮挡区域的像素,“All”表示图像的全部像素,可以看到相对于基准算法PSMNet[10],GFGANet在各方面指标上的获得了巨大提升,尤其在“2-px”下“Noc”区域误匹配率下降了17.6%,“All”区域中误匹配率下降了14.3%,展示了本文算法在于细节部分的强有力的性能提升.
表5 KITTI 2012数据集实验结果Table 5 Experimental results of KITTI 2012 dataset
本文研究了当前基于深度学习的立体匹配算法的一些局限性,提出了一种融合梯度信息,并能建模全局上下文的立体匹配方法.在特征提取部分,差分卷积残差组(CDC-ResBlock-Groups)融合强度和梯度信息,增强了匹配特征表达能力;在代价聚合阶段,Trans-Hourglass显著增强了场景理解的能力,以提高在具有挑战性的区域中的准确性,在视差回归阶段,使用加窗操作,改善了回归标签不平衡的情况.本文在SceneFlow和KITTI数据集上分别进行实验,与基准算法和部分基于学习的性能算法相比,本文算法在光亮不一致的区域具有更好的抗干扰能力,对细小物体和薄结构的边缘保留较好,在重复纹理和弱纹理区域等病态区域的视差预测有较大的性能提升,并在KITTI 2012和KITTI 2015数据集的误匹配率可以达到1.31%和2.04%,对立体匹配算法在特征提取和病态区域进行性能提升都有很大的研究价值.当然本文使用固定的加窗半径忽略了不同纹理区域的自适应问题,下一步的工作将探索多模态和自适应加窗视差回归增强立体匹配算法域泛化的研究.