FFA-Net: Feature Fusion Attention Network for Single Image Dehazing

论文链接:https://arxiv.org/pdf/1911.07559v2.pdf

代码链接:https://github.com/zhilin007/FFA-Net

目录

论文链接:https://arxiv.org/pdf/1911.07559v2.pdf

代码链接:https://github.com/zhilin007/FFA-Net

摘要

Fusion Feature Attention Network (FFA-Net)(融合特征注意网络)

Feature Attention (FA) (特征注意)

Basic Block Structure 

 Group Architecture and Global Residual Learning(组结构和全局剩余学习)

Feature Fusion Attention

Loss Function

Implementation Details


摘要

本文提出了一种端到端的特征融合注意网络(FFA-Net)来直接恢复无雾图像。FFA-Net架构包括三个关键组件:1)考虑到不同的通道特征包含完全不同的加权信息,并且雾度分布在不同的图像像素上是不均匀的,新颖的特征注意(FA)模块将通道注意与像素注意机制相结合。FA不平等地对待不同的特征和像素,这在处理不同类型的信息时提供了额外的灵活性,扩展了CNN的表示能力。2)基本块结构由局部残差学习和特征关注组成,局部残差学习允许通过多个局部残差连接绕过较不重要的信息,如薄雾霾区域或低频,让主网络架构专注于更有效的信息。3)基于注意力的不同层次特征融合(FFA)结构,特征权重自适应地从特征注意力(FA)模块学习,给予重要特征更多的权重。这种结构还可以保留浅层的信息,并传递到深层。

先前的基于CNN的图像去雾网络同等地对待通道式和像素式特征,但是雾在图像上分布不均匀,非常薄的雾的权重应该与厚雾区域像素的权重显著不同。此外,DCP还发现,一些像素在至少一个颜色(RGB)通道中具有非常低的亮度是非常常见的,这进一步说明不同的通道特征具有完全不同的加权信息。如果我们平等地对待它,它将在不重要的信息上花费大量的资源进行不必要的计算,网络将缺乏覆盖所有像素和通道的能力。最后,它将极大地限制网络的代表性。

本文进一步设计了一个新颖的特征注意(FA)模块。FA模块分别在通道方式和像素方式特征中组合通道注意力和像素注意力。FA不平等地对待不同的特征和像素,这可以在处理不同类型的信息时提供额外的灵活性。

本文采用跳跃连接和注意机制的思想,设计了一个由多个局部剩余学习跳跃连接和特征注意组成的基本块。一方面,局部残差学习允许通过多次局部残差学习忽略薄雾霾区域的信息和低频信息,使得主网络学习到更多有用的信息。通道注意力进一步提高了FFA-Net的性能。

随着网络越走越深,浅层的特征信息往往难以保存。为了识别和融合不同级别的特征,U-Net和其他网络努力整合浅层和深层信息。本文提出了一种基于注意力的特征融合结构(FFA ),这种结构可以保留浅层信息并将其传递到深层。最重要的是,在将所有特征送入特征融合模块之前,FFA-Net对不同级别的特征赋予不同的权重,权重是通过FA模块的自适应学习获得的。这比那些直接指定权重的要好得多。

本文贡献:

(1)针对单幅图像去雾,提出了一种新的端到端特征融合注意力网络FFA-Net。FFA-Net大大超越了以前最先进的图像去雾方法,在有厚雾和丰富纹理细节的区域表现尤为突出。在图像细节和色彩保真度的恢复方面也有较大的优势。

(2)本文提出了一种新的特征注意模块,它结合了

要将Swin-Transform模块集成到FFANet模型中,需要进行以下详细步骤: 1. 首先,确保你已经安装了Swin-Transform模块的依赖库,并且能够成功导入它。你可以使用以下命令安装Swin-Transform模块: ```bash pip install swin-transformer ``` 2. 导入所需的库和模块: ```python import torch import torch.nn as nn from swin_transformer import SwinTransformer ``` 3. 定义FFANet模型的主体部分,这是一个由卷积和池化层组成的神经网络。你可以根据你的需求进行调整。 ```python class FFANet(nn.Module): def __init__(self): super(FFANet, self).__init__() self.features = nn.Sequential( # 添加卷积层和池化层 ... ) ``` 4. 在FFANet模型中,添加Swin-Transform模块。你需要指定Swin-Transform模块的输入尺寸、patch大小、深度、头数等参数。以下是一个示例: ```python class FFANet(nn.Module): def __init__(self): super(FFANet, self).__init__() self.features = nn.Sequential( # 添加卷积层和池化层 ... ) self.swin_transform = SwinTransformer( image_size=64, # 输入图像的尺寸 patch_size=4, # patch的大小 embed_dim=96, # 嵌入维度 depths=[2, 2, 6, 2], # 不同阶段的层数 num_heads=[3, 6, 12, 24], # 不同阶段的头数 num_classes=1000 # 输出类别数 ) ``` 5. 在FFANet模型中,定义前向传播函数,将输入通过卷积层、池化层以及Swin-Transform模块传递,并返回结果。 ```python class FFANet(nn.Module): def __init__(self): super(FFANet, self).__init__() self.features = nn.Sequential( # 添加卷积层和池化层 ... ) self.swin_transform = SwinTransformer( image_size=64, patch_size=4, embed_dim=96, depths=[2, 2, 6, 2], num_heads=[3, 6, 12, 24], num_classes=1000 ) def forward(self, x): x = self.features(x) x = self.swin_transform(x) return x ``` 这就是将Swin-Transform模块加入到FFANet模型中的详细说明。你可以根据具体需求调整模型的参数配置和结构。记得根据实际情况进行修改。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值