【论文复现】轻松利用自适应特征融合实现去雾
📝个人主页🌹: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 = x1fh = x2fl_1 = self.conv1(fl)fl_2 = self.pointwise(fl)fL = fl_1 + fl_2fH = self.pointwise(fh)f = fL + fHweight = self.pointwise(f)weight = self.relu(weight)weight = self.pointwise(weight)weight = self.s(weight)fL_1 = fL * weightfH_1 = fH * (1-weight)out = fL_1 + fH_1return out
这样获得权重的方法与普通的直接为两个特征图赋予权重的方法不同,这样可以根据不同的图像来获取不同的权重,以实现自适应融合的目的。
图4:AFM的结构
结果分析
基于Pytorch框架复现,使用显存大小为12.6GB的RTX 3060显卡在O-Haze数据集上跑的模型,结果如下,第一张为原始模糊图像,第二张为该方法恢复的图像,第三章为原始清晰图像。可以看到,模型效果仍有待提升。附件代码中包括了训练得到的11个模型以及每个模型的测试结果,详情见附件。
编程未来,从这里启航!解锁无限创意,让每一行代码都成为你通往成功的阶梯,帮助更多人欣赏与学习!
更多内容详见:这里
相关文章:

【论文复现】轻松利用自适应特征融合实现去雾
📝个人主页🌹:Eternity._ 🌹🌹期待您的关注 🌹🌹 ❀ 智慧医疗 介绍创新点网络结构特征提取阶段自适应融合阶段图像重建阶段上下文增强模块CEM特征融合模块AFM 结果分析 提示 论文题目࿱…...

【大数据学习 | HBASE高级】hbase-phoenix 与二次索引应用
1. hbase-phoenix的应用 1.1 概述: 上面我们学会了hbase的操作和原理,以及外部集成的mr的计算方式,但是我们在使用hbase的时候,有的时候我们要直接操作hbase做部分数据的查询和插入,这种原生的方式操作在工作过程中还…...

高级java每日一道面试题-2024年11月09日-缓存中间件篇-Redis和Memecache有什么区别?
如果有遗漏,评论区告诉我进行补充 面试官: Redis和Memecache有什么区别? 我回答: 一、基础特性 数据类型支持 Redis: 支持多种数据类型,包括字符串(String)、哈希(Hash)、列表(List)、集合…...

vscode 关闭绑定元素 隐式具有“any”类型这类错误
在vue的项目里面,经常看到any类型的报错,真的很烦的 在tsconfig.json中配置以下参数 “noImplicitAny”: false 就可以了 出现类型“never”上不存在属性“userName”。ts-plugin(2339) 配置该参数 modeuleResolution : node "compilerOptions&qu…...

手机ip地址异常怎么解决
在现代社会中,手机已成为我们日常生活中不可或缺的一部分,无论是工作、学习还是娱乐,都离不开网络的支持。然而,有时我们会遇到手机IP地址异常的问题,这不仅会影响我们的网络体验,还可能带来安全隐患。本文…...

【售前方案】工业园区整体解决方案,智慧园区方案,智慧城市方案,智慧各类信息化方案(ppt原件)
基于云计算、物联网、移动通信计算的智慧园区集中运营管理平台是一个高度集成化、智能化的管理系统,它利用先进的技术手段对园区进行全方位的监控和管理。 软件资料清单列表部分文档清单:工作安排任务书,可行性分析报告,立项申请审…...

37.超级简易的计算器 C语言
超级简单,简单到甚至这个计算器输入都比较反人类 但是足够简单 有输入功能有Switch语句支持四种运算还能检查除数是不是0还能打印出完整的式子 #define _CRT_SECURE_NO_WARNINGS// 禁用安全警告 #include <stdio.h>int main() {double num1, num2;// 声明两…...

