ISP论文解读|华为:单像素多光谱AWB (IJCV 2024)
📖 阅读提示
潜在读者:
- 本文是专业解读,适合于研究ISP色彩还原算法的工程师和研究人员
- 其他感兴趣的读者可以参考快速导读和最后的评论做一个直觉上的理解
推荐时长: 1-30分钟
前言
这是多光谱AWB系列文章的第三篇,其实按照发展顺序,它应该是第一篇。这篇论文首次从实验上严谨地证明了多光谱AWB在干扰色(无灰点)场景下的可行性,奠定了后续研究的基础。
快速导读
这篇论文的提出,可能是促使业界认真考虑多光谱AWB应用的重要契机。
Low level vision本身存在巨大价值,但是研究缺乏新意,核心原因之一——简单的问题都研究完了,剩下的都是corner case。大部分论文都是在普通场景里往上提点,核心难点依然解决不了,这一定程度上造成了学术和业界的割裂。
对于AWB来说,Gray World都风行了三十年了,芯片中虽然各种变体,但本质还是这个算法,核心是它稳定。但是即便能够cover 90%的场景,遇到纯色,多光源,工程师再调试,也只是在一些常见记忆色场景有点用,比如室外大面积绿色之类的。调试的方式往往是针对常见记忆色做点补偿,看似奏效,但本质上还是人工在全局最优上"凑"出来的。问题始终存在,因为方法的物理原理本身就走不通。
本文首次尝试用光谱的思路来解决**干扰色(无灰点)**场景下的AWB问题,其动机逻辑可以分为三步:
1. RGB的局限
仅凭RGB三通道不足以准确表征光源信息。比如,它无法区分LED与日光等具有明显光谱差异的光源,在干扰色的场景下尤其容易失效。
2. 场景平均光谱与光源的关联
作者利用单点多光谱传感器,获得了场景的平均光谱响应(即物体反射率 × 光源光谱 × 传感器光谱灵敏度的积分)。结果发现,这个平均光谱的形态与真实光源光谱非常接近:图中黑色实线为真实光源,虚线为传感器测得的平均光谱。
这说明:通过场景平均光谱来推测光源是可行的。多通道传感器测得的就是场景平均光谱的采样,这样就引入了多通道传感器。
3. 关键通道与光谱指纹
进一步的实验表明,并非所有光谱通道同等重要。作者采用"逐一去掉单通道,再观察误差变化"的方法发现:某些特定通道一旦缺失,误差会大幅增加(提升幅度在30%–300%之间)。
这意味着,少数关键波段即可承担区分光源的主要作用,它们可以被视作光源的**“光谱指纹”**。
由此,作者得出几个关键结论:
- 多通道采样能够有效表征光源信息,即便在无灰点场景下也同样适用
- 少数关键通道即可形成光源的"指纹",无需完整光谱
- 在获得多通道平均光谱后,只需选择合适的回归模型,就可以推断出光源白点
接下来,论文的重点就转向:如何在实际条件下构造这些光谱信息,并基于此验证上述假设。
01 方法
由于我们手头只有RGB图像,为了验证前面提出的光谱假设,作者的核心工作就是构造一个"伪多光谱数据"流程。整体逻辑分为四步:
1. 反推光源光谱
已知输入为RAW-RGB、white point、sensor SPD(光谱灵敏度曲线)以及候选光源光谱集合。通过这些信息,可以从RGB数据反推出可能的光源光谱。
举例:如果一幅RAW图像有100个像素,起始数据维度就是
100 × 3
。
2. 反推物体反射谱
在得到光源光谱的前提下,进一步可以求解物体的反射率光谱。这里作者采用31维(400–700nm,10nm采样)来表示反射谱。
于是数据规模扩展为
100 × 31
。
3. 构造虚拟多光谱传感器数据
将反射谱与光源光谱结合,再与一个设计好的"虚拟多通道传感器"光谱响应函数相乘,从而得到模拟的多光谱观测。
例如,如果虚拟传感器包含14个通道,那么数据就变为
100 × 14
。
4. 取平均并回归白点
将上述100 × 14
的多光谱数据在空间维度上做平均,得到1 × 14
的场景平均光谱采样,这也是论文标题中"single spectral"的含义。
然后,以此1 × 14
向量作为输入,使用一个MLP回归模型,预测对应的白点RGB(1 × 3
),与ground truth对比训练。
为什么要做平均?这正是前文motivation的延续:场景平均光谱与真实光源光谱高度相关,因此取平均后依然能保留关键光源信息。
这样,作者就把「RGB → 光源光谱/反射谱 → 虚拟多光谱 → 平均」这一整套链条跑通了,并以此为基础去验证多光谱AWB的可行性。
整体如下图所示:
至于如何反推光谱以及如何设计sensor,可以查看原文。
02 结果
测试的时候,需要重复上述过程:从RAW-RGB反推光谱,最后得到100×14
通道数据,平均,带入训练时候的MLP,下述14ch,65ch是表示不同的通道数。
在单数据集上——炸裂的好
就是训练和测试都在一个数据集,只不过three-fold了——当然存在过拟合,但是都这样玩的,也没毛病
在Cross-data上——炸裂的好
只在Cube+训练,测试集没见过
所谓炸裂,是好于传统sota两倍,这个确实是巨大进步了。而且这个数据感觉已经接近数据集本身bias上限了。
再看看可视化的一些结果:
03 评价
Pros
- 首次,从实验的角度,严谨证明了光谱AWB在corner case上的用处
- 写作真好,环环相扣,motivation和后面技术连接紧密
- 效果炸裂,不服不行
Cons
- 运算量。对于真实的RAW,都要反推光谱——运算量是个难点
- 泛化问题。在真实的光谱数据集上,效果似乎大打折扣
- 整体误差变大
- 14ch和65ch之间的区别差异过大
- 意味着真实光谱数据对通道数是很敏感的,而且此时使用RF/MLP的差异巨大,大家可以思考为何
- 不开源——我固执的认为,深度学习时代,不开源,都是造假。而且特别是公司合作的,不开源,简直是又当又立。你数据集和代码,至少开一个也行啊,虽说这个代码简单,但是保不齐你有啥关键参数没交代给人留坑——这在相当程度上影响了这篇文章的影响力
04 发散
1. 多光源扩展局限
文章对多光源场景做了一些尝试,就是改了下架构,让它直接估计两个白点,看起来效果不是很好,说明这种average spectral似乎有局限性,读者可以思考如何改进。
2. 数据集该如何收集
文中给了个方案:
- 手机拍摄
- 真实光源光谱用光谱仪测量,色卡也放在一起
- 还有个测量场景平均强度的单点光谱传感器——如果你的是面阵的,也应该放在相机旁边
如此,你可以得到:RAW-RGB/RAW-光谱/gt RGB/gt 光源光谱
这也呼应了一个核心结论:即便物理原理已经清晰,推动多光谱AWB落地的关键仍在于高质量数据集的建设。只有覆盖多场景、多光源条件的大规模真实数据,才能真正支撑方法的泛化与应用。
3. 业界分歧
多光谱AWB在干扰色上的成功在本文中得到了验证——我觉得这个feature足以成为一个影像的卖点,而事实也确实如此。红枫在此基础上拓展到了面阵AWB,我觉得是更加激进的一种做法:面阵能够带来spatial信息,也许能够一举解决multi-illu问题。
目前对于多光谱AWB,竟然还存在争议:
- 多光谱AWB似乎没带来很大收益,但是风险倒是不少,比如功耗需求暴增,而且他目前因为SNR问题,导致应用受限,一些企业还在观望
- 到底是多光谱面阵AWB还是说多分区单点多光谱,我认为是路线之争,核心是你用它来做啥,如果只是测光,没问题,当前感觉是分区单点目前似乎更好;但是如果是用来成像,那么面阵几乎是必须的
说到底,多光谱色彩还原(不止AWB)依然没有定论:要不要上?上到什么程度?选哪种方案?这些问题都没有标准答案。或许正因为如此,它才值得大家积极探索,去试错、去突破。