3、Pipeline拆解:AI ISP的典型pipeline
做AI ISP优化,第一件事就是要把pipeline吃透。我见过太多人一上来就盯着某个模块调参,结果发现瓶颈根本不在那儿。说白了,你得先知道整个流程长什么样,每个模块在干什么,算力都花在哪儿了。
今天我们就来拆一拆典型的端侧AI ISP pipeline。我会按数据域来分——RAW域、RGB域、YUV域,把每个阶段的模块和计算量分布讲清楚。
3.1 整体pipeline概览
先看一张我画的整体流程图。这张图我每次带新人都会先给他们看,让他们对整个链路有个全局印象。
从Sensor出来的RAW数据,经过三个域的流水线处理,最终输出YUV给编码器或显示。每个域都有它的核心任务,也有它的算力黑洞。
3.2 RAW域:最吃算力的地方
RAW域是整个pipeline里计算量最大的阶段,没有之一。我做过一个统计,在4K@30fps的端侧芯片上,RAW域能吃掉整个ISP算力的45%左右。为什么会这样?因为RAW数据是Bayer格式,每个像素只有一种颜色分量,处理起来天然就需要更多计算。
3.2.1 黑电平校正 (BLC)
这个模块相对轻量。就是把Sensor的暗电流偏移减掉。说白了就是减一个常数,几乎不占算力。
3.2.2 AI去噪 (AI-Denoise)
这里才是大头。我记得有一次调一个端侧芯片,发现AI去噪模块占了RAW域60%的算力。为什么?因为去噪网络通常需要大感受野,卷积核大、通道数多,推理延迟一下就上去了。
关键指标:AI去噪模块的MACs(乘累加次数)通常占整个ISP的25%~35%。如果芯片的NPU算力不够,这里就是第一个瓶颈。
3.2.3 去马赛克 (Demosaic)
把Bayer格式插值成完整的RGB。传统方法用双线性插值,算力很低。但现在的AI ISP会用轻量级CNN来做,质量好但算力翻倍。我建议在端侧芯片上,如果NPU紧张,可以考虑用传统方法+后处理修复,能省不少算力。
3.3 RGB域:色彩还原的主战场
RGB域的计算量大概占30%。这里主要做色彩相关的校正,计算密度不如RAW域高,但数据量已经变成三通道了,带宽压力不小。
| 模块 | 计算量占比 | 带宽消耗 | 典型瓶颈 |
|---|---|---|---|
| 白平衡 (AWB) | ~2% | 低 | 统计直方图计算 |
| 颜色校正矩阵 (CCM) | ~3% | 中 | 3x3矩阵乘法 |
| Gamma校正 | ~1% | 低 | LUT查找 |
| AI色调映射 (AI-TMO) | ~24% | 高 | 局部映射网络推理 |
看到没?AI-TMO(色调映射)是RGB域的算力大户。它要做局部自适应映射,通常用一个轻量级UNet或者类似结构。我在项目中遇到过一个问题:AI-TMO的推理延迟在NPU上跑到了8ms,而整个ISP的帧预算只有33ms(30fps)。后来我把网络从UNet换成了MobileNetV2风格的编解码器,延迟降到了3ms,画质损失在可接受范围内。
我的经验:RGB域的优化重点在AI-TMO。如果芯片有独立的NPU,可以考虑把RAW域的AI去噪和RGB域的AI-TMO分时复用同一个NPU核心,避免资源争抢。
3.4 YUV域:画质收尾与编码适配
YUV域的计算量大概占25%。这个阶段的数据已经是YUV420或YUV422格式了,数据量比RGB少了1/3到1/2。但别小看它,锐化和降噪模块如果做得不好,前面的努力全白费。
3.4.1 色彩空间转换
RGB转YUV,一个3x3矩阵乘法加偏移。算力很低,但要注意精度。我见过有芯片用定点实现,结果Y分量溢出导致画面发灰。
3.4.2 AI锐化 (AI-Sharpen)
锐化模块现在也倾向于用AI来做。传统锐化(比如USM)容易产生振铃和过冲。AI锐化可以用一个轻量级CNN来学习边缘增强,效果更好。但要注意,锐化模块通常只处理Y分量,U/V分量可以跳过,能省2/3的算力。
3.4.3 降噪 (NR)
YUV域的降噪主要是做时域降噪和空域降噪的融合。这里有个坑:时域降噪需要帧缓存,带宽消耗很大。我曾经在调试一个4K@60fps的项目时,发现DDR带宽被时域降噪吃掉了40%。后来改成运动自适应降噪,只在运动区域做空域降噪,静止区域做时域滤波,带宽降到了15%。
避坑指南:YUV域的降噪和锐化是矛盾的。降噪会抹掉细节,锐化会放大噪声。我曾经调一个芯片,降噪和锐化模块互相打架,画面要么糊要么噪。后来我加了一个边缘检测门控,只在平坦区域做降噪,在边缘区域做锐化,才把平衡找回来。
3.5 计算量分布总结
我把三个域的计算量分布整理成一张表,方便你快速定位瓶颈。
| 数据域 | 计算量占比 | 主要算力消耗模块 | 优化建议 |
|---|---|---|---|
| RAW域 | ~45% | AI去噪 (25-35%)、Demosaic (8-12%) | 优先优化去噪网络结构,考虑传统+AI混合方案 |
| RGB域 | ~30% | AI色调映射 (20-25%)、CCM (3%) | AI-TMO用轻量级网络,分时复用NPU |
| YUV域 | ~25% | AI锐化 (10-15%)、时域降噪 (8-12%) | Y分量单独处理,运动自适应降噪 |
嗯,这里要注意一点:上面的比例是基于典型的端侧AI ISP架构。如果你用的Sensor是Quad Bayer或者非Bayer格式,RAW域的计算量分布会变。比如Quad Bayer的Demosaic更复杂,占比可能翻倍。
我个人习惯在做性能瓶颈定位时,先拿这个分布表去对芯片的profiling数据。如果某个模块的占比明显偏离,那大概率就是瓶颈所在。比如RAW域AI去噪占比到了40%,那不用想,先优化它。