Direction-aware Spatial Context Features for Shadow Detection and Removal

  • 基本信息
  • 值得借鉴的地方
  • 摘要
  • 1 INTRODUCTION
  • 2 RELATED WORK
  • 3 METHODOLOGY
    • 3.1 Direction-aware Spatial Context
      • 3.1.1 Spatial Context Features
      • 3.1.2 Direction-aware Spatial Context Features
    • 3.2 Our Shadow Detection Network
      • 3.2.1 Training
      • 3.2.2 Testing
  • 3.3 Our Shadow Removal Network
    • 3.3.1 Color Compensation Mechanism
    • 3.3.2 Training
    • 3.3.3 Testing
  • 4 EXPERIMENTS ON SHADOW DETECTION
    • 4.1 Shadow Detection Datasets & Evaluation Metrics
    • 4.2 Comparison with the State-of-the-art
    • 4.3 Evaluation on the Network Design
    • 4.4 Additional Results
  • 5 EXPERIMENTS ON SHADOW REMOVAL
  • 6 CONCLUSION

基本信息

  • 2018 CVPR
  • https://arxiv.org/abs/1805.04635
  • https://github.com/xw-hu/DSC
  • https://github.com/stevewongv/DSC-PyTorch

值得借鉴的地方

  1. 损失函数

摘要

阴影检测和阴影去除是基本且具有挑战性的任务,需要了解全局图像语义。本文通过以方向感知的方式分析空间图像上下文,提出了一种用于阴影检测和去除的新颖的深度神经网络设计。为了实现这一点,我们首先在空间递归神经网络(RNN)中通过在聚合RNN中的空间上下文特征时引入注意权重来制定方向感知注意机制。通过训练学习这些权重,我们可以恢复方向感知的空间上下文(DSC)以检测和消除阴影。该设计被开发到DSC模块中,并嵌入到卷积神经网络(CNN)中,以学习不同级别的DSC功能。此外,我们设计了加权交叉熵损失以有效地进行阴影检测训练,并通过使用欧几里得损失函数并制定颜色传递函数来解决训练对中的颜色和亮度不一致性,从而将网络进一步用于阴影去除。我们使用了两个阴影检测基准数据集和两个阴影去除基准数据集,并进行了各种实验以评估我们的方法。实验结果表明,我们的方法在阴影检测和阴影去除方面均优于最新方法。

1 INTRODUCTION

阴影是感知深度和几何形状的视觉提示。 一方面,知道阴影位置可以让我们获得照明方向[2],相机参数[3]和场景几何[4],[5]。 另一方面,阴影的存在会降低许多计算机视觉任务的性能,例如,对象检测和跟踪[6],[7]。 因此,阴影检测和阴影去除长期以来一直是计算机视觉研究中的基本问题。

早期的方法是通过开发物理模型来分析和消除颜色和照明的统计数据,从而检测并消除阴影[7],[8],[9],[10],[11],[12],[13],[14], [15]。 然而,这些方法是建立在复杂情况下可能不正确的假设之上的[16]。 为了从真实图像中提取信息,数据驱动方法通过使用手工制作的特征[17],[18],[19],[20],[21]或通过使用深度神经网络学习特征来学习和理解阴影 [16],[22],[23],[24]。 尽管最先进的方法已经能够以87%至90%的精度检测阴影[19],[23]并恢复大多数阴影区域[24],但它们可能会误解黑色物体作为阴影并产生各种错误,因为它们无法分析和理解全局图像语义; 有关定量和定性比较结果,请参见第4和第5节。

识别和消除阴影需要利用全局图像语义,如V. Nguyen等人 [25]最近所展示用于阴影检测和曲等[26]用于阴影去除。 为此,我们提出以方向感知的方式分析图像上下文,因为通常通过与周围环境进行比较来识别阴影。 以图1中的区域A为例,将其与区域B和C进行比较,区域B会比区域C更有力地表明A是阴影。 因此,在暗示阴影的存在时,不同方向上的空间上下文将提供不同的贡献。

图1:在此示例图像中,与区域C相比,区域B会更强地表明A是阴影。这促使我们以方向感知的方式分析全局图像上下文以检测和去除阴影。

为了捕获不同方向上图像/空间上下文之间的差异,我们在深度神经网络中设计了方向感知的空间上下文(DSC)模块或简称DSC模块,在该模型中,我们首先通过采用空间来聚合全局图像上下文 递归神经网络(RNN)的四个主要方向,然后在RNN中制定一个方向感知的注意力机制,以学习每个方向的注意力权重。 因此,我们可以以方向感知的方式获得空间上下文。 此外,我们将DSC模块的多个副本嵌入到卷积神经网络中,以了解不同层(尺度)中的DSC特征,并将这些特征与卷积特征相结合以预测每一层的阴影蒙板。 之后,我们将来自不同层的预测与加权的交叉熵损失融合到最终的阴影检测结果中,以优化网络。

为了进一步采用网络来去除阴影,我们将无阴影图像作为真值,并使用训练对之间的欧几里得损失(有阴影和无阴影的图像)来预测无阴影图像。此外,由于相机曝光和环境光线的变化,训练对可能会产生不一致的颜色和亮度;可以在现有的阴影去除数据集中,例如SRD [26]和ISTD [24]中观察到这种不一致。为此,我们提出了传递函数来调整无阴影的地面真实图像,并使用调整后的图像来训练网络,以便我们的阴影去除网络可以生成更忠实于输入测试的无阴影图像图片。我们在下面总结了这项工作的主要贡献:

  • 首先,我们在空间RNN中设计了一种新颖的注意力机制,并构造了DSC模块以一种方向感知的方式学习空间上下文。
  • 其次,我们通过采用多个DSC模块来学习不同层中的方向感知空间上下文,并设计加权交叉熵损失来平衡阴影和非阴影区域的检测精度,从而开发了一种用于阴影检测的新网络。
  • 第三,我们进一步通过制定欧几里得损失并采用经过色彩补偿的无阴影图像训练网络来去除阴影,这些图像是通过颜色传递函数生成的。
  • 最后,我们在阴影检测和阴影去除的几个基准数据集上评估我们的方法,并将其与最新方法进行比较。实验结果表明,我们的网络在这两个任务上的表现均优于以前的方法。有关定量和定性比较结果,请参见第4和第5节。

