【CVPR 2026即插即用模块】MCA 多尺度颜色注意力,适合移动相机颜色校正任务、多光谱/RGB融合任务、图像增强与颜色恢复任务、遥感图像颜色校正、多光谱和高光谱图像分析等CV任务通用,涨点起飞!
一、论文信息本文目录一、论文信息二、论文摘要概况三、MCA 多尺度颜色注意力结构图四、MCA 模块的作用五、MCA 模块的原理六、MCA 模块的优势七、即插即用模块代码论文题目Leveraging Multispectral Sensors for Color Correction in Mobile Cameras中文题目利用多光谱传感器实现移动相机中的色彩校正所属单位1 米兰-比可卡大学 2 计算机视觉中心 3 巴塞罗那自治大学二、论文摘要概况快照多光谱MS成像技术的最新进展使得紧凑型、低成本的光谱传感器能够应用于消费级和移动设备。与传统RGB传感器相比这类系统能捕获更丰富的光谱信息从而提升包括色彩校正在内的关键成像任务性能。然而现有方法大多将色彩校正流程拆分为多个独立阶段往往在处理初期就丢弃MS数据。我们提出了一种基于学习的统一框架可实现端到端的色彩校正并协同利用高分辨率RGB传感器与辅助性低分辨率MS传感器的数据。该方法将完整校正流程整合于单一模型中输出结果既连贯又色彩精准。通过重构两种最先进的图像间转换架构我们验证了该框架的灵活性与通用性。为支持训练与评估我们整合并重新利用公开可用的光谱数据集涵盖多种RGB相机感光度构建了专用数据集。大量实验表明相较于仅使用RGB或纯MS数据的基准模型我们的方法可显著提升色彩准确性和稳定性误差降低幅度最高达50%。图1。上部所提出的色彩校正框架概述。相机模块内将高分辨率RGB传感器与低分辨率多光谱传感器配对使用。这两个输入信号通过统一模型进行融合该模型同时执行光源估计、光源衰减处理及色彩校正从而生成色彩准确的输出结果。下部本方案与经典校正流程采用FC4[26]进行光源估计的视觉对比。我们报告了平均∆E00色差值并将图像转换为sRGB格式以供可视化展示。三、MCA 多尺度颜色注意力结构图图2. 基于上LPIENet[12]和下cmKAN[39]提出的架构概述。两种架构均添加了光谱编码器模块并将提取的特征与RGB图像中的特征进行融合。为便于可视化输出图像及输入RGB图像分别转换为sRGB格式并进行伽马校正。四、MCA 模块的作用1. 建模颜色通道之间的依赖关系。MCA的主要作用是捕捉图像不同颜色通道之间的相关性帮助模型理解RGB输入与多光谱输入中包含的颜色变化规律。由于色彩校正不仅要消除光照偏色还要把相机原始颜色映射到标准XYZ颜色空间因此仅依赖普通卷积难以充分建模复杂的通道关系MCA可以增强这种颜色相关性表达。2. 辅助端到端颜色校正。传统相机颜色校正常被拆分为白平衡、光照去除和颜色空间转换等多个阶段容易产生误差传播。论文中的cmKAN-light利用MCA在Color Transformer中提取颜色注意力特征使网络能够在统一模型中同时学习光照估计、光照消除和颜色空间变换从而得到更稳定、更准确的颜色校正结果。3. 融合RGB与多光谱信息。论文的核心思想是将高分辨率RGB图像与低分辨率多光谱图像结合起来进行颜色校正。MCA位于cmKAN-light的颜色变换分支中可利用前面Illumination Estimator和Spectral Encoder融合后的特征进一步挖掘多光谱信息对颜色恢复的辅助作用。图3。(a)数据集生成流程概述。利用不同光源下多种相机灵敏度参数及已知光谱功率分布SPD对高光谱反射图像进行渲染生成RGB、MS和GT三元图像组。(b)所提出数据集的代表性样本。为便于可视化图像均转换为sRGB格式。五、MCA 模块的原理1. 输入融合后的颜色特征。在cmKAN-light中RGB图像首先经过Illumination Estimator提取光照相关信息多光谱图像则经过Spectral Encoder提取光谱特征。论文将多光谱特征与光照估计模块的输出进行融合再送入Color Transformer其中MCA负责进一步处理这些颜色相关特征。2. 通过注意力机制捕获颜色关系。从论文图2可以看出MCA内部通过卷积生成查询、键、值等特征并进行注意力交互用于学习不同通道和颜色特征之间的对应关系。这种方式可以让模型自适应判断哪些颜色通道或光谱线索对当前像素的颜色校正更重要。3. 多尺度颜色特征建模。MCA被称为Multi-Scale Color Attention说明其关注的不只是单一尺度的颜色映射而是通过多尺度颜色注意力来描述不同区域、不同亮度和不同光谱条件下的颜色变化关系。这对于移动相机中复杂光照、不同传感器响应和颜色偏移问题尤为重要。4. 与FFN和CFM协同工作。在Color Transformer中MCA之后接入前馈网络进一步增强非线性特征表达随后Color Feature Modulator将学习到的颜色特征投影到KAN参数空间用于生成空间变化的非线性颜色变换参数。因此MCA主要负责颜色注意力建模FFN负责特征变换CFM负责生成最终颜色映射所需的调制参数。六、MCA 模块的优势1. 提升颜色校正精度。MCA能够加强颜色通道之间的依赖建模使模型更准确地处理不同相机传感器、不同光照条件下的颜色偏差。实验结果显示使用该框架的cmKAN-light在移动传感器场景下取得最低的平均色差优于RGB-only和MS-driven基线方法。2. 有助于充分利用多光谱信息。论文消融实验表明加入多光谱信息后cmKAN-light的平均色差明显下降在镜头相机传感器上由3.06降至1.60在移动传感器上由3.03降至1.49。这说明MCA所在的颜色变换结构能够有效利用多光谱特征提高颜色恢复稳定性。3. 结构轻量适合移动端。cmKAN-light整体只有约18K可训练参数明显小于许多复杂图像到图像网络。MCA作为其中的颜色注意力模块在保持较低参数量的同时增强颜色建模能力符合论文面向移动相机和消费级设备部署的目标。4. 比传统分阶段校正更稳定。传统流程通常先估计光照再进行白平衡和颜色空间转换各阶段误差会逐步累积。MCA所在的端到端Color Transformer能够在统一网络中学习颜色依赖和光谱辅助信息因此更容易得到一致、稳定的最终XYZ输出。5. 对传感器错位具有一定鲁棒性。论文还构造了RGB与多光谱图像空间错位的数据集。结果表明cmKAN-light在错位条件下仍保持较低色差说明其融合结构和颜色注意力建模对真实双传感器系统中的几何误差具有一定适应能力。表1. 所提出数据集对齐版本的测试结果按相机类型汇总无反相机佳能R5、尼康Zf、索尼 α9 III和移动设备谷歌Pixel 3、华为Mate 20 Pro、iPhone Xs Max、三星Galaxy Note 9。汇总通过计算各相机结果的平均值实现。我们针对每个指标分别标注了最佳、次优和第三优的结果。各相机的具体结果详见补充材料。图4. 最优方法的定性结果对比FC4[26]、SpectralConvMean[23]以及我们提出的三种模型。图中展示了两台无反相机和两台移动相机的测量结果右下角显示∆E00值分布图左下角显示平均∆E00值。为便于可视化我们对原始图像进行了伽马校正第一列并将结果第二至第六列转换为sRGB色彩空间。更多定性分析结果详见补充材料。七、即插即用模块代码import torch import torch.nn as nn from einops import rearrange class MCA(nn.Module): def __init__(self, dim, num_heads, bias): super(MCA, self).__init__() self.num_heads num_heads self.temperature_a nn.Parameter(torch.ones(num_heads, 1, 1)) self.temperature_v nn.Parameter(torch.ones(num_heads, 1, 1)) # q: what we want to attend to (spatial information) self.q_proj nn.Conv2d( dim, dim, kernel_size3, padding1, stride2, padding_modereflect, groupsdim, biasbias ) # k: what we use to calculate attention (channel information) self.k_proj nn.Conv2d( dim, dim, kernel_size3, padding1, stride2, padding_modereflect, biasbias ) # v: what we use to calculate the output (channel information) self.v_proj nn.Conv2d(dim, dim, kernel_size1, biasbias) # a: anchor information (reduced spatial information and channel information) self.a_proj nn.Sequential( nn.Conv2d( dim, dim, kernel_size3, padding1, stride2, padding_modereflect, groupsdim, biasbias ), nn.Conv2d(dim, dim//2, kernel_size1) ) # output projection self.project_out nn.Conv2d(dim, dim, kernel_size1, biasbias) def forward(self, x): b, c, h, w x.shape q self.q_proj(x) k self.k_proj(x) v self.v_proj(x) * x a self.a_proj(x) q rearrange(q, b (head c) h w - b head c (h w), headself.num_heads) k rearrange(k, b (head c) h w - b head c (h w), headself.num_heads) v rearrange(v, b (head c) h w - b head c (h w), headself.num_heads) a rearrange(a, b (head c) h w - b head c (h w), headself.num_heads) q torch.nn.functional.normalize(q, dim-1) k torch.nn.functional.normalize(k, dim-1) a torch.nn.functional.normalize(a, dim-1) attn_a (q a.transpose(-2, -1)) * self.temperature_a attn_a attn_a.softmax(dim-1) attn_k (a k.transpose(-2, -1)) * self.temperature_v attn_k attn_k.softmax(dim-1) out_v (attn_k v) out (attn_a out_v) out rearrange(out, b head c (h w) - b (head c) h w, headself.num_heads, hh, ww) out self.project_out(out) return out if __name__ __main__: device cuda if torch.cuda.is_available() else cpu input torch.randn(1, 64, 128, 128).to(device) model MCA(dim64, num_heads8, biasFalse).to(device) print(model) print(CSDN:AI魔改博士) output model(input) print(CWA input_size:, input.size()) print(CWA output_size:, output.size())