ISP 论文解读 | 联发科: Generative AWB (CVPR 2025)
就应用而言,理解算法的边界,往往比理解算法本身更重要。
📖 阅读提示
潜在读者
- 图像/ISP算法(调试)工程师,研究人员
- 对计算摄影、颜色科学感兴趣的科研和技术人员
推荐时长
- 1min–30min
原文下载
本期导读

上一篇文章 ISP论文解读 | Time-aware AWB(ICCV 2025) 中,我们聊到了未来 AWB 的三种技术路径:多通道 / 生成式 / 多模态。
这是技术视角,但背后其实是更本质的问题视角——成像系统色彩还原绕不开以下痛点:
- 多光源问题,特别是室内混光
- 干扰色(无灰点)问题
- 跨传感器问题(颜色不一致 / 训练模型或数据集不可复用)
- 特殊场景下的肤色问题:多种族合影 / 长焦 / 夜景
- 其他:稀缺光源、HDR/曝光与AWB联动、夜景下偏好色稳定、VR/MR中ISP功耗与稳定、大视场角的Shading与AWB耦合、与Display的联动
这些问题,本质上是色彩还原链路的全局协作,AWB 占了主要部分,但还牵涉 AE / HDR / Denoising / Tone / Preference / CCM / Gamma / Gamut 等模块的单独或耦合影响。
本文要介绍的是技术路径中的生成式技术角度,也是该技术针对 AWB 任务的首次探索,针对的问题包括:跨传感器的重复训练或域适应、干扰色、多光源。
AWB 的目的不就是找灰点吗?各种算法大致都是如何更高效地找灰点。但灰点可能:
- 不好找
- 根本没有
- 不止一个(多光源)
所谓二流的人才找机会,一流的人才创造机会。
生成式方法说:我是一流人才——我不找灰点,我直接生成灰点!
方法是:在 RAW 中直接生成一个 ColorChecker 色卡,然后提取灰格值来做光源估计,如图1所示。

结果在 Cube+、NUS-8、LSMI 等数据集上,泛化性很好,多光源表现也不错。
理论上,该方法在干扰色上也应表现优异,但作者未展示这些结果——原因?我们在分析中讨论。
01 方法
训练过程
核心是使用 stable-diffusion-2-inpainting
模型:
- 冻结 SD 的 VAE 与文本编码器
- 只调 U-Net,让它学会根据场景“补”出一个带真实光源的色卡
输入分为上下两个分支:
- 下分支:带色卡的 RAW(经过 gamma)
- 上分支:该色卡的 mask
训练过程分阶段,如图2所示。

Step 1:
- 上分支:原图 × mask → 得到“去掉色卡”的原图
- 下分支:色卡区域做 Color Jittering → 得到增强后的原图
Step 2:
- 两分支图像 → Stable Diffusion VAE Encoder(冻结参数)
Step 3:
- 下分支 encoder 输出做拉普拉斯边缘提取
- 与上分支特征拼接 → 作为条件送入 Inpainting U-Net
Step 4:
- 结合文本提示(CLIP text encoder)
- 固定采样步数(加速训练)
- 仅更新 U-Net
Step 5:
- 潜特征 → VAE Decoder → L2 Loss 回传
作者强调:
- mask 分支:学结构(色卡轮廓)
- 增强分支:学光源
但这种分支设计是否必要,后文讨论。
推理过程

与训练类似,区别在于:
-
色卡初始化
随机粘贴一个 24 色卡作为占位 -
潜空间处理
与训练一致 → Inpainting 生成色卡 -
逆 Gamma
输出前 inverse gamma → 回 RAW 线性域 -
色卡采样
提取灰格 RGB → 光源估计
RAW+gamma,作者强调这是sRGB,从而符合 SD 的训练数据分布。 但这明显不是sRGB,这是作者对ISP的理解有误,但也是后续可以优化的地方。
02 结果
1. 跨传感器泛化:SOTA

2. 多光源表现:Zero-shot

- 多光源 RAW 分 4 patch
- 各生成色卡 → 光源估计
- 加权合成 pixel-wise illumination map

缺点:硬分割在边界处会出现 local tone mapping 类问题。
03 评价
Pros
- 首次将生成式方案落地 AWB
- 将任务压缩到色卡生成这个 proxy,设计巧妙
- 跨传感器泛化优于传统方案
Cons
- 干扰色实验缺失,令人怀疑效果
- Cross-sensor mean error=2.4,按方法设计应可更低——但是为何上限如此,需要深入分析——但是作者并没有分析failure case,是个大的缺陷

04 发散思考
-
输入域选择
RAW+gamma vs sRGB 的 trade-off——如何兼顾传感器特性与训练分布一致性? -
数据增强策略
Color Jittering 是否最佳? -
架构简化可能
mask 分支必要性存疑,或可用 overlay+灰点检测替代 -
模型学习的本质
可能退化为“找灰点”而非真正生成光源信息
数据集 >80% 含灰点 → 容易走捷径