边缘引导特征融合和代价聚合的立体匹配算法
2022-11-16张浩东宋嘉菲张广慧
张浩东,宋嘉菲,张广慧
1.中国科学院 上海微系统与信息技术研究所 仿生视觉系统实验室,上海 200050
2.中国科学院大学,北京 100049
3.上海科技大学,上海 201210
高精度的深度估计是许多计算机视觉相关应用,如自动驾驶、三维立体建模、机器人导航等的关键。通过对双目立体相机拍摄得到的两个图像进行立体匹配,计算参考图像(Reference image)的稠密视差图,是获取深度的重要途径之一。传统立体匹配方法主要包含4 个步骤:计算两幅图像的像素级相似度作为匹配代价、对生成的代价体进行聚合以整合邻域匹配代价、根据聚合后的代价体估计每个像素的视差、对输出的视差图进行优化,但人工设计的像素相似度计算方法及聚合等方法效果较差,使得视差估计的精度无法令人满意。
近年来,随着深度学习的飞速发展,越来越多的人采用卷积神经网络(convolutional neural network,CNN)对立体匹配、边缘感知任务进行建模[1-3],LeCun等[4]尝试利用CNN 为传统的立体匹配方法学习更好的匹配代价,设计了一个权值共享的特征提取网络,后利用全连接层进行像素级相似性度量生成匹配代价。与传统方法中的特征描述(如Census[5])相比,这一方法提高了特征描述子的稳健性,在精度上取得了一定的进步,但由于整体结构属于利用CNN进行匹配代价计算和传统方法的后续流程拼接,所需的计算量依旧较大。为了对立体匹配框架的各个部分进行联合优化,Mayer 等[6]设计了DispNetC,将立体匹配通过端到端的有监督深度学习方式实现,借鉴FlowNet[7]中提出的相关性(correlation)方法计算像素级相似度并生成匹配代价,采用编码-解码(encoder-decoder)的结构回归视差。同时还制作了合成数据集(SceneFlow),解决了真实场景数据集过少的问题。
Chang等[8]借鉴SPPNet[9]、ResNet[10]、PSPNet[11]的思想设计了空间金字塔池化(spatial pyramid pooling,SPP)特征提取结构,通过融合多个感受野的特征合并全局背景信息到提取的特征中,并引入了堆叠沙漏结构的三维卷积拓展代价体中局部信息的聚合区域。但对多感受野的简单级联使得匹配代价对不同感受野的注意力相同,未能根据特定位置采用不同感受野的特征;且在代价聚合过程中未对匹配代价进行筛选,使得一些困难位置的错误匹配代价向周边邻域传播,降低了模型的收敛速度以及整体预测的精度。
Song 等[12]、Yang 等[13]分别结合边缘、语义信息设计多任务网络,将边缘、语义特征嵌入常规特征中生成混合特征用于代价体编码,从而进一步提高视差精度。此外,EdgeStereo[12]还设计了边缘抑制的视差平滑损失用于改善输出视差图的局部平滑性。但边缘、语义信息的引入提高了对数据集的要求,对子网络的训练提高了立体匹配任务对数据的额外标签的依赖性。
针对上述现有问题,根据数据集的视差真值生成视差边缘(不需要额外的人工标注)以作为边缘提取模块的监督信号,并提出了一种边缘引导的立体匹配算法,主要贡献点如下:(1)设计了边缘引导特征体加权模块,对体现纹理信息的浅层特征边缘区域与描述语义信息的深层特征非边缘区域予以更大的权重。(2)设计了边缘抑制的代价聚合模块,减少不可靠信息的传播,以提高整体预测精度。(3)本文的方法在SceneFlow 数据集上将PSMNet[8](pyramid stereo matching network)的误差降低了35.2%,将GwcNet[14](group-wise correlation stereo network)的误差降低了14.3%。
1 算法设计
本文整体网络结构如图1,包括边缘提取(edge extraction)、特征提取(feature extraction)、构建代价体(cost volume construction)、代价聚合(cost aggregation)及视差估计(disparity prediction)五部分。
边缘和特征提取将分别在1.1节、1.2节介绍。由于无法简单构建左右特征体之间的联系,立体匹配网络构建代价体常采用级联特征体的方式:对右图特征体基于所有待定视差值在水平方向进行平移,将平移后的右图特征体与左图特征体在特征通道维度进行级联,最后将所有级联的特征体在待定视差维度级联以生成代价体。代价聚合将在1.3 节介绍。对于视差估计,本文采用GC-Net[15]中提出的soft argmin方法,即
式中,d~ 为预测视差值,d为待选视差值,Dmax为最大待选视差值,σ为softmax 函数,cd为聚合后的匹配代价。网络损失函数的设计将在1.4节介绍。
1.1 边缘提取模块
本文借鉴HED[16](holistically-nested edge dectection)的思想及PSMNet[8]中的SPP 特征提取层设计了视差边缘提取子模块。该模块的输入是单幅图像,输出为边缘图(edge map),采用基于视差真值求解的边缘图作为监督信号。虽然与EdgeStereo[12]中使用的图像的常规边缘具有相似的提取思路,但不需要数据集提供常规边缘真值,更便于只有视差真值的数据集,相较于多任务网络更有利于训练,同时使用的视差边缘更适配立体匹配网络。
视差边缘提取子模块结构如图2,先对输入图像进行常规卷积,调整步长使得特征尺寸降为原图的1/4,后对该特征体分别进行多个尺度的池化以丰富感受野,将各个池化后的特征体进行卷积局部整合后上采样到初始特征体尺寸进行级联,使得混合后的特征体具有不同尺度的特征,最后将混合的特征体卷积得到单通道的边缘特征,经过Sigmoid回归为视差边缘图,将其记作E,后续将用于1.3节和1.4节。
对于边缘真值的获取,与现有多任务立体匹配网络[12-13]不同,本方法并不需要数据集具有边缘标签。为了更适配于立体匹配网络,本方法将所用的边缘定义为视差真值变化较大的区域(多分布于前景区域),可由视差真值梯度求解生成。
1.2 边缘引导特征体加权模块
重复纹理和无纹理区域是立体匹配任务中较难处理的部分,由于常规的特征提取器对该区域和其他特征明显且不重复区域在训练阶段的单位像素关注度相同,使得最终训练得到的模型会因两种区域在图像中的占比而决定特征提取器对其中之一的偏向程度,无论最终对其中哪一种区域的整体关注度高都不利于提出更好的整体预测效果,因而提出了对以上不同区域灵活选用不同提取器的方法。
仅考虑本部分关注的难点区域:重复纹理区域和无纹理区域,小尺度的特征提取器感受野较小,无法描绘出错误匹配点与参考图像中的目标点的差别,因而考虑扩张图像的感受野生成大尺度的特征提取器,将较难处理部分的周边区域引入特征提取器,进而使得错误匹配点与目标点具有差异更大的特征表述。
针对本文基准方法中空间金字塔池化模块(SPP)在级联多尺度特征时,忽略了不同位置应侧重不同尺度特征的问题,提出了边缘引导的空间金字塔池化(EGSPP,edge-guided-SPP)模块。由1.1 节得到边缘图E为Sigmoid输出,其值介于0~1之间,且多集中于0和1附近。本文将预测值在0 附近的像素点定义为非边缘像素点(non-edge pixels),预测值在1 附近的像素点定义为边缘像素点(edge pixels)。如图3 所示,以单像素为例,特征由进入空间金字塔之前的浅层特征和经过空间多尺度池化卷积增大感受野后的深层大感受野特征级联得到。针对不同位置侧重不同尺度的特征体,对于视差边缘处增强浅层特征,使得混合特征更注重图像的低级纹理信息,同时保留弱化后的高级语义特征;对于非视差边缘处增强深层大感受野特征,使得混合特征更注重图像的高级语义信息,同时保留弱化后的低层纹理特征,即:
式中,Fhybrid为混合特征,Fshallow为低级纹理特征(浅层特征),Fdeep为高级语义特征(深层大感受野特征),E为边缘图(其值介于0~1 之间,越高表示是边缘的概率越大),⊕为特征级联。
1.3 边缘抑制代价聚合模块
鉴于上文提到代价体由特征体按待定视差值平移后并级联而成,相较于特征体增加了待定视差维度,二维卷积无法对该高维向量进行处理,常用的方法是引入三维卷积,故代价聚合主体沿用基准方法PSMNet的三维卷积结构。
遮挡问题同样是立体匹配任务较难处理的一点,由于目标图中没有真正的匹配点,对视差的估计仅能利用其周边邻域信息进行整合预测。但一般网络结构不会对这一区域进行额外处理,而是将遮挡区域与其他区域采取相同方式进行处理。鉴于遮挡区域的匹配代价置信度并不高,代价聚合阶段会将每个像素点的匹配代价向其周围邻域传递,如果仍完全沿用基准方法,会使其周边区域受到不可靠信息的影响,削弱其他区域的预测能力。
经分析,物体的遮挡区域均出现于物体边缘处,且占比较大。同时经观察发现,现阶段模型预测误差较大的区域多出现于物体的边缘处,因而可通过提高非边缘处的匹配代价的方法来抑制边缘处不可靠信息的传播,由此,提出了边缘引导代价聚合模块,增加非边缘区域的可靠信息在代价聚合时的权重,使边缘区域在聚合阶段更大程度地获取来自非边缘区域的匹配代价,从而提高整体预测精度。
如图4,本文采用堆叠沙漏(stacked hourglass)结构的三维卷积[8],并在其中加入了边缘引导(公式(3)),提出了边缘引导的堆叠沙漏(EG stacked hourglass)结构。式中,C为代价体,C^ 为边缘抑制后的代价体,E为边缘图(其值介于0~1之间,越高表示是边缘的概率越大)。
1.4 损失函数
本文采用类平衡交叉熵损失函数[17]来训练边缘分支,由于边缘区域与非边缘区域所占面积不均衡,计算损失函数时需对两部分予以不同权重:
本文采用smooth L1损失函数来训练视差分支,与L2损失相比,smooth L1损失具有鲁棒性和对异常值的低敏感性。smooth L1定义如下:
其中,Ldisp为视差损失函数,Ledge为边缘损失函数,d为视差真值,d~ 为预测视差值,e为边缘判定值,e~ 为预测边缘值,β为边缘损失函数权重。
2 实验与评估
2.1 数据集及评价指标介绍
将所提的方法在两个数据集中进行评估:Scene-Flow[6]和KITTI 2015[18]。
SceneFlow:一个大规模的合成数据集,包括35 454组训练图片以及4 370 组测试图片,分辨率为540×960像素,且提供了稠密的视差图作为真值。该数据集采用端点误差(EPE,end-point-error)作为评价指标,即预测视差图与实际视差图的平均绝对误差。
KITTI 2015:记录不同天气条件下的真实场景,包括200 组训练图片以及200 组测试图片,分辨率为1 240×376 像素,视差真值为由LIDAR 获取的稀疏点。该数据集采用3 像素误差(3PE,3-pixel-error)作为评价指标,即误差值大于3像素的点所占比例。
2.2 实验环境、参数设置及效果图
本文用于训练以及测试的GPU显卡为1块NVIDIA Quadro P5000,实验环境为Ubuntu 18.04,采用的深度学习框架为pytorch 1.4.0,批量大小固定为4,采用Adam优化器,其参数设定为β1=0.9,β2=0.99,最大待选视差值Dmax设置为192。
对于SceneFlow 数据集,由于其已划分训练集和测试集,可不做数据划分处理,本文选用与基准方法一致的初始学习率用以训练:初始学习率设定为0.001,10轮后将学习率降为0.000 3,40轮后结束训练。
对于KITTI 2015数据集,鉴于其训练数据过少,本文采取与基准方法PSMNet 相同的训练策略,即对在SceneFlow数据集上预训练后得到的权重在该数据集上微调。同样地,本文采用与基准方法一致的参数微调:初始学习率为0.000 3,对其训练600轮,在第300、500轮时分别将学习率降为0.000 1和0.000 03。
2.3 与其他方法比较
本文方法与其他有监督深度学习方法的立体匹配算法[4,6,8,15]进行比较,其中MC-CNN[4]是引入深度学习方法的经典立体匹配框架,GC-Net[15]、DispNetC[6]、PSMNet[8]是引入三维卷积且具有代表性的立体匹配算法。在SceneFlow 数据集中的量化误差指标比较如表1 所示,可见本文方法将PSMNet[8]的误差降低了35.2%,且误差低于其他方法。
表1 SceneFlow测试结果Table 1 Results on SceneFlow
本文方法与其他有监督深度学习方法的立体匹配算法在KITTI 2015数据集中的量化误差指标比较如表2 所示,其中根据是否为遮挡区域可分为All 和Noc,其中All 表示全图区域,Noc 表示非遮挡区域。根据其为前背景可分为D1-bg、D1-fg 和D1-all,其中D1-bg 表示背景区域,D1-fg 表示前景区域,D1-all 表示全图区域。可见本方法对视差边缘丰富的前景物体的预测误差更小,在背景区域也取得了与基准方法相当的效果,整体上将PSMNet的误差降低了2.2%。
表2 KITTI 2015测试结果Table 2 Results on KITTI 2015
图5为KITTI 2015测试集中的可视化结果,可见本方法能较好地处理一些前后区分度不高的区域,如路牌、栏杆等。
2.4 消融实验
本文在SceneFlow 数据集中进行以下两个模块的消融实验:EGSPP、EG stacked hourglass。
表3为所提两个模块在SceneFlow数据集上的定量分析。当只采用EGSPP模块时,端点误差降低了30.3%;当只采用EG stacked hourglass 模块时,端点误差降低了28.4%;当同时采用提出的这两个改进模块时,端点误差实现了35.2%的下降,且所用时间与基准方法相近。以上数据验证了本文所提两个改进模块的有效性。
表3 SceneFlow消融实验Table 3 Ablation study on SceneFlow
图6定性分析了所提的两个模块在SceneFlow数据集上的效果。对比第3列(PSMNet)和第4列(PSMNet+EGSPP)发现,EGSPP 模块对低级纹理(如边缘处)和高级语义(如前景物体)均有一定改善;对比第4 列(PSMNet+EGSPP)和第5列(PSMNet+EGSPP+EG stacked hourglass)可以发现,EG stacked hourglass 模块通过抑制边缘不可靠信息的传播确实改善了边缘处的视差预测效果。整体上,与基准方法相比,本文所提方法在一些精细结构处能更好地区分前后区域:如图中前后车轮的辐条位置,本方法更好地描绘了精细结构,这符合人们对所提模块的预期。
2.5 通用性分析
为验证本方法在不同模型下的通用性,将边缘提取模块、边缘引导特征体加权模块以及边缘抑制的代价聚合模块加入GwcNet[14]中,其在SceneFlow 数据集以及KITTI 2015数据集中的结果见表4。
表4 SceneFlow,KITTI 2015实验结果Table 4 Results on SceneFlow,KITTI 2015
加入边缘引导之后,E-GwcNet 误差较GwcNet 在SceneFlow 上降低了14.3%,在KITTI 2015 的非遮挡区域上降低了1%,更充分地证明了本文所提方法对于不同算法的适用性。
2.6 实际场景测试
为进一步验证本方法在不同场景下的泛化性,将模型用于实际场景并检测其性能,鉴于实际场景的视差真值难于获取,故仅将在KITTI 2015 数据集中训练得到的权重用于实际场景进行测试,对基准方法PSMNet和所提修改方法E-PSMNet的测试结果进行定性分析。
图7、图8 分别为真实场景下物体内部及边缘区域的测试结果图,可见模型能更好地调整预测的视差,使物体内部减少错误的视差突变的出现,同时能更好地描绘物体边缘处视差轮廓,使其更贴近于参考图像,充分证明了本文所提方法的实用性。
3 结束语
提出了一种边缘信息引导的立体匹配方法:利用边缘信息分配不用尺度特征体权重,改进立体匹配的特征表示;弱化边缘处匹配代价向周围邻域的传播,提升立体匹配的代价聚合效果。在SceneFlow、KITTI 2015两个数据集上对本方法进行了验证,与国内外现有方法相比,本文的方法实现了更低的匹配误差,在精度上取得了优异性能。相较于基准方法,本文方法在精细结构处得到了更精准的匹配,整体精度提升显著,且所用时间的增加可忽略不计。但现阶段在KITTI 2015数据集上对结果的提升明显低于SceneFlow 数据集,经分析,主要原因在于KITTI 2015数据集视差真值的采集方式为雷达扫描,因而视差真值为散点图,使得网络无法较好地训练视差边缘,未来可考虑改进网络对稀疏真值的适用性,从而提升预测效果。