2 RELATED WORK

在本节中,我们重点讨论有关单图像阴影检测和去除的工作。

阴影检测。 传统上,单图像阴影检测方法[8],[9],[10]利用照明和颜色的物理模型。 然而,这种方法仅在宽动态范围图像中趋于产生令人满意的结果[18],[25]。 另一种方法是使用基于注释的阴影图像的手工特征来学习阴影属性。 它首先通过特征描述符描述图像区域,然后将区域分为阴影区域和非阴影区域。 颜色[18],[27],[28],[29],纹理[19],[27],[28],[29],边缘[17],[18],[19]和 Tjunction [18]通常用于阴影检测,其后是诸如决策树[18],[19]和SVM [17],[27],[28],[29]等分类器。 但是,由于手工制作的功能描述阴影的能力有限,因此这种方法在复杂情况下通常会失败。

卷积神经网络(CNN)已被证明是强大的工具,可用于学习检测阴影的功能,其结果优于以前的方法,因为有大量数据可用。 Khan等[22]使用多个CNN来学习超像素和沿对象边界的特征,并将输出特征馈送到条件随机场以定位阴影。 沉等[32]提出了一种深层次的结构化阴影边缘检测器,并采用结构化标签来改善预测阴影图的局部一致性。 维森特等[23]使用带有噪声注释的大型数据集训练了stacked-CNN。 他们将图像簇的留一法误差平方和最小化以恢复注释,并训练了两个CNN以检测阴影。

最近,Hosseinzadeh等人[33]使用补丁级别的CNN和根据手工特征计算的阴影先验图来检测阴影。 Nguyen等[25]设计了具有灵敏度参数的scGAN来调整损失函数的权重。 尽管阴影检测精度在基准[19],[23]上不断提高,但是现有方法仍可能会将黑色物体误识别为阴影,并遗漏了不明显的阴影。 Nguyen等人最近的工作[25]强调了推理全局语义对检测阴影的重要性。 除了这项工作,我们在分析空间环境时还考虑了方向方差。 实验结果表明,我们的方法在基准上的表现进一步优于[25]; 参见第5节。

阴影去除。 早期的作品通过建立从图像形成过程推论得出的物理模型来消除阴影[7],[11],[12],[13],[14],[15],[34]。 然而,这些方法在描述复杂真实场景中的阴影时并不有效[16]。 之后,基于手工特征(例如强度[20],[21],[35],颜色[20],纹理[20],渐变[21])开发了用于阴影去除的统计学习方法。 用于发现阴影的高级语义知识。

最近,由卷积神经网络(CNN)学习的特征被广泛用于阴影去除。 Khan等[16]应用多个CNN来学习检测阴影,并制定了贝叶斯模型以提取阴影遮罩并去除单个图像中的阴影。 最近,Qu等人 [26]提出了一种以端到端的方式去除阴影的体系结构。 该方法应用了三个嵌入网络(全局本地化网络,语义建模网络和外观建模网络)来提取三个级别的特征。 Wang等[24]在一个框架中设计了两个条件生成对抗网络,以同时检测和去除阴影。

但是,去除阴影是一项艰巨的任务。正如Qu等人所指出的[26]和Wang等 [24],阴影去除需要图像的全局视图,以实现预测结果的全局一致性。但是,现有方法仍可能无法合理地恢复阴影区域并错误地更改非阴影区域的颜色。在这项工作中,我们以方向感知的方式分析全局空间上下文,并通过考虑当前基准数据集中训练对之间的非阴影区域,制定一种颜色补偿机制来调整像素颜色和亮度[24],[ 26]。实验结果从定性和定量方面证明了我们的方法优于最新方法的有效性。

**本征图像。**另一个相关主题是固有图像分解,其目的是消除输入中的照明并生成仅包含反射率的图像。为了解决这个问题,早期的方法[36],[37],[38],[39],[40],[41]使用各种手工制作的特征来制定约束条件,以提取有效解。请参阅[42]。

借助深度神经网络,技术已转向使用CNN的数据驱动方法。 Narihira等[43]提出了一种称为“直接本征分解”的方法,这是一种早期尝试,它使用多层CNN将图像直接转换为阴影和反射率。 后来,金等[44]使用具有共享中间层的联合CNN来预测深度和其他固有成分。 最近,Lettry等[45]提出了DARN网络,该网络采用了判别器网络和对抗训练方案来增强生成器网络的性能,而Cheng等人[46]设计了一个尺度空间网络来生成本征图像。

这项工作从三个方面扩展了我们先前的工作[1]。 首先,我们采用具有DSC功能的阴影检测网络,通过重新设计输出并制定不同的损失函数来训练网络来消除阴影。 其次,我们表明现有阴影去除数据集的训练对(阴影图像和无阴影图像)中的像素颜色和亮度可能不一致。 为此,在训练阴影去除网络之前,我们制定了颜色补偿机制并使用传递函数使地面真实图像中的像素颜色一致。 第三,我们通过考虑更多基准数据集和测量时间性能,进行更多实验来评估用于阴影检测和阴影去除的网络设计,并说明我们的阴影去除网络如何胜过现有最佳的阴影去除方法。

