《Neural Networks 2024》 自适应细粒度通道注意力机制FCA,涨点起飞起飞了!

文摘   2024-12-20 17:21   中国香港  

论文介绍

题目:Unsupervised Bidirectional Contrastive Reconstruction and Adaptive Fine-Grained Channel Attention Networks for image dehazing

论文地址:

https://www.sciencedirect.com/science/article/abs/pii/S0893608024002387

QQ深度学习交流群:719278780

扫描下方二维码,加入深度学习论文指南星球!

加入即可获得,模块缝合、制作、写作技巧,学会“结构”创新、“创新点”创新,从三区到顶会,小论文大论文,毕业一站式服务

创新点

  • 双向对比重建框架(BCRF)
    论文提出了一种无监督的双向对比重建框架,通过在生成网络与参数估计网络之间引入双向对比重建约束,不仅解决了CycleGAN框架中生成器学习混乱的问题,还加强了对去雾图像的内容和清晰度约束,从而提升了网络的重建能力和去雾效果。

  • 自适应细粒度通道注意力机制(FCA)
    提出了FCA机制,通过相关矩阵捕获全局和局部信息之间的依赖关系,并促进它们的交互。这种机制实现了更精准的特征权重分配,有效提高了去雾相关特征的提取能力和网络性能。

  • 无监督去雾新方法(UBRFC-Net)
    通过将设计的BCRF和FCA机制无缝集成到无监督去雾框架中,提出了一种新的UBRFC-Net方法。在多个挑战性数据集上的实验结果表明,该方法在去雾性能上优于现有的无监督去雾方法,达到了当前最优的性能。

  • 有效解决现有方法的局限性

    • 克服了CycleGAN框架中数据分布不一致导致的学习混乱问题。

    • 弥补了DisentGAN框架中生成图像约束不足的问题,显著减少了内容细节丢失和颜色失真现象。

    • 在去雾任务中实现了全局和局部信息的高效结合与权重分配。

方法

