APP下载

基于失焦模糊的焦点堆栈深度估计方法

2023-09-27黄章进

计算机应用 2023年9期
关键词:堆栈焦点对焦

周 萌,黄章进

(中国科学技术大学 计算机科学与技术学院,合肥 230027)

0 引言

在计算机视觉领域,从机器人到虚拟现实、从三维重建到自动驾驶,深度信息在各自的任务中都扮演着重要的角色。最近,随着手持式便携设备的普及,越来越多的图像应用不再满足于简单的色相、对比度、亮度的调整,先拍照后对焦的功能极大地依赖于场景深度。因此,高效地获取高质量的深度具有重要的现实意义。

近年来,基于学习的单目深度估计取得了很大进展,能直接从单幅图像中预测深度[1-4],但是该方法需要大量数据进行训练,并且严重依赖图像的语义信息。因此当图像中出现镜子等反光物体时,不能很好地估计深度。双目以及多目深度估计[5-7]利用一组图片以及相机位置,将像素从相机空间投影到带有约束的世界空间以获取深度信息。相较于单目估计,双目以及多目估计的深度准确率更高,但是硬件成本也更高。无监督单目深度估计[8-11]则利用视频流信息,将相邻的多个数据帧看作不同相机视角下拍摄的图像,然后利用像素点之间的视差获取深度,它的预测深度与有监督的方法相比还有一定的差距。虽然可以用具有特殊传感器的硬件设备(如Kinect 深度相机)直接获取较精确的场景深度,但是这类方法也存在运算较慢、受场景限制大、成本高等问题。

相比结合语义的深度估计技术的蓬勃发展,利用焦点堆栈来探索失焦模糊和深度之间关联性的研究则相对较少。焦点堆栈是利用透镜成像原理在不同对焦距离下拍摄的一组照片,显式地编码了物体距离与深度之间的关系,图1 展示了物体距离和模糊圆半径的关系:当相机的对焦距离一定时,物体距离相机越远,所成的像越模糊;近距离也是如此,只有当物体恰好位于对焦距离时,所成的像最清晰。物体到相机距离的远近可以很直观地体现在所成像的模糊程度上,因此能通过图像的模糊程度来估计深度。由于模糊信息与语义无关,这意味着该类方法训练所需的数据量与基于语义的方法相比要小得多。Suwajanakorn 等[12]证明仅使用手机就可获取训练所需要的数据。

图1 失焦模糊示意图Fig.1 Schematic diagram of defocus blur

对于焦点堆栈深度估计,传统的解析方法可以直接计算像素点的清晰程度来判断物体的“最佳对焦”位置,然后根据位置估计深度。焦点堆栈是从有限的对焦距离中采样获得,如果数量较少的话,“最佳对焦”的定位会出现较大的离散误差,导致深度估计不准确。基于解析的方法一般要求焦点堆栈有足够的图片数量(通常大于20);同时图像清晰程度通常是纹理敏感的,因此该方法也无法准确估计无纹理区域的深度。而基于学习的方法则可以很好地缓解上述问题。Maximov 等[13]将焦点堆栈中的5 张图片分别输入不同的网络分支获取失焦程度,然后利用失焦程度预测深度;但是网络各分支仅关注单张图片,依靠全局池化获取全局信息,无法很好地利用深度方向的特征变化。Wang 等[14]设计了一个使用注意力机制的类U-Net 来同时预测全对焦图片和深度图;这种较大的模型提高了精度,但也降低了推理速度。Fujimura 等[15]借鉴传统的解析式方法,利用梯度信息构建焦点体预测深度,然而引入较多的透镜成像先验知识会造成焦点体的构建相对复杂,并且没有充分利用焦点堆栈的空间特性。

