【读论文】TCPMFNet

news2025/1/8 18:11:15

【读论文】TCPMFNet

  • 简单介绍
  • 网络结构
    • 编码器
    • 图像融合网络
      • Vision Transformer
      • 特征融合网络
    • 网格连接解码器
  • 损失函数
  • 总结
  • 参考

论文:https://www.sciencedirect.com/science/article/pii/S1350449522003863
如有侵权请联系博主

简单介绍

今天要介绍的是TCPMFNet,这篇论文中提出的红外图像融合方法结合了vision transformer,这也是我第一次接触到这个知识,接下来,我们一起看看这篇论文吧。

网络结构

老样子,咱们先看下整个网络的架构
在这里插入图片描述
看到这个结构,是不是觉得有点眼熟,和RFN-Nest有点相似,那样的话就和RFN-Nest对比来看吧。

整个架构简单来说,就是由三个部分组成,分别是编码器,特征融合器和解码器。其中编码器提取四个尺度的红外图像和可视图像特征,然后每个尺度的特征输入到对应的特征融合器中,然后输出的融合特征输入到解码器中生成最终的融合图像。接下来我们拆开整个网络架构,一部分一部分去讲。

编码器

在这里插入图片描述

编码器的架构如上图所示,可以看到很有趣的是这里有两个编码器,并且两个编码器之间还存在数据的传输,作者将这两个编码器命名为主自动编码器(图右)和辅助自动编码器(图左),两个编码器共享相同的网络结构和参数配置。

观察下上图中解码器的结构,你会发现每个解码器有五层,从第二层开始,分别为stage0,stage1,stage2,stage3,并且除了stage0以外,主编码器的每一个stage的输入都包含辅助编码器的输出,即stage1的输入为主编码器stage0的输出和辅助编码器的stage1的输出进行上采样(在经过了最大池化和卷积之后特征矩阵的大小发生了变化,因此需要将辅助编码器的stage1的输出上采样至与主编码器中的stage0的输出相同的大小)之后的结果相加所得。

那么为什么要介绍这个东西呢?

这就是为了理解下面这个公式更方便

在这里插入图片描述
MSFIN是主编码器stagei+1的输入,MSFO是主编码器stagei的输出,ASFO是stagei+1的输出,其中UP是上采样操作,Conv是卷积操作,结合上面的内容,再去理解这个就很简单了。

那么为什么要设计这样的网络结构呢?相比于单个解码器这样的优势在哪里?

看下作者的解释

将来自辅助自动编码器的特征图与来自主自动编码器的特性图融合,可以使提取的源图像特征分布到更多的通道中,从而提高特征提取的性能。

如下图,可以明显看出紫色圆圈标注的特征图中的特征信息,更多一些,仔细看我们又会发现,主编码器中的通道24的红外特征和可视特征都比较差,但是通道56中的两种特征都保留的很好,再看辅助编码器,你会发现恰恰相反,这就直接互补了,二者相加可以更好的保留特征信息,这就是为什么要采用这个结构的原因。
在这里插入图片描述

图像融合网络

Vision Transformer

博主认为整个架构最重要的一个部分,也是让我收获最大的一部分内容,接下来我们一起来看看吧。

要看这个部分的话,首先我们需要了解下什么是vision transformer

来看下图,这是vision transformer原论文中的给出的网络结构,看着好像不是很复杂,抛开事实不谈的话,确实是这样的。
在这里插入图片描述
首先我们先看左半部分,这是整个vision transformer的总体架构。回忆下transformer,最原始的transformer是用于自然语言处理,每个词都作为一个向量作为整个网络的输入,但是这里我们输入的是一个3维的数据(三通道数据),这就很难在采用之前使用的输入方式,否则会导致参数量过大

这时就有大佬提出了VIT,那么他是怎么做的呢,来继续往下看。

第一步就是将图片分成多个patch,然后再将这多个patch经过一系列操作转换为多个一维的数据,然后才输入到transformer中进行处理,也就是下图红框部分中执行的操作,这个操作应该怎么做呢?
在这里插入图片描述