3 METHODOLOGY

在本节中,我们首先介绍阴影检测网络,然后是阴影去除网络。 图2展示了我们的整体阴影检测网络,该网络使用多个DSC模块(参见图3)来学习不同比例的方向感知空间上下文特征。 我们的网络将整个图像作为输入,并以端到端的方式输出阴影蒙板。

图2:整个阴影检测网络的示意图:(i)从输入图像中提取CNN层上不同比例的特征; (ii)我们嵌入了DSC模块(参见图3),以为每一层生成方向感知的空间上下文(DSC)特征; (iii)我们在每层将DSC特征与卷积特征连接起来,并将连接后的特征图上采样到输入图像的大小; (iv)我们将上采样的特征图组合到多层综合特征(MLIF)中,使用[30]中的深度监督机制,基于每一层的特征预测阴影蒙板,并融合所得的阴影蒙板; (v)在测试过程中,我们计算MLIF层和融合层上的平均阴影蒙板,并使用条件随机场[31]进一步完善检测结果。 有关如何采用此网络进行阴影去除的信息,请参见第3.3节。

首先,它首先使用卷积神经网络(CNN)提取CNN层上不同比例的分层特征图。较浅层的特征图对细节进行编码,这有助于保留阴影边界,而较深层的特征图则具有更多的全局语义,有助于识别阴影和非阴影区域。其次,对于每一层,我们使用DSC模块以方向感知的方式获取空间上下文并生成DSC特征。第三,我们将DSC特征与相应的卷积特征连接起来,并将连接后的特征图上采样到输入的大小。第四,为了利用不同层上特征图的互补优势,我们将上采样的特征图连接起来,并采用1×1卷积层来生成多层集成特征(MLIF)。此外,我们应用深度监督机制[30],[47]向每个层以及MLIF施加一个监督信号,并预测每个层的阴影蒙板。在训练过程中,我们同时将来自多层的预测误差最小化,并通过直接对中间层提供监督来获得更多的判别特征[30]。最后,我们将所有预测的阴影蒙板连接起来,并采用1×1卷积层来生成输出阴影蒙板。参见图2。在测试中,我们计算MLIF层和融合层上的平均阴影蒙板以产生最终的预测结果,并采用完全连接的条件随机场(CRF)[31]来完善结果。为了采用该网络进行阴影去除,我们将无阴影图像替换为阴影蒙板作为真值,制定了一种颜色补偿机制来调整无阴影图像的颜色和亮度一致性,并使用欧几里得损失来优化网络;有关详细信息,请参见第3.3节。

在以下小节中,我们首先详细说明生成DSC特征的DSC模块(第3.1节)。 之后,我们将介绍如何使用DSC模块设计图2中的阴影检测网络(第3.2节),然后介绍如何进一步采用该网络进行阴影去除(第3.3节)。

3.1 Direction-aware Spatial Context

图3显示了我们的DSC模块架构,该架构以特征图作为输入并输出DSC特征。 在本小节中,我们首先描述空间上下文特征的概念和空间RNN模型(第3.1.1节),然后详细说明如何在空间RNN中制定方向感知注意力机制,以学习注意力权重并生成DSC特征( 3.1.2节)。

图3:方向感知空间上下文模块(DSC模块)的示意图。 我们通过采用空间RNN通过两轮在四个主要方向上聚合空间上下文来计算方向感知的空间上下文,并制定注意力机制以生成注意力权重图,以组合不同方向的上下文特征。 在两轮递归转换中,网络共享权重。

3.1.1 Spatial Context Features

递归神经网络(RNN)[48]是通过三个节点数组处理一维顺序数据的有效模型:(i)输入节点数组以接收数据,(ii)隐藏节点数组以更新内部状态 基于过去和现在的数据,以及(iii)一组用于输出数据的输出节点。 RNN中有三种数据转换:(i)从输入节点到隐藏节点,(ii)在相邻的隐藏节点之间,以及(iii)从隐藏节点到输出节点。 通过迭代执行数据转换,在输入节点接收的数据可以在隐藏节点之间传播,并最终在输出节点产生目标结果。

为了处理具有二维空间上下文的图像数据,已经扩展了RNN以建立空间RNN模型[49]; 参见图4的示意图。以CNN的2D特征图为输入,我们首先执行1×1卷积以模拟RNN中的输入到隐藏数据转换。 然后,我们应用四个独立的数据转换以沿每个主要方向(左,右,上和下)聚合局部空间上下文,并将结果融合到中间特征图中; 参见图4(b)。 最后,我们重复整个过程,以进一步在每个主要方向上传播聚合的空间上下文并生成整体空间上下文。 参见图4(c)。

图4:空间上下文信息如何在两轮空间RNN中传播的示意图。

与图4(c)相比,图4(a)中的每个像素仅知道其局部空间上下文,而图4(b)中的每个像素在第一轮数据转换后进一步了解四个主要方向上的空间上下文。 因此,经过两轮数据转换后,每个像素可以获得相关的方向感知全局空间上下文,以学习特征以增强阴影的检测和去除。

为了在空间RNN中执行数据转换,我们遵循IRNN模型[50],因为它快速,易于训练,并且对于远程数据依赖项具有良好的性能[49]。 将hi,jh_{i, j}hi,j​表示为像素(i,j)的特征,我们通过重复以下操作n次,向右执行一轮数据转换(其他三个方向也执行类似的操作)。