针对上述问题,本文提出一种基于学习的DFD(Depth From Defocus)模型。不同于使用多分支二维卷积网络的模型[13],DFD 模型使用简单的三维感知架构沿三个维度同时捕捉焦点堆栈的特征,模型更轻量,扩展性也更好。受基于学习的焦点堆栈深度估计工作[16]的启发,本文模型在利用焦点体的基础上考虑了焦点堆栈的模糊歧义性,将焦点堆栈模糊歧义性和焦点体相结合,使焦点体通过一个多尺度卷积网络预测分层深度概率,与分层深度加权后得到深度图。

1 相关工作

1.1 从对焦中估计深度DFF

基于对焦的方法需要扫描不同的焦点平面以获取一系列图片,然后找到每一个小块图像的“最佳对焦”位置,从对焦距离中恢复出深度。然而DFF(Depth From Focus)是一个不适定的问题,因为它并没有包含所有的情况。对于一些纹理比较少的区域,在焦点堆栈中可能呈现出相同的清晰度,实践上通常使用较强的正则化缓解这样的情况,但是会造成估计的深度过度平滑。Hazirbas 等[17]首次将卷积神经网络(Convolutional Neural Network,CNN)强大的特征提取能力运用到焦点堆栈深度估计中,利用经典的编码器-解码器结构直接预测深度,取得了不错的效果。受此启发,Ceruso 等[18]结合孪生网络[19]和多尺度卷积网络预测相对深度;Yang等[16]将焦点堆栈和对焦距离嵌入可微的焦点体中,实现了更好的性能;Wang 等[14]利用自注意力机制[20]同时预测深度图和全对焦图像。虽然深度学习的发展使基于DFF 的网络模型不断更新,预测精度也有了很大进步,但是大多数的方法仍然使用基于语义的特征提取方式,没有考虑焦点堆栈自身的空间特性。

1.2 从失焦中估计深度DFD

相较于利用焦点堆栈的清晰度这种直接的方式,从失焦图片中获得深度更复杂。失焦模型建立在高斯成像公式上,当传感器配置给定时,物体成像的模糊性会随着物距的变化而改变,所以深度估计问题转化为对图像各像素模糊量的判定,这也是一个有挑战性的问题。Nayar 等[21]假设模糊量符合高斯分布,将具有纹理的光源照射到实际物体,然后利用定制的相机在两个光路分别进行对焦,将获得的具有不同模糊程度的失焦图转换到频域后获得了像素的深度,该方法虽然能到达实时的效果,但是成本较高,并且无法消除高频噪声,所以很难实际应用;Srinivasan 等[22]使用失焦模糊训练了一个专门用于单目深度估计的网络;Carvalho 等[23]将室内失焦深度估计拓展到自然条件下;Maximov 等[13]先在合成数据上训练,然后在真实数据集上微调,缩小了数据集之间的领域差异,但是模型的可扩展性较弱;Galetto 等[24]训练了一个两阶段模型,首先利用一个简单的网络训练出图块模糊程度分类器,然后利用迭代式引导滤波预测出失焦图;Fujimura等[15]将失焦模型融入焦点体(Focus Volume),利用多尺度卷积预测深度,取得了很好的效果,但是模型构建比较耗时。

2 本文方法

本文方法将轻量化的3D 感知网络与失焦模糊的非线性特征相结合,同时利用分层的概率值来预测高质量的深度,图2 展示了焦点堆栈深度预测的总体框架。

图2 本文方法的总体框架Fig.2 Overview framework of the proposed method

2.1 失焦模糊原理

从失焦图片中估计深度建立在有效判断图像块的模糊程度上。度量模糊程度常用的方式是将点扩散函数建模成圆形的高斯模糊,不同的模糊核的大小代表了不同的模糊程度。从高斯薄透镜成像公式以及相似关系(见图1),可以推导出模糊半径b和物体距离do之间的关系:

其中:D为光圈直径;ds为镜头到传感器的距离;f为焦距;p为像素大小。

