3. AI ISP 核心算法:去噪、超分、HDR、AWB、AE
这一章,我们聊聊 AI ISP 里最核心的几个算法模块。去噪、超分辨率、HDR、AWB、AE——这些名字你肯定不陌生。但把它们塞进一个实时 ISP Pipeline 里,还要在 RTL 上跑得动,那就是另一回事了。
我个人习惯把算法分成两类:一类是“画质修复型”,比如去噪和超分;另一类是“场景适应型”,比如 HDR、AWB 和 AE。前者主要靠模型能力,后者更多依赖策略和统计。咱们一个一个拆开看。
3.1 去噪算法:从空域到频域,再到 AI
去噪是 ISP 里最基础也最头疼的问题。传统方法有 BM3D、NLM,效果不错但太慢。后来有了 CNN 去噪,比如 DnCNN、FFDNet,效果更好,但计算量也上来了。
在 AI ISP 里,我建议把去噪分成两级:
- 轻量级去噪: 放在前端,处理 sensor 的 raw 域噪声。常用小卷积核 + 残差结构,模型大小控制在 50K 参数以内。
- 深度去噪: 放在后端,处理 RGB 域的复杂噪声。可以用 U-Net 变体,但要注意延迟。
我在项目中遇到过一个问题:模型在训练集上 PSNR 很高,但实际拍摄夜景时,暗部出现了奇怪的条纹。后来发现是 sensor 的读出噪声分布和训练数据不一致。嗯,这里要注意——训练数据必须覆盖 sensor 的真实噪声模型,否则模型会“过拟合”到仿真噪声上。
3.2 超分辨率算法:细节重建的艺术
超分辨率(SR)在 AI ISP 里主要做两件事:一是提升分辨率(比如从 1080p 到 4K),二是补偿光学系统的 MTF 损失。说白了,就是让图像更清晰。
SR 模型的主流架构有:
| 架构 | 特点 | 适用场景 | 硬件代价 |
|---|---|---|---|
| ESPCN | 亚像素卷积,效率高 | 实时视频超分 | 低 |
| EDSR | 残差块堆叠,效果好 | 静态图像超分 | 高 |
| RCAN | 通道注意力,细节丰富 | 高质量输出 | 极高 |
| FSRCNN | 紧凑结构,速度快 | 移动端 ISP | 极低 |
我个人比较推荐 ESPCN 作为 ISP 里的 SR 主力。为什么?因为它把上采样放在最后一层,前面的计算都在低分辨率空间进行,计算量小很多。你想想看,如果全程在高分辨率空间做卷积,带宽和计算量都扛不住。
但 ESPCN 有个坑:它对输入的低频信息比较敏感。如果输入图像本身模糊,超分效果会大打折扣。所以我的做法是:在 SR 前面加一个轻量的锐化模块,先把边缘提一提,再送进 ESPCN。
3.3 HDR 算法:多帧融合的艺术
HDR 的核心思路很简单:拍多张不同曝光的图像,然后合成一张高动态范围的图。但难点在于:
- 对齐: 多帧之间可能有运动,需要做运动补偿。
- 融合: 不同曝光区域的权重怎么分配?
- 色调映射: 把高动态范围压缩到显示设备能支持的范围内。
传统 HDR 用直方图分析 + 加权平均,效果还行,但遇到大光比场景容易过曝或欠曝。AI HDR 的做法是用一个 CNN 来学习融合权重,甚至直接端到端地生成 HDR 结果。
我在项目中用过一种“注意力融合”的方法:把三帧图像(欠曝、正常、过曝)叠成一个 9 通道的输入,然后用一个轻量级网络输出每帧的权重图。这样模型可以自适应地选择哪些区域用哪一帧的信息。
你可能会问:为什么不直接用单帧 HDR?嗯,单帧 HDR 靠的是 sensor 的宽动态模式,但代价是信噪比下降。多帧融合虽然需要缓存和运动补偿,但画质上限更高。
3.4 AWB 算法:让白色回归白色
AWB(自动白平衡)的目标是让图像中的白色物体在不同光源下都呈现白色。传统方法基于灰度世界假设或完美反射假设,但遇到大面积单色场景(比如蓝天、绿草)就容易翻车。
AI AWB 的做法通常有两种:
- 色温估计: 用 CNN 直接估计光源的色温,然后做颜色校正。
- 端到端校正: 输入 raw 图,输出校正后的 RGB 图。
我个人更倾向于第一种。为什么?因为色温估计是一个低维问题(只需要输出两个值:R/G 和 B/G 的增益),模型可以做得非常轻量。而端到端校正需要处理高维输出,计算量大,而且容易过拟合。
色温估计的模型结构可以很简单:几个卷积层 + 全局平均池化 + 全连接层。输入是 raw 域的 Bayer 图,输出是 R 和 B 通道的增益系数。
// 伪代码:AWB 色温估计模型
input: Bayer raw (H, W, 1)
-> Conv2D(3x3, 16) + ReLU
-> Conv2D(3x3, 32) + ReLU
-> GlobalAvgPooling
-> Dense(2) // 输出 R_gain, B_gain
output: R_gain, B_gain
但这里有个细节:色温估计对输入的分辨率不敏感。我试过把输入从 1080p 降到 320x240,估计精度几乎没有下降。所以 AWB 模块可以放在 ISP 的前端,用降采样后的图像做估计,节省计算资源。
3.5 AE 算法:曝光控制的智慧
AE(自动曝光)的目标是让图像的整体亮度处于合适的范围。传统 AE 用直方图统计 + PID 控制,但遇到逆光、夜景等复杂场景,容易过曝或欠曝。
AI AE 的做法是用一个轻量级网络来预测“最佳曝光参数”。输入可以是当前帧的统计信息(亮度直方图、平均亮度、人脸区域亮度等),输出是曝光时间、模拟增益、数字增益的组合。
我在项目中用过一种“强化学习”的思路:把 AE 看作一个连续决策问题,模型根据当前帧的亮度分布,输出下一步的曝光参数调整量。这样模型可以学会“先试探、再收敛”的策略,而不是一步到位。
但强化学习在硬件上部署比较麻烦。更实用的做法是:用 CNN 做场景分类,然后根据场景类型选择不同的曝光策略。比如:
| 场景类型 | 曝光策略 | 目标亮度 |
|---|---|---|
| 逆光 | 优先保证人脸亮度 | 人脸区域 120-150 |
| 夜景 | 延长曝光时间,降低增益 | 全局 60-80 |
| 普通 | 标准 AE 控制 | 全局 100-120 |
你想想看,如果模型能识别出“逆光”场景,它就知道不能只看全局亮度,而要重点关注人脸区域。这样 AE 的鲁棒性会好很多。
3.6 算法协同:Pipeline 里的“化学反应”
这五个算法不是孤立的。它们之间有很多耦合关系:
- 去噪 vs 超分: 去噪做得好,超分效果也会提升。因为噪声会干扰超分模型的细节重建。
- HDR vs AWB: HDR 融合后的图像,颜色分布可能发生变化,需要重新做 AWB 校正。
- AE vs 去噪: AE 的曝光参数会影响噪声水平。曝光时间越长,噪声越少;增益越高,噪声越多。
所以,在设计 AI ISP Pipeline 时,我建议把算法之间的“接口”定义清楚。比如:去噪模块输出的噪声水平估计,可以传递给超分模块,让超分模型知道哪些区域需要更多细节恢复。
下面这张图展示了这五个算法在 ISP Pipeline 中的典型位置和交互关系:
从这张图可以看出,AE 和去噪之间有反馈回路,去噪和超分之间有信息传递。这种“算法协同”的设计,是 AI ISP 区别于传统 ISP 的关键。