DEA-Net通过提出细节增强注意力模块(DEAB),在单幅图像去雾任务中取得了显著成果。将该模块应用于Yolo11中,通过替换Bottleneck模块,进一步提升了目标检测任务的准确性和鲁棒性,同时保持了较高的计算效率。这一改进为深度学习在图像处理和计算机视觉领域的应用提供了新的思路和方法。
单幅图像去雾是一项具有挑战性的不适定问题,它旨在从观测到的雾图中估计出潜在的清晰图像。一些现有的基于深度学习的方法致力于通过增加卷积的深度或宽度来提高模型性能。卷积神经网络(CNN)结构的学习能力仍待充分探索。在本文中,我们提出了一种包含细节增强卷积(DEConv)和内容引导注意力(CGA)的细节增强注意力模块(DEAB),以增强特征学习,从而提升去雾性能。具体而言,DEConv将先验信息融入普通卷积层,以增强表示和泛化能力。然后,通过使用重参数化技术,DEConv可以等价地转换为没有额外参数和计算成本的普通卷积。通过为每个通道分配独特的空间重要性图(SIM),CGA可以关注特征中编码的更多有用信息。此外,本文还提出了一种基于CGA的混合融合方案,以有效地融合特征并辅助梯度流动。通过结合上述组件,我们提出了用于恢复高质量清晰图像的细节增强注意力网络(DEA-Net)。广泛的实验结果表明,我们的DEA-Net的有效性,其PSNR指数超过41 dB,仅使用3.653 M参数,就优于最先进(SOTA)的方法。我们的DEA-Net的源代码将发布在https://github.com/cecret3350/DEA-Net。
关键词-图像去雾,细节增强卷积,内容引导注意力,融合方案。
在雾天场景下拍摄的图像通常会在对比度或色彩失真方面出现明显的视觉质量下降[1],当这些图像输入到一些高级视觉任务(如目标检测、语义分割)中时,会导致性能显著下降。在这些任务中,非常需要或要求无雾图像。因此,旨在从相应的雾图中恢复清晰场景的单幅图像去雾在过去十年中引起了学术界和工业界的广泛关注。作为基本的低级图像恢复任务,图像去雾可以是后续高级视觉任务的预处理步骤。在本文中,我们尝试开发一种有效的算法来去除雾并恢复雾图输入中的细节。
近年来,随着深度学习的快速发展,基于卷积神经网络(CNN)的去雾方法取得了卓越的性能[2]-[6]。早期的基于CNN的方法[2]、[7]、[8]首先分别估计传输图和大气光,然后利用大气散射模型(ASM)[9]推导出无雾图像。通常,传输图由用于合成训练数据集的真实值进行监督。然而,传输图或大气光的不准确估计会显著影响图像恢复结果。最近,一些方法[6]、[10]、[11]更倾向于以端到端的方式预测潜在的无雾图像,因为这往往能获得令人满意的结果。
然而,仍存在两个主要问题: (1)普通卷积的有效性不足。先前的工作[12]-[14]证明,精心设计的先验(如暗通道先验[12]、[15],非局部雾线先验[13]和颜色衰减先验[14])有助于恢复丢失的信息。大多数现有的去雾方法[5]、[6]、[16]采用经典的卷积层进行特征提取,而没有利用这些先验。然而,普通卷积在没有任何约束的情况下搜索广阔的解空间,这在一定程度上可能会限制表达能力(或建模能力)。此外,一些基于Transformer的方法[17]将感受野扩展到整个图像,以挖掘长距离依赖性。它们可以在复杂的训练策略和繁琐的超参数调优的代价下增强表达能力(或建模能力)。同时,不可忽视的是,其计算成本高昂且GPU内存占用巨大。在这方面,理想的解决方案是将精心设计的先验嵌入到CNN中,以提高特征学习能力。 (2)雾的非均匀性。去雾问题中存在两种非均匀性:图像层面的不均匀雾分布和特征层面的通道间雾差异。为了应对第一种非均匀性,Qin等人[5]采用了像素注意力(即空间注意力)来生成空间重要性图(SIM),该图可以自适应地指示不同像素位置的重要性程度。通过这种区分性策略,FFA-Net模型对薄雾和浓雾区域进行了不同的处理。同样,Ye等人[11]试图通过密度估计模块对雾分布的密度进行建模,这本质上也是一种空间注意力。然而,很少有研究人员关注特征层面的非均匀性,这仍有待挖掘。在[5]中使用的通道注意力可以生成一个通道注意力向量□来指示每个通道的重要性程度,但它没有考虑空间维度中的上下文信息。卷积层应用后,雾信息被编码到特征图中。特征空间中不同通道的含义取决于所应用滤波器的作用。在这方面,我们认为空间重要性图应该是特定于通道的,并且应同时考虑两种非均匀性(图像层面和特征层面)。
为解决上述问题,我们设计了一个细节增强注意力模块(DEAB),该模块由一个细节增强卷积(DEConv)和一个内容引导注意力(CGA)机制组成。DEConv包含五个卷积层(四个差分卷积[18]和一个普通卷积),这些卷积层并行部署用于特征提取。具体而言,我们采用了中心差分卷积(CDC)、角度差分卷积(ADC)、水平差分卷积(HDC)和垂直差分卷积(VDC),将传统局部描述符融入卷积层,从而增强了表示和泛化能力。在差分卷积中,首先计算图像中的像素差异,然后与卷积核进行卷积以生成输出特征图。像素对差异计算策略可以设计为将先验信息显式编码到卷积神经网络(CNN)中。例如,HDC和VDC通过学习有益的梯度信息,将梯度先验显式编码到卷积层中。
此外,复杂注意力机制(即CGA)是一个两步注意力生成器,能够首先生成粗略的空间注意力图,然后将其细化为精细版本。具体而言,给定某些输入特征图,我们利用[19]中提出的空间注意力机制和[20]中提出的通道注意力来生成初始SIM(即粗略版本)。然后,根据输入特征图的每个通道对初始SIM进行细化,以生成最终SIM。通过使用输入特征的内容来指导SIM的生成,CGA可以关注每个通道中特征的独特部分。值得一提的是,CGA作为一个通用基本模块,可以插入到神经网络中,以提高各种图像恢复任务的性能。
除了上述改进外,我们还对并行卷积的学习核权重进行重新参数化,以减少参数数量并加速训练和测试过程。通过将核权重应用一些约束并利用卷积层的线性属性,五个并行卷积被简化为一个普通卷积层。因此,所提出的DEConv可以在保持参数数量和计算成本与普通卷积相同的同时,提取丰富的特征以提高去雾性能。图1展示了本方法的效率和有效性。
遵循[6]、[10]、[21]、[22],我们也采用了一个U-net类似框架,使主要耗时的卷积计算在低分辨率空间中进行。其中,浅层和深层特征的融合被广泛使用。特征融合可以增强从浅层到深层的信息流,这对于特征保留和梯度反向传播是有效的。由于感受野的不同,浅层特征中编码的信息与深层特征中编码的信息有很大差异。深层特征中的一个单一像素源自浅层特征中的一个像素区域。简单的加法或拼接操作无法解决感受野不匹配问题。我们进一步提出了一种基于CGA的混合方案,通过学习的空间权重对特征进行调制,自适应地将编码器部分中的低级特征与相应的高级特征融合。
本文提出的方法的示意图如图2所示。我们通过引入包含细节增强卷积和内容引导注意力的细节增强注意力模块(DEAB),将所提出的单图像去雾模型称为DEA-Net。
综上所述,我们的主要贡献如下:
本文的其余部分组织如下。我们首先在第III节中回顾了一些基于深度学习的去雾方法。第III节详细描述了所提出的EDA-Net模型,第IV节展示了实验结果。最后,第V节对本文进行了总结。
A. 单图像去雾
对于单图像去雾,现有方法主要分为两类。一类是手动将雾图和无雾图之间的统计差异概括为经验先验。另一类旨在直接或间接地基于大规模数据集学习映射函数。我们通常将前者称为基于先验的方法,后者称为数据驱动的方法。
基于先验的方法是图像去雾领域的先驱。它们通常依赖于大气散射模型(ASM)[9]和手工设计的先验。众所周知的先验包括暗通道先验(DCP)[12]、[15]、非局部先验(NLP)[13]、颜色衰减先验(CAP)[14]等。He等人[12]、[15]基于一个关键观察提出了DCP,即大多数无雾的户外图像的局部区域包含一些在至少一个颜色通道上具有非常低强度的像素,这些像素有助于估计透射图。CAP[14]从HSV颜色模型出发,建立了深度与亮度和饱和度差异之间的线性关系。Berman等人[13]发现,当存在雾时,无雾图像的像素簇会变成雾线。这些基于先验的方法已经取得了有希望的去雾结果。然而,它们往往只在恰好满足其假设的特定场景中表现良好。
最近,随着深度学习的兴起,研究人员开始关注数据驱动的方法,因为它们可以实现更好的性能。早期的数据驱动方法通常基于物理模型进行去雾。例如,DehazeNet[2]和MSCNN[7]利用卷积神经网络(CNN)来估计透射图。然后,AOD-Net[3]重写了ASM,并同时估计大气光和透射图。后来,DCPDN[8]通过两个不同的网络来估计透射图和大气光。然而,透射图和大气光的不准确估计引入的累积误差可能会导致性能下降。
为了避免这种情况,最近的工作倾向于直接从有雾图像中恢复无雾图像,而无需物理模型的帮助。GFN[23]对原始有雾输入的三张增强图像进行门控和融合,以生成无雾图像。GridDehazeNet[24]利用一个三阶段的基于注意力的网格网络来恢复无雾图像。MSBDN[10]利用提升策略和后投影技术来增强特征融合。FFA-Net[5]将特征注意力机制(FAM)引入去雾网络,以处理不同类型的信息。AECR-Net[6]重用了特征注意力块(FAB)[5],并提出了一种新的对比正则化,该正则化可以从正样本和负样本中受益。UDN[22]分析了图像去雾中的两种不确定性,并利用它们来提高去雾性能。PMDNet[11]和Dehamer[17]采用变换器来构建长距离依赖关系,并在雾密度指导下进行去雾。然而,随着数据驱动方法的发展和去雾性能的提高,去雾网络的复杂性也在增加。与以往工作不同,我们重新思考了标准卷积在图像去雾中的不足,并将精心设计的先验与CNN相结合,设计了一种新的卷积算子,以提高特征学习能力。我们还深入探索了特征层面上未被充分利用的雾的非均匀性。
B. 差值卷积
差值卷积的起源可以追溯到局部二值模式(LBP)[25],它将局部区域的像素差异编码为十进制数,用于纹理分类。自从卷积神经网络在计算机视觉任务中取得成功以来,Xu等人[26]提出了局部二值卷积(LBC),通过使用非线性激活函数和线性卷积层来编码像素差异。最近,Yu等人[27]提出了中心差值卷积(CDC),用完全可学习的权重直接编码像素差异。后来,提出了各种形式的差值卷积,如交叉中心差值卷积[28]和像素差值卷积[29]。考虑到差值卷积在捕获梯度级信息方面的特性,我们首次将其引入单幅图像去雾任务中,以提高性能。
如图2所示,我们的去雾网络(DEA-Net)由三部分组成:编码器部分、特征变换部分和解码器部分。作为DEA-Net的核心,特征变换部分采用堆叠的细节增强注意力块(DEABs)来学习无雾特征。层次结构中有三个层级,我们在不同层级中使用不同的块来提取相应的特征(层级1&2:DEB,层级3:DEAB)。给定一张有雾的输入图像,DEA-Net的目标是恢复出对应的无雾图像。
A. 细节增强卷积
在单图像去雾领域,先前的方法[5]、[6]、[16]通常利用普通卷积(VC)层进行特征提取和学习。普通卷积层在没有任何约束的情况下(甚至从随机初始化开始)搜索庞大的解空间,这限制了其表达能力或建模能力。然后我们注意到,高频信息(例如边缘和轮廓)对于恢复在雾天场景下拍摄的图像具有重要意义。基于此,一些研究人员[8]、[21]、[30]在去雾模型中采用了边缘先验来帮助恢复更清晰的轮廓。受他们工作[8]、[30]的启发,我们设计了一种细节增强卷积(DEConv)层(见图3),该层可以将精心设计的先验整合到普通卷积层中。
在详细阐述所提出的DEConv之前,我们首先回顾一下差分卷积(DC)。先前的工作[27]、[29]、[31]通常将差分卷积描述为像素差值的卷积(首先计算像素差值,然后与核权重进行卷积以生成特征图),这可以增强普通卷积的表示能力和泛化能力。中心差分卷积(CDC)和角差分卷积(ADC)是两种典型的DC,通过重新排列学习到的核权重来节省计算成本和内存消耗[29]。事实证明,它们对于边缘检测[29]和人脸防伪任务[27]、[28]、[31]是有效的。据我们所知,我们是首次将DC引入来解决单图像去雾问题。
在我们的实现中,我们使用了五个卷积层(四个DC[18]和一个普通卷积),这些层是并行部署的,用于特征提取。在DC中,可以设计像素对的差值计算策略来将先验信息显式编码到卷积神经网络(CNN)中。对于我们的DEConv,除了中心差分卷积(CDC)和角差分卷积(ADC)之外,我们还推导出了水平差分卷积(HDC)和垂直差分卷积(VDC),以将传统的局部描述符(如Sobel[32]、Prewitt[33]或Scharr[34])整合到卷积层中。如图4所示,以HDC为例,首先通过计算选定像素对的差值来计算水平梯度。训练后,我们等效地重新排列学习到的核权重,并直接将卷积应用于未处理的输入特征。注意,等效核具有与传统局部描述符相似的格式(水平权重之和等于零)。Sobel[32]、Prewitt[33]和Scharr[34]的水平核可以视为等效核的特例。通过将水平梯度替换为相应的垂直对应项,VDC具有类似的推导。HDC和VDC通过将梯度先验显式编码到卷积层中,通过学习有益的梯度信息来增强表示能力和泛化能力。
在我们的设计中,普通卷积用于获取强度级信息,而差分卷积用于增强梯度级信息。我们将学习的特征简单相加以获得DEConv的输出。我们相信,计算像素差值的方式的更复杂设计可以进一步促进图像恢复任务,但这并不是本文的主要方向。
然而,部署五个并行卷积层进行特征提取会导致参数和推理时间的增加。我们试图利用卷积层的可加性来简化并行部署的卷积,将其简化为单个标准卷积。我们注意到卷积的一个有用属性:如果几个具有相同大小的二维核以相同的步幅和填充对相同的输入进行操作以产生输出,并且它们的输出被相加以获得最终输出,则我们可以在对应位置上将这些核相加以获得一个将产生相同最终输出的等效核。令人惊讶的是,我们的DEConv正好符合这种情况。给定输入特征,DEConv可以利用重参数化技术以与普通卷积层相同的计算成本和推理时间输出。公式如下(为简化起见,省略了偏置):
其中,表示我们提出的DEConv的操作,分别表示VC、CDC、ADC、HDC和VDC的核,*表示卷积操作,表示转换后的核,它将并行卷积组合在一起。
图5直观地展示了重参数化技术的过程。在反向传播阶段,使用梯度传播的链式规则分别更新五个并行卷积的核权重。在正向传播阶段,固定并行卷积的核权重,并通过在对应位置上相加来计算转换后的核权重。注意,由于正向传播阶段同时包含在训练和测试过程中,因此重参数化技术可以同时加速训练和测试过程。
与普通卷积层相比,所提出的DEConv可以在保持参数大小的同时提取更丰富的特征,并且在推理阶段不会引入额外的计算成本和内存负担。关于DEConv的更多讨论可以在第IV-CI节中找到。
B. 内容引导注意力
特征注意力模块(FAM)由一个通道注意力和一个空间注意力组成,它们按顺序排列以计算通道和空间维度上的注意力权重。通道注意力计算一个通道方向的向量,即,以重新校准特征。空间注意力计算一个空间重要性图(SIM),即,以自适应地指示不同区域的重要性水平。FAM对不同通道和像素进行不同的处理,提高了去雾性能。
然而,FAM中的空间注意力只能解决图像级别的雾分布不均问题,而忽略了特征级别的分布不均。FAM中的通道注意力对通道间的差异进行建模,但未考虑上下文信息。随着特征通道数量的增加,图像级别的雾分布信息被编码到特征图中。特征空间中的不同通道根据所应用滤波器的作用具有不同的含义。这意味着对于特征的每个通道,雾信息在空间维度上是不均匀分布的。在这种情况下,需要通道特定的SIM。此外,FAM的另一个问题是这两个注意力权重之间没有信息交换。和是顺序计算的,并分别增强特征。
为了充分解决上述问题,我们提出了一种内容引导注意力(CGA),以粗到细的方式为输入特征的每个单独通道获得专属的SIM,同时充分混合通道注意力权重和空间注意力权重,以保证信息交互。
CGA的详细过程如图6所示,设表示输入特征,CGA的目标是生成通道特定的SIM(即),它与具有相同的维度。
我们首先按照[19]、[20]计算相应的和。
其中,表示ReLU激活函数,表示核大小为的卷积层,表示通道拼接操作。、和分别表示在空间维度上进行全局平均池化操作、在通道维度上进行全局平均池化操作和全局最大池化操作得到的特征。为了减少参数数量和限制模型复杂度,第一个卷积将通道维度从减少到(指降维比例),第二个卷积再将其扩展回。在我们的实现中,我们选择通过将设置为,将通道维度减少到一个固定值(即16)。
然后,我们通过简单的加法操作(遵循广播规则)将和融合,得到粗略的SIM。我们通过实验发现,乘积操作也可以达到类似的结果。
为了获得最终的精细SIM,根据相应的输入特征调整的每个通道。我们利用输入特征的内容作为指导,生成最终的通道特定SIM。特别是,通过通道洗牌操作[35],以交替方式重新排列和的每个通道。
其中,表示sigmoid操作,表示通道洗牌操作,表示核大小为的组卷积层,在我们的实现中,组数设置为。
CGA为每个通道分配唯一的SIM,引导模型关注每个通道的重要区域。因此,可以强调特征中编码的更多有用信息,从而有效提高去雾性能。
如图2右侧所示,将提出的DEConv与CGA相结合,我们提出了DEA-Net的主要模块,即细节增强注意力块(DEAB)。通过移除CGA部分,我们获得了细节增强块(DEB)。
C. 基于CGA的Mixup融合方案
遵循[6]、[10]、[21]、[22],我们为DEA-Net采用了类似编码器-解码器(或U-Net)的架构。我们观察到,将编码器部分与解码器部分的特征进行融合,在去雾和其他低级视觉任务[6]、[10]、[36]、[37]中是一种有效的技巧。低级特征(如边缘和轮廓)对于恢复无雾图像有着不可忽视的作用,但在经过许多中间层后,它们的影响力逐渐减弱。特征融合可以增强从浅层到深层的信息流,这有利于特征保留和梯度反向传播。最简单的融合方式是逐元素相加,这在许多以前的方法中[10]、[11]、[21]都有采用。后来,Wu等人[6]应用自适应Mixup操作通过自学习权重来调整融合比例,这比简单的相加更加灵活。
然而,上述融合方案中存在一个感受野不匹配问题。由于浅层和深层特征具有完全不同的感受野,因此它们所编码的信息差异巨大。深层特征中的一个像素来源于浅层特征中的一个像素区域。简单的相加、拼接或Mixup操作在融合前都无法解决这种不匹配问题。
为了缓解这个问题,我们进一步提出了一种基于CGA的Mixup方案,通过学习的空间权重来调制特征,从而自适应地将编码器部分的低级特征与相应的高级特征进行融合。
图2(d)展示了所提出的基于CGA的Mixup融合方案的细节。核心部分是我们选择使用CGA来计算用于特征调制的空间权重。编码器部分的低级特征和相应的高级特征被输入到CGA中以计算权重,然后通过加权求和的方法进行组合。我们还通过跳跃连接添加输入特征,以缓解梯度消失问题并简化学习过程。最后,融合后的特征通过一个卷积层投影以获得最终特征(即)。
关于基于CGA的Mixup融合方案的更多讨论,请参见第IV-C3节。
D. 整体架构
通过将(1)DEConv、(2)CGA和(3)基于CGA的Mixup融合方案相结合,我们提出了以DEAB和DEB为基本块的DEA-Net。如图2所示,我们的DEA-Net是一个三级类似编码器-解码器(或U-Net)的架构,由三部分组成:编码器部分、特征变换部分和解码器部分。在我们的DEA-Net中有两个下采样操作和两个上采样操作。下采样操作将空间维度减半并将通道数加倍,这是通过设置步长为2并将输出通道数设置为输入通道数的两倍的正常卷积层来实现的。上采样操作可以视为下采样操作的逆形式,这是通过反卷积层来实现的。第一级、第二级和第三级的维度大小分别为、和。在我们的实现中,我们将C的值设置为32。以前的方法[6]、[22]仅在低分辨率空间中进行特征变换,这会导致信息丢失,这对于像去雾这样的细节敏感任务来说是非同小可的。不同的是,我们从第一级到第三级都部署了特征提取块。具体来说,我们选择在不同级别中使用不同的块(第一级和第二级:DEB,第三级:DEAB)。对于特征融合,我们在下采样操作后的特征和相应上采样操作前的特征之间进行融合(在图2中用绿色箭头线突出显示)。最后,我们简单地在末尾使用一个卷积层来获得去雾结果J。
通过最小化预测的无雾图像J与相应的真实值GT之间的像素差异来训练DEA-Net。在我们的实现中,我们选择损失函数(即平均绝对误差)来驱动训练。
A. 数据集和评估指标
数据集。在我们的实现中,我们在合成数据集和真实拍摄数据集上训练和测试了我们提出的去雾网络(DEA-Net)。REalistic Single Image DEhazing(RESIDE)[38]是一个广泛使用的数据集,包含五个子集:室内训练集(ITS)、室外训练集(OTS)、合成目标测试集(SOTS)、真实任务驱动测试集(RTTS)和混合主观测试集(HSTS)。我们在训练阶段选择ITS和OTS,在测试阶段选择SOTS。请注意,SOTS被分为两个子集(即SOTS-indoor和SOTS-outdoor),用于分别评估在ITS和OTS上单独训练的模型。ITS包含1399张室内清晰图像,对于每一张清晰图像,基于物理散射模型生成了10张模拟的雾图像。至于OTS,我们选择了大约296K张图像用于训练过程{ }^{2} 。SOTS-indoor和SOTS-outdoor分别包含500张室内和500张室外测试图像。此外,我们还采用了Haze 4K数据集[39]来评估我们的DEA-Net,该数据集包含3000张合成训练图像和1000张合成测试图像。此外,还利用了一些真实拍摄的雾图像来进一步验证其在真实场景中的有效性。
评估指标。峰值信噪比(PSNR)和结构相似性指数(SSIM)[40]是计算机视觉领域常用来衡量图像质量的指标,我们利用这两个指标对去雾性能进行评估。为了公平比较,我们基于不裁剪像素的RGB彩色图像来计算这些指标。
B. 实现细节
我们在PyTorch深度学习平台上实现了提出的DEA-Net模型,该平台配备了一块NVIDIA RTX3080Ti GPU。我们在第1级、第2级和第3级分别部署了去雾基础块(DEB)、去雾基础块(DEB)和去雾增强注意力块(DEAB)。不同阶段部署的块数[N₁, N₂, N₃, N₄, N₅]设置为[4,4,8,4,4]。我们使用Adam[41]优化器对DEA-Net进行优化,并将β₁、β₂、ε设置为默认值,即0.9、0.999、1e⁻⁸。此外,初始学习率和批量大小分别设置为1e⁻⁴和16。采用余弦退火策略[42]将学习率从初始值调整到1e⁻⁶。为了训练模型,我们从原始图像中随机裁剪出大小为256×256的图像块,然后采用两种数据增强技术,包括:90°、180°或270°旋转以及垂直或水平翻转。在整个训练阶段,模型进行了1500K次迭代,在ITS上训练我们的DEA-Net大约需要5天时间。
C. 消融研究
为了证明我们提出的DEA-Net的有效性,我们研究了(1)细节增强卷积(DEConv)、(2)内容引导注意力(CGA)和(3)基于CGA的混合融合方案的设计和效果。我们通过消融实验分析了每个组件的贡献。
1)DEConv:我们首先在第3级部署经典残差块(RB)[43]来构建基线模型,该模型表示为Base_RB。作为去雾领域常用的基本块,我们还从[5]中在第3级采用了特征注意力块(FAB)。超参数设置为原文中描述的默认值。我们将此模型称为我们的第二个基线,即Base_FAB。
为了提取更有效的特征,我们通过将DEConv引入RB和FAB来修改块。如图7所示,在RB和FAB中,第一个普通卷积层都被提出的DEConv替换。在第3级部署的块分别表示为和FAB_{w/DEconv},相应的模型分别表示为Model_RB_D和Model_FAB_D。
为了公平比较,四个块(即RB、FAB、和)都在第3级串联了6次,并且使用了相同的融合方案(即Mixup[5])。为了方便,我们省略了第1级和第2级的块,并且只进行了500K次迭代训练,初始学习率设置为2e⁻⁴(这些设置与消融研究一致)。实验结果在同一测试数据集(即SOTS-Indoor[38]数据集)上进行测试。尽管指标低于表V中报告的完全训练模型,但趋势和数值是一致且有意义的。
上述所有模型的性能总结在表I中。将普通卷积层替换为并行卷积层(即DEConv)后,在RB和FAB上,PSNR分别提高了0.27dB和0.6dB。通过比较Model_FAB_D和Base_FAB,结果表明,尽管DEConv大约将参数数量增加了一倍(4505K vs. 2143K),但它确实可以提高指标值(即PSNR和SSIM)。这是非常不利的,并且可能在某些内存受限的情况下导致失败,从而禁止在移动或嵌入式设备上使用DEConv。
为了解决这个问题,我们通过将相同位置的学习核权重相加(即重新参数化),将DEConv等价转换为标准的3×3卷积。表II显示了Model_FAB_D在重新参数化操作前后的参数数量(# Param.)、浮点运算数量(# FLOPs)和推理时间的比较结果。我们可以清楚地看到,重新参数化操作简化了并行结构,而没有触发性能下降。特别是,简化后,与Base_FAB相比,Model_FAB_D仍然实现了0.6dB的性能提升,并且没有引入额外的开销。
此外,我们还探索了从只有一个普通卷积层(即FAB)的并行卷积层设计,到两个并行普通卷积层,再到完整的DEConv(即FAB_{w/DEconv})的设计。如表III所示,向FAB添加一个并行普通卷积层会导致性能下降0.15dB。这背后的潜在原因可能是由于相同层提取的冗余特征导致的训练困难。相反,向FAB添加一个并行差异卷积(DC)层可以提高性能。实验结果验证了通过嵌入传统先验信息,差异卷积层可以有效地提取更具代表性的特征。我们还观察到,通过添加更多并行DC流进行特征提取,PSNR性能从33.07dB逐渐提高到33.67dB。SSIM也呈现出类似的趋势。基于上述讨论,我们选择具有基本块FAB_{w/DEconv}的Model_FAB_D进行后续研究。
2)CGA:此外,我们研究了所提出的两步粗到细注意力机制(即CGA)的有效性。如第二节所述,CGA生成通道特定的空间重要性图(SIMs)来指示每个通道的重要区域。我们将CGA与其他注意力机制进行了比较,如许多去雾方法【5】、【6】、【16】中使用的特征注意力模块(FAM)和常见的卷积块注意力模块(CBAM)【19】。FAM和CBAM都包含顺序的通道注意力和空间注意力,但实现方式略有不同。
Model_FAB_D在第三级联接了块,在块中采用了FAM。然后,我们将CGA和CBAM结合到块中,分别生成 & cga(即DEAB)和 &,相应的模型分别表示为Model_DEAB和Model_FAB_D_CBAM。
FAM或CBAM中使用的空间注意力仅通过学习单通道SIM来学习,以指示具有相对更多通道的输入特征的重要区域。这些方法忽略了每个特征通道的特异性,并在某种程度上限制了卷积神经网络(CNNs)的强大表示能力。如表I右三列所示,Model_DEAB在峰值信噪比(PSNR)方面比Model_FAB_D和Model_FAB_D_CBAM分别高出1.5 dB和1.01 dB。结果表明,CGA通过学习通道特定的SIM可以更好地重新校准特征,从而关注通道级的雾分布差异。
图8直观地展示了CGA和FAM学习的SIM以及相应的处理结果。如图8e所示,FAM获得的一通道SIM可以在一定程度上指示不均匀的雾分布。然而,由于一些轮廓模式的混合,它不够准确(例如红色椅子区域)。通过使用输入特征的内容来指导SIM的生成,CGA可以学习更准确的空间权重。图8f显示了八个随机选择的通道SIM,以及所有SIM的平均图(右下角)。通道特定的SIM对不同通道的特征应用不同的空间权重,可以更好地引导模型关注关键区域。图8c和图8d是相应的结果。我们观察到Model_FAB_D恢复的拱门区域(用红色矩形突出显示)有明显的雾残留。
3)基于CGA的Mixup融合方案:我们进一步进行了消融研究,以验证所提出的基于CGA的Mixup融合方案的有效性。我们以来自AECR-Net【6】的带有Mixup融合方案的Model_DEAB为基线,然后评估另外两个方案:逐元素相加【10】、【11】、【21】和提出的基于CGA的Mixup。它们的模型分别称为Model_DEAB_A和Model_DEAB_C。比较结果如表IV所示。从结果中可以看出,相加方案与Mixup方案性能非常接近(PSNR高出0.06 dB,SSIM低0.002)。相加是Mixup在权重为常数时的特殊情况,我们通过实验发现初始值对Mixup的性能有显著影响。值得注意的是,我们提出的基于CGA的Mixup融合方案在PSNR和SSIM方面均达到了最佳性能。
此外,我们在第一级和第二级部署了特征提取块,以进一步提高性能。通过在第一级和第二级部署残差块(RB)(我们称此模型为Model_MS),性能有了大幅提升(PSNR提高了2.52 dB)。这意味着在高分辨率空间甚至全分辨率空间中转换特征可以修复丢失的信息,这对于图像回归至关重要。我们的最终模型DEA-Net-S通过在第一级和第二级部署DEB,在PSNR方面达到了39.16 dB,在SSIM方面达到了0.9921。后缀“-S”表示该模型是在消融研究的设置下训练的,是简化版本。对于Model_MS和DEA-Net-S,设置为[3,3,6,3,3]。值得一提的是,我们考虑到模型复杂性和避免复杂的超参数调整(例如缩减率),在第一级和第二级中省略了CGA(将DEAB简化为DEB)。
D. 与SOTA方法的比较
在本节中,我们将在SOTSIndoor、SOTS-Outdoor和Haze4K数据集上,将我们提出的DEA-Net与4种早期去雾方法(包括DCP [12]、DehazeNet [2]、AOD-Net [3]、GFN [23])以及8种最新的最先进的(SOTA)单图像去雾方法(包括FFA-Net [5]、MSBDN [10]、DMT-Net [39]、AECR-Net [6]、SGIDPFF [21]、UDN [22]、PMDNet [11]、Dehamer [17])进行比较。我们报告了三种DEA-Net变体,包括在消融研究(即表IV中的最终模型)中设置的DEA-Net-S、正常设置的DEA-Net,以及具有正常设置和来自AECR-Net [6]的对比正则化(CR)的DEA-Net-CR。DEA-Net-CR的CR设置与AECR-Net [6]相同。请注意,CR不会增加额外的参数和推理时间,因为它可以在测试阶段直接移除。对于其他方法,如果公开可用,我们采用这些方法的官方发布代码或评估结果进行公平比较;否则,我们使用相同的训练数据集重新训练它们。
定量分析。表V展示了我们在SOTS [38]和Haze4K [39]数据集上,对DEA-Net和其他最先进方法的定量评估结果(PSNR和SSIM指标)。我们可以看到,即使在SOTSindoor数据集上,我们的DEA-Net-S也达到了39.16 dB的PSNR和0.9921的SSIM,性能优于其他方法。此外,我们的DEA-Net和DEA-Net-CR在SOTS-indoor和SOTS-outdoor数据集上都大幅提升了性能。在Haze4K数据集上,我们的DEA-Net和DEA-Net-CR获得了最佳的SSIM(分别为0.9869和0.9885)。我们将结果四舍五入到小数点后两位,以保持与[39]一致。我们的DEA-Net-CR在SOTS和Haze4K的所有比较中均排名第一。
此外,我们采用参数数量(# Param.)、浮点运算数量(# FLOPs)和运行时作为计算效率的主要指标。早期的去雾方法虽然参数数量很少,但性能却大幅下降。与最近的SOTA方法相比,我们的DEA-Net在可接受的参数数量和浮点运算数量下运行得最快。我们的DEA-Net变体中的任何一个在参数数量和浮点运算数量上都能排名第二。这表明我们的DEA-Net在性能和模型复杂性之间达到了良好的平衡。请注意,浮点运算数量和运行时间是在分辨率为的彩色图像上测量的。
定性分析。图9展示了我们在合成SOTS-indoor数据集上,将DEA-Net与之前的SOTA方法进行视觉比较的结果。我们提出的DEA-Net能够恢复更锐利、更清晰的轮廓或边缘,并且DEA-Net得到的结果包含的雾残留更少。图10展示了在合成SOTS-Outdoor数据集上的视觉比较结果。我们观察到,在户外场景中,我们的DEA-Net的结果比其他方法更接近真实情况。我们还测试了DEA-Net在真实雾天图像上的效果,并与各种SOTA方法的结果进行了比较。如11图所示,其他方法要么在处理结果中仍然残留雾气,要么产生颜色偏差和伪影。相反,我们的DEA-Net能够输出视觉上更令人满意的去雾结果。
在本文中,我们提出了一种DEA-Net来解决具有挑战性的单图像去雾问题。具体来说,我们通过引入差异卷积,将局部描述符整合到普通卷积层中,设计了细节增强卷积(DEConv)。与普通卷积相比,DEConv具有增强的表示和泛化能力。此外,DEConv可以等效地转换为普通卷积,而不会触发额外的参数和计算成本。然后,我们设计了一种称为内容引导注意(CGA)的精细注意机制,它为每个通道分配唯一的空间重要性图(SIM)。通过CGA,可以强调特征中编码的更多有用信息。基于CGA,我们进一步提出了一种融合方案,以有效地将编码器部分中的低级特征与相应的高级特征进行融合。大量实验表明,我们的DEA-Net在定量和定性方面都取得了最先进的结果。
pip install einops
from einops.layers.torch import Rearrange
class SpatialAttention(nn.Module):
def __init__(self):
super(SpatialAttention, self).__init__()
self.sa = nn.Conv2d(2, 1, 7, padding=3, padding_mode='reflect', bias=True)
def forward(self, x):
x_avg = torch.mean(x, dim=1, keepdim=True)
x_max, _ = torch.max(x, dim=1, keepdim=True)
x2 = torch.concat([x_avg, x_max], dim=1)
sattn = self.sa(x2)
return sattn
class ChannelAttention(nn.Module):
def __init__(self, dim, reduction=8):
super(ChannelAttention, self).__init__()
self.gap = nn.AdaptiveAvgPool2d(1)
self.ca = nn.Sequential(
nn.Conv2d(dim, dim // reduction, 1, padding=0, bias=True),
nn.ReLU(inplace=True),
nn.Conv2d(dim // reduction, dim, 1, padding=0, bias=True),
)
def forward(self, x):
x_gap = self.gap(x)
cattn = self.ca(x_gap)
return cattn
class PixelAttention(nn.Module):
def __init__(self, dim):
super(PixelAttention, self).__init__()
self.pa2 = nn.Conv2d(2 * dim, dim, 7, padding=3, padding_mode='reflect', groups=dim, bias=True)
self.sigmoid = nn.Sigmoid()
def forward(self, x, pattn1):
x = x.unsqueeze(dim=2) # B, C, 1, H, W
pattn1 = pattn1.unsqueeze(dim=2) # B, C, 1, H, W
x2 = torch.cat([x, pattn1], dim=2) # B, C, 2, H, W
x2 = Rearrange('b c t h w -> b (c t) h w')(x2)
pattn2 = self.pa2(x2)
pattn2 = self.sigmoid(pattn2)
return pattn2
class DEABlock(nn.Module):
def __init__(self, dim, kernel_size, reduction=8):
super(DEABlock, self).__init__()
self.conv1 = Conv(dim, dim, kernel_size)
self.conv2 = Conv(dim, dim, kernel_size)
self.sa = SpatialAttention()
self.ca = ChannelAttention(dim, reduction)
self.pa = PixelAttention(dim)
def forward(self, x):
res = self.conv1(x)
res = res + x
res = self.conv2(res)
cattn = self.ca(res)
sattn = self.sa(res)
pattn1 = sattn + cattn
pattn2 = self.pa(res, pattn1)
res = res * pattn2
res = res + x
return res
https://jingjing.blog.csdn.net/article/details/144555539
YOLO11l summary (fused): 816 layers, 25,718,688 parameters, 0 gradients, 88.6 GFLOPs
Class Images Instances Box(P R mAP50 mAP50-95): 100%|██████████| 15/15 [00:21<00:00, 1.43s/it]
all 230 1412 0.955 0.963 0.978 0.741
c17 40 131 0.976 1 0.995 0.84
c5 19 68 0.983 0.971 0.994 0.835
helicopter 13 43 0.955 0.988 0.975 0.605
c130 20 85 0.986 0.918 0.963 0.654
f16 11 57 0.96 0.947 0.976 0.679
b2 2 2 0.858 1 0.995 0.65
other 13 86 0.981 0.942 0.975 0.532
b52 21 70 0.981 0.971 0.988 0.841
kc10 12 62 1 0.978 0.99 0.862
command 12 40 0.999 1 0.995 0.815
f15 21 123 1 0.962 0.98 0.694
kc135 24 91 0.986 0.989 0.988 0.707
a10 4 27 0.956 0.808 0.966 0.441
b1 5 20 1 0.975 0.995 0.689
aew 4 25 0.95 1 0.964 0.755
f22 3 17 0.954 1 0.995 0.79
p3 6 105 1 0.985 0.995 0.789
p8 1 1 0.773 1 0.995 0.796
f35 5 32 1 0.59 0.714 0.433
f18 13 125 0.992 0.973 0.992 0.824
v22 5 41 0.992 1 0.995 0.702
su-27 5 31 0.989 1 0.995 0.868
il-38 10 27 0.972 1 0.995 0.847
tu-134 1 1 0.791 1 0.995 0.995
su-33 1 2 0.871 1 0.995 0.726
an-70 1 2 0.869 1 0.995 0.796
tu-22 8 98 0.996 1 0.995 0.837
Speed: 0.4ms preprocess, 36.1ms inference, 0.1ms loss, 25.7ms postprocess per image