图3 直观地展示了模糊半径与物体距离之间的关系。在不同的对焦距离df下,模糊半径随着物体距离的增加呈现出先减小后增加的趋势。当物体距离较小时,物体距离在模糊半径的影响因素中占主导;当物体距离比较大时,物体距离的影响会逐渐减弱直至消失,此时的模糊半径会趋近于常数b*:

图3 不同对焦距离下模糊半径与物体距离的关系Fig.3 Relationship between blur radius and object distance under different focus distance

可以推导出模糊半径变化| Δb|与物体距离do间的关系:

当对焦距离df=0.3 m,物体距离增量Δdo=0.1 m 时,模糊半径的变化仅与物体距离有关。焦点堆栈在对焦距离附近会出现强烈模糊的变化,直观上往往表现出一定范围的景深,当物体超过了景深范围,它的模糊程度的变化几乎是肉眼不可见的,如图4 所示。

图4 模糊变化和物体距离间的关系Fig.4 Relationship between blur variation and object distance

与模糊梯度在深度s方向上的剧烈变化不同,语义梯度在平面xy方向上的变化更稳定。以DefocusNet 数据集[13]中某一场景为例,焦点堆栈沿x、y、s方向的平均梯度如图5 所示。xy方向上的梯度几乎不随对焦距离增加而变化;而s方向上的梯度随着对焦距离的增加急剧下降,并且在大小上与xy梯度相差超过3 个数量级。焦点堆栈模糊梯度和语义梯度的显著差异使模糊特征提取部分需要更精细地设计。

图5 焦点堆栈沿不同方向的每个像素的平均梯度Fig.5 Average gradient of each pixel with different directions of focal stack

2.2 特征粗提取

传统的Inception 网络[25]在多个不同的尺度下对输入特征进行提取,在计算量和有效性上得到了比较好的平衡。本文基于以下考虑将Inception 网络扩展到了三维:和沿图像的平面维度进行特征提取不同,焦点堆栈的特征提取会多一个维度,焦点堆栈本身的特性决定了它在深度维度上的模糊变化不是简单的线性叠加(如图5 中s方向),所以无法用2D 卷积刻画这种非线性特点。而从局部上来看,模糊变化又是线性的,所以更适合用卷积核深度尺寸可变的3D 卷积捕捉相应的特征。另一点是,因为模糊变化相比平面语义变化要小得多,直接将2D 卷积应用到焦点堆栈上进行特征提取无法很好地区分语义特征和失焦模糊特征,所以层与层之间模糊特征提取也应该被细粒度地考虑。综合以上两点,将3D 感知应用到焦点堆栈时,卷积核使用了较小的深度偏移量,目的是捕捉微小的模糊量变化。

本文设计的三维(3D)感知模块使用了一个4 层的网络来完成焦点堆栈的高频噪声过滤和初步特征提取,如图6 所示。3D 感知模块仅保留局部池化而抛弃了全局池化层,因为本文方法重点关注模糊程度的变化而不是图像的语义信息,全局池化层的引入可能会丢失这些细微的差别,而这对于那些变化很小的焦点堆栈而言至关重要。为了让网络能够学到这一点,在后续的整个网络设计中都遵从了这一原则。需要注意的是,除了模型轻量化以及噪声过滤,采用比较少的网络层数提取特征是为了让模型能尽可能保留原始的RGB 特征。3D 感知模块的特征提取网络简单但是有效,消融实验证实了这一点。

图6 3D感知模块Fig.6 3D perception module

2.3 焦点体构建

由3D 感知模块提取的模糊特征可以直接预测深度。然而,对于透镜成像系统,深度到模糊量是多对一的映射,无法依据模糊程度来判断对象与焦点平面的前后关系。图7(a)为真实场景下焦点平面B 以及附近具有相同模糊程度的平面A 和平面C;图7(b)是对应的模糊半径和物体距离的关系曲线,A、B、C 分别为对应平面的局部放大图。由于模糊半径和物体距离之间的非线性关系,在焦点平面B 的近端和远端会引入歧义,两个不同距离的平面A 和C 存在相同的模糊半径。直接使用原始的模糊特征不一定会带来良好的性能,如果不对特征加以区分,焦点平面一侧的模糊程度容易被错误地解释到另一侧,使模型无法学习到对应深度的模糊特征。

