残差损失函数和感知损失函数
,来优化模型,真是聪明!
看这个方法的整体架构,就像一条流水线,经过训练之后,他们可以拿着训练好的模型,对任何一张模糊图进行处理,就像魔术师一样,估计出图片的透视图,然后根据这个估计值来生成清晰的去雾图。下面来让我们看看它的具体模型架构叭:
下图中的(a)是提出的单幅图像去雾算法的主要步骤。为了训练这个多尺度网络MSCNN,作者以深度图像数据集合成朦胧图像和相应的传输图为基础(盆友们还记不记得上个DehazeNet使用的是合成的有雾霾图像和相对的无雾霾图像的雾霾图像对)。在测试阶段呢,基于训练好的模型估计输入的模糊图像的透视图,然后利用估计的大气光和计算的透射图生成去雾图像。
下图中的(b)是多尺度卷积网络。给定一幅模糊滴图像,粗尺度网络(也就是图中绿色虚线框)先预测出一个整体的传输图,并将其提供给精细尺度网络(图中的橙色虚线框),用以生成一个精细的传输图。然后,作者使用整体边缘来细化透射图,使它在同一物体内部平滑。蓝色虚线表示的是连接操作。
看完流程图和结构图,
来跟我总结一下这个方法的优点叭
!首先,去雾效果特别好,可以让雾霾瞬间消失!其次,它可以处理各种不同尺度的雾霾问题,可以算得上多才多艺的神经网络!而且,这个网络训练过程还特别高效,不用等太久(此时一位对于训练时间有要求的盆友听了大喜)。最重要的是,它对各种情况都比较稳健,不会轻易出差错嗷
当然,也有一些小缺点。这个方法的计算复杂度有点高,可能处理大图的时候会有些慢。而且,对输入参数要求有点挑剔,需要细心调整(调参侠上场)。有时候,可能会在处理的过程中损失一些细节,但总体来说,效果还是相当出色滴🤔🤔🤔
2.3AOD-Net
论文:
arxiv.org/pdf/1707.06…
代码:
gitcode.net/mirrors/May…
这个AOD-Net真的很有创意,它不像其他方法那样麻烦,需要估计传输矩阵和大气光(
大部分方法都得计算这个嗷
)。它直接就能通过轻量级CNN生成清晰干净的图像,很是方便。而且,它还会估计透射率图,就是告诉你每个像素里有多少雾气,然后利用这个图来精准地去除雾霾,听着是不是很是高级!
这个AOD-Net还特别灵活,可以跟其他深度学习模型结合(例如我们目标检测常用的模型Faster R-CNN)变成更厉害的“组合拳”,提高在模糊图像上的任务性能。就像超级英雄们联合战斗一样,效果简直不要太牛!
这个网络的整体架构也很有意思,分成了两个模块:
K-估计模块和干净图像生成模块
。K-估计模块负责估计深度和雾度水平,通过多尺度特征来抓住不同尺度的信息,真是细致入微!干净图像生成模块就像一个魔法师,根据K-估计模块的输出,快速生成清晰的图像。下面让我们具体看一看它的结构叭:
K-估计模块是AOD-Net的关键组件,负责估计深度和相对雾度水平。如下图(b)所示,作者使用了五个卷积层,并通过融合不同尺寸的滤波器形成多尺度特征。AOD-Net 的“concat1”层连接了“conv1”层和“conv2”层的特征。类似地,“concat2”连接来自“conv2”和“conv3”的特征; “concat3”连接“conv1”、“conv2”、“conv3”和“conv4”的特征。这种多尺度的设计捕获了不同尺度的特征,中间连接也补偿了卷积过程中的信息损失。
值得注意的是,AOD-Net 的每个卷积层仅使用三个滤波器。所以说,与现有的深度方法相比,AOD-Net 是轻量级的
。在K-估计模块之后,干净图像生成模块由一个逐元素乘法层和多个逐元素加法层组成,以便生成恢复图像。
总的来说,AOD-Net的这种“一体式”设计真的很新颖,让我们能够更方便地享受去雾的魔力。它在大量数据集的学习下,可以在各种场景下轻松应对各种雾霾🌟🌟🌟
为了便于理解K-估计模块,这里给出了五个卷积层的实现代码:
import torch
import torch.nn as nn
import math
class dehaze_net(nn.Module):
def __init__(self):
super(dehaze_net, self).__init__()
self.relu = nn.ReLU(inplace=True)
self.e_conv1 = nn.Conv2d(3,3,1,1,0,bias=True)
self.e_conv2 = nn.Conv2d(3,3,3,1,1,bias=True)
self.e_conv3 = nn.Conv2d(6,3,5,1,2,bias=True)
self.e_conv4 = nn.Conv2d(6,3,7,1,3,bias=True)
self.e_conv5 = nn.Conv2d(12,3,3,1,1,bias=True)
def forward(self, x):
source = []
source.append(x)
x1 = self.relu(self.e_conv1(x))
x2 = self.relu(self.e_conv2(x1))
concat1 = torch.cat((x1,x2), 1)
x3 = self.relu(self.e_conv3(concat1))
concat2 = torch.cat((x2, x3), 1)
x4 = self.relu(self.e_conv4(concat2))
concat3 = torch.cat((x1,x2,x3,x4),1)
x5 = self.relu(self.e_conv5(concat3))
clean_image = self.relu((x5 * x) - x5 + 1)
return clean_image
2.4NLD
论文及代码:github.com/danaberman/…
你知道吗,普通的传统去雾算法通常只关注图片局部信息,可能导致雾霾严重时,图像会丢失很多细节和色彩。而非局部图像去雾算法可厉害了,它不满足局部!它要看全局!利用了全局信息,更准确地估计雾霾影响,去除雾霾的效果特别好,细节和色彩都能得到很好的保留。
这个算法的核心思想很有趣,它通过建立图像中像素之间的相似性关系,来获取周围区域的参考信息。就像图像中的小侦探,从其他像素中偷偷获取信息,然后用这些信息帮助当前像素去雾处理。下面就让我们来看看一种常见的Non-local image dehazing算法的步骤叭:
雾霾模型估计:首先,需要估计图像中的雾霾模型。常用的模型是单色模型或深度模型。单色模型假设雾霾主要由散射光引起,而深度模型则假设雾霾程度与场景深度相关。
暗通道先验计算:通过计算图像的暗通道先验来获取图像中的全局大气光值。暗通道是指在无雾条件下,图像中某些区域的最小值较低。通过找到这些区域并计算其最小值,可以估计出全局大气光值。
雾密度估计:使用估计的大气光值和雾霾模型,可以计算每个像素点处的雾密度。这可以通过比较像素点处的亮度与估计的大气光值来实现。
非局部相似性权重计算:对于每个像素点,根据其周围的局部块与整个图像中其他块之间的相似性来计算非局部相似性权重。
雾移除处理:使用计算得到的非局部相似性权重和雾密度,可以对图像进行去雾处理。通过对每个像素点进行加权平均,可以恢复出被雾霾遮挡的细节。
这个算法的优点很多哦,去雾效果特别好,细节和色彩都保留得很好,而且它自适应性强,不需要预设参数,适用于各种不同场景。而且,它不需要额外的输入,仅利用图像自身信息就能处理,非常方便。
当然啦,也有一些小缺点,算法的计算复杂度比较高,处理大图像可能需要一些时间(我算是发现了,去雾算法都有这个缺点)。而且在图像存在很多噪声的情况下,算法可能会受到影响,效果不理想。参数的选择也可能有些困难,但只要我们认真调整,相信可以找到最佳设置滴。🌈🌈🌈
2.5SSLD
论文:drive.google.com/file/d/1c7S…
看完前几种去雾算法,大家有没有发现他们的数据集都是有雾霾图像和无雾霾图像的图像对,都是依赖完全标记的图像,也就是说每个输入图像都要有对应的已知去雾结果,这可是要花费大量时间和资源的!但是这个“半监督图像去雾”就很不一样,它把有标记和没标记的图像数据结合在一起,充分利用那些未标记数据中蕴含的信息,让训练过程更高效、更经济。
这个技术的核心思想很酷哦!它通过联想不同像素之间的相似性关系来获取附近区域的参考信息。也就是说,它不只是对局部进行处理,还能通过全局信息更准确地恢复场景的外观。所以,就算你的照片被浓浓的雾霾遮挡住了,它也能轻松洞悉背后的美景!
整个半监督学习的框架看起来如下图所示。它有两个分支,一个是“监督分支”,另一个是“无监督分支”,它们权值一样哦。监督分支使用标记的合成数据来训练,而且有好几种损失函数,包括均方误差、感知误差和对抗性误差,这些都帮助它学习去雾的技巧。而无监督分支则使用未标记的真实数据,它的损失函数有暗信道损失和总变化,也是为了让它懂得如何去雾。
这个技术真的很棒,它有好多优点!首先,去雾效果特别好,让图像质量大大提升,细节重现眼前(服气啦,每个去雾算法都是这么标榜自己,一点都不谦虚);半监督学习的灵活性让它更适应不同的图像场景,而且还可以轻松拓展。不过当然,它也有一些小小的缺点,比如需要有标注数据的支持,而且对雾霾密度变化比较敏感,需要适当的参数调整。
2.6EPDN
论文:openaccess.thecvf.com/content_CVP…
代码:github.com/ErinChen1/E…
EPDN是一种用于图像去雾的深度学习模型,它基于pix2pix模型,可不是闹着玩的哦,pix2pix是一种厉害的生成对抗网络。而EPDN在这个基础上,还进行了一系列改进,就像是给pix2pix加了一剂“雾霾驱逐剂”,让去雾效果变得更出色。
说到数据集,EPDN可是偷偷收集了大量的雾霾图像和对应的清晰图像对,这些图像对让模型学会了怎么去除雾霾,还原图像的每一个细节。上个算法中提到了,以前的图像去雾算法,都得依赖一大堆完全标记的数据,那要找这么多标记数据,简直比钻石还贵!EPDN可不一样,它是半监督学习的高手,利用了已标记的图像和未标记的图像数据,让模型吸收了大量的知识,变得又快又准(类似SSLD算法)
为了让模型训练得更聪明,EPDN使用了多种损失函数,感知损失、内容损失和对抗性损失等等,这些损失函数像是模型训练的“好朋友”,帮助生成器创造出更真实、更清晰的图像,而判别器则更善于辨别生成的图像和真实的清晰图像。
而EPDN的网络架构也是精心设计的,生成器采用了深层卷积神经网络,还引入了“跳跃连接”,这就像是给模型增加了“天线”,让它在不同层级上获取更多的上下文信息,这样一来,去雾的效果更出色了。
还有一个绝密的武器——“增强块”,它能够按不同尺度重建图像,就像是“缩时穿梭”,在不同尺度上恢复图像的细节,让照片更美丽、更自然。
别以为EPDN就只靠自己了,它还可以利用先验知识来指导去雾过程,就像是有一张“藏宝图”,可以根据天气条件、场景结构等信息,更准确地还原雾霾图像中的每一个细节。
好啦,说了这么多,下面来看一看它的具体结构,它包含多分辨率生成器,多尺度判别器和增强器。
多分辨率生成器由全局子生成器G1和局部子生成器G2组成。如上图所示,G1和G2都包括一个卷积前端、三个残差块和一个转置卷积后端。 G1 的输入是对原始模糊图像进行 2 倍下采样。 G1嵌入到G2中,G1的输出与G2的卷积前端获得的特征图的逐元素和被馈送到G2的残差块中。全局子生成器创建粗尺度的图像,而局部子生成器创建精细尺度的图像。两个子生成器的组合产生从粗到细的图像。
多尺度判别器模块包含名为 D1 和 D2 的两个尺度判别器。 D1 和 D2 具有相同的架构,D2 的输入是 D1 输入的 2 倍下采样。生成器的输出被馈送到 D1。多尺度判别器可以引导生成器从粗到细。一方面,D2 引导生成器生成粗尺度的全局伪真实图像。另一方面,D1 在精细范围内引导生成器。
增强块如下图所示。具体来说,增强块中有两个3×3前端卷积层。前端卷积层的输出按4×、8×、16×、32×因子下采样,构建四尺度金字塔。不同尺度的特征图提供不同的感受野,这有助于在不同尺度上重建图像。然后采用1×1卷积进行降维。之后将特征图上采样到原始大小,并将它们与前端卷积层的输出连接在一起。最后在特征图的串联上实现 3 × 3 卷积。
2.7DAD
论文:openaccess.thecvf.com/content_CVP…
代码:github.com/HUSTSYJ/DA_…
DAD的目标是解决图像去雾任务中源领域和目标领域之间的差异问题,让你的照片无论来自哪个领域,都能变得更加清晰。它利用了深度学习的神奇力量,提出了一种领域自适应方法,通过把源领域和目标领域的特征对齐,实现源领域知识的迁移,从而改善目标领域的去雾效果。
咱们来看看DAD的“魔法秘籍”吧!首先,它采用了两个步骤进行特征对齐,就像是找到源领域和目标领域之间的“共同语言”,让它们的特征空间更加接近。然后,通过自适应批归一化,进一步缩小了源域和目标域的特征分布,就像是把它们融合在一起,让去雾效果更加一致。
为了让源领域和目标领域之间的特征更好地对齐,DAD引入了一个领域适应损失函数,这个函数不仅包括了最大均值差异损失,还有感知损失,就像是把源领域和目标领域的特征表示进行约束,让它们更加一致。
你还别说,DAD还会利用目标领域的未标注数据进行无监督学习,就像是在不需要老师的情况下,自己悄悄地学会了“魔法”,这样一来,去雾效果就更加优化了!
别怀疑,DAD的魔法确实有效。它在公开数据集上进行了实验评估,证明了它的高超技艺。与其他相关方法相比,DAD在跨领域的图像去雾任务中表现出色,是当之无愧的“魔法大赛”的冠军!
下图是所提出的图像去雾域适应框架的架构。该框架由两部分组成,一个图像翻译模块和两个图像去雾模块。图像翻译模块将图像从一个域翻译到另一域以减少域差异。图像去雾模块在合成域和真实域上执行图像去雾。
2.8PSD
论文:openaccess.thecvf.com/content/CVP…
代码:github.com/zychen-ustc…
基于物理先验的合成到真实去雾(Principled Synthetic-to-Real Dehazing Guided by Physical Priors,PSD),说起来PSD和其他普通的去雾算法不一样哦,它可是把物理先验融入了去雾过程(以往的算法都是依赖数据驱动的喔)。它利用对光散射和透射模型的理解,来指导去雾算法,让去雾效果更加可靠。
咱们来看看PSD的“魔法秘籍”吧!首先,它会用物理模型生成一些合成的有雾图像,让图像退化。这些合成图像是通过从清晰的图像中引入雾霾效果来模拟的,真是巧妙(为什么巧妙腻,因为是用物理先验合成的有雾图像呀)!(让我们来具体的理解一下物理先验:物理先验就是我们对待解决问题的领域或任务有一些了解,从而可以在网络的设计和训练过程中加入一些预先的约束和指导。比如,在图像去雾任务中,我们知道雾霾是由空气中的微小水滴和颗粒造成的,它们会散射和吸收光线,导致图像变得模糊和不清晰。这些知识就是物理先验,它们告诉我们雾霾对图像的影响和一些去雾的可能性)
然后,PSD会用这些合成图像和对应的清晰图像来训练一个深度神经网络,这个网络可以把有雾图像变成无雾图像,就像是变魔法般的转换。通过这么多的合成图像对,网络可以学到雾霾和图像之间的奥秘关系。
接着,PSD在去雾过程中,利用训练好的神奇网络来估计透射图,这个透射图表示每个像素处的雾霾程度。但是,为了更好地约束这个透射图,PSD引入了物理先验,就像是加了一层魔法保护罩,让估计更准确叭
为了更好地实现去雾,PSD会通过优化过程进一步改善透射图的估计,结合物理先验和数据驱动的深度学习,获得更准确和真实的透射图。这样一来,图像的雾霾分布和属性就更好地被反映出来了。
最后,PSD要做的就是利用优化后的透射图,对输入的有雾图像进行去雾处理。它会巧妙地修复和恢复图像,增强可见度,还原场景细节,简直就像是让照片“重生”一样滴
下面是PSD 框架图。模型由主干、物理兼容头和大气光估计网络(A−net)构成。作者使用合成图像对模型进行预训练,然后在基于多个物理先验的代理损失委员会的指导下,使用合成图像和真实模糊图像对模型进行微调。
PSD也有很多优点哦,它有物理先验引导,数据驱动学习,提高了可见度,让去雾过程更加原则和可靠。当然,也有一些挑战,比如训练数据依赖性、计算复杂度较高,还对光照条件有点敏感。
2.9MSBDN
论文:openaccess.thecvf.com/content_CVP…
代码:github.com/BookerDeWit…
多尺度增强去雾网络与密集特征融合(Multi-scale boosted dehazing network with dense feature fusion,MSBDN)是一种用于改善模糊或有雾图像的深度学习模型。算法的各个组成部分如下:
多尺度处理:首先,它在多个尺度上运行,就像是有一双“多功能眼睛”,可以捕捉输入图像的全局和局部信息。这样一来,它可以用不同的粒度级别来分析图像,得到更多的细节。
增强去雾:"增强"一词表示使用增强技术,如AdaBoost或梯度提升,来改善去雾过程的性能。增强算法将多个弱去雾模型组合起来,形成一个更强大的集成模型。
密集特征融合:它会以稠密且相互连接的方式结合来自不同网络层的特征。这样做有助于在不同尺度间传播信息,并有效地捕捉低级和高级特征。这个融合技术真是巧妙,让网络在处理去雾任务时能力更强,效果更好!
MSBDN采用跳跃连接将相应的特征图从编码器模块引入到增强解码器模块,(该怎么理解跳跃连接腻?它就像是一个“捷径”,直接将之前某一层的特征信息连接到后续的某一层,跳过了中间一些层的处理,使得信息得以保留。就好像你在给朋友传递信息时,如果中间有人帮你传递,信息就不会遗漏)。下图所示为MSBDN算法的框架,该框架基于U-Net 体系结构。网络包括三个部分:编码器模块Encoder,增强型解码器模块Boosted Decoder和功能恢复模块。
优点:多尺度处理、增强去雾效果、密集特征融合、高性能
缺点:计算复杂度较高、对于极端情况的效果不佳、对输入图像质量敏感
2.10GFN
论文:openaccess.thecvf.com/content_cvp…
代码:github.com/rwenqi/GFN-…
Gated Fusion Network for Single Image Dehazing模型的核心思想是通过融合多个不同层次的特征来恢复被雾霾遮挡的图像细节。它采用了门控机制(gating mechanism),在特征融合过程中动态地选择和调整不同特征的权重,以更好地适应不同图像内容和雾霾程度。这样可以使模型更具灵活性和适应性,从而实现更好的去雾效果。具体来说,Gated Fusion Network包含以下几个关键组成部分:
特征提取器(Feature Extractor):这个部分就像是魔法师的眼睛,用卷积神经网络提取图像的不同层次特征,捕捉不同尺度和语义的信息。
雾霾感知模块(Haze Perception Module):这个模块就像是魔法师的感知力,具体来说,它可以通过分析不同层次的特征图的对比度和亮度来检测雾霾区域,并生成相应的遮罩(mask)作为后续处理的依据。
逐层融合模块(Layer-wise Fusion Module):这个部分就像是魔法师的智慧,用于逐层地融合不同尺度的特征。它使用门控机制来自适应地选择和调整不同特征之间的权重,以实现更好的特征融合效果。通过逐层融合,模型可以同时考虑低层次的细节信息和高层次的语义信息,从而提高去雾效果。
去雾恢复模块(Dehaze Restoration Module)这个模块就像是魔法师的魔杖,用于基于融合后的特征图进行去雾恢复。它通过学习一个映射函数,将输入图像与估计的雾霾遮罩一起转换为去除雾霾的图像。这个模块通常使用卷积神经网络或者转置卷积神经网络来实现。
下图所示为GFN的网络结构。该网络包含对称编码器和解码器层。为了检索更多上下文信息,作者使用扩张卷积(DC)来扩大编码器块中卷积层的感受野。短路连接从卷积特征图连接到反卷积特征图。三个增强版本源自输入的模糊图像。然后,这三个输入分别由我们的网络学习到的三个置信图进行加权。
GFN的超能力不仅仅表现在去雾效果上,它还内在残留学习,就像是有了一种奇妙的记忆力,能够持续改进。而且,它的计算成本低,就像是使用了一种高效的魔法;
但是嘛,GFN也有一些小小的缺点。它需要大量的训练数据,就像是需要一些实践和磨练。而且,对于输入图像的质量有点敏感,需要有些耐心等待它的效果。
让我们自己总结一下叭:GFN是一种端到端的模型,可以通过训练数据集上的监督学习进行训练。训练过程中,可以使用配对的有雾图像和无雾图像作为输入和目标,利用损失函数来指导模型学习去除雾霾的映射关系。训练完成后,该模型可以应用于任意单幅有雾图像的去雾处理。🌈🌈🌈
3.十种去雾对比效果图
学完这十种去雾算法的基本原理之后,让我们一起来看看它们的去雾表现到底怎么样叭(论文效果图)🌻🌻🌻
你可以将这些去雾算法想象成不同种类的“魔法”,每种都有自己独特的特点和适用场景。
首先,我们有传统的方法,它们就像是一本有经验的老师,根据天气条件、光照估计等信息来估计雾霾的情况,并尽力去除雾霾。这些方法运行很快,适合处理一些简单的情况,但当面对复杂的场景时,它们可能会有点力不从心。
然后,有深度学习方法,这些就像是聪明的AI小助手。通过大量的训练,它们学会了观察图像,理解雾霾的规律,并能够更好地还原图像的细节。它们特别擅长处理复杂的情况,就像你有一个靠谱的朋友,总是可以帮你解决问题。
接着,我们有多尺度方法,就像是有望远镜和放大镜一样。它们可以在不同尺度上观察图像,从而同时关注全局和局部的信息。这样一来,就能够更全面地还原图像的细节,就像你可以同时看到整个风景和细微的景物。
还有物理先验方法,这些就像是有灵感的艺术家。它们通过引入一些先验知识和物理规律,来更准确地还原图像。就好像画家在创作时,会根据自己对光影的理解来塑造画面的效果。
最后,还有增强方法,这些就像是魔法合成。它们利用增强技术,将多个去雾方法组合起来,形成一个更强大的团队。就像合体后的超级英雄,它们能够带来更好的去雾效果。
所以,不同的去雾方法各有千秋,适用于不同的场景和需求。在实际应用中,你可以根据具体情况,选择合适的方法来解决雾霾问题。有时候,也可以将它们结合起来,形成更强大的去雾策略!
ending
十种图像去雾算法终于讲完啦,很开心能把学到的知识以文章的形式分享给大家。如果你也觉得我的分享对你有所帮助,please一键三连嗷!!!下期见
粉丝