【IVIF】CS2Fusion: Contrastive learning for Self-Supervised infrared and visible image fusion by estim

虽然是顶刊Information fusion,但没给代码,鉴定为shi(希望作者快看到我,然后教训我)

1、摘要/Motivation

在红外与可见光图像融合(IVIF)中,利用图像级信息建立的先验知识约束往往会忽略源图像特征之间的同一性和差异性,无法充分利用红外图像对可见光图像的信息互补作用。为此,本研究开发了基于对比学习的自监督融合模型(CS2Fusion):
将红外图像视为可见光图像的补充,并开发了补偿感知网络(CPN),通过估计红外图像的特征补偿图来引导骨干网络生成融合图像。该方法的核心思想基于以下观察结果:

Motivation

(1) 不同模态之间的语义信息通常存在显著差异;
(2) 尽管语义差异较大,但**同一模态特征之间的自相关特征和显著性特征的分布往往相似。**基于这些观察结果,我们使用自相关和显著性操作(SSO)来构建正负对,在对比度损失的约束下,驱动 CPN 感知红外图像相对于可见光图像的互补特征。CPN 还加入了自我监督学习机制,通过随机裁剪可见光图像中的斑块来模拟视觉受损区域,从而提供同一场景的更多不同信息,**形成多个正样本,**以增强模型的精细感知能力。此外,我们还在骨干网络中设计了需求驱动模块(DDM),在图像重建中主动查询改善层间信息,进而整合更多空间结构信息。值得注意的是,作为辅助网络的 CPN 仅用于训练,以驱动骨干网络以自我监督的形式完成 IVIF。

根据我们的观察,源特征之间存在着同一性和差异性:
(1)红外图像与可见光图像在语义信息上不同,它们在潜在特征空间中的特征表示相距甚远,因此互为负样本;【域间特征】
(2)对于同源特征(由同一传感器捕获),虽然整体语义信息相距甚远,但自相关特征和显著性特征的分布应该相同,即这些同源特征在潜在特征空间中的特征表示相互接近。【说的是域

### CS2Fusion 介绍 CS2Fusion 是一种基于对比学习的自监督红外与可见光图像融合方法,旨在通过估计特征补偿图谱实现高质量的图像融合[^3]。该方法的核心思想是利用对比学习框架,在训练过程中感知红外图像(IR)和可见光图像(VIS)之间的互补特征,并通过渐进式融合策略增强跨模态交互能力。 #### 方法概述 CS2Fusion 的主要流程包括以下几个关键部分: 1. **输入增强**:模型接收两组输入,分别是原始的 VIS 和 IR 图像 concat,以及经过增强的 VIS 和 IR 图像 concat。增强方式采用 Cutout 技术,通过随机遮挡部分区域来增加数据多样性[^1]。 2. **编码器设计**:输入图像被送入编码器后,生成的特征表示仍然被描述为 IR 和 VIS 特征。尽管输入已经是 concat 形式,但通过分组卷积或其他机制,模型能够区分并提取各自模态的特征[^1]。 3. **CPN 模块**:CPN(Complementary Perception Network)仅在训练阶段使用,用于感知源特征之间的一致性和差异性,从而帮助模型更好地理解 IR 和 VIS 图像的互补信息[^1]。在测试阶段,CPN 不参与计算,以减少推理开销。 4. **对比学习框架**:通过构建正样本对和负样本对,模型能够在无监督的情况下学习到更具判别性的特征表示[^3]。 5. **渐进融合模块**:为了进一步增强特征集成和跨模态交互,CS2Fusion 引入了渐进融合模块,逐步将低级细节和高级语义信息进行融合[^2]。 #### 使用指南 以下是 CS2Fusion 的基本使用步骤: 1. **环境准备**:确保安装必要的依赖库,例如 PyTorch、NumPy 等。 2. **数据预处理**:准备红外和可见光图像数据集,并对图像进行标准化处理。可以参考论文中的实验设置,使用 Cutout 增强技术生成增强图像。 3. **模型训练**:加载 CS2Fusion 模型架构,配置对比学习损失函数,并使用训练数据进行模型训练。注意 CPN 模块仅在训练阶段启用。 4. **模型推理**:在测试阶段,移除 CPN 模块,直接使用训练好的编码器和渐进融合模块进行图像融合。 5. **结果评估**:使用常见的图像融合评估指标(如熵、互信息等)对融合结果进行定量分析。 #### 示例代码 以下是一个简化的 CS2Fusion 训练代码示例: ```python import torch import torch.nn as nn from torchvision.transforms import Compose, ToTensor class CS2Fusion(nn.Module): def __init__(self): super(CS2Fusion, self).__init__() # 定义编码器和其他模块 self.encoder = nn.Sequential( nn.Conv2d(2, 64, kernel_size=3, stride=1, padding=1), nn.ReLU(), nn.Conv2d(64, 128, kernel_size=3, stride=1, padding=1) ) self.cpn = nn.Sequential( nn.Conv2d(128, 64, kernel_size=3, stride=1, padding=1), nn.ReLU() ) self.fusion_module = nn.Conv2d(128, 1, kernel_size=1) def forward(self, x, train_mode=True): features = self.encoder(x) if train_mode: cpn_output = self.cpn(features) return features, cpn_output else: fused_output = self.fusion_module(features) return fused_output # 数据预处理 transform = Compose([ToTensor()]) ir_image = transform(ir_image) # 红外图像 vis_image = transform(vis_image) # 可见光图像 input_data = torch.cat([ir_image, vis_image], dim=0).unsqueeze(0) # 模型实例化 model = CS2Fusion() # 训练模式 features, cpn_output = model(input_data, train_mode=True) # 测试模式 fused_image = model(input_data, train_mode=False) ``` ### 注意事项 - 在训练阶段,确保 CPN 模块正确参与计算,并调整对比学习损失函数的权重。 - 在测试阶段,需手动禁用 CPN 模块,避免额外计算开销。 - 对于输入图像的增强,可参考论文中提到的 Cutout 方法,具体实现可根据需求调整。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值