图7 焦点平面附近的模糊歧义性Fig.7 Blur ambiguity near focal plane

从3D 感知模块得到的模糊特征在预测深度时具有二义性,这对于网络的学习是不利的。Kashiwagi 等[26]在真实数据集上做了大量关于点扩散函数畸变的实验,即使是相同的模糊量,RGB 强度对深度的响应也不一样,近端按B-G-R 强度依次减弱,且中间的强度会小于两端的强度;远端按B-RG 依次减弱,中间的强度则会比两端大。这一特点使利用RGB 三通道不同的差分值来判断深度成为可能。

常规的差分特征构建方式是沿平面x、y方向以及深度s三个方向进行差分然后级联(Diff-sxy),目的是提取不同方向上的特征差异。本文为了获得焦点平面两端不同的强度变化模式,直接对RGB 通道中的其中两个求差分然后进行级联(Diff-RGB)。具体的构建细节见图8,首先使用一个简单3D 卷积网络对焦点堆栈进行过滤,然后利用式(4)提取RGB通道的差分信息,最后经过一个下采样层得到最后的RGB差分特征。

图8 通道差分模块Fig.8 Channel difference module

其中:IRGB表示融合后的RGB 通道差分;Featurei代表输入特征的不同颜色维度。

焦点体的主要作用如下:1)保留焦点堆栈各层次间细微的模糊变化差异,即模糊量特征;2)在相同的模糊量下显式编码RGB 通道对深度的响应。因此,本文设计了一个RGB通道模式融合的焦点体用来有效地捕捉肉眼不可见的特征差异,具体是将通道差分模块提取的RGB 差分特征与3D 感知模块提取的模糊特征进行融合,即构建出编码了焦点堆栈模糊歧义性的焦点体。

2.4 分层深度预测

在使用焦点体进行深度预测时,采用一种分层的策略以减少深度预测过程中的不确定性。这一策略是受焦点堆栈本身对焦距离分层的特性的启发,在焦点堆栈中,每一张图片都在固定的对焦距离下拍摄,隐含了对应的深度信息。单通道深度同样也可以按深度分层,这样就转变为对多深度通道概率的预测。

预测网络首先对焦点体分别进行2、4、8、16、32 倍的下采样;然后利用3D 卷积获得了5 个不同分辨率下的特征图;之后使用转置卷积进行上采样,除了第一层,其余的转置卷积层的输入都级联了来自上一层的特征图;最后输出各深度层的概率。具体的编码器-解码器网络见图9。

图9 编码器-解码器网络Fig.9 Encoder-decoder network

整个网络预测的深度图depth是由各深度层的概率值layeri与对应的深度层di进行加权求和得到:

其中:深度分层的层数N=30;深度层di=i。

3 实验与结果分析

3.1 实验细节

本文使用PyTorch 1.10.2 实现所提出模型,并在10 GB显存的NVIDIA 3080 上使用Adam 优化器(学习率lr=0.000 1,β1=0.9,β2=0.999)以及L1 损失对模型进行优化。使用随机裁剪、随机旋转、随机水平翻转以及随机亮度对比度伽马值变换进行数据增强,避免过拟合。所有实验都采用了固定的随机种子,训练500 轮。

本文使用两个有标注的数据集DefocusNet[13]和NYU Depth V2[23]作定量比较,使用一个没有标注的数据集Mobile Depth[12]作定性分析,随后在DefocusNet[13]上对模型的重要模块进行消融实验。