我们来仔细说下这个过程,第一件事我们需要将整个图像划分为多个块,上图就是直接划分成了9个块,然后这9个块进入到linear Projection of Flattened Patches(就是一个全连接层)然后又得到了9个输出,这9个输出已经是一维的向量,然后再与位置编码相加即可,就得到了transformer所需要的输入。

那么这个过程可以怎么实现呢?

我们可以直接使用卷积操作来实现上面这一个复杂的过程,这里拿一个尺寸比较小的图片来举例,我们有一个9x9x3的图像数据(只是举例,一般不会这么小),此时我们只需要设置卷积核大小为3,步长为3,卷积核数量为9,在整个图像中进行卷积即可,卷积之后就会得到3x3x9的数据,这时再将3x3平铺为维数为9的向量即可,这样我们就得到了长度为9,维数也为9的一组token,就成功的将2D的图像数据转换位1D的数据。此时在进行transformer的正常操作即可,即每一个token再加上位置编码(1D的位置编码),之后的操作就与transformer一致了,可以注意到这里还多一个位置编码0的toekn,可以使用这个token对应的输出来实现分类操作。

同理,当我们对一个224x224大小的图片进行操作时,设置每一个patch为16时,我们只需要将卷积核大小设置为16,步长设置为16,卷积核数量设置为196即可。

在了解了怎么将图像数据转换为transformer可以接收的数据,这里我们再讲一下transformer encoder中都进行了哪些工作。

如下图所示,可以看到整个架构其实很简单,我们重点讲一下这里的Multi-Head Attention,也就是多头注意力机制。
在这里插入图片描述

首先我们先了解下transformer的注意力机制是什么?来看下这个公式
在这里插入图片描述

单看的话,特别的抽象,我们来一个个拆分一下。简单来看的话,整个公式就是由三部分组成,分别是Q,K和V,那么可以怎么理解这三个东西呢?

以现在大火的选秀为例,我们可以认为Q是一个评价标准(评价唱跳能力等等),K是你个人的唱跳能力,V是你的基础得分,当你的唱跳能力K符合评价标准Q,你的最终得分就会越高。

具体计算起来又会是怎样的一个过程呢?我们继续看一下

如下图,这里的q和k都是向量,这样我们就得到了Q和K的转置计算后的结果,这个矩阵的意义是什么呢?
在这里插入图片描述

观察上面的矩阵,以第一行为例,每一个数据都是q1与k进行计算的结果,是不是就代表第一行的数据其实就是q1与所有k的匹配程度,同理其他行也是如此,接下来在进行一步计算(这里没有进行softmax处理,大家自行带入下),如下图

在这里插入图片描述

观察最终结果,你会发现v1,v2和v3的值已经不再是由它本身决定了,而是由v1,v2和v3三个的值共同决定,而每个值所占的权重就与q与k的相关程度有关。

每一个值在经过注意力之后都会受到所有值的影响,这一点在图像里有什么用途呢?稍后我们就会与论文内容相结合一起说说这个点。

那么多头又是什么意思呢?

简单来说就是将原来的Q,K和V在维度上分成了多分,例如三者都是24维的,采用4头注意力,此时每一个部分的输入数据就是6维的,在计算得到最终结果之后再将这多个结果连接起来就是最终的结果了。

那么为什么要用多头呢?

回顾一下,你会发现,整个计算过程中都是固定,当要做不同的工作时,怎么让网络去学习呢?这个的答案就是为什么要使用多头注意力

先看下transformer原论文中多头注意力的公式

在这里插入图片描述

可以很清晰的看到QKV都是乘了一个W,这个W是可以学习的,也就可以应对不同的工作。

讲了这么多接下来我们就可以开始看论文的内容了。

在这里插入图片描述

特征融合网络