整体架构

      UBRFC-Net模型由端到端去雾网络和参数估计网络组成,结合大气散射模型,通过双向对比重建框架(BCRF)和自适应细粒度通道注意力机制(FCA)优化去雾过程。模型通过前向和反向重建约束生成图像的清晰度和内容一致性,同时利用FCA机制动态融合全局与局部信息,精准分配特征权重,从而提升去雾效果。整体架构以无监督方式克服现有方法的局限性,取得了更优的去雾性能。

  • 端到端去雾网络(End-to-End Dehazing Network,GE2EG_{E2E}

    • 负责从输入的有雾图像II 中生成清晰图像JJ

    • 网络结构基于U-Net,结合多层残差模块用于特征提取和解码阶段的上采样。

  • 参数估计网络(Parameter Estimation Network,GAG_AGtG_t

    • GAG_A:生成大气光值AA

    • GtG_t:生成透射率图tt

    • 利用这些参数与清晰图像JJ 共同参与后续重建过程。

  • 大气散射模型(Atmospheric Scattering Model, ASM)

    • 利用JJAAtt 实现前向重建(重建有雾图像II')和反向重建(重建清晰图像JJ')。

    • 提供图像内容和清晰度一致性约束,优化生成结果。

  • 双向对比重建框架(Bidirectional Contrastive Reconstruction Framework, BCRF)

    • 清晰图像JJ 与其反向重建的JJ' 对比。

    • 有雾图像II 与其前向重建的II' 对比。

    • 建立从有雾图像到清晰图像的双向对比重建约束:

    • 增强网络的图像复原能力,避免生成器学习混乱。

  • 自适应细粒度通道注意力机制(Adaptive Fine-Grained Channel Attention, FCA)

    在解码阶段和重建过程中动态融合全局与局部信息。通过相关矩阵捕获特征间的依赖关系,合理分配特征权重,提升去雾性能。

即插即用模块作用

FCA 作为一个即插即用模块

  • 图像复原任务:

    • 例如图像去雾、去模糊、去噪声、去雨滴等任务。

    • 在这些任务中,FCA可帮助更精准地分配全局与局部信息的特征权重,从而提升复原效果。

  • 高分辨率图像处理:

    • 例如超分辨率重建、图像细节增强等。

    • FCA能有效捕获高分辨率图像中的细粒度特征并结合全局语义信息。

  • 目标检测和图像分割:

    • 例如自动驾驶场景中的目标检测,或医学图像中的病灶区域分割。

    • FCA通过增强局部特征的关注力,提升目标或区域的检测与分割性能。

  • 生成对抗网络(GAN)优化:

    • 在生成任务中,如图像生成或风格迁移。

    • FCA可以优化生成器的特征表示能力,从而提高生成图像的质量和真实性。

  • 场景理解与智能感知:

    适用于安防监控中的图像感知、无人机图像分析等任务。FCA能提升复杂场景下的特征提取效果,在全局理解和局部特性之间实现平衡。

消融实验结果

表5:验证模型不同组件的贡献

  • 表5 通过逐步移除模型的关键组件(如双向对比重建框架 BCRF、自适应细粒度通道注意力机制 FCA 等),对比不同模型配置下的性能表现。

  • 结论:表明 BCRF 和 FCA 机制是提升模型去雾性能的核心因素,两者的结合能显著提高PSNR和SSIM指标,说明它们在图像清晰度和细节保留方面发挥了重要作用。


表6:分析不同损失函数的影响

  • 表6 评估了各损失函数(如对抗性损失、内容一致性损失、清晰度一致性损失、结构相似性损失和双向对比损失)的作用。

  • 结论:双向对比约束损失(BCC)对网络性能提升贡献最大,其他损失函数如结构相似性损失(SSIM)和内容一致性损失也显著增强了去雾图像的质量。

即插即用模块

import math
import torch
from torch import nn

#论文:Unsupervised Bidirectional Contrastive Reconstruction and Adaptive Fine-Grained Channel Attention Networks for image dehazing
#论文地址:https://www.sciencedirect.com/science/article/abs/pii/S0893608024002387

class Mix(nn.Module):
    def __init__(self, m=-0.80):
        super(Mix, self).__init__()
        w = torch.nn.Parameter(torch.FloatTensor([m]), requires_grad=True)
        w = torch.nn.Parameter(w, requires_grad=True)
        self.w = w
        self.mix_block = nn.Sigmoid()

    def forward(self, fea1, fea2):
        mix_factor = self.mix_block(self.w)
        out = fea1 * mix_factor.expand_as(fea1) + fea2 * (1 - mix_factor.expand_as(fea2))
        return out

#Adaptive Fine-Grained Channel Attention (FCA)
class FCAttention(nn.Module):
    def __init__(self,channel,b=1, gamma=2):
        super(FCAttention, self).__init__()
        self.avg_pool = nn.AdaptiveAvgPool2d(1)#全局平均池化
        #一维卷积
        t = int(abs((math.log(channel, 2) + b) / gamma))
        k = t if t % 2 else t + 1
        self.conv1 = nn.Conv1d(1, 1, kernel_size=k, padding=int(k / 2), bias=False)
        self.fc = nn.Conv2d(channel, channel, 1, padding=0, bias=True)
        self.sigmoid = nn.Sigmoid()
        self.mix = Mix()


    def forward(self, input):
        x = self.avg_pool(input)
        x1 = self.conv1(x.squeeze(-1).transpose(-1, -2)).transpose(-1, -2)#(1,64,1)
        x2 = self.fc(x).squeeze(-1).transpose(-1, -2)#(1,1,64)
        out1 = torch.sum(torch.matmul(x1,x2),dim=1).unsqueeze(-1).unsqueeze(-1)#(1,64,1,1)
        out1 = self.sigmoid(out1)
        out2 = torch.sum(torch.matmul(x2.transpose(-1, -2),x1.transpose(-1, -2)),dim=1).unsqueeze(-1).unsqueeze(-1)

        out2 = self.sigmoid(out2)
        out = self.mix(out1,out2)
        out = self.conv1(out.squeeze(-1).transpose(-1, -2)).transpose(-1, -2).unsqueeze(-1)
        out = self.sigmoid(out)

        return input*out

if __name__ == '__main__':
    input = torch.rand(1,64,256,256)
    block = FCAttention(channel=64)
    output = block(input)    print(output.size())

便捷下载方式

浏览打开网址:https://github.com/ai-dawang/PlugNPlay-Modules

更多分析可见原文


ai缝合大王
聚焦AI前沿,分享相关技术、论文,研究生自救指南
 最新文章