邓慧萍 盛志超 向 森 吴 谨
(武汉科技大学信息科学与工程学院 武汉 430081)
(武汉科技大学冶金自动化与检测技术教育部工程研究中心 武汉 430081)
在计算机视觉领域中,深度反映了场景的3维空间信息,是3维重建[1]、显著性检测[2]、语义分割[3]等计算机视觉任务的基础。因此,精确的深度估计对计算机视觉领域的发展具有重要的意义。传统相机在某一视角采集场景的信息,生成的图像只能记录光线的位置信息,丢失了与场景深度有关的角度信息。与传统相机结构不同,光场相机[4]在主透镜和传感器之间放置了一个微透镜阵列。得益于这种特殊的光学结构,光场相机不仅记录了输入光线的强度,同时也捕捉了光线的方向。通过整合这些角度信息可以生成不同性质的图像,如多视角和极平面图像(Epipolar Plane Image, EPI)等。这些成像形式包含了丰富的信息,为精确的光场深度估计提供了可能。
尽管光场图像在深度估计方面有着特殊的优势,但目前仍然面临着巨大的挑战。由于光场子孔径图像之间的基线较窄,在受限的图像传感器中存在空间分辨率和角度分辨率之间的权衡。在之前的工作中[5–11],已经提出了很多方法来克服这些限制。Jeon等人[5]提出了基于相移的亚像素多视角立体匹配算法,该算法需要为每个子视角构建代价函数,时间复杂度较高。Chen等人[6]引入了双边一致性度量用于光场深度估计以处理显著的遮挡问题。Wanner和Goldluecke[7]提出了一种全局一致性标记算法,采用结构张量提取EPI图像中的斜率。随后Zhang等人[8]提出了一种平行四边形算子,通过距离计算EPI中斜线的斜率,该方法对噪声和遮挡具有很好的鲁棒性,但提取EPI的过程中工作量较大,实时性较差。Tao等人[9]从焦堆栈出发提出将散焦线索、一致性线索和阴影线索相融合获取局部深度图。Wang等人[10]为了更好地处理遮挡问题,提出了一种遮挡感知的深度估计算法。随后,Williem等人[11]在此研究的基础上,采用角度熵和自适应散焦相应地提高算法对遮挡的鲁棒性和噪声的敏感性。以上这些传统方法在一定程度上提高了深度估计的准确性,但是由于计算量较大,在得到精度的同时失去了速度方面的优势。
近年来,卷积神经网络(Convolutional Neural Networks, CNN)被用于深度估计,在精度和时间复杂度上都有了显著的提升。Heber等人[12]提出了U型网络的结构框架和基于编解码结构的深层端到端网络结构,该方法在低计算量的前提下获得了精确的结果,但是对于数据的预处理不够精确。Luo等人[13]以十字EPI为卷积神经网络的输入,并采用图割法全局优化策略对结果进行优化。在此基础上,Shin等人[14]引入了左右对角线输入,并设计了一种将子孔径图像以EPI结构作为输入的卷积神经网络,该网络的预处理方式加强了视角信息的相关性,但未对复杂区域作出合理有效的处理,在融合信息时也没有对不同通道的信息进行整合。随后,Tsai等人[15]将全部的子孔径图像作为输入,并设计了一个基于注意力的视图选择网络来消除视图间信息的冗余,该网络输入量较大,训练成本较高。Zhou等人[16]提出了一个从焦点堆栈中学习深度语义特征和局部结构信息的光场深度估计网络。Shi等人[17]引入了3D深度估计中的光流法,并提出一个用于稀疏光场的深度估计方法。Guo等人[18]考虑到遮挡的问题,设计一个遮挡预测网络得到遮挡掩模,通过遮挡掩模对初始深度图进行细化得到最终的深度图。早期的基于学习的方法[12,14]将深度预测看作一个数据传输的黑盒,忽略了光场图像之间的几何特征,在边缘、遮挡、弱纹理等区域无法得到精确的深度估计结果。针对这些困难区域,本文利用上下文信息来增强网络的鲁棒性,通过注意力机制来获取有效的上下文信息,以提高深度图边缘的质量。
上下文信息是像素与其周围环境交互的语义特征信息。语义分割具有捕获图像中不同对象边缘信息的能力,而深度估计最容易产生错误的区域是容易发生遮挡的边缘区域,这与语义分割问题存在很大的空间和强度相关性。因此,本文考虑到丰富的语义信息可以帮助纠正对象边界的视差值,为复杂区域提供了更多的视差细节,提出了一个基于语义信息导向的光场深度估计网络框架,该网络学习到充分的上下文信息,解决了深度估计中难以优化的不适定区域问题。实验结果表明,本文算法在实验精度和速度上均优于大部分的算法,且保留较好的深度图边缘。该深度学习网络具有以下特点:
(1)设计了语义感知模块(Semantic Perception module, SP_module)用于复杂信息的特征提取,其中空洞金字塔池化(Atrous Spatial Pyramids Pooling, ASPP)可以引入多尺度信息,通过增大感受野来捕捉层次上下文信息,编解码结构通过逐步恢复空间信息来捕获更清晰的对象边界。通过将ASPP和编解码结构结合,可以获得更加清晰的深度图边缘。
(2)由于光场相机的特殊结构,光场的子孔径图像之间具有很强的相关性,导致在获取充分的光场图像特征信息的同时会造成大量的信息冗余。本文通过加入一个轻量化的特征注意力模块(Feature Attention module, FA_module),用于学习特征交互时每个特征的重要性,该模块用较少的参数可以带来了较大的性能提升。
(3)大部分网络在聚合特征时只使用网络的最后一层,导致了部分信息的丢失。本文使用堆叠沙漏模块(Stacked Hourglass module, SH_module)来聚合特征,其编解码结构可以更好地学习上下文信息,跳跃连接可以将浅层信息和深层信息结合起来,细化低纹理的模糊度和遮挡部分。串联的沙漏模型通过复用的方式提高捕获重要特征的精度。
深度估计的核心思想是计算视差。对于4D光场图像L(x,y,u,v),其中心子孔径视图L(x,y,0,0)与相邻视图之间的关系可以表示为
其中,(x,y)代表空间坐标,(u,v)代表角度坐标,d(x,y)是中心视点像素与其相邻视点中相应像素的视差。为了获得中心视角的深度图,需要在其它视角中寻找对应像素点的偏移量d(x,y)。
4D光场图像可以表示为阵列的子孔径图像,相比于传统图像包含更加丰富的信息,但是由于光场图像子孔径之间的基线较窄,包含了大量相同的信息,这些庞大的数据量会增大训练的难度,给网络增加不必要的计算。因此,在光场的输入形式上既要去除信息的冗余,又要避免信息的丢失。
考虑到光场图像的几何特征,有效的方式是采用水平、垂直和左右对角线4个具有一致基线视点的EPI结构作为输入。多个方向的EPI输入在降低信息冗余、减少有效信息丢失的同时,能够解决部分遮挡问题,获取更加精确的深度图。本文的网络结构如图1所示,4路输入分别被送到语义感知模块SP_module来提取每条分支的特征信息,该模块在引入多尺度信息的同时能够细化边缘细节,因此可以提取场景的语义信息和多尺度上下文信息;然后,将4条支路的特征进行融合,考虑到每一路特征的重要性不同,设计了特征注意力模块FA_module为每个特征赋予不同的权重;最后,将融合后的特征块送到一个堆叠沙漏模块SH_module,以编解码的方式重复处理特征,进一步将全局多尺度上下文信息聚合得到精确的深度图。
图1 网络结构图
图像的边缘信息被解释为高频信息,为了获得清晰的深度图边缘,必须保持高频细节的完整性。为了提高深度图的精确度,本文设计了一个语义感知模块SP_module用于提取每条通道的特征,结构及参数如图2所示。编码模块通过减少特征图的分辨率捕获高级语义信息,解码模块通过恢复空间信息细化物体边缘,因此本文设计的编解码结构可以捕捉清晰的目标边界。考虑到光场图像存在窄基线的问题,需要采用2×2的小卷积核来捕捉图像间的差异信息。然而卷积核过小会导致感受野不足的问题,从而影响深度图的精度。为了解决该问题,本文使用空洞金字塔池化ASPP来增大感受野,通过在不同的分支采样不同的空洞率获得多尺度图像表征,以多个比例来捕捉不同尺度和位置的上下文信息。这种将编解码结构和ASPP模块相结合的方式,既可以捕获丰富的上下文信息,又可以获得清晰的物体边界。
图2 语义感知模块SP_module的网络结构
为保留网络的底层特征,首先用两个“Conv-ReLU-Conv-BN-ReLU”结构的卷积块获取浅层信息。接着,用步长为2的卷积下采样进行特征编码提取深层语义信息。ASPP模块由4个不同采样率rate={1, 2, 4, 8}的空洞卷积和1个全局平均池化组成,不同采样率的卷积层可以应对不同大小的物体及细节区域。我们将各级特征图连接起来,通过1个1×1的卷积来压缩特征,并使用双线性插值来恢复特征的尺寸,进行特征的解码。最后,将浅层信息通过1个1×1的卷积来压缩特征,融合低级结构信息和高级语义信息,实现信息的交互。
在经过多路特征提取后,需要将特征进行融合。目前在光场深度估计中有两种方式进行特征融合:(1)构建匹配代价块,将特征图在视差的范围内进行平移,但这种方法受限于在单幅视图中进行特征提取,且需要扩大张量维度,在4D光场中会导致计算量过大的问题;(2)将特征图直接拼接,这种方法结构简单,无需引入额外的参数,但缺点是忽略了光场图像之间存在的相关性问题,没有引入特征图之间关系的表述,造成了大量信息的冗余。
考虑到光场的输入形式,本文采用了将特征图进行直接拼接的方法,并针对信息冗余问题,设计了一个局部跨通道交互的特征注意力模块FA_module,用于在寻找有效特征的同时抑制无用信息。FA_block学习每个特征的重要性,为每一个特征赋予从0-1的不同权重,表示每个特征的重要程度。与以往的注意力机制SENet[19]不同,FA_module采用无降维的方式进行通道间的交互,提高了注意力机制的学习能力。
FA_block的网络结构如图3所示。在不降低通道维数的情况下,执行全局平均池化以整合全局信息,执行全局最大池化以细化边缘信息,通过两种池化方式的结合进一步提高捕捉有效信息的能力。在每一个池化层后接一个1×1×k的一维卷积,其中卷积核大小为k的1维卷积是用来计算每个通道与其k个邻域间的相互作用,表示局部跨通道间的覆盖范围。k的大小是通过一个与特征通道数相关的函数自适应确定,具体的形式如下:
图3 特征注意力模块FA_module的网络结构
多路信息融合之后,需要对已经赋予不同权重的特征块进行高阶特征提取以获得视差。高/低层之间存在信息差异,具体表现为低层特征分辨率更高,主要包含了位置、细节等信息,但是语义性较低,噪声更多;而高层特征分辨率较低,具有更强的语义信息,但细节、纹理信息较少[20]。以前的工作[13,14]大都采用堆叠多个卷积块的方式来进一步提取特征,实现多路信息的特征聚合。然而这种方法会导致信息在网络传递中有少量的丢失,从而造成部分细节的缺失。因此,本文设计如图4所示的堆叠沙漏模块SH_module用于多路信息的特征聚合,它对不同层的特征进行整合实现信息互补,有效缓解了卷积层数增加所造成的信息丢失问题,带来了网络性能的提升。
图4 堆叠沙漏模块SH_module的网络结构
SH_module包含1个预处理结构和3个串联的沙漏结构,以捕获不同尺度的上下文信息。预处理结构由卷积块和残差块组成,用于提取低级特征,为最终的视差预测提供细节信息。沙漏结构被设计为自上而下-自下而上的编解码形式,在细化低纹理模糊度的同时可以解决部分遮挡问题。在编码部分,用卷积核为3×3、步长为2的卷积层进行下采样操作,降低特征图分辨率的同时将通道数翻倍。接着,在后面接一个卷积核大小为2×2、步长为1的卷积层。由于在编码部分进行两次的下采样操作,在解码部分相应地执行两次上采样操作,即用卷积核为3×3,步长为2的反卷积层恢复特征图分辨率,同时将特征通道数减半。此外,每一次反卷积操作后,将恢复的特征与编码器中同分辨率的特征级联,使得浅层信息和深层信息结合,避免有效信息的丢失。最后,通过将多个沙漏结构串联复用先前的信息进一步提高了预测结果的精度。
为了验证本文算法的效果,在4D光场数据集new HCI[21]上进行实验。光场数据集new HCI共有28组视差在(–4, 4)之间的数据,共分为4类:Training, Test, Stratified, Additional。使用Additional中的16个场景进行训练,对Training和Stratified中的7个场景进行算法的验证,每个场景都包含9×9个子视角和中心视角的真实深度图(Ground Truth, GT),其中,每个子视角图像的空间分辨率为512×512,Test由于没有真值并未参与训练和测试。实验在NVIDIA GTX2070Ti GPU上运行,使用TensorFlow框架作为后端,Keras库搭建网络,训练大约花了7 d的时间。
深度学习需要大量的训练样本,而new HCI中16个训练场景所包含的训练样本满足不了需求,这可能会给网络带来过拟合的问题。为了解决数据不足的问题,本文从训练数据集中随机分割32×32的块进行批量训练,并对块进行了数据增强,包括旋转、缩放、翻转、视角平移、色彩增强以及随机颜色变换。
本文使用的卷积核大小大部分是2×2的,这在之前的工作[14]中已经被验证更适合处理光场相邻视角间的窄基线问题。本文训练时使用小批量随机梯度下降,批次大小设为16,这样的训练方式有利于更鲁棒性收敛,避免局部最优,同时减少了对显存的依赖。优化器使用RMSprop,初始学习率为10–4,损失函数是MAE,该损失函数对异常点有更好的鲁棒性
其中,yi表示第i个像素的真实值,y^i表示初始估计值,m为视差图像素点的总数。
为了评估算法的实验结果,定量分析的评价指标选择了均方误差(Mean Square Error, MSE),定性分析的评价指标选择了不良像素率(Bad Pixel,BP)。
不良像素率为不良像素的数量占总像素的比例。它描述为,当一个像素点估计出的值与真实值的差异大于一定阈值t时,该点被判断为不良像素点。在本文中,取t=0.07。
本文的算法在HCI 4D光场数据集上与一些主流的方法进行了定性和定量的比较。对比的方法有:基于多视角的方法LF[5],基于EPI的方法SPO[8],基于焦堆栈的方法LF_OCC[10],CAE[11],基于学习的方法EPINET[14],FSNET[16]。图5是各方法在4个场景下的坏点图和深度图。其中,坏点图中BP>0.07显示为红色,否则为绿色,深度图采用伪彩图显示。表1为各方法在7个场景下的MSE定量指标结果,表2为BP定量指标结果,其中最后一列(Avg)为所有场景平均值,每列的最优值用黑色加粗,次优值加下划线。
从图5的坏点图可以发现,传统方法在处理细小深度变化的场景中表现结果较好,在大量遮挡存在的区域或者密集的物体边界处容易发生错误预测。基于学习的方法在处理复杂场景时已经有了较高的提升,但在边缘、遮挡区域仍有较高的边缘模糊。本文方法在低纹理的场景Cotton, Dino以及在有大量边缘和遮挡区域的场景Boxes, Sideboard中坏点像素较少,均可以取得优秀的结果。从表1和表2可以看出,本文算法在所有场景的MSE均低于所比较的算法,BP在Cotton, Sideboard, Backgammon和Pyramids上低于所比较的算法,在其它场景略高于次优值的算法。均方误差和不良像素率的平均值在所有比较的算法均处于最优值,比次优算法的结果分别提升22.2%和1.5%。
表1 MSE指标对比
表2 BP指标对比
图5 测试数据集的4个场景的深度图和坏点图
为了探索本文的方法在复杂区域的有效性,将本文的算法和其它算法在含有大量场边缘、遮挡以及弱纹理区域的场景Boxes和Sideboard上进行了比较,图6是在所有算法深度图的局部放大图。在Boxes中,本文算法在镂空区域有清晰的网格,在Sideboard中,本文算法在难以训练的交互线上有极强的分辨能力。对于各种梯度边缘和物体交接边缘,大部分的算法无法捕捉非常细微的深度变化,在遮挡区域的边缘无法得到正确的结果,这导致了很高的错误率。从图6可以看出,本文的深度图有锐利、清晰的边缘,更接近真值图的边缘。
图6 实验结果的局部放大图
表3是本文算法和所比较的算法在4个场景的运行时间的比较。相比各种传统算法和深度学习算法,本文的算法在取得较高精度的同时具有明显的速度优势。
表3 各算法的运行时间(s)对比
本文在4D HCI光场数据集上对所提出的网络进行了消融实验,用MSE和BP作为评估指标定量分析了SP_module, FA_module和SH_module对深度估计性能的影响。表4为消融实验的结果,其中,未使用到的模块用卷积块来代替,加粗表示最优。从表4可以看出,当使用SP_module时,复杂区域的特征提取能力更强,语义信息有助于产生更好的边缘细节。当结合SP_module和SH_module时,编解码结构提供了更多的上下文信息,均方误差有了显著的下降。当在上述网络融入FA_module时,对提取到的特征进行了有目的的选择,降低了无效特征造成的干扰。消融实验结果表明,融合3个模块的网络产生了最佳的效果,所提出的方法显著提高了深度估计的性能。
表4 模块消融实验的定量结果比较
本文提出了一种基于语义导向的光场图像深度估计网络,该网络将语义信息融入到深度估计中给视差图提供了重要的边缘细节。考虑到边缘遮挡问题,本文将编解码结构和空洞金字塔池化结合进行特征的提取,通过引入多尺度信息来解决感受野不足的问题。为应对光场图像特殊的几何结构造成的特征冗余,本文设计了用于多路特征融合的注意力模块,该模块增强了网络的学习效率。此外,使用堆叠沙漏模块来聚合特征,进一步丰富边缘、弱纹理等复杂区域的细节。在4D光场数据集上的实验结果证明了本文方法的有效性,与现有的算法相比,本文的方法在边缘细节处有明显的改善。后续工作考虑在堆叠沙漏模块融入注意力机制,以提高特征聚合时多模块、多尺度选择性鉴别信息特征和关注显著特征的能力。