在这里插入图片描述
整个网络比较简单,从下而上,首先是一个卷积层,这个卷积层的作用应该和我们之前提到的将图片数据转换为一维数据的卷积层的功能是相同的,即使用卷积对整个图片进行卷积,然后将得到的结果的前两维铺平。

之后就是将卷积层的输出复制为三份,分别作为QKV,输入到multi-head attention(多头注意力)中,其中进行的操作可参考前文内容,multi-head attention的输出再与multi-head attention的输入进行相加,在输入到最后一层(mlp)中,然后最后一个mlp的输出再与其输入相加,就是最终的融合特征结果。

这部分的公式如下,Res就是进行一个残差连接,ATT代表multi-head attention的输出,TFO为最终的输出。
在这里插入图片描述
了解完结构之后,你可能会有个疑问,为什么要使用VIT,而不是继续使用CNN?

这时我们再回忆下,前文中提到了,经过transformer之后的输出的每个token中包含了所有的token的信息,代入到VIT这边,每一个token包含图片中一个patch的信息,在经过处理之后,是不是就代表每个处理后的token就有了整张图片的信息, 而CNN获取的信息范围一般是局限在卷积核大小,二者就有很明显的区别了,即CNN适用获取局部信息,而VIT可以获取全局信息,二者各有优势,例如在本文中,虽然说VIT可以很好的获取全局信息,但是在局部的一些处理不如CNN,因此作者采用二者相结合的方式,这就是最终的融合网络架构,如下图

在这里插入图片描述

网络中有三条融合路径,分别是卷积融合路径,transformer 融合路径和混合路径。

来看下公式
在这里插入图片描述
很清晰,Conv是卷积操作,TFO是Transformer,CFPO是卷积路径的结果,TFPO是transformer路径的结果,MPO是混合路径的结果,FM是最终的结果。

这里我有个疑问,在我的认知里,VIT输出的token如果直接与卷积的结果进行相加,是不是还需要将token的维数转换下?

网格连接解码器

在这里插入图片描述
解码器相对来说就比较简单了,四个尺度的融合特征作为输入,然后再网络进行上采样,下采样,同时作为不同卷积节点的输入,然后最终汇总到一个C2,0,在经过一个Final_conv也就是最终的结果。

具体的配置可以看下原文,这里就不做多余的描述了。

损失函数

整体的损失函数如下,Ld为细节损失函数,Lf为特征损失函数。在这里插入图片描述
细节损失函数相对简单,还是我们的老朋友SSIM。
在这里插入图片描述
看一下特征损失函数,这里Ff是融合特征,m是第几个尺度的特征,Fvi是可视特征,Fir是红外特征

来看Lf,作者将β1设置为0.6,β2设置为0.4,这样设置的原因我认为和RFN中应该大致相似,因为Ld已经倾向于保留可是图像的特征,Lf要同时保证红外特征和可视特征尽可能的保留,但鉴于Ld已经有益于可视特征的保留,因此这里将参数设置偏向于保留红外特征。最终的Lf是多个尺度的特征损失相加而得,这也是挺有趣的一个地方。
在这里插入图片描述

总结

之后的训练和消融实验就不整理,这篇论文真的帮我打开了一个新世界的大门,第一次接触到VIT相关的知识,以上关于VIT的总结多是看完沐神的transformer之后的体会,有错误的地方希望大佬们指点。

其他融合图像论文解读
读论文专栏,快来点我呀

【读论文】DIVFusion: Darkness-free infrared and visible image fusion

【读论文】RFN-Nest: An end-to-end residual fusion network for infrared and visible images

【读论文】DDcGAN

【读论文】Self-supervised feature adaption for infrared and visible image fusion

【读论文】FusionGAN: A generative adversarial network for infrared and visible image fusion

【读论文】DeepFuse: A Deep Unsupervised Approach for Exposure Fusion with Extreme Exposure Image Pairs

【读论文】DenseFuse: A Fusion Approach to Infrared and Visible Images

参考

