2. 混合架构总览:AI模块如何嵌入传统ISP Pipeline
传统ISP Pipeline,说白了就是一套固定的图像处理流水线。从RAW图进来,到RGB/YUV出去,中间经过黑电平校正、去噪、白平衡、去马赛克、色彩校正、Gamma、锐化……每一步都是固定的算法,参数调好了就死在那儿。
但暗光场景下,这套流水线经常翻车。噪声大、细节丢、颜色偏。我做了这么多年ISP,最头疼的就是暗光。后来AI来了,大家发现——与其让AI单独做一个端到端的黑盒,不如把它塞进传统Pipeline里,各取所长。
这就是混合架构的核心思路:传统模块保底,AI模块补强。
2.1 三种主流嵌入方式
我个人习惯把AI嵌入方式分成三类。你想想看,就像往一辆车上装涡轮增压——你可以装在进气口、装在排气管、或者直接换发动机。
| 嵌入方式 | 典型位置 | AI模块类型 | 算力消耗 | 我见过的坑 |
|---|---|---|---|---|
| 前处理替换 | RAW域、BLC之后 | AI去噪、AI坏点修复 | 中 | 训练数据与真实sensor不匹配 |
| 中间件插入 | 去马赛克前后、RGB域 | AI去马赛克、AI色彩重建 | 高 | 时序约束容易崩 |
| 后处理增强 | Gamma之后、YUV域 | AI超分、AI增强、AI降噪 | 低~中 | 容易过锐化,出现伪影 |
关键原则:AI模块不要试图替代整个Pipeline。我见过最惨的项目,就是团队非要搞端到端AI ISP,结果暗光效果确实好,但正常光照下颜色全偏了。最后不得不回退到混合架构。
2.2 混合架构的典型数据流
下面这张图是我自己画的一个典型混合ISP Pipeline。你看,AI模块不是凭空出现的,它嵌在传统模块之间,像一个个“智能补丁”。
我的经验:实际部署时,AI模块不要全开。暗光场景下,我通常只开AI去噪和AI超分两个模块。色彩校正和Gamma还是用传统的,因为AI在这两块容易翻车——尤其是肤色,AI经常调出“僵尸色”。
2.3 嵌入位置的选择依据
选在哪儿嵌入AI,不是拍脑袋决定的。我总结了一套判断标准,你拿去直接用:
- 信号退化程度——暗光下噪声主要在RAW域,所以AI去噪必须放在最前面。我记得有一次项目,团队把AI去噪放在去马赛克之后,结果噪声和颜色混在一起,AI根本分不清,效果极差。
- 算力预算——AI模块越靠前,分辨率越低(RAW图通常比RGB小),算力消耗越小。但靠前的模块对后续Pipeline影响也越大,一旦出错,后面全崩。
- 实时性要求——视频通话场景,AI模块不能超过5ms。我建议把AI超分放在最后,因为可以降分辨率处理,再超分回来,省算力。
- 模块耦合度——AI模块和传统模块之间,最好留一个“缓冲带”。比如AI去噪输出后,先做一次统计信息提取,再喂给后面的白平衡模块。我曾经因为没留缓冲,AI去噪把暗部细节全抹平了,白平衡直接算错。
避坑指南:千万不要把AI模块直接串联成“AI Pipeline”。我见过一个团队,把去噪、去马赛克、色彩校正全换成AI,结果三个AI模型互相打架——去噪模型把纹理抹了,去马赛克模型又试图重建纹理,色彩校正模型再把颜色拉偏。最后效果还不如传统Pipeline。记住:AI是补丁,不是替代品。
2.4 混合架构的调度策略
AI模块不能一直开着。暗光场景下开,正常光照下关,这叫场景自适应调度。我个人习惯的做法是:
- 光照检测:用传统模块算一下平均亮度、信噪比。低于某个阈值,启动AI去噪。
- 运动检测:如果画面有运动,AI去噪的强度要降低,否则会出现拖影。我踩过这个坑——暗光下拍小孩,AI去噪把运动区域搞糊了。
- 内容感知:人脸区域用高精度AI,背景区域用低精度AI或者传统模块。这样可以省算力。
| 场景 | AI去噪 | AI去马赛克 | AI超分 | 传统模块 |
|---|---|---|---|---|
| 明亮白天 | 关闭 | 关闭 | 关闭 | 全开 |
| 黄昏室内 | 低强度 | 关闭 | 关闭 | 全开 |
| 暗光夜景 | 高强度 | 开启 | 低强度 | 部分关闭 |
| 极暗光(<1 lux) | 最高强度 | 开启 | 高强度 | 仅保留色彩校正 |
核心结论:混合架构不是简单的“AI+传统”,而是场景驱动的动态组合。AI模块嵌入的位置、强度、开关时机,决定了暗光效果的最终上限。我做了这么多项目,最深的体会就是——架构设计比模型设计更重要。模型不好可以换,架构错了,整个Pipeline都得重来。