📝个人主页🌹:Eternity._
🌹🌹期待您的关注 🌹🌹
❀ 智慧医疗
- 介绍
- 创新点
- 网络结构
- 特征提取阶段
- 自适应融合阶段
- 图像重建阶段
- 上下文增强模块CEM
- 特征融合模块AFM
- 结果分析
提示
论文题目:MFAF-Net: image dehazing with multi-level features and adaptive fusion
论文地址:https://doi.org/10.1007/s00371-023-02917-8
接下来将详细介绍本方法的结构、原理以及复现
介绍
该论文提出了多层次特征和自适应融合网络(MFAF-Net),用于单图像去雾。该方法将多尺度膨胀卷积层与特征注意力模块相结合,从而能够获取信息丰富的上下文信息。同时,该方法提出了一种新的融合方法,用于低级和高级特征融合,以恢复具有更详细信息的图像。
创新点
-
此篇论文介绍了一种新颖的特征提取架构,称为CEM。该架构由两个核心部分组成:一是多尺度膨胀卷积层,它负责捕获丰富且多样的上下文特征信息;二是特征增强模块(FAM),该模块从通道维度和像素层面进一步优化和强化了特征表达。
-
此外,论文还创新性地开发了一个融合策略,命名为AFM融合模块。此模块专门设计用于整合语义内容与层级结构不一致的特征,从而赋予了网络在处理多尺度特征时更高的灵活性和适应性。
本文所涉及的所有资源的获取方式:这里
网络结构
该网络的结构如图1所示
图1:MFAF-Net的网络结构
特征提取阶段
如图1所示,网络的前半部分专注于特征提取。首先,利用一个浅层特征提取模块,该模块包含一个3×3的卷积层配合ReLU激活函数,将输入图像的通道数从3提升至32。接着,从F0到F1的转换过程中,嵌入了三层上下文增强模块CEM,其后紧跟一个3×3的卷积层,随后执行一次下采样操作,使通道数增加到64。类似地,F1到F2的过渡也遵循这一模式:三层CEM模块加上一个3×3卷积层,再经过下采样,通道数跃升至96。特征提取的最终阶段与前两个阶段结构相同,即从F2到F3也是通过三层CEM模块和一个3×3卷积层进行处理。在这一部分,设计借鉴了残差结构的理念,通过对不同层级的输出特征图进行相加,构建起了标准的残差连接,旨在维持图像分辨率的同时,有效减少特征提取环节中关键信息的损失。
自适应融合阶段
如图1所示,自适应融合阶段的核心组件为特征融合模块AFM。为了高效整合来自特征提取阶段的特征图信息,该论文创新地在相邻两级特征块间嵌入了全新的AFM模块。通过组合一个双线性插值层与一个3×3的卷积层来执行上采样,这一过程不仅提升了特征的分辨率,还极大地促进了与先前特征图的深度融合与互补。
图像重建阶段
最终,该方法利用一层3×3的卷积从浅层特征图里恢复起RGB彩色图像,使用Tanh激活函数进一步优化整体的视觉效果,最终与输入图像相加,利用残差结构来减少图像关键细节的丢失以在保证图像分辨率的同时获得最优的清晰图像的恢复效果。
上下文增强模块CEM
上下文增强模块能够通过具有不同大小卷积核的卷积来充分提取图像不同尺度的特征并进行上下文的聚合,并利用特征注意力模块FAM增强结果特征。具体来说,由于大的感受野有助于捕获信息丰富的上下文信息,因此该模块采用三个卷积层来提取这些特征图,卷积核大小分别为 1、3 和 5。CEM的整体结构如图2所示,特征图x输入到该模块之后将被分别输入到三个卷积核大小不同的卷积层中,具体实现如下:
self.conv1 = nn.Conv2d(inchannel, outchannel, 1)
self.conv2 = nn.Conv2d(inchannel, outchannel, 3, padding=1)
self.conv3 = nn.Conv2d(inchannel, outchannel, 5, padding=2)
由于在三层卷积后还要两两相加,所以需要注意三层卷积得到的特征图的大小应该相同,所以要在实现卷积的时候巧妙利用padding。
注意
比如输入一个大小为3×256×256大小的图像
经过前面的浅层卷积之后此时x特征图的大小应该为32×256×256
经过k=1的卷积层之后大小为32×254×254
经过k=3的卷积层之后大小为32×252×252
经过k=5的卷积层之后大小为32×250×250
三个特征图的大小并不相同,若想让三者的大小相同需要利用padding
对k=3的卷积层设置padding=1,则此时特征图大小变为32×254×254
对k=5的卷积层设置padding=2,则此时特征图大小变为32×254×254
此时三个特征图的大小相等,所以需要巧妙利用padding实现不同特征图的大小相等以方便后续步骤的进行
在两两相加之后,将获得的两张特征图拼接,注意,拼接之后的图像通道数量从32变成了64,所以在实现后面的卷积的时候需要注意输入通道数和输出通道数。
self.conv4 = nn.Conv2d(2 * inchannel, outchannel, 3, padding=1)
最后经过特征注意力模块增强效果之后与该模块的输入X相加得到最终的输出。
图2:CEM的结构
特征注意力模块的结构如图3所示。
图3:FAM的结构
在该模块中,使用Depth-wise卷积和Point-wise卷积来取代传统特征注意力中的普通卷积,以进一步增强特征提取能力和上下文特征的理解能力。通过这种独特的设计,所提出的FAM能够从通道和像素的角度增强结果的上下文特征,Depth-wise和Point-wise的实现如下:
self.dw = nn.Conv2d(inchannels, outchannels, kernalsize, 1)
self.pw = nn.Conv2d(inchannels, outchannels, 1, padding=1)
特征融合模块AFM
特征融合模块的结构如图4所示。文章里面说设计这个模块的原因是低级和高级特性在本质上是互补的,低级特征空间细节丰富,而高级特征更倾向于语义信息,将它们融合在一起通常有利于图像去雾。
这个模块的结构是将网络前面提取的特征图与网络后面得到的特征图进行融合,所以会有两个输入,Fl是网络前面部分得到的特征图,为低级浅层特征,而Fh为网络当前步骤得到的特征图,为高级特征,两者相加后的结果通过Point-Wise卷积和ReLU激活函数的夹心结构,最后利用Sigmoid函数得到低级和高级特征的权重。具体实现方法如下:
class AFM(nn.Module):
def __init__(self, channels):
super(AFM, self).__init__()
self.pointwise = nn.Conv2d(channels, channels, 1)
self.conv1 = nn.Conv2d(channels, channels, 3, padding = 1)
self.relu = nn.ReLU(inplace=True)
self.s = nn.Sigmoid()
def forward(self, x1, x2):
fl = x1
fh = x2
fl_1 = self.conv1(fl)
fl_2 = self.pointwise(fl)
fL = fl_1 + fl_2
fH = self.pointwise(fh)
f = fL + fH
weight = self.pointwise(f)
weight = self.relu(weight)
weight = self.pointwise(weight)
weight = self.s(weight)
fL_1 = fL * weight
fH_1 = fH * (1-weight)
out = fL_1 + fH_1
return out
这样获得权重的方法与普通的直接为两个特征图赋予权重的方法不同,这样可以根据不同的图像来获取不同的权重,以实现自适应融合的目的。
图4:AFM的结构
结果分析
基于Pytorch框架复现,使用显存大小为12.6GB的RTX 3060显卡在O-Haze数据集上跑的模型,结果如下,第一张为原始模糊图像,第二张为该方法恢复的图像,第三章为原始清晰图像。可以看到,模型效果仍有待提升。附件代码中包括了训练得到的11个模型以及每个模型的测试结果,详情见附件。
编程未来,从这里启航!解锁无限创意,让每一行代码都成为你通往成功的阶梯,帮助更多人欣赏与学习!
更多内容详见:这里