[1] TCPMFNet: An infrared and visible image fusion network with composite auto encoder and transformer–convolutional parallel mixed fusion strategy
[2] AN IMAGE IS WORTH 16X16 WORDS: TRANSFORMERS FOR IMAGE RECOGNITION AT SCALE
[3] Attention Is All Y ou Need

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

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

相关文章

六大排序算法

1. 插入排序步骤:1.从第一个元素开始,该元素可以认为已经被排序2.取下一个元素tem,从已排序的元素序列从后往前扫描3.如果该元素大于tem,则将该元素移到下一位4.重复步骤3,直到找到已排序元素中小于等于tem的元素5.tem…

如何使用 Pandas 清洗二手房数据并存储文件

目录 一、实战场景 二、知识点 python 基础语法 python 文件读写 pandas 数据清洗 三、菜鸟实战 清洗前的文件 读取源文件 对二手房数据进行清洗 清洗完成后保存到文件 运行结果 运行截图 结果文件 一、实战场景 如何使用 Pandas 清洗的二手房数据并存储文件 二…

初识结构体(详细版)

目录 一、结构体的声明 1、结构的基础知识 2、结构的声明 3、结构成员的类型 4、结构体变量的定义和初始化 二、结构体成员的访问 1、点操作符访问 2、->操作符访问 3、解引用访问 三、结构体嵌套 四、结构体传参 1、传值调用 2、传址调用 一、结构体的声明 1、结构的基…

Vue2前端路由(vue-router的使用)

一、vue2axiosExpressMySQL实现前后端交互1、后台:(1)确定MySQL的表格:明确数据库 (mvc) —- 数据表(ssm_book)(2)创建Express项目:mysql2、cors、Sequelize(ORM)、nodem…

imx6ull Linux sdk下载验证

本文章是基于整点原子的imx6ull alpha开发板一.Linux SDK源码以及image1.环境准备其他的工具我们就不做介绍了,比如ubuntu ftp,ssh等等,我们主要来介绍下编译链1.1 交叉编译链背景:因为在原子的教程中有强调最新的Linaro gcc编译完uboot后无法…

备受认可!中睿天下荣登“2022创业邦100未来独角兽”年度榜单

近日,由创业邦、复旦大学管理学院主办的2022创业邦100未来独角兽峰会暨创业邦年会在上海举办。在峰会现场,2022创业邦100未来独角兽榜单正式揭晓,中睿天下凭借出众的综合实力荣登榜单。作为一家以“实战对抗”为特点的能力价值型网络安全厂商…

Java版设计模式/设计模式的作用是什么/类之间有哪些关系?又怎么表示

继续整理记录这段时间来的收获,详细代码可在我的Gitee仓库SpringBoot克隆下载学习使用! 1. 设计模式概述 1.1 设计模式创始“4人组” ErichGamma–艾瑞克伽马Richard Helm—理查德赫尔码Ralph Johnson----拉尔夫约翰逊John Vlissides—约翰威力斯蒂斯…

【Linux】Linux编译器-gcc/g++的使用和程序执行的基础底层原理

Linux编译器1.gcc/g 的使用2. 程序的基本翻译过程3.预处理3.1验证预处理的功能(gcc -E)4.编译(变成汇编语言)4.1验证编译过程(gcc -S)5.汇编(生成机器可识别代码)5.1验证汇编过程&am…

K_A11_002 基于STM32等单片机驱动DS18B20串口与OLED0.96双显示

K_A11_002 基于STM32等单片机驱动DS18B20 串口与OLED0.96双显示一、资源说明二、基本参数1.参数2.引脚说明三、驱动说明时序对应程序:四、部分代码说明1、接线说明1.1、STC89C52RCDHT11模块1.2、STM32F103C8T6DHT11模块五、基础知识学习与相关资料下载六、视频效果展示与程序资…

内核解读之内存管理(4)内存管理三级架构之page