hi,j=max⁡(αrighthi,j−1+hi,j,0)(1)h_{i,j} = \max(\alpha_{right} h_{i, j-1} + h_{i, j}, 0) \tag{1} hi,j​=max(αright​hi,j−1​+hi,j​,0)(1)

其中,nnn是特征图的宽度,而αrightα_{right}αright​是递归转换层中向右方向的权重参数。 注意,αrightα_{right}αright​以及其他方向的权重被初始化为一个单位矩阵,并通过训练过程自动学习。

3.1.2 Direction-aware Spatial Context Features

为了有效地以方向感知的方式学习空间上下文,我们进一步在空间RNN中制定方向感知的注意力机制,以学习注意力权重并生成方向感知的空间上下文(DSC)特征。 该设计形成了我们在图3中介绍的DSC模块。

方向感知注意机制。 该机制的目的是使空间RNN通过学习有选择地利用聚集在不同方向上的空间上下文。 参见图3所示的DSC模块的左上方方框。首先,我们使用两个连续的卷积层(具有3×3内核),然后进行ReLU [51]非线性运算,然后是第三卷积层(具有1× 1个内核)以生成四个通道的W。 然后,我们将W分成四个注意权重图,分别表示为WleftW_{left}Wleft​,WdownW_{down}Wdown​,WrightW_{right}Wright​和WupW_{up}Wup​,每个通道一个。 在数学上,如果将上述运算符表示为fattf_{att}fatt​,而将输入特征图表示为XXX,则:

W=fatt(X:θ)(2)W = f_{att}(X: \theta) \tag 2 W=fatt​(X:θ)(2)

其中θ\thetaθ表示由fattf_{att}fatt​(也称为注意力估计器网络)学习的卷积运算中的参数。

再次参见图3中所示的DSC模块。四个权重图以元素方式在相应方向上与空间上下文特征(来自循环数据转换)相乘。 因此,在训练网络之后,网络应学习用于产生适当注意力权重的θ,以选择性地利用空间RNN中的空间上下文。

完成DSC模块。 接下来,我们提供有关DSC模块的详细信息。 如图3所示,在将空间上下文特征与注意权重相乘后,我们将结果连接起来,并使用1×1卷积模拟RNN中的隐藏到隐藏的数据转换,并将特征维数减少四分之一。 然后,我们执行第二轮递归翻译,并使用相同的注意权重集选择空间上下文,根据经验,我们发现共享注意权重而不是使用两组单独的权重可以提高性能; 有关实验,请参见第5节。 还要注意,这些注意权重是根据从输入图像中提取的深层特征自动学习的,因此它们可能因图像而异。 最后,我们使用1×1卷积,然后对级联特征图进行ReLU [51]非线性运算,以模拟从隐藏到输出的转换,并产生输出DSC特征。

3.2 Our Shadow Detection Network

我们的网络是建立在VGG网络[52]之上的,在第一层之外的每一层都应用了一个DSC模块,因为第一层占用内存大。 由于它具有仅具有卷积和池化操作的完全卷积架构,因此由DSC模块捕获的图像空间中像素之间的方向关系保留在特征空间中。

3.2.1 Training

损失函数。 在自然图像中,阴影通常比非阴影区域在图像空间中占据的区域较小。 因此,如果损失函数仅针对总体精度,它将倾向于匹配像素更多的非阴影区域。 因此,我们在训练过程中使用加权的交叉熵损失来优化阴影检测网络。

假设yyy为像素的真值(如果在阴影中,则yyy = 1,否则为yyy = 0),而ppp为像素的预测标签(其中p∈[0,1]p \in [0,1]p∈[0,1])。 第iii个CNN层的加权交叉熵损失LiL_{i}Li​是按类别分布加权的交叉熵LidL_i^dLid​损失和按每类精度加权的交叉熵损失LiaL_i^aLia​的总和:Li=Lid+LiaL_i = L_i^d + L_i^aLi​=Lid​+Lia​,其中:

Lid=−(NnNn+Np)ylog⁡(p)−(NpNp+Nn)(1−y)log⁡(1−p)(3)L_i^d = - (\frac{N_n}{N_n+N_p}) y \log(p) - (\frac{N_p}{N_p+N_n}) (1- y) \log(1- p) \tag 3 Lid​=−(Nn​+Np​Nn​​)ylog(p)−(Np​+Nn​Np​​)(1−y)log(1−p)(3)
Lia=−(1−TPNp)ylog⁡(p)−(1−TNNn)(1−y)log⁡(1−p)(4)L_i^a = - (1 - \frac{TP}{N_p}) y \log(p) - (1 - \frac{TN}{N_n}) (1- y) \log(1- p) \tag 4 Lia​=−(1−Np​TP​)ylog(p)−(1−Nn​TN​)(1−y)log(1−p)(4)

其中TPTPTP和TNTNTN是每个图像的预测正确的阴影像素数量和非阴影像素数量,NpN_pNp​和NnN_nNn​分别是每个图像的阴影和非阴影像素数,因此Np+NnN_p+N_nNp​+Nn​是第iii层的像素总数。在实践中,LidL_i^dLid​有助于平衡阴影和非阴影的检测;如果阴影的面积小于非阴影区域的面积,则对错误分类的阴影像素的惩罚要大于对错误分类的非阴影像素的惩罚。另一方面,受[53]的启发,[53]倾向于选择分类错误的示例来训练深度网络,因此我们扩大了难以分类的类别(阴影或非阴影)的权重。为此,我们引入LiaL_i^aLia​,其中当正确分类的阴影(或非阴影)像素的数量较小时,阴影(或非阴影)类的权重较大,反之亦然。我们在图2所示的阴影检测网络中使用上述每层损失函数。因此,总损失函数LoverallL_{overall}Loverall​是所有在不同尺度上的所有预测荫罩上单个损失的总和:

Loverall=∑iwiLi+wmLm+wfWf(5)L_{overall} = \sum_i w_i L_i + w_m L_m + w_f W_f \tag 5 Loverall​=i∑​wi​Li​+wm​Lm​+wf​Wf​(5)

wiw_iwi​和LiL_iLi​分别表示整个网络中第iii层的权重和损失; wmw_mwm​和LmL_mLm​是MLIF层的权重和损失; wfw_fwf​和LfL_fLf​是融合层的重量和损耗,融合层是整个网络中的最后一层; 参见图2。请注意,根据经验将wiw_iwi​,wmw_mwm​和wfw_fwf​设置为1。 请参阅相关实验的补充材料。

训练参数。 为了在减少过度拟合的同时加快训练过程,我们将在ImageNet [54]上训练的VGG网络[52]的权重用于分类任务,以初始化特征提取层中的参数(请参见图9网络的正面部分) 2)并通过随机噪声初始化其他层中的参数,该随机噪声遵循零均值高斯分布,标准偏差为0.1。 随机梯度下降用于优化整个网络,其动量值为0.9,权重衰减为5×10-4。 根据经验,我们将学习速率设置为10-8,并在12k次迭代后终止学习过程。 请参阅有关训练迭代的相关实验的补充材料。 此外,我们水平翻转图像以进行数据论证。我们在Caffe [55]中建立模型, 由于GPU内存的限制,其最每小批大小为1,并每十次训练迭代更新一次模型参数。

3.2.2 Testing

在测试过程中,我们的网络每层产生一个阴影掩模,包括MLIF层和融合层,每层都有一个监控信号。 之后,我们在MLIF层和融合层上计算平均阴影掩模以产生最终预测。 最后,我们通过考虑邻域像素之间的空间相干性,应用完全连接的条件随机场(CRF)[31]来改善检测结果。 参见图2。

3.3 Our Shadow Removal Network

为了采用图2所示的阴影检测网络进行阴影去除,我们进行了以下三个修改:

  • 首先,我们制定一种颜色补偿机制,以解决训练对之间的颜色不一致问题,即阴影图像(输入)和无阴影图像(真值),然后调整无阴影图像(第3.3.1节) )。
  • 其次,我们用调整后的无阴影图像代替阴影蒙板,作为网络中用于去除阴影的监督(即真值图像); 参见图2。
  • 第三,我们将加权交叉熵损失替换为欧几里得损失,以使用调整后的无阴影图像来训练和优化网络(第3.3.2节)。

3.3.1 Color Compensation Mechanism

通常通过以下方法准备用于去除阴影的训练数据:首先拍摄带有阴影的场景图片,然后通过删除关联的对象拍摄另一幅没有阴影的图片。 由于环境亮度和相机曝光可能会有所不同,因此,训练对可能具有不一致的颜色和亮度; 有关两个不同基准数据集(SRD [26]和ISTD [24])的示例,请参见图5,其中颜色直方图清楚地揭示了不一致之处。 现有的基于网络的方法通过优化网络以产生与目标地面真实情况相匹配的输出来学习去除阴影。 因此,给定这种不一致的训练对,网络可能会产生更亮或更暗的偏差结果。

图5:输入(阴影图像)和真实情况(无阴影图像)之间的不一致。 顶行是SRD [26]的“ IMG 6456.jpg”,底行是ISTD [24]的“ 109-5.png”。

为了解决该问题,我们通过为每对训练图像(输入阴影图像和地面真实无阴影图像)找到一个颜色传递函数来设计颜色补偿机制。 设IsI_sIs​和InI_nIn​分别是训练对的阴影图像(输入)和无阴影图像(真值),Ωs\Omega_sΩs​和Ωn\Omega_nΩn​分别是图像空间中的阴影区域和非阴影区域。 在我们的公式中,我们的目标是找到使非阴影区域(由阴影蒙板指示)上的阴影图像和无阴影图像之间的颜色补偿误差EcE_cEc​最小的颜色传递函数TfT_fTf​:

Ec=∣Is−Tf(In)∣Ωn2(6)E_c = | I_s - T_f(I_n)|_{\Omega_n}^2 \tag 6 Ec​=∣Is​−Tf​(In​)∣Ωn​2​(6)

我们使用以下线性变换来公式化TfT_fTf​(凭经验发现,通过该线性变换足以调整InI_nIn​中的颜色以匹配IsI_sIs​中的颜色)

Tf(x)=Mα⋅(xrxgxb1)(7)T_f(x) = M_\alpha \cdot \left( \begin{array}{lr} x_r \\ x_g \\ x_b \\ 1 \end{array} \right) \tag 7 Tf​(x)=Mα​⋅⎝⎜⎜⎛​xr​xg​xb​1​⎠⎟⎟⎞​(7)

其中xxx是InI_nIn​中具有颜色值(xrx_rxr​,xgx_gxg​,xbx_bxb​)的像素,MαM_αMα​是3×4矩阵,该矩阵将参数存储在颜色传递函数中。 请注意,我们通过考虑IsI_sIs​和InI_nIn​的非阴影区域ΩnΩ_nΩn​中的像素对,使用最小二乘法求解TfT_fTf​的等式(6)。 然后,我们应用TfT_fTf​调整每个训练对的InI_nIn​的整个图像,将图2中的阴影蒙板替换为调整后的无阴影图像(即Tf(In)T_f(I_n)Tf​(In​))作为新的监督,并以端到端的方式训练阴影去除网络。

3.3.2 Training