实验采用7 个广泛使用的评估指标以及2 个尺度无关评估指标:平均绝对误差(Mean Absolute Error,MAE)、平均平方误差(Mean Square Error,MSE)、均方根误差(Root Mean Square error,RMS)、对数均方根误差(logarithmic Root Mean Square error,logRMS)、绝对相对误差(absolute Relative error,absRel)、平方相对误差(square Relative error,sqrRel)、推理时间、尺度不变误差(scale-invariant error,sc-inv)和仿射缩放平移不变误差(affine(scale and shift)-invariant error,ssitrim)。

3.2 数据集介绍

DefocusNet[13]合成数据集:包含400 个训练样本和100 个测试样本,每个样本包含一组已知对焦距离的5 张图片的焦点堆栈以及对应的深度图,图像的分辨率为256×256,深度范围是0~3 m。

NYU Depth V2[23]真实数据集:官方划分包含795 对训练样本和654 对测试样本,图像分辨率为640×480,深度范围0~10 m。利用Carvalho[23]提供的分层重建方法对样本重对焦,对焦距离分别为2、4、8 m,每个样本随机裁剪出10 张256×256 大小的图片,生成7 950 和6 540 个训练样本、测试样本。

Mobile Depth[12]:真实数据集,包含键盘、瓶子、水果等13个场景,相应的焦点堆栈均使用手机拍摄后期对齐的方式获得,由于没有真实的深度值,此数据集仅用于定性评估。

3.3 对比实验

将本文方法与较新的方法DefocusNet[13]、AiFDepthNet(All in Focus Depth Network)[14]、文献[15-27]方法进行比较,它们的结果均是在同样的预处理条件下通过重新运行公开的代码生成。

1)性能指标对比。文献[27]方法为两阶段方法,本文仅采用它的深度估计部分进行训练。如表1 所示,本文方法在DefocusNet 数据集的7 个深度预测指标上均优于对比方法;在NYU Depth V2 数据集上,4 个指标取得了最优,有3 项指标稍弱于DefocusNet 方法。主要原因是当合成的焦点堆栈数量较少时,相机配置更重要,而本文方法并没有使用对焦距离等相机参数。总体上看,本文方法在两个不同类型的数据集的多个指标上均取得最优或次优的结果,这得益于特征粗提取模块和焦点体构建模块的设计,它们使焦点堆栈特征表示更有效,模型预测更准确;同时,轻量化的设计使本文方法在两个数据集上的推理时间缩短了43.92%~70.20%和47.91%~77.01%。

表1 不同方法在两个数据集上的结果Tab.1 Results of different methods on two datasets

2)泛化性能对比。表2 列出了在DefocusNet 数据集上训练,在NYU Depth V2 数据集上测试的结果,对比的数据直接从文献[15]中获取。按照文献[15]中的实验设置,训练集采用了DefocusNet 的子集,并且对训练集和测试集的真实深度进行了缩放。本文方法在MAE、RMS 和sc-inv 上取得了最优。由于sc-inv 是缩放无关的,在这一项指标上的显著优势表明本方法能够有效预测不同深度范围的对象。

表2 不同方法在DefocusNet数据集上训练,在NYU Depth V2数据集上测试的结果Tab.2 Results of different methods training on DefocusNet dataset and testing on NYU Depth V2 dataset

3)参数量以及速度对比。与AiFDepthNet[14]的16 MB 参数量相比,本文的轻量化模型仅有3.3 MB。即使堆栈数量变大,模型也并不会像DefocusNet[13]一样同步增加模型参数和计算成本,仅仅只是计算量上的变化,在骨干网络的设计上是很大的改进。由于网络模型的轻量化,本文方法在推理速度上占据更大的优势。如表1 所示,在DefocusNet 数据集上,本文方法的推理时间相较于AiFDepthNet、DefocusNet 以及文献[27]方法分别减少了70.3%、65.8%和43.9%;在NYU Depth V2 数据集上则分别减少了77.0%、64.9% 和47.9%,能够满足实时性要求。

