论文标题:Unsupervised Bidirectional Contrastive Reconstruction and Adaptive Fine-Grained Channel Attention Networks for image dehazing
论文链接:https://www.x-mol.com/paper/1785364146451894272?adv
Github链接:https://gitee.com/lose_recall/ubrfc-net
图像去雾是计算机视觉中的一个重要任务,旨在从模糊或雾霾的图像中恢复出清晰的图像。近年来,无监督学习方法在图像去雾领域取得了显著的进展。然而,现有的一些方法,如CycleGAN和DisentGAN,存在生成器学习混淆和图像内容细节丢失等问题。为了解决这些问题,Hang Sun等人提出了一种新的无监督双向对比重建和自适应细粒度通道注意网络(UBRFC-Net),该方法在多个基准数据集上表现出色。
UBRFC-Net的核心是无监督双向对比重建框架(BCRF),其主要目标是建立双向对比重建约束。这一框架不仅避免了CycleGAN中生成器学习的混淆,还增强了对清晰图像的约束能力和无监督去雾网络的重建能力。具体来说,BCRF通过对比学习的方式,利用真实图像和生成图像之间的相似性来优化网络的学习过程,从而提高去雾效果。
自适应细粒度通道注意(FCA)是UBRFC-Net的另一个重要组成部分。FCA通过利用相关矩阵来捕捉全局和局部信息之间的相关性,促进它们之间的交互。这种机制使得网络能够在不同粒度上进行特征权重分配,从而提高去雾效果的准确性。与传统的仅使用全连接层的通道注意机制不同,FCA能够更有效地整合全局和局部信息,避免了特征权重分配不准确的问题。
自适应细粒度通道注意(FCA)机制是一种新兴的注意力机制,旨在提高深度学习模型在图像处理任务中的性能,尤其是在图像去雾、图像增强和图像分类等领域。FCA机制通过捕捉全局和局部信息之间的交互,优化特征权重分配,从而提升模型的表现。
FCA机制的核心思想是通过相关矩阵在不同粒度级别上捕捉全局和局部信息之间的关联。这一机制的设计旨在克服传统通道注意力机制(如SE通道注意力)在特征权重分配时的不足,尤其是缺乏全局信息与局部信息的有效互动。
FCA机制通过以下步骤实现全局与局部信息的交互:
FCA机制通过自适应的方式分配特征权重,确保模型能够在不同的任务中灵活调整关注的特征。这种自适应性使得FCA机制在处理复杂场景时表现出色,能够有效捕捉细粒度的局部特征,同时保持对全局上下文的理解。
在实现FCA机制时,通常会使用以下组件:
FCA机制在多个计算机视觉任务中表现出色,尤其是在以下领域:
自适应细粒度通道注意(FCA)机制通过有效捕捉全局和局部信息的交互,优化了特征权重分配,提升了深度学习模型在图像处理任务中的表现。随着计算机视觉技术的不断发展,FCA机制有望在更多应用场景中发挥重要作用。未来的研究可以进一步探索FCA机制在其他领域的应用潜力,以及与其他深度学习技术的结合。
在多个具有挑战性的基准数据集上进行的实验表明,UBRFC-Net在去雾效果上优于现有的无监督图像去雾方法。具体而言,实验结果显示该方法在图像清晰度、细节保留和色彩还原等方面均表现出色。这些结果验证了BCRF和FCA的有效性,表明它们能够有效地解决传统方法中的一些关键问题。
UBRFC-Net通过引入无监督双向对比重建框架和自适应细粒度通道注意机制,成功地克服了现有无监督图像去雾方法的局限性。该方法不仅提高了去雾效果,还为未来的研究提供了新的思路。随着计算机视觉技术的不断发展,UBRFC-Net有望在实际应用中发挥重要作用。
未来的研究可以进一步探索如何将UBRFC-Net与其他深度学习技术结合,以提高去雾效果。此外,研究人员还可以考虑在不同的应用场景中测试该方法的适用性,例如在自动驾驶、遥感图像处理等领域。
import math
import torch
from torch import nn
#from torchstat import stat # 查看网络参数
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
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)
#x1 = x1.transpose(-1, -2).unsqueeze(-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.fc(x)
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)
Attention= FCAttention(channel=64)
y = Attention(input)
print(y.size())
https://jingjing.blog.csdn.net/article/details/145273558?spm=1001.2014.3001.5502
YOLOv8l summary (fused): 478 layers, 44,976,798 parameters, 0 gradients, 166.1 GFLOPs
Class Images Instances Box(P R mAP50 mAP50-95): 100%|██████████| 15/15 [00:12<00:00, 1.21it/s]
all 230 1412 0.973 0.972 0.988 0.756
c17 40 131 0.99 0.992 0.995 0.852
c5 19 68 0.956 1 0.995 0.838
helicopter 13 43 0.973 1 0.987 0.629
c130 20 85 0.996 0.988 0.995 0.674
f16 11 57 1 0.95 0.994 0.68
b2 2 2 0.914 1 0.995 0.796
other 13 86 0.988 0.932 0.98 0.555
b52 21 70 0.978 0.971 0.982 0.854
kc10 12 62 0.998 0.984 0.989 0.853
command 12 40 0.995 1 0.995 0.852
f15 21 123 0.962 0.992 0.994 0.688
kc135 24 91 1 0.985 0.991 0.711
a10 4 27 1 0.485 0.87 0.432
b1 5 20 0.992 1 0.995 0.759
aew 4 25 0.951 1 0.987 0.777
f22 3 17 0.988 1 0.995 0.759
p3 6 105 1 0.975 0.995 0.789
p8 1 1 0.887 1 0.995 0.697
f35 5 32 1 0.993 0.995 0.553
f18 13 125 0.981 0.992 0.992 0.838
v22 5 41 0.996 1 0.995 0.703
su-27 5 31 0.993 1 0.995 0.871
il-38 10 27 0.991 1 0.995 0.889
tu-134 1 1 0.866 1 0.995 0.995
su-33 1 2 0.947 1 0.995 0.697
an-70 1 2 0.917 1 0.995 0.825
tu-22 8 98 0.998 1 0.995 0.844