损失函数。 我们采用欧几里得损失来优化阴影去除网络。 详细地,我们将网络预测表示为I~n\tilde{I}_nI~n​,在训练中将Tf(In)T_f(I_n)Tf​(In​)和I~n\tilde{I}_nI~n​都使用“ LAB”色彩空间,并在整个图像域上计算损耗LrL^rLr:

Lr=∣Tf(In)−I~n∣Ωn∪Ωs2(8)L_r = | T_f(I_n) - \tilde{I}_n | _{\Omega_n \cup \Omega_s}^2 \tag 8 Lr​=∣Tf​(In​)−I~n​∣Ωn​∪Ωs​2​(8)

我们对阴影去除网络中的每一层使用上述损失函数。 总体损耗函数LoverallrL^r_{overall}Loverallr​是所有第iii层LirL^r_iLir​,MLIF层和融合层LfrL^r_fLfr​上的损耗LrL_rLr​的总和:

Loverallr=∑iwirLir+wmrLmr+wfrLfr(9)L^r_{overall} = \sum_i w_i^r L_i^r + w_m^r L_m^r + w_f^rL_f^r \tag 9 Loverallr​=i∑​wir​Lir​+wmr​Lmr​+wfr​Lfr​(9)
和等式5类似,设置wirw_i^rwir​、wmrw_m^rwmr​、wfrw_f^rwfr​为1.

**训练参数。**同样,我们通过ImageNet [54]上训练好的VGG网络[52]初始化特征提取层中的参数(请参见图2中所示的网络的前端),以加快训练过程并减少过拟合,并且像阴影检测一样,通过随机噪声初始化其他层中的参数。我们使用Adam[56]来优化阴影去除网络,其第一动量值为0.9,第二动量值为0.99,权重衰减为5×10-4。这种优化方法针对网络中的各个参数自适应地调整学习率。它降低了频繁更新参数的学习率,并提高了很少更新参数的学习率。根据经验[57],我们将基本学习率设置为10-5,通过在90k和130k迭代时乘以0.316来降低它,并在160k迭代时停止学习。此外,图像被水平和垂直翻转,随机裁剪并旋转以进行数据增强。该模型在Caffe [55]中建立,最小批量为1。

3.3.3 Testing

在测试过程中,我们的网络会直接为每个层(包括MLIF层和融合层)生成一个无阴影图像,每个层均带有监督。 之后,我们在MLIF层和融合层上计算平均无阴影图像以产生最终结果。

4 EXPERIMENTS ON SHADOW DETECTION

在本部分中,我们将提供评估阴影检测网络的实验:将其与最新方法进行比较,评估其网络设计和时间性能,并显示阴影检测结果。 在下一部分中,我们将介绍阴影去除网络的结果和评估。

4.1 Shadow Detection Datasets & Evaluation Metrics

基准数据集。 我们使用两个基准数据集。 第一个是SBU阴影数据集[23] [61],它是最大的公开注释的阴影数据集,包含4089个训练图像和638个测试图像,涵盖了各种场景。 我们采用的第二个数据集是UCF阴影数据集[19]。 继[32]之后,它包括221个图像,分为111个训练图像和110个测试图像。 我们使用SBU训练集训练阴影检测网络。

评估指标。 我们采用两个常用指标来定量评估阴影检测性能。 第一个是准确性指标:

accuracy=TP+TNNp+Nn(10)accuracy = \frac {TP + TN} {N_p + N_n} \tag {10} accuracy=Np​+Nn​TP+TN​(10)

其中TPTPTP,TNTNTN,NpN_pNp​和NnN_nNn​分别为预测正确的阴影像素,预测正确的非阴影像素,阴影像素数和非阴影像素数,如第3.2节中所定义。 由于自然图像中的NpN_pNp​通常比NnN_nNn​小得多,因此我们采用第二种度量标准,即平衡误差率(BER),通过对阴影和非阴影区域进行同等处理来获得更加平衡的评估:

BER=(1−12(TPNp+TNNn))×100(11)BER = (1 - \frac {1} {2} (\frac {TP}{N_p} + \frac{TN}{N_n})) \times 100 \tag{11} BER=(1−21​(Np​TP​+Nn​TN​))×100(11)

注意,与accuracy 不同,对于BER,其值越低,检测结果越好。

4.2 Comparison with the State-of-the-art

与最新的阴影检测方法进行比较。 我们将我们的方法与四种最新的阴影检测方法进行了比较:scGAN [25],stacked-CNN [23],patched-CNN [33]和UnaryPairwise [28]。 前三种是基于网络的方法,而后一种是基于手工制作的特征。 为了进行公平的比较,我们可以直接从作者那里获得结果,也可以通过使用作者使用推荐的参数设置提供的实现生成结果来获得其阴影检测结果。

表1报告了比较结果,表明对于基准数据集,我们的方法在准确性和BER方面均优于所有其他方法。我们的阴影检测网络使用SBU训练集[23],[61]进行了训练,但在UCF数据集上仍然优于其他阴影,从而显示了其泛化能力。此外,我们在图6和7中显示了视觉比较结果,其中显示了各种具有挑战性的情况,例如,暗阴影旁边的浅阴影,复杂背景周围的阴影以及阴影周围的黑色物体。如果不了解全局图像语义,就很难找到这些阴影,并且容易将非阴影区域误识别为阴影。从结果可以看出,与其他方法相比,我们的方法可以有效地定位阴影并避免误报,例如,对于被其他人误认为阴影的黑色物体,我们的方法仍可以将其识别为非阴影。

表1:将我们的方法(DSC)与最新的阴影检测方法(scGAN [25],stacked-CNN [23],patchedCNN [33]和一元对[28])进行显着性检测(SRM [58])进行比较 和Amulet [59]),以及语义图像分割(PSPNet [60])。 注意,由于不同的测试拆分,UCF数据集上的结果与[1]不同。