防火墙----iptables
防火墙是位于内部网和外部网之间的屏障,他按照系统管理员预先定义好的规则来控制数据包的进出 一、iptables简介 防火墙会从以上至下的顺序来读取配置的策略规则,在找到匹配项后就立即结束匹配工作并去执行匹配项中定义的行为(即放行或阻止&…...

若点集A=B则A必能恒等变换地变为B=A这一几何常识推翻直线(平面)公理
黄小宁 关键词:“更无理”复数 复平面z各点z的对应点z1的全体是z1面。z面平移变为z1面就使x轴⊂z面沿本身平移变为ux1轴。R可几何化为R轴,R轴可沿本身平移变为R′轴,R′轴可沿本身平移变为R″轴,...。直线公理和平面公理使几百年…...

网络安全之WINDOWS端口及病毒编写
目录 一、常见端口和服务 二、Windows病毒编写 声明:学习视频来自b站up主 泷羽sec,如涉及侵权马上删除文章 声明:本文主要用作技术分享,所有内容仅供参考。任何使用或依赖于本文信息所造成的法律后果均与本人无关。请读者自行判…...

Flink 开发工程应加载哪些依赖
在我们要开发Flink程序时,就会涉及到应该加载哪些Flink jar的问题。本章内容就是向你展示如何配置你的项目,添加必要的依赖。 每个应用程序都会依赖一些 Flink libraries,比如至少依赖 Flink APIs库,如果使用了connector,则还需要依赖connector相关的库,比如kafka、jdbc…...

wordpress建外贸独立站常用的多语言插件
WordPress是一个功能强大的内容管理系统,对于外贸独立站来说,多语言支持是非常重要的功能。以下是一些常用的WordPress多语言插件: 1. WPML (WordPress Multilingual) 这是最流行且功能最全面的多语言插件之一。它支持翻译整个网站…...

[SpB]如何开始使用 Spring Boot?
如何开始使用 Spring Boot? Spring Boot 简化了 Java 项目开发,你只需要专注于业务逻辑,底层的很多配置和功能由 Spring Boot 自动帮你处理。下面是你如何快速上手 Spring Boot 的步骤,以及如何通过 IDEA 了解 Spring Boot 的功能…...

蓝桥杯模拟
【问题描述】 如果一个数 p 是个质数,同时又是整数 a 的约数,则 p 称为 a 的一个质因数。 请问 2024 有多少个质因数。 【答案提交】 这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只…...

数字化转型企业架构设计手册(交付版),企业数字化转型建设思路、本质、数字化架构、数字化规划蓝图(PPT原件获取)
1、企业架构现状分析 2、企业架构内容框架 3、企业架构设计方法 3.1 、业务架构设计方法 3.2 、数据架构设计方法 3.3 、应用架构设计方法 3.4 、技术架构设计方法 软件全套资料部分文档清单: 工作安排任务书,可行性分析报告,立项申请审批表&…...

2. langgraph中的react agent使用 (在react agent添加历史消息)
1. 导入必要的库 首先,我们需要导入所需的库。这里我们使用 langchain_openai 来与 智谱AI 模型进行交互,并使用 langchain_core.tools 来定义自定义工具。 from langchain_openai import ChatOpenAI from typing import Literal from langchain_core.…...

MySQL社区版的启动与连接
1.启动: 注意:MySQL是默认开机自启的 方式一: 1.WinR 的命令行中直接输入services.msc 2.在服务中找到数据库名称,然后鼠标右键点击启动 方式二: 1.在开始选项中搜索“cmd”命令提示符,使用管理员身份运行 …...

【图像压缩感知】论文阅读:Content-Aware Scalable Deep Compressed Sensing
tips: 本文为个人阅读论文的笔记,仅作为学习记录所用。本文参考另一篇论文阅读笔记 Title: Content-Aware Scalable Deep Compressed Sensing Journal: TIP 2022 代码链接: https://github.com/Guaishou74851/CASNet…...

物理hack
声明 声明 文章只是方便各位师傅学习知识,以下网站只涉及学习内容,其他的都与本人无关,切莫逾越法律红线,否则后果自负。 ✍🏻作者简介:致力于网络安全领域,目前作为一名学习者,很荣…...

Linux——环境基础开发工具使用2(正在更新中...)
1.自动化构建-make/Makefile 1.1 认识make和Makefile make是一个命令; Makefile是一个文件。 1.2 理解 其中在第一个图片中,第一行的 mytest:test.c 叫做依赖关系;第二行的 gcc test.c -o mytest 叫做依赖方法。 依赖关系和依赖方法共同…...

STM32传感器模块编程实践(十二) micro SD卡模块简介及驱动源码
文章目录 一.概要二.Micro SD卡模块主要特性三.Micro SD卡模块接线说明四.Micro SD卡模块参考原理图五.通讯协议介绍六.FATFS文件系统介绍七.STM32F030C8T6单片机与SD卡模块实现数据读写实验1.硬件准备2.软件工程3.软件主要代码4.实验效果 八.源代码工程下载九.小结 一.概要 M…...

Linux debian系统安装ClamTk开源图形用户界面(GUI)杀毒软件
一、ClamTk简介 ClamTk 是一个基于 ClamAV 的开源图形用户界面(GUI)杀毒软件。它使用 GTK2-Perl 脚本构建而成,支持32位与64位操作系统。ClamTk 提供了一个直观的用户界面,使得用户无需深入了解命令行即可完成大部分操作。它具备…...

RapidIO介绍
传统串行总线(如 UART, SPI, I2C 等) 特点: 接口简单:传统的串行总线设计相对简单,通常使用少量的引脚,因此硬件设计较为简洁。协议简单:这些协议设计简单,容易实现,因…...

用魔方做存储器
用魔方模拟存储器是一种形象化的方式,特别适合教学演示或帮助理解存储器结构。以下是如何将魔方作为存储器的设计思路和可能的实现: 基本思路 魔方的结构: 魔方有 (6) 个面,每面 (3 \times 3 9) 个方块,总共 (6 \time…...

动力商城-03 Idea集成apifox Mybatis-Plus字段策略
1.Idea下载apifox插件 2.新建令牌放入Idea 3.右键上传到对应接口 4.设置前置url 插件能够自动识别swagger注解 Mybatis-Plus字段策略 1、FieldStrategy作用 Mybatis-Plus字段策略FieldStrategy的作用主要是在进行新增、更新时,根据配置的策略判断是否对实体对…...

python如何使用Rabbitmq
目录 一、Rabbitmq介绍 二、Rabbitmq的使用场景 1、异步处理 2、服务解耦 3、流量削峰 4、日志收集 5、发布订阅 6、任务调度 三、python如何使用Rabbitmq 1、安装依赖 2、基础使用 3、消息确认 4、消息持久化 5、公平调度 6、发布订阅 7、关键字发布 一、Rabbi…...

分布式,微服务,SpringCloudAlibaba,nacos,gateway,openFeign
想学习微服务SpringCloudAlibaba的小伙伴,可以观看视频 地址: https://www.bilibili.com/video/BV1cFDEYWEkY/?vd_source14d27ec13a4737c281b7c79463687112分布式架构和微服务是两个密切相关但又有所区别的概念。它们在现代软件工程中经常被提及&#…...

MySQL初学之旅(3)约束
目录 1.前言 2.正文 2.1约束类型 2.2NULL约束 2.3UNIQUE约束 2.4DEFAULT约束 2.5PRIMARY KEY主键约束 2.6FOREIGN KEY外键约束 2.7CHECK约束 3.小结 1.前言 哈喽大家好啊,今儿来继续给大家分享最近学习的MySQL和约束相关的知识点,希望大家一起…...

使用YOLOv9进行图像与视频检测
大家好,YOLOv9 与其前身v8一样,专注于识别和精确定位图像和视频中的对象。本文将介绍如何使用YOLOv9进行图像与视频检测,自动驾驶汽车、安全系统和高级图像搜索等应用在很大程度上依赖于此功能,YOLOv9 引入了比 YOLOv8 更令人印象…...

C# 中的 LINQ:轻松处理集合和数据
C#中的LINQ(Language Integrated Query),这是一个非常强大且实用的功能,可以简化集合操作和数据查询。以下是一篇关于C#中LINQ使用的文章。 引言 LINQ(Language Integrated Query)是C#语言的一个重要特性…...