4)定性比较。将本文方法在Mobile Depth 数据集[12]上和AiFDepthNet、DefocusNet 以及文献[27]方法进行定性比较,结果如图10 所示。可以看出,AiFDepthNet 预测的深度颜色变化不明显,说明它预测的深度值普遍较小;文献[27]方法相比AiFDepthNet 在中等距离预测更准确,但是在部分远距离区域会出现严重误差;和DefocusNet 相比,本文方法在深度预测的平滑性上更好,出现深度值突变的情况要少得多,这一点在图像1 中的小球附近表现得尤其明显。定性比较表明,本文方法预测的深度层次感更强,更加准确。

图10 Mobile Depth数据集上的深度预测可视化比较Fig.10 Visual comparison of depth predictions on Mobile Depth dataset

3.4 消融实验

分别对焦点堆栈的层数、特征提取网络的架构、焦点体的构建模式以及深度预测的输出方法进行消融实验来评估它们对模型的贡献。实验结果如表3 所示。

表3 在DefocusNet数据集上的消融实验结果Tab.3 Results of ablation experiments on DefocusNet dataset

1)焦点堆栈层数的影响。图11 显示了本文方法在Mobile Depth 数据集上不同焦点堆栈层数的性能评估结果。由于没有真实深度值,所有用于评估的深度来自文献[12]中的模型的估计值。当焦点堆栈层数较少时,性能迅速下降;而在层数较多时,性能影响并不明显。这说明本文方法在焦点堆栈数量足够时,能有效提取到模糊变化特征;而在图片数量较少时,仅依靠图像语义信息无法有效估计图像深度。

图11 在Mobile Depth数据集上的焦点堆栈层数性能评估Fig.11 Performance evaluation of focal stack layers on Mobile Depth dataset

2)特征提取架构的影响。在实验1、2 中比较了不同的特征提取模块,一个是共享权重的孪生网络[19],使用2D 卷积;另一个是本文设计的轻量3D 感知网络。与本文网络相比,使用孪生网络时性能出现了下降,说明3D 卷积能更细粒度地提取焦点堆栈的特征。

3)焦点体构建模式的影响。在实验2、4、5 中,使用3 个不同的焦点堆栈构建模式:Naive 代表上一模块输出的原始特征;Diff-sxy代表原始特征和沿深度s、x、y三个方向的差分特征的结合;Diff-RGB 代表原始特征与编码了模糊歧义性RGB 特征模式的差分特征的结合。以Naive 的方法作为基线,使用常规的三通道差分Diff-sxy时预测的深度值得到了改进;使用本文的Diff-RGB 方法来构建焦点体时,性能得到大幅提升,说明本文方法确实能够辨别焦点堆栈的模糊歧义性,从而提升深度估计性能。

4)深度预测输出方法的影响。在实验3 中,DO(Direct Output)代表将编码器-解码器模块预测的分层概率经过一个全连接层后直接输出预测深度。实验2 中,Layered 表示对分层概率layeri与对应的深度层di进行加权求和得到预测的深度图。相较于直接输出深度的实验3,采用Layered 的实验2 的MAE 减少了63.3%,这说明对深度预测进行分层适应了焦点堆栈本身的分层特性,有利于提升模型性能。

4 结语

本文针对模糊变化量小以及模糊歧义性的问题,提出了一个新的网络架构来预测焦点堆栈的深度,主要利用焦点堆栈本身的空间特性,通过3D 感知细粒度提取模糊特征;焦点体融合RGB 深度响应模式;多尺度编解码器输出分层概率。实验结果表明,本文方法不仅能预测有竞争力的深度,同时推理速度上也有显著提升,而且模型还相对轻量。在未来的工作中,计划将工作扩展到无监督领域。

猜你喜欢

堆栈焦点对焦
焦点
“两会”焦点
嵌入式软件堆栈溢出的动态检测方案设计*
本期焦点
基于堆栈自编码降维的武器装备体系效能预测
多重对焦有必要吗?
相位对焦vs对比度侦测对焦
焦点
一种用于分析MCS-51目标码堆栈深度的方法
喀嚓前一秒的技术DC对焦方式