本文所涉及所有资源均在传知代码平台可获取。
结果分析
提示
论文题目:MFAF-Net: image dehazing with multi-level features and adaptive fusion
论文地址:doi.org/10.1007/s00…
接下来将详细介绍本方法的结构、原理以及复现
介绍
该论文提出了多层次特征和自适应融合网络(MFAF-Net),用于单图像去雾。该方法将多尺度膨胀卷积层与特征注意力模块相结合,从而能够获取信息丰富的上下文信息。同时,该方法提出了一种新的融合方法,用于低级和高级特征融合,以恢复具有更详细信息的图像。
创新点
1. ****该论文提出了一种新的特征提取模型CEM,该模型由用以提取大量信息丰富的上下文特征的多尺度膨胀卷积层和用来从通道和像素的角度增强结果特征的FAM组成。
2. ****该论文设计了一种新的融合模块,称为AFM,用于融合语义和级别不一致的特征,使得网络在处理多层次特征时具有更大的灵活性。
网络结构
该网络的结构如图1所示
图1:MFAF-Net的网络结构
特征提取阶段
如图1,前半部分为该网络的特征提取模块。该部分首先使用了一个用于提取图像浅层特征的模块,该模块由一层3×3的卷积以及一层ReLU激活函数组成,此时图像的通道数由3变为了32。从F0到F1中间由三层上下文增强模块CEM和一层3×3的卷积组成,之后经过一次下采样使图像的通道数由32变为64。同样,在F1与F2之间也有三层上下文增强模块CEM和一层3×3的卷积,然后经过一次下采样使图像的通道数由64变成了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个模型以及每个模型的测试结果,详情见附件。
| 有雾图像 | 使用MFAF-Net恢复后 | 无雾图像 |
|---|---|---|
感觉不错,点击我,立即使用