论文介绍
题目: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,
:G E 2 E G_{E2E} 负责从输入的有雾图像
中生成清晰图像I I 。J J 网络结构基于U-Net,结合多层残差模块用于特征提取和解码阶段的上采样。
参数估计网络(Parameter Estimation Network,
和G A G_A :G t G_t :生成大气光值G A G_A 。A A :生成透射率图G t G_t 。t t 利用这些参数与清晰图像
共同参与后续重建过程。J J 大气散射模型(Atmospheric Scattering Model, ASM):
利用
、J J 和A A 实现前向重建(重建有雾图像t t )和反向重建(重建清晰图像I ′ I' )。J ′ J' 提供图像内容和清晰度一致性约束,优化生成结果。
双向对比重建框架(Bidirectional Contrastive Reconstruction Framework, BCRF):
清晰图像
与其反向重建的J J 对比。J ′ J' 有雾图像
与其前向重建的I I 对比。I ′ I' 建立从有雾图像到清晰图像的双向对比重建约束:
增强网络的图像复原能力,避免生成器学习混乱。
自适应细粒度通道注意力机制(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
更多分析可见原文