
简介面向图像融合领域的深度学习综述资料特别适合从事红外与可见光、医学影像、遥感图像融合的算法工程师和研究生。内容系统梳理多模态图像融合的主要场景包括红外与可见光、医学影像、多曝光、多聚焦、遥感全色锐化等并总结通用融合框架、常用数据集及评估指标同时以DRMF等抗退化扩散先验为例介绍生成模型在图像融合中的前沿思路便于读者理解传统方法与深度学习方法的衔接与差异。资源包共498个文件主体为464张PNG图像样本与29个MATLAB评估脚本另有3个Markdown说明文档和2个Excel指标统计表压缩包整体约93.11MB。MATLAB脚本覆盖Qabf、MS-SSIM、NABF等指标计算可配合图像样本直接运行Excel表格可集中记录多组实验数据Markdown文档则提供综述脉络与使用导读帮助用户从算法原理落到量化比较。已有710人学习适合需要快速搭建图像融合评测体系、复现对比实验的研究人员。1. 为什么图像融合很快会被深度学习全部重写图像融合不是新问题传统金字塔和小波变换做红外与可见光融合时选哪层做融合规则、小波基取几阶、阈值设多少几乎全靠手工抠。换一组传感器数据参数往往要重调一遍这在工程里非常劝退。基于深度学习的图像融合则把这件事改写成表示学习源图像经过编码器变成特征图在特征空间里决定谁保留纹理、谁保留热辐射再由解码器还原成融合结果。整个过程不需要人工设计融合规则也不需要逐像素标注属于典型的高价值低标注成本问题。这篇综述按工程线索梳理任务分类、评价指标、方法主线与训练细节读者可以把它当选题依据也可以直接拿来启动自己的实验。2. 图像融合的任务定界、数据与评价指标先把“融得好”量化再谈模型2.1 图像融合的任务分类从红外可见光到医学图像图像融合按任务目的有几种常见划分。红外与可见光融合是为了同时保留热目标和背景纹理前者强度高但细节少后者反之多曝光融合处理同一场景的不同亮度照片目标是扩大动态范围多焦点融合拍的是同一物体不同景深的照片目标是全图清晰医学图像融合里常见的是 MRI 和 CT 的结构信息配 SPECT/PET 的功能信息也就是解剖图像与代谢图像的组合。综述性质的内容要先画坐标像素级融合、特征级融合与决策级融合是另一条划分轴深度学习方法绝大多数落在像素级和特征级上。2.1.1 同源与异源模态的预处理差异同源图像如多曝光、多焦点通常已经粗略对齐颜色空间也一致预处理只需要做尺寸统一和归一化。异源图像如红外可见光或医学图像几何配准和灰度分布差才是大头。红外图像往往没有可见光的纹理细节直方图范围也可能完全不同如果直接把两张图 resize 到同一分辨率送进网络融合结果里容易出伪影。我一般会在数据管线里先做一次配准校验用互信息或边缘对齐打分筛掉对不齐的样本再进训练。2.2 公开数据集与常用预处理约定公开数据集包括 TNO 这类红外可见光场景、类似 Lytro 的多曝光多焦点场景、MFFW 等不同版本的划分方式并不一致。预处理约定大同小异统一尺寸按全数据集统计均值方差归一化灰度图像融合通常按单通道计算彩色图像则拆到 YCbCr 空间只对 Y 亮度通道做融合CbCr 色度通道直接复用源图里清晰度更高的那一张。这样做能避免融合过程把色偏也学进去很多工程 Demo 都保留了这一约定省掉一堆彩色伪影的排障时间。2.3 评价指标怎么选PSNR、SSIM、MI、Qabf 的作用边界融合没有标准答案指标也不完美但项目验收必须量化。常用指标按用途可以分成三类基于像素差值的指标如 PSNR适合有参考图像或拿源图做近似参考的情况基于结构相似度的 SSIM 侧重点在于结构保持基于信息量的 MI 看源图信息保留了多少基于梯度的 Qabf 衡量边缘细节。下面这张表给出常用指标的语义边界。指标计算思路适合场景注意事项PSNR融合结果与参考的均方误差取对数有参考图、或和源图比较只反映逐像素差异纹理效果容易被平滑掩盖SSIM结构相似度结合亮度、对比度、结构结构信息更重要的任务对整体模糊不敏感模糊图分数也可能很高MI源图与融合结果之间的互信息衡量信息保留量直方图分箱数对数值影响很大Qabf源图梯度幅度与方向的保持边缘细节保留高斯窗口大小影响结果窗口变了结论可能反转VIF基于自然图像统计的信息保真度视觉质量评估需要统一场景统计模型指标脚本差异较大指标脚本对图像位深和颜色通道的处理方式一定不能混。有的实现默认输入是 0 到 255 的 uint8有的默认是 0 到 1 的 float混着算出来的数值之间没有可比性。我在评估脚本里会强制统一输入范围统一通道数并在实验记录里写明口径。下面是一个最小化封装import numpy as np def as_float(img): img img.astype(np.float32) if img.max() 1.5: img / 255.0 return img def psnr(a, b): a, b as_float(a), as_float(b) mse np.mean((a - b) ** 2) return 10 * np.log10(1.0 / (mse 1e-8))这段代码把输入统一规范到 0 到 1 的范围再做计算。1.5是判断位深的阈值8 位图的最大值是 255归一化后最大值约 1.0如果最大像素值超过 1.5 就主动做一次缩放。1e-8只是避免除零不影响数值趋势。2.4 指标为什么不能直接反映融合质量指标只能给出局部视角。两个结构差异很大的融合结果PSNR 可能一样高而人眼对边缘纹理的敏感度MI 根本测不出来。综述里评价模型时都会写“在 XX 指标上领先”真实项目里还要叠加一次主观盲评。建议每个实验保留固定 20 张源图和输出图组成的验证集把指标脚本固定成同一个文件才能保证前后的数值可比。3. 基于深度学习的图像融合方法主线自编码、对抗、注意力与扩散3.1 自编码器框架编码、融合、重建三步基于深度学习的图像融合综述里最基础也最常用的是自编码器结构。两个输入分支各自经过编码器得到特征图在融合层按规则合并再由解码器生成融合结果。早期方法用单层卷积堆叠后来改进方向集中到密集连接和特征金字塔让不同尺度的信息都能参与融合。真正决定输出风格的是融合层不是编码器。融合层常见的选择有三种逐元素取最大、逐元素取平均、按特征通道的显著性加权。下面是一个最小化实现思路用 PyTorch 写出class Encoder(nn.Module): def __init__(self): super().__init__() self.conv nn.Sequential( nn.Conv2d(3, 32, 3, padding1), nn.BatchNorm2d(32), nn.ReLU(), nn.Conv2d(32, 64, 3, stride2, padding1), nn.BatchNorm2d(64), nn.ReLU(), ) def forward(self, x): return self.conv(x) def l1_norm_fusion(f_a, f_b): # f_a, f_b 的形状是 (N, C, H, W) norm_a f_a.abs().mean(dim1, keepdimTrue) norm_b f_b.abs().mean(dim1, keepdimTrue) mask norm_a norm_b return torch.where(mask, f_a, f_b)这个片段的逻辑是每个空间位置上的显著度用该位置的特征绝对值的通道均值代替哪个源图的局部特征更突出融合输出就继承哪个。torch.where会把 mask 从形状(N,1,H,W)广播到(N,C,H,W)所以不用显式循环。解码器负责把合并后的特征图恢复回图像空间。很多刚入门的人会把精力放在编码器加深上但实测下来融合规则的改变带来的收益比编码器多加两层更大。3.1.1 为什么深度学习能替代传统融合规则传统方法在分解系数上做加权平均规则固定且依赖手工参数。深度特征本身包含高层语义同样的 L1 范数规则在特征空间里比在像素空间里可靠得多。这就是深度学习把“选择规则”变成“学习表示”的核心逻辑也解释了为什么同一种融合规则在不同骨干网络上效果差异会很大。3.2 生成对抗融合用判别器把纹理拉回真实分布自编码器训练目标带重建性质重构输出容易偏平滑。生成对抗式融合引入判别器用真实图像分布约束融合结果的整体观感。FusionGAN 这类方法是这个方向的常用基准虽然结构各有差异损失函数大致是内容损失加对抗损失。对抗损失权重通常保持在 0.001 到 0.01权重过大会出现伪纹理或颜色偏移。判别器只接受单张输入输出真伪概率训练时把融合结果和真实图像交替送入。生成器在训练中同时更新编码器与解码器参数。一个常见误用是判别器学习过快生成器梯度消失结果停在原来的重建水平。因此训练时不要只盯损失曲线下降还要看判别器损失是否长期贴近 0以及近期融合图是否有肉眼可见的纹理变化。3.3 Transformer 与自注意力给融合补上长程依赖CNN 的感受野有限对远距离上下文关系不敏感。视觉 Transformer 和自注意力模块被引入后融合开始具备长程建模能力这也是“跨窗口自注意力”这类结构讨论的来源。在图像融合里自注意力的用法主要有三种通道注意力用来重加权不同特征通道空间注意力决定哪些位置应该保留更多细节跨模态注意力用一方的特征做 Query另一方的特征做 Key 和 Value。用公式表示给定输入特征 $x$ 和 $y$投影得到 $Q W_q x$、$K W_k y$、$V W_v y$注意力输出为 $\mathrm{softmax}(QK^T/\sqrt{d})V$。这套机制处理高分辨率图像时计算量随特征图尺寸平方增长所以常见做法是 CNN 粗提特征Transformer 模块只作用在降采样后的中低层特征上。注意力权重还能被可视化用来解释融合决策依据这是综述里比较受关注的解释性方向。3.4 扩散模型把融合当成条件生成扩散模型近年成为生成式方法的新选项它把融合拆成加噪和去噪两个过程正向给源图逐渐加噪反向在源图条件约束下重建出融合结果。优势是生成分布能力更强代价是推理步数多显存和耗时都明显上涨。目前工程落地还少团队起步阶段建议先把自编码器和对抗路线跑通再评估扩散方案。3.5 方法族横向对比从工程角度选基线方法族优势代价典型适用场景自编码器加手工融合规则训练快、显存占用低融合规则仍带人为假设红外可见光、边缘部署端到端学习融合规则融合规则自动学习效果上限高需要更多训练数据通用场景学术效果优先生成对抗式纹理细节更真实训练难度高易出现模式崩溃医学图像融合、视觉感知要求高Transformer/自注意力长程依赖建模强计算复杂度高小数据易过拟合高分辨率多模态扩散模型生成分布能力强推理慢、显存要求高探索型项目、高质量合成表格只是工程方向上的粗分类实际综述中的方法会混合使用。选择时先看自己的数据量、算力和目标指标再决定要不要上重模型。4. 图像融合模型的训练策略、损失组合与复现排错4.1 损失函数怎么拼内容损失、结构损失与感知损失多数图像融合方法不会单独使用 L2。L2 会产生模糊输出L1 表现更好结构损失通常用 SSIM 相关项感知损失用预训练 VGG 中间层的特征距离来约束语义一致性。一个通用的组合方式import torch.nn.functional as F def combined_loss(fused, source_a, source_b, vgg_featsNone): l1_loss F.l1_loss(fused, source_a) F.l1_loss(fused, source_b) ssim_loss 1 - 0.5 * (ssim(fused, source_a) ssim(fused, source_b)) loss 0.8 * l1_loss 0.2 * ssim_loss if vgg_feats is not None: # 感知损失用 VGG 中间层特征距离约束语义一致性 loss loss 0.1 * vgg_feats(fused, source_a, source_b) return loss参数说明l1_loss 负责逐像素保真ssim_loss 负责结构保持两者的权重比例按 8:2 起步是比较保守的组合。如果目标图像的纹理风格明显感知损失的权重可以提高到 0.05 到 0.1超过这个范围会让融合结果偏离源图像的原始强度亮度和色彩都偏向预训练数据集。4.1.1 为什么 L1 比 L2 更合适L2 对大误差惩罚过重模型会倾向输出平滑图来压低极端误差。图像融合需要保留边缘和纹理L1 不会把次优像素拉向中间值训练过程更贴近人眼判断。多数开源实现选择 L1 加 SSIM就是这个原因。4.2 无标签训练的两条路线图像融合不需要标注源图像对本身就构成输入约束。第一条路线是无监督重建编码器把两张图映射到公共特征空间融合后解码回图像损失函数比较融合图与两张源图的重建质量。第二条路线是自监督辅助先用清晰图做随机退化网络学习退化过程再重建理论上更鲁棒但需要额外设计模拟策略。工程上先做无监督重建就足够等数据量变大之后再看是否需要引入自监督。4.3 超参数建议与失败现象排查训练超参数直接影响结果下面列出几个常见现象。现象常见原因排查方向融合结果整体偏色在 RGB 空间直接融合改到 YCbCr 空间只融合亮度通道结果像两张图的简单叠加融合层没有真正参与梯度回传检查融合层参数是否被固定打印梯度边缘伪影严重输入没有减均值或图像未配准检查预处理和配准分数训练早期下降后期震荡学习率偏大或对抗损失权重过大降低学习率记录每层梯度范数换数据集后效果明显变差特征分布差异过大按新数据集重新统计归一化参数第四行提到的梯度范数记录方法是在每次反向传播后打印各卷积层权重的梯度 $L2$ 范数。如果某层梯度长期为 0说明该层没有收到有效回传如果梯度从较高的数量级突然塌缩到接近 0说明训练进入了退化状态。4.4 复现与对比时的三个公平性约定对比实验里最普遍的问题是每个方法用自己的默认配置跑最终差异实际来自超参数而不是方法本身。我的做法是固定三条约定。第一统一优化器、学习率和 batch size尽量共用训练脚本模板第二评估指标全部收口到同一个脚本并把输入范围写明第三固定随机种子和训练轮数实验记录里保留配置文件。下面这行命令可以固定 PyTorch 的随机源export PYTHONHASHSEED0 python train.py --seed 0 --lr 1e-4 --epochs 80PYTHONHASHSEED固定字符串哈希--seed负责设定 numpy 和 PyTorch 的随机种子两项组合后数据拆分、参数初始化和数据加载顺序都可复现。注意 PyTorch 在某些分布式或可变形卷积场景下仍存在少量随机来源需要额外固定 CUDA 的确定性相关选项。5. 图像融合模型上线的进阶验证技巧用最小清单判断是否值得部署5.1 三张图定位问题单图质检、批量指标、盲评模型训练完之后不要只看指标。先挑一张有代表性的红外可见光图像单独跑一次融合把源图和融合图放大到像素级观察边缘是否锐利、目标区域是否发暗。再用脚本跑一个 50 张图的测试集统计指标均值和方差。指标异常高但视觉很差通常是损失函数偏向重建而忽略了感知质量此时需要引入感知损失并降低重建项权重。第三个环节是盲评让几个人在屏幕上对比不同方法的输出评分者不应该知道每张图来自哪个方法。盲评结果和指标不一致的情况在这类任务里很常见最终决策以视觉一致性为准。5.2 用一次性代码片段做验收写一个只依赖 PyTorch、numpy 和 torchvision 的评估片段把测试集遍历一次输出融合图和指标。下面这段可以当作验收入口for idx, (src_a, src_b) in enumerate(test_loader): with torch.no_grad(): f model(src_a, src_b) f torch.clamp(f, 0, 1) save_image(f, fresults/{idx:04d}.png)这里clamp是必要操作。解码器输出范围不可控直接保存会出现全黑图或过曝图。保存结果后用第 2 章的统一指标脚本计算均值方差并把指标值和对应图片编号写进同一条记录里方便回溯异常批次。完整跑通这条流程后再回头决定融合层是否需要加入注意力机制或者编码器是否要加深。先不要为了上“高级结构”直接改动模型而是先用这条简单路径把基线找平把评价口径固定下来再以这个基线为参照决定下一步优化方向。本文还有配套的精品资源点击获取