【论文复现】轻松利用自适应特征融合实现去雾

news2024/11/17 13:10:20

在这里插入图片描述

📝个人主页🌹: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个模型以及每个模型的测试结果,详情见附件。

在这里插入图片描述


编程未来,从这里启航!解锁无限创意,让每一行代码都成为你通往成功的阶梯,帮助更多人欣赏与学习!

更多内容详见:这里

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2242177.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

常用在汽车PKE无钥匙进入系统的高度集成SOC芯片:CSM2433

CSM2433是一款集成2.4GHz频段发射器、125KHz接收器和8位RISC(精简指令集)MCU的SOC芯片,用在汽车PKE无钥匙进入系统里。 什么是汽车PKE无钥匙进入系统? 无钥匙进入系统具有无钥匙进入并且启动的功能,英文名称是PKE&…

《TCP/IP网络编程》学习笔记 | Chapter 11:进程间通信

《TCP/IP网络编程》学习笔记 | Chapter 11:进程间通信 《TCP/IP网络编程》学习笔记 | Chapter 11:进程间通信进程间通信的基本概念通过管道实现进程间通信通过管道进行进程间双向通信 运用进程间通信习题(1)什么是进程间通信&…

计算机网络各层设备总结归纳(更新ing)

计算机网络按照OSI(开放式系统互联)模型分为七层,每一层都有其特定的功能和对应的网络设备。以下是各层对应的设备: 1. 物理层(Physical Layer) 设备:中继器(Repeater)、集线器…

在kile 5中一个新工程的创建

这两天博主学习到了在kile5中创建一个工程,当然博主不会忘了小伙伴们的,这就和你们分享。 本次创建以STM32F103C8为例 创建过程: 1首先创建文件 名字随意,但也不要太随意,因为是外国软件,所以多少对中文…

AI写作(十)发展趋势与展望(10/10)

一、AI 写作的崛起之势 在当今科技飞速发展的时代,AI 写作如同一颗耀眼的新星,迅速崛起并在多个领域展现出强大的力量。 随着人工智能技术的不断进步,AI 写作在内容创作领域发挥着越来越重要的作用。据统计,目前已有众多企业开始…

Javascript垃圾回收机制-运行机制(大厂内部培训版本)

前言 计算机基本组成: 我们编写的软件首先读取到内存,用于提供给 CPU 进行运算处理。 内存的读取和释放,决定了程序性能。 冯诺依曼结构 解释和编译 这两个概念怎么理解呢。 编译相当于事先已经完成了可以直接用。好比去饭店吃饭点完上…

大数据技术之Hive:还是SQL好用

虽说 MapReduce 简化了大数据编程的难度,但是如果每来一个需求都要写一个 MapReduce 代码,那岂不是太麻烦了。尤其是在全民“CRM”的2000年代,对于像数据分析师已经习惯使用SQL进行分析和统计的工程师,让他们去 MapReduce 编程还是…

使用 Grafana api 查询 Datasource 数据

一、使用grafana 的api 接口 官方API 二、生成Api key 点击 Administration -》Users and accss -》Service accounts 进入页面 点击Add service account 创建 service account 点击Add service account token 点击 Generate token , 就可以生成 api key 了 三、进入grafana…

OceanBase 闪回查询

前言 在OB中,drop表可以通过 回收站 或者 以往的备份恢复来还原单表。当delete数据时,由于delete操作的对象不会进入回收站,此时需要通过闪回查询功能查看delete的数据,以便后续恢复 本次实验版本为 OceanBase 4.2.1.8&#xff0…

vue2 动态路由的实现

概述 一般情况下,路由都是前端约定好的,但是每当项目发布上线,或者客户需求新的页面的时候,都需要做出路由改变。这样运维就可以现场支持,方便做出可操作的中户中台,来管理我们的中心项目登录及权限&#x…

华为云前台展示公网访问需要购买EIP,EIP流量走向

华为云前台网络(VPC,安全组,EIP) 1.EIP网段是从哪里划分的? 管理员在后台Service_OM已设置 Service_OM-网络资源-外部网络-创建外部网络基本信息:配置参数:*名称 public*网络类型 LOCAL 不带标签 类似开…

树状数组+概率论,ABC380G - Another Shuffle Window

目录 一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 二、解题报告 1、思路分析 2、复杂度 3、代码详解 一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 G - Another Shuffle Window 二、解题报告 1、思路分析 不难用树状数组计…

LSTM(长短期记忆网络)详解

1️⃣ LSTM介绍 标准的RNN存在梯度消失和梯度爆炸问题,无法捕捉长期依赖关系。那么如何理解这个长期依赖关系呢? 例如,有一个语言模型基于先前的词来预测下一个词,我们有一句话 “the clouds are in the sky”,基于&…

麒麟nginx配置

一、配置负载均衡 配置麒麟的yum源 vim /etc/yum.repos.d/kylin_aarch64.repo Copy 删除原来内容,写入如下yum源 [ks10-adv-os] name Kylin Linux Advanced Server 10 - Os baseurl http://update.cs2c.com.cn:8080/NS/V10/V10SP2/os/adv/lic/base/aarch64/ …

AI工业大模型报告:体系架构、关键技术与典型应用

研究意义 随着新一代人工智能的发展, 大模型(如 GPT-4o 等)凭借大规模训练数据、网络参数和算 力涌现出强大的生成能力、泛化能力和自然交互能力, 展现出改变工业世界的巨大潜力. 尽管大模型 已在自然语言等多个领域取得突破性进展, 但其在工业应用中的…

华为ensp实验二--mux vlan的应用

一、实验内容 1.实验要求: 在交换机上创建三个vlan,vlan10、vlan20、vlan100,将vlan100设置为mux-vlan,将vlan10设置为group vlan,将vlan20设置为separate vlan;实现vlan10的设备在局域网内可以进行互通&…

【微软:多模态基础模型】(1)从专家到通用助手

欢迎关注【youcans的AGI学习笔记】原创作品 【微软:多模态基础模型】(1)从专家到通用助手 【微软:多模态基础模型】(2)视觉理解 【微软:多模态基础模型】(3)视觉生成 【微…

学习threejs,使用第一视角控制器FirstPersonControls控制相机

👨‍⚕️ 主页: gis分享者 👨‍⚕️ 感谢各位大佬 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍⚕️ 收录于专栏:threejs gis工程师 文章目录 一、🍀前言1.1 ☘️第一视角控制器FirstPerson…

GitLab 降级安装出现 500 错误,如何解决?

本文分享 GitLab 中文版在降级的过程中出现 500 错误的修复方法。 写在前面 强烈不建议大家自行降级,如果真有降级需求,要么自己能力过硬,要么寻求专业服务【https://dl.gitlab.cn/cm33bsfv】,要不出问题很麻烦! 问…

《Representing Scenes asNeural Radiance Fields for View Synthesis》论文解析——NeRF

一、论文简介 NeRF这篇论文提出了一种通过优化一个连续的5D体积场景函数来合成复杂场景新视图的方法。该算法使用一个全连接的深度网络来表示场景,输入是单一连续的5D坐标(空间位置和观察方向),输出是该位置的体积密度和依赖于观察…