3. AI ISP管线总览

好,我们直接进入正题。AI ISP 不是把某个神经网络塞进传统 ISP 就完事了。它是一整套模块化、可编排、实时敏感的流水线。我见过不少团队,算法精度刷得挺高,一上硬件就崩——要么延迟超标,要么带宽爆炸。说白了,问题都出在架构层面没想清楚。

这一章,我就带你从架构师的视角,把 AI ISP 管线的骨架搭起来。我们不急着写代码,先把模块怎么切、数据怎么流、时间怎么控这三个核心问题理清楚。

3.1 模块化架构设计:解耦与复用

传统 ISP 的模块是固定的:BLC、LSC、AWB、Demosaic、CCM、Gamma……每个模块功能单一,耦合紧密。AI ISP 不一样,你得把管线拆成可插拔的功能单元。

我个人习惯把 AI ISP 管线分成三大层:

层级 职责 典型模块 AI 介入方式
感知层 从 RAW 图提取底层特征 去噪、HDR 融合、坏点校正 轻量 CNN / Transformer
理解层 语义分析与全局优化 AWB、AE、场景分类、深度估计 分类网络 / 轻量分割
渲染层 色彩映射与视觉呈现 CCM、Gamma、Tone Mapping 3D LUT / 小网络微调

为什么要这么分?因为每一层的实时性要求不同。

  • 感知层:逐帧处理,延迟要求最严(通常 < 5ms)。
  • 理解层:可以隔帧或降分辨率处理(10-30ms 可接受)。
  • 渲染层:逐像素,但计算量小,通常用查表或轻量网络。

关键原则:模块之间通过标准化接口通信。我建议用 FrameMeta 结构体传递元数据(曝光、增益、色温估计),用 TensorBuffer 传递图像数据。这样换模块就像换乐高积木。

3.2 数据流与处理顺序:谁先谁后?

数据流顺序不是拍脑袋定的。我踩过一个坑:把去噪放在 AWB 前面,结果去噪网络把色温信息也给抹掉了,AWB 直接偏色。后来我才意识到,数据流顺序要遵循信息依赖关系。

下面这张图是我现在常用的 AI ISP 管线数据流:

AI ISP 管线数据流与处理顺序 RAW 输入 坏点校正 (AI) 去噪 (AI) HDR 融合 AWB (AI) Demosaic CCM + Gamma Tone Mapping (AI) RGB 输出 RAW 域处理 信息最完整 RGB 域处理 色彩空间转换

你可能会问:为什么 AWB 放在去噪之后?因为去噪网络会改变局部统计特性,如果先做 AWB,去噪后白平衡又偏了。我建议的流程是:RAW 域处理(坏点→去噪→HDR)→ 色彩恢复(AWB→Demosaic)→ 色彩映射(CCM→Gamma→Tone Mapping)。

小技巧:如果场景变化剧烈(比如从室内走到室外),可以在 AWB 之前插入一个场景切换检测模块。我一般用帧间直方图差异 + 一个简单的 MLP 分类器,开销不到 0.1ms,但能避免白平衡剧烈跳变。

3.3 实时性约束与硬件加速

这是 AI ISP 落地最头疼的部分。你想想看,一个 4K@60fps 的流,每帧只有 16.67ms 的处理时间。而一个稍微像样点的去噪网络,在 GPU 上跑一次就要 5-10ms。再加上其他模块,很容易超时。

我总结了一套实时性约束分级策略:

等级 延迟要求 适用场景 典型硬件
L0 硬实时 < 5ms 去噪、坏点校正 专用 NPU / FPGA
L1 软实时 5-20ms AWB、AE、场景分类 GPU / DSP
L2 准实时 20-100ms 3A 统计、HDR 融合 CPU / GPU
L3 非实时 > 100ms 模型更新、校准 CPU / 云端

硬件加速方面,我踩过不少坑。给你三个最实用的建议:

  1. 量化优先:模型从 FP32 量化到 INT8,速度提升 3-4 倍,精度损失通常 < 1%。我习惯用 PTQ(Post-Training Quantization) 快速验证,再用 QAT(Quantization-Aware Training) 微调。
  2. 算子融合:把 Conv + BN + ReLU 融合成一个算子。在 NPU 上,融合后带宽消耗能降 40%。
  3. 流水线并行:把管线拆成多个阶段,用双缓冲(Double Buffering)让计算和 DMA 传输重叠。我曾经把一个 12ms 的管线优化到 7ms,靠的就是这个。

注意:不要盲目追求端到端 AI 化。我见过有人用一个大网络替代整个 ISP,结果精度没提升多少,功耗翻了三倍。正确的做法是:用 AI 替换传统 ISP 中最薄弱的 2-3 个模块,其他模块保持传统算法。这样性价比最高。

3.4 一个实际的管线配置示例

最后,给你看一个我最近在量产项目里用的管线配置。这个配置跑在 4K@30fps 的 NPU 上,总延迟控制在 28ms 以内。

// ai_isp_pipeline_config.json (简化版)
{
    "pipeline": [
        {
            "module": "bad_pixel_correction",
            "type": "ai",
            "model": "bpc_light_v2.tflite",
            "input": "raw10",
            "output": "raw10",
            "hw_accel": "npu",
            "latency_budget_ms": 2.0
        },
        {
            "module": "denoise",
            "type": "ai",
            "model": "dn_quant_int8.tflite",
            "input": "raw10",
            "output": "raw10",
            "hw_accel": "npu",
            "latency_budget_ms": 8.0
        },
        {
            "module": "awb",
            "type": "hybrid",
            "algorithm": "cnn_awb + grey_world_fallback",
            "input": "raw10_stats",
            "output": "wb_gains",
            "hw_accel": "dsp",
            "latency_budget_ms": 3.0
        },
        {
            "module": "demosaic",
            "type": "traditional",
            "algorithm": "adaptive_bayer",
            "input": "raw10",
            "output": "rgb888",
            "hw_accel": "isp_hw",
            "latency_budget_ms": 5.0
        },
        {
            "module": "tone_mapping",
            "type": "ai",
            "model": "tm_3dlut_quant.tflite",
            "input": "rgb888",
            "output": "rgb888",
            "hw_accel": "npu",
            "latency_budget_ms": 4.0
        }
    ],
    "total_latency_budget_ms": 28.0,
    "frame_rate": 30
}

看到没?我把去噪和 Tone Mapping 用 AI 做,AWB 用混合方案(AI 预测 + 传统回退),坏点校正用轻量 AI 模型。Demosaic 这种传统 ISP 已经很成熟的模块,直接用硬件 IP。这样既保证了画质提升,又把延迟控制在预算内。

核心思想:AI ISP 不是取代传统 ISP,而是在关键瓶颈点注入 AI 能力。模块化架构让你可以灵活替换、逐步迭代。实时性约束是悬在头顶的剑,从一开始就要考虑进去。