我们前面介绍了linux内存管理的三级架构,node->zone->page。本节就来介绍page。 页是内核管理内存的基本单位,体系结构不同,支持的页大小也不尽相同,还有些体系结构甚至支持几种不同的页大小。大多数32位体系结构支持4KB的页…

【Python】爬取弹幕并保存到Excel中

hello,我是李华同学,最近开始学习爬虫,下面是我实现的一个得到弹幕的代码😏找一个URL👉想要得到一个网站的内容,首先要找到你想要内容的具体位置,首先你先找到一个有弹幕的地方,找到…

linux系统重装yum工具与python环境

文章目录前言一、强制删除原有环境1.删除python2.删除yum二、安装新环境前置准备三、下载依赖命令1.内核版本7.6.1810下载python依赖包下载yum包2.内核版本7.4.1708下载python依赖包下载yum包3.内核版本7.8.2003下载python依赖包下载yum依赖包4.下载结果四、安装前言 安装之前…

swagger入门

目录 1.前后端分离的特点 2.在没有swagger之前 3.swagger的作用 4.swagger的优点 5.集成swagger 5.1 新建springboot项目 5.2 集成swagger 5.3 开发一个controller用于测试 5.4 启动服务,验证集成效果 6.swagger常用注解 7.swagger使用综合案例 8.会议OA之sw…

第三章 Flink DataStream API

Flink 系列教程传送门 第一章 Flink 简介 第二章 Flink 环境部署 第三章 Flink DataStream API 第四章 Flink 窗口和水位线 第五章 Flink Table API&SQL 第六章 新闻热搜实时分析系统 一、DataStream API是什么? Flink 中的 DataStream 程序是对数据流&a…

Android 深入系统完全讲解(2)

1 系统启动过程、嵌入式系统启动过程 这是我之前画的启动过程的图,这个主要就是给大家讲明白,启动过程整个的流程。 第一个阶段,bootloader 系统在上电的时候,系统会从固定的地方加载一段代码进入内部 ram 进行运行。这段代码 通…

【数学思维】Quasi-convex and quesi-concave

【数学思维】Quasi-convex and quesi-concaveConvex function 定义如下 f(λx(1−λ)y)≤λf(x)(1−λ)f(y)f(\lambda x(1-\lambda)y)\le \lambda f(x)(1-\lambda)f(y) f(λx(1−λ)y)≤λf(x)(1−λ)f(y)Quasi-convex function 定义如下 f(λx(1−λ)y)≤max⁡{f(x),f(y)}f(\l…

【阶段三】Python机器学习01篇:机器学习概念、机器学习类别、机器学习应用场景与机器学习基本技术:特征、标签、模型

本篇的思维导图: 机器学习概念 机器学习是AI人工智能的分支技术,而深度学习是机器学习的重要分支。 人工智能、机器学习、深度学习三者的关系 机器学习就是从数据中发现规律,机器学习的关键内涵之一在于利用计算机的运算能力从大量的数据中发现一个“函数”或…

Linux——VMware Tools的介绍及安装方法

一、VMware Tools的作用 1.最大的好处是可以直接把windows界面的文件拖进linux虚拟机内。 2.鼠标可以直接从虚拟机移动到windows等等好处。 二、VMware Tools的安装步骤 1.首先把linux虚拟机关机或退出,然后点击“编辑虚拟机设置”。 2.点击CD/DVD,…

电子、半导体废水深度除氟、除重金属的技术详解

电子半导体行业废水来源及水质特点电子废水主要是印刷线路板中每个环节产生的废水,如线路板上的赋铜线路、电子元器件、二极管、三极管、电容等,日常生活中常见的就是电脑元器件,如内存条、CPU、主板等。这些东西在生产成型的过程中主要通过电…

968. 监控二叉树

题目 分析 首先明确把摄像头放在叶子节点的父节点位置,才能充分利用摄像头的覆盖面积。 贪心算法: 从下到上看局部最优,因为下面的节点最多,让叶子节点的父节点安摄像头最合理,所用摄像头最少。 整体全局最优&#xf…