与最新的显着性检测和语义分割方法进行比较。 通过使用带注释阴影的数据集训练网络,也可以将用于显着性检测和语义图像分割的深层网络用于阴影检测。因此,我们使用另一个用于显着性检测的最新深度模型(SRM [58]和Amulet [59])和一个用于语义图像分割的最新深度模型(PSPNet [60])执行另一个实验。

为了公平地比较,我们使用作者提供的实现,采用ImageNet [54]上训练的参数进行分类任务以初始化其模型,在SBU训练集上对模型进行重新训练以进行阴影检测,并调整训练 参数以获得最佳阴影检测结果。 表1中的最后三行报告了准确性和BER指标的比较结果。 尽管这些方法在两个指标上均取得了良好的结果,但对于两个基准数据集,我们的方法仍相对于它们表现良好。 请同时参考图6和7中的最后三列以获得视觉比较结果。

图6:通过我们的方法和其他方法(第4至第9列)生产的阴影蒙板与第2列中显示的真实图像的视觉比较。 请注意,stkd’-CNN和patd’-CNN分别代表stacked-CNN和patched-CNN。

4.3 Evaluation on the Network Design

组件分析。 我们进行了一项实验,以评估DSC模块设计的有效性。 在这里,我们使用SBU数据集并考虑两个基准网络。 第一个基线(表示为“basic”)是通过从图2所示的整个网络中删除所有DSC模块而构建的网络。第二个基线(表示为“basic+context”)考虑了空间上下文,但忽略了方向-注意权重。 与第一基线相比,第二基线包括所有DSC模块,但是消除了DSC模块中的方向感知注意机制,即,无需计算W并直接连接上下文特征; 参见图3。这等效于将所有注意权重W设置为1;否则将其设置为1。 请参阅有关两个基准的体系结构的补充材料。

表2报告了比较结果,表明我们的具有多尺度特征的基本网络和加权的交叉熵损失可以产生更好的结果。 此外,考虑空间背景和DSC功能可以带来进一步的改进; 视觉比较结果也请参见图8。

表2:组件分析。 我们使用SBU训练集训练三个网络,并使用SBU测试集对它们进行测试[23],[61]:“basic”表示图3所示的体系结构,但没有所有DSC模块。 “basic+context”表示具有空间上下文但不具有方向感知的空间上下文的“basic”网络; “ DSC”是整个网络,如图3所示。

图8:组件分析的视觉比较结果。

DSC体系结构分析。 DSC体系结构分析时,我们遇到了两个问题。 在使用DSC模块设计网络结构时,我们遇到两个问题:(i)空间RNN中有多少轮递归转换; (ii)在递归转换的不同轮次中是否共享注意力权重或使用单独的注意力权重。

我们针对这两个参数修改了我们的网络,并产生了表3中所示的比较结果。从结果中,我们可以看到进行两轮递归翻译并在两轮中共享注意力权重可以产生最佳结果。 当只有一轮递归翻译时,全局图像上下文无法在空间域上很好地传播,因此信息交换的数量不足以学习阴影,而将三轮递归翻译与注意权重的单独副本一起引入 过多的参数使网络难以训练。

表3:DSC体系结构分析。 通过更改DSC架构中的参数(请参见下面的第二和第三列),我们可以产生略有不同的总体网络并探索其性能(请参见最后一列)。

特征提取网络分析。 我们还评估了图2中所示的特征提取网络。在这里,我们使用具有101层的更深层的网络ResNet-101 [62]来替换只有16层的VGG网络。 在ResNet-101中,它具有多层,可生成相同比例的输出要素图,我们为每个比例选择最后一层的输出,即res2c,res3b3,res4b22和res5c,以生成DSC特征,因为最后一层应具有最强的特征。 其他网络部分和参数设置保持不变。

对于VGG网络和ResNet-101,得出的BER值分别为5.59和5.73,表明它们具有相似的性能,而VGG的性能稍好。 较深的网络(ResNet-101)允许生成更强的语义特征,但是当考虑到有限的GPU内存时,由于特征图的尺寸太小,导致细节丢失。

CRF的有效性。 接下来,我们评估CRF [31]作为后处理步骤的有效性。 “ CRF before”和“ CRF after”的BER值分别为5.68和5.59,这表明CRF有助于改善阴影检测结果。 视觉比较结果也请参见图9。

图9 CRF的效果

DSC特征分析。 最后,我们展示了不同方向的空间上下文特征如何影响阴影检测性能。 在这里,通过将左右方向的相关注意力权重设置为零,在检测阴影时忽略水平方向上的空间上下文; 参见图3。类似地,我们通过将上下方向的相关注意权重设置为零来忽略垂直方向上的空间上下文。 图10给出了一些结果,表明当仅在垂直/水平方向上使用空间上下文时,我们可能将黑色区域误识别为阴影,而错过了一些不明显的阴影。 但是,我们的网络可能无法识别微小的阴影/非阴影区域,因为由我们的DSC模块汇总的周围信息可能覆盖了原始功能,因此忽略了这些微小区域; 有关更多结果,请参见图10中的第二行和补充材料。

图10:阴影检测的空间上下文效果。 (a)输入图像; (b)DSC结果; (c)仅使用垂直方向的空间环境; (d)仅使用水平方向的空间环境。

4.4 Additional Results

