003、影像系统软硬件协同设计:SoC选型、ISP集成与性能权衡
去年夏天,我在产线盯一个车载环视项目的夜视效果。客户反馈倒车影像在暗光下噪点像雪花一样,ISP的3DNR开到最大档还是压不住。我蹲在产线用示波器量MIPI信号,发现Sensor输出的RAW数据在DDR带宽争抢时丢帧了——ISP的统计引擎拿到的数据根本不对。那个晚上我意识到,影像系统的问题,十有八九不是算法不行,是软硬件没商量好。
SoC选型:别只看算力,要看数据流
很多团队选SoC先看TOPS,觉得AI算力高就万事大吉。这是典型的“参数党”思维。影像系统里,数据流比算力重要十倍。
我见过一个项目,选了某款8TOPS的芯片做安防球机,结果4K@30fps的HDR拼接死活跑不动。拆开看,ISP的DMA通道只有4条,Sensor双路输入加上MIPI CSI的虚拟通道,数据在总线上一撞车,帧率直接掉到18fps。后来换了一款6TOPS的芯片,但DMA通道有8条,还带独立的ISP SRAM,问题迎刃而解。
选SoC时,我习惯先画一张数据流图:从Sensor输出RAW,经过MIPI CSI接收,进ISP pipeline做BLC、Demosaic、AWB、Gamma,再到DDR做3A统计,最后给AI引擎做检测。每个环节的带宽、延迟、缓存大小,都要算清楚。别被TOPS忽悠,看看ISP的line buffer够不够做3帧的HDR融合,看看DDR控制器支不支持QoS优先级——这些才是影像系统的命门。
ISP集成:硬件加速器不是万能药
ISP的硬件加速器看起来很美:3A算法有专用硬件,降噪有硬件NR,HDR融合有硬件拼接。但实际调起来,你会发现硬件加速器就像个黑盒子,参数调不了,bug修不了。
我踩过最大的坑是某款SoC的硬件AWB模块。它内部有个固定的灰世界假设,遇到夕阳场景或者霓虹灯,白平衡直接偏紫。硬件团队说“这是RTL写死的,改不了”,软件团队说“我们可以在后面加个软件AWB做二次校正”。结果就是:硬件AWB先算一遍,软件再覆盖一遍,功耗翻倍,延迟增加,效果还不如纯软件AWB。
现在我的原则是:硬件加速器只用来做那些确定性高、算法成熟、不需要频繁迭代的模块,比如Bayer域的坏点校正、Lens Shading补偿。那些需要场景自适应、算法还在演进的功能,比如降噪强度、HDR融合策略,宁可跑在DSP或者NPU上,留出调优空间。
性能权衡:帧率、延迟、功耗的三角博弈
影像系统永远在帧率、延迟、功耗之间做取舍。手机拍照可以接受100ms的延迟,但车载环视要求端到端延迟小于30ms,否则驾驶员看到的是“过去”的画面。
我调过一个车载DMS项目,要求30fps的RGB-IR双模输入,同时做人脸检测和活体识别。SoC的ISP只能同时处理两路输入,但DMS需要三路(RGB主摄、IR补光、IR暗光)。方案是把IR的两路在Sensor端做帧内融合,ISP只处理一路融合后的数据。代价是IR的帧率从30fps降到15fps,但活体检测的算法做了时序补偿,最终通过了车规认证。
另一个常见权衡是画质和功耗。安防监控的IPC,晚上开红外灯,ISP的降噪强度一高,芯片温度飙升,风扇噪音客户投诉。后来我们在低照度场景下,把降噪的时域滤波帧数从8帧降到4帧,空间滤波的窗口从7x7降到5x5,画质损失了3dB PSNR,但功耗降了40%,风扇不转了。
别追求理论最优,要追求系统可接受。画质差一点,用户可能看不出来;但功耗高了,产品卖不出去。
产线落地:软硬件协同的最后一公里
实验室里跑得飞快的算法,到了产线可能一塌糊涂。原因很简单:产线上的Sensor模组有公差,镜头有畸变,ISP的参数不能一套打天下。
我见过最离谱的事:某手机项目,实验室调好的AWB参数,产线上一测,每台手机的白平衡都不一样。查了三天,发现是Sensor的color filter array贴歪了,导致Bayer pattern错位。ISP的BLC模块按标准pattern读数据,结果读到的全是错的。最后在产线加了一道校准流程:每台手机出厂前,拍一张灰卡,自动校准BLC和AWB的偏移量。
还有一次,车载环视的拼接算法在实验室完美,产线上一装车,拼接缝处总有重影。原因是产线安装时,四个摄像头的角度有0.5度的偏差。ISP的畸变校正参数是固定的,装车后必须重新标定。后来我们在产线加了一个自动标定工位,用棋盘格图案,30秒完成四个摄像头的内外参标定,重影问题解决。
产线问题,本质上是软硬件协同的最后一公里。实验室的完美环境掩盖了公差和偏差,产线才是真刀真枪的战场。
个人经验性建议
别迷信硬件加速器。硬件加速器是双刃剑,用得好是加速,用不好是枷锁。选SoC时,留出20%的算力给软件后处理,以备不时之需。
数据流优先于算力。画一张完整的数据流图,标出每个节点的带宽、延迟、缓存需求。带宽不够,算力再高也是白搭。
产线校准不能省。Sensor公差、镜头畸变、安装偏差,这些在实验室里看不到,在产线上会要命。预留校准接口和流程,别等客户投诉了才补。
留出调优余量。ISP的参数不是一次调好的,需要根据场景、季节、批次不断迭代。SoC的固件要支持OTA升级,ISP的寄存器要留出软件可写的空间。
和硬件团队做朋友。影像系统的软硬件协同,不是软件迁就硬件,也不是硬件迁就软件,是两边坐在一起,把数据流、延迟、功耗掰开了揉碎了聊清楚。我见过太多项目,软件骂硬件“这功能做不了”,硬件骂软件“这参数不会调”,最后项目延期,谁也跑不掉。
影像系统的软硬件协同设计,说到底就是一句话:让数据流顺畅地跑起来,让算法有足够的空间去调优,让产线有办法去校准。别想着一劳永逸,影像系统永远在迭代,永远在权衡。