ISP论文解读 | 三星:用CCM矩阵做跨sensor AWB(ICCV 2025)
💡 微信公众号「ColorWorld花花世界」排版更佳,欢迎关注获取更好阅读体验
📖 阅读提示
- 本文是专业解读,适合了解AWB/CCM的读者
- 关于CCM是啥,可以参考我很早写的一篇文章(浏览器搜索:颜色校正矩阵(CCM)的算法设计)
📄 论文信息
- 论文全称: CCMNet: Cross-Camera Color Constancy via a Learnable Camera Fingerprint Embedding
- 会议: ICCV 2025
- 论文地址: https://arxiv.org/abs/2504.07959
- 代码: https://github.com/DY112/CCMNet
前言
DNN时代,模型的泛化能力本质上取决于训练集对测试分布的覆盖。覆盖不了的地方,就是性能塌陷的地方——所以有了meta learning, domain adaptation…
AI ISP是这个问题的重灾区。为什么?因为RAW和Camera器件强绑定。以前大家在sRGB上做Image Enhancement,不同相机输出的sRGB差异不大,泛化问题不突出。但一旦卷到RAW域——不同sensor的光谱响应、噪声特性、色彩空间全都不一样——你在Camera A上训练的model,直接放到Camera B上性能必然下降,不论是Denoising、Demosaicing还是AWB。这不是经典意义上的"过拟合",而是domain gap:训练和测试来自不同相机的数据分布。
怎么解决?无非两条路:要么增加数据集覆盖更多相机,要么降低模型对相机特性的依赖。
ugly的论文是堆数据+堆模型复杂度去暴力覆盖,elegant的论文则是利用物理先验来解耦相机特性。
本文要介绍的就是后者,训练集使用开源数据集+虚拟数据集,使用测试相机的CCM标定矩阵,实现完全不需要re-training的AWB。
它的作用是:
- 不用重新训练自己的模型,拿来可以直接用
- 你所需要的仅仅是你标定的两个CCM矩阵(和ISP中的CCM稍微有些区别)
作者来自老朋友Mbrown团队。发表在了ICCV 2025,代码都已开源。
- 论文:https://arxiv.org/abs/2504.07959
- 代码:https://github.com/DY112/CCMNet
01 方法
我们知道CCM矩阵,是把RAW RGB转到CIE XYZ空间的,那么反过来呢?你既然提供了这个矩阵,我是不是可以直接从CIE XYZ转回到RAW-RGB呢?
答案是必然的。
所以,本文的思路就是,我从2500K-7500K的普朗克轨迹上采样若干点(每100K一个,共51个),然后通过上述CCM矩阵转回RAW-RGB。你如果是camera A,我就用Camera A的CCMs,如果是Camera B,我就用Camera B的CCMs
就这样,仅仅根据Camera的CCMs矩阵,我就可以得到RAW-RGB的点——51个色温下的白点。
这里有个容易困惑的点。我们一般理解的CCM过程是:RAW-RGB先做AWB,然后用标定的CCM矩阵转换到CIE XYZ。但本文使用的并不是这个矩阵。
而是DNG规范中的ColorMatrix——它直接将CIE XYZ映射到相机RAW空间,不需要先做AWB。目标参考光源是D50。
具体的,DNG手册中有两类矩阵要区分:
- ForwardMatrix(前向矩阵):对应传统CCM流程,先白平衡再转XYZ
- ColorMatrix(颜色矩阵):在两个标定色温下,直接从CIE XYZ映射到相机原始响应,不经过白平衡
本文用的就是后者——ColorMatrix。拿到两个色温下的ColorMatrix后,对中间色温做插值,然后做inverse操作,就能从已知的CIE XYZ白点反推出RAW空间中不同色温下的白点
总结一下:通过CCM的逆变换,我们把"相机标定信息"转化为了"该相机在不同色温下的白点位置"——这本质上就是一组光源约束。
接下来就看怎么用了。本文基于C5架构,把这些白点信息编码成CFE(Camera Fingerprint Embedding),作为额外feature隐式地注入模型,端到端训练。
效果很好,为啥呢?因为相比C5,多了一个相机特异的光源约束——模型不再需要从目标相机的额外图像中去"猜"相机特性。
具体流程可以看overview:
虚拟相机增强(Imaginary Camera Augmentation)
训练数据通常只包含少量相机(如Intel-TAU中只有几款sensor),容易过拟合到已知相机。
作者提出了一种优雅的数据增强方案:在两台真实相机之间进行线性插值,生成"虚拟相机"。
关键的理论基础是:如果两个相机的光谱响应可以线性组合,那么它们对应的CCM也可以线性插值。具体来说,对两台相机A和B的CCM做混合:CCM_virtual = α × CCM_A + (1-α) × CCM_B,α ∈ [0,1],就能生成无限多种"虚拟相机"的特性。
Ablation数据直接说明了它的效果(Mean Angular Error):
| 数据集 | 无增强 | 虚拟相机增强 | 提升 |
|---|---|---|---|
| Cube+ | 2.23° | 1.68° | -24.7% |
| Gehler-Shi | 2.74° | 2.23° | -18.6% |
| NUS-8 | 2.70° | 2.32° | -14.1% |
仅靠这一个trick就带来了15-25%的提升——用几行代码就能大幅缓解跨相机domain gap,性价比极高。
02 结果
评测使用了三个经典AWB数据集:Gehler-Shi、NUS-8(8个相机)、Cube+。训练集使用Intel-TAU。指标为Angular Error(角误差)。
主要结果
三个数据集上,CCMNet在Mean/Median/Tri-mean等所有指标上均优于C5和其他方法。关键是:
- 模型仅1.05MB,比C5(m=9, 2.09MB)更小
- 不需要目标相机的额外图像,而C5需要从目标相机随机选取额外图像作为guidance
- 在跨传感器(Cross-Sensor)评估中同样取得最优
03 评价
Pros
工程友好。 CCM是ISP里现成的,DNG文件里也有,不需要任何额外标定或数据采集。这意味着落地成本几乎为零。前提是你们使用的时候这个标定矩阵不要理解错了。
虚拟相机增强。 之前论文里其实有这个trick,但确实好用,简单有效。
模型轻量(1.05MB),且不需要目标相机的训练数据。这在工业部署中非常有价值。说明啥呢,就是它代表了AWB task中仅用色度/统计信息所能够达到的上限。
Cons
它能够解决的是2500K-7500K色温——但是不符合普朗克轨迹的呢?肯定会degradation。结合上篇论文我们说的off-the-Planckian-locus的问题,其实关键是如何对这些场景做有效的光源估计。
C5的问题它都有。当然,这能够cover 90%场景了,也是out-of-scope。
本文只是在C5上做了融合,其实是可以更加general的,因为不是每家都用C5这个model,大家更想要在自己的model上去适配或者plug in。
04 发散
AWB的做法,你看三星团队的思路:不论是结合time信息、CCM信息,还是GPS信息,本质都是多模态融合。那么手机上现成的多摄信息、3D感知信息能否也被充分利用呢?
CCM这种线性操作有根本性局限——在同色异谱(metamerism)场景下无解。怎么办?本质上还是得走多光谱路线才能彻底解决。
END
本文首发于微信公众号「ColorWorld花花世界」,更好的排版体验欢迎关注。 Contact WeChat: vividway