更多阴影检测结果。 图11显示了更多结果:(a)暗影彼此相邻; (b)小而无联系的阴影; (c)阴影区域和非阴影区域之间没有明确的界限; (d)不规则形状的阴影。 我们的方法仍然可以很好地检测到这些阴影,但是在某些极其复杂的场景中会失败:(a)具有许多小阴影的场景(请参见图13中的第一行),其中深层中的要素会丢失详细信息,并且浅层中的特征缺乏阴影上下文的语义; (b)黑色区域较大的场景(参见图13中的第二行),周围环境不足以指示它是阴影还是黑色物体; (c)具有柔和阴影的场景(请参见图13中的第三行),其中柔和阴影区域和非阴影区域之间的差异很小。

图11:我们的方法产生的更多阴影检测结果。

时间表现。 由于其全卷积架构和RNN模型的简单实现,我们的网络速度很快[50]。 我们在单个GPU(NVIDIA GeForce TITAN Xp)上训练并测试了用于阴影检测的网络,并为每个图像使用了400×400的输入大小。 在SBU训练集上训练整个网络大约需要16.5小时,而测试一张图像平均需要大约0.16秒。 对于使用CRF [31]的后处理,还需要0.5秒来测试图像。

5 EXPERIMENTS ON SHADOW REMOVAL

6 CONCLUSION

Direction-aware Spatial Context Features for Shadow Detection and Removal相关推荐

  1. Shadow Detection

    课题背景 阴影检测向来是计算机视觉中基础且富有挑战性的问题--对于一张输入图像,我们通过生成二进制图像来标记阴影区域,阴影区域的检测为进一步获取图像中的光照情况.物体的形状与位置,以及摄像机的参数提供 ...

  2. [论文解读 2021-TIP] Revisiting Shadow Detection: A New Benchmark Dataset for Complex World

    该论文聚焦于影子的分割(segmentation),创新点在于提出新的数据集和一种局部特征增强方法. 创新点1:自建的数据集CUHK-Shadow: 1. 数据集的特点 10500张带标签的图片:更复 ...

  3. 快速去阴影--Fast Shadow Detection from a Single Image Using a Patched Convolutional Neural Network

    Fast Shadow Detection from a Single Image Using a Patched Convolutional Neural Network https://arxiv ...

  4. 边缘检测:更丰富的卷积特征 Richer Convolutional Features for Edge Detection

    边缘检测:更丰富的卷积特征 Richer Convolutional Features for Edge Detection Source code and paper address Abstrac ...

  5. 深度学习论文: Task-Specific Context Decoupling for Object Detection及其PyTorch实现

    深度学习论文: Task-Specific Context Decoupling for Object Detection及其PyTorch实现 Task-Specific Context Decou ...

  6. 2020 ICDM | AANE: Anomaly Aware Network Embedding For Anomalous Link Detection

    2020 ICDM | AANE: Anomaly Aware Network Embedding For Anomalous Link Detection Paper Link: https://i ...

  7. CNN边缘检测--Richer Convolutional Features for Edge Detection

    Richer Convolutional Features for Edge Detection CVPR2017 Caffe:https://github.com/yun-liu/rcf 本文针对边 ...

  8. RSE2021/云检测:Automatic cloud and cloud shadow detection in tropical areas用于PlanetScope热带地区自动云和云阴影检测

    RSE2021/云检测:Automatic cloud and cloud shadow detection in tropical areas for PlanetScope satellite i ...

  9. 基于深度学习的CNN边缘检测RCF--Richer Convolutional Features for Edge Detection

    Richer Convolutional Features for Edge Detection CVPR2017 Caffe:https://github.com/yun-liu/rcf 本文针对边 ...

最新文章

  1. 排序算法复习之一趟快速排序算法:为什么说关键字所占的位置是多余的
  2. (转)Git详解之一:Git起步
  3. 河南工程学院计算机科学与技术在哪个校区,河南工学院新生在哪个校区_有几个校区及地址介绍...
  4. Loj 【CQOI 2006】简单题,mmp
  5. 排序算法——快速排序算法
  6. mysql的pager命令,mysql pager用法命令行命令
  7. 《剑指offer》求1+2+3+...n(不用if、else、乘除等)
  8. 时间复杂度为m+n,的一种模式匹配,适合子串不是很长的匹配
  9. MAVEN Error: Using platform encoding (GBK actually) to copy filtered resources.....
  10. sqlserver 2008r2 查看表结构及视图、版本及数据类型(字段)
  11. Java 线程池实际运用案例
  12. 动态滑窗-python
  13. 我的世界java版种子多村庄_《我的世界》“村庄与掠夺”PE版种子推荐,出生点就7个村庄相连...
  14. 项目:小型局域网的搭建(基础知识+案例)
  15. GNSS说第(七)讲---自适应动态导航定位(七)---抗差估计理论介绍
  16. UE4 替换文件尝试解决 光照构建失败 Lighting build failed. Swarm failed to kick off
  17. Java简单端口扫描器
  18. Python和Numpy的加权抛硬币游戏的概率
  19. cdn连接失败是什么意思_CDN经常连接失败的原因有哪些?
  20. Dubbo项目消费者调用提供者报cannot be cast to com.baomidou.mybatisplus.core.metadata.IPage

热门文章

  1. MIDI 音乐程序设计 (可以自己编曲的快乐)
  2. python简单实例-python简单案例
  3. 【Optimizaition/x86】Intel CPU的CPUID指令获取的C实现
  4. 手机号码正则表达式(含虚拟运营商)
  5. Promise.all、Promise.race、Promise.allSettled、Promise.any区别
  6. C语言中,头文件和源文件的关系(转)
  7. 拉格朗日方法求最优解
  8. 【PyTorch】50行代码实现GAN——PyTorch
  9. 42岁,王兴的兄弟退休了
  10. 从双非渣硕到字节NLP算法,很强!