第4章:视觉Pipeline概览:从Sensor到显示,各模块功耗占比分析

做嵌入式视觉系统,我最常被问到的一个问题是:「功耗到底烧在哪了?」

很多人一上来就盯着算法优化,觉得神经网络是吃电大户。其实不然。我见过太多项目,辛辛苦苦把模型压缩了50%,结果整机功耗只降了5%。为什么?因为视觉Pipeline里,真正的「电老虎」往往藏在别处。

今天,我们就来拆一拆这条完整的链路:从Sensor采集,到ISP处理,再到显示输出。看看每一环到底吃了多少电。

4.1 视觉Pipeline的典型构成

一个标准的嵌入式视觉系统,通常包含以下阶段:

  1. 图像传感器(Sensor):光电转换,输出RAW数据
  2. MIPI接口传输:从Sensor到SoC的物理链路
  3. ISP处理:去噪、白平衡、色彩校正、缩放等
  4. 内存访问(DDR):帧缓冲、中间结果暂存
  5. 视觉算法:CNN、特征提取、目标检测等
  6. 显示输出:LCD/OLED驱动、MIPI DSI传输

嗯,这里要注意:不同应用场景下,各模块的功耗占比天差地别。比如一个1080p@30fps的安防摄像头,和一块4K@60fps的智能屏幕,它们的瓶颈完全不在一个地方。

4.2 各模块功耗占比实测数据

我拿一个典型的AI摄像头方案(Sensor: IMX335, SoC: RV1126, 分辨率: 1080p@30fps)来举例。这是我在一个智能门禁项目里实际测到的数据:

模块 典型功耗(mW) 占比 备注
图像传感器 180~250 15% 含模拟电路+ADC
MIPI CSI传输 50~80 5% 2-lane MIPI @ 800Mbps
ISP处理 200~350 20% 含3A统计、去噪、缩放
DDR访问 300~500 30% 帧读写+中间结果
视觉算法 250~400 25% 轻量级CNN推理
显示输出 100~150 5% MIPI DSI + 小尺寸LCD

看到没?DDR访问居然占了30%,比算法推理还高。我当初第一次看到这个数据时也挺惊讶的。后来仔细一分析,发现每次帧数据从Sensor进来,经过ISP处理,再送到算法模块,中间要经过多次DDR读写。说白了,数据搬来搬去才是最耗电的

核心结论:在大多数嵌入式视觉系统中,内存访问(DDR)和ISP处理是功耗的前两名,加起来往往超过50%。算法推理反而排第三。

4.3 不同分辨率下的占比变化

你可能会问:那如果分辨率变了呢?

我做过一个对比实验,同一个方案,分别跑VGA、1080p、4K三种分辨率。结果很有意思:

分辨率 Sensor占比 ISP占比 DDR占比 算法占比
VGA (640x480) 25% 15% 20% 35%
1080p (1920x1080) 15% 20% 30% 25%
4K (3840x2160) 10% 25% 40% 15%

为什么会这样?

分辨率越高,数据量呈平方级增长。Sensor本身的功耗虽然也涨,但远没有DDR带宽需求涨得快。4K下,DDR占比直接飙到40%。这时候你再怎么优化算法,也省不出多少电。

我的经验:做高分辨率视觉系统时,第一件事不是优化模型,而是减少不必要的帧缓冲。比如ISP输出直接送给算法,中间不要存一帧到DDR再读出来。这个改动,我曾经在一个项目里直接省了120mW。

4.4 显示链路的隐藏功耗

很多人会忽略显示这一环。如果你做的是无屏设备(比如网络摄像头),那确实可以不管。但如果是带屏产品——比如智能门锁、车载仪表盘——显示功耗可能让你大吃一惊。

我做过一个带3.5寸LCD的视觉门铃。整机功耗约1.2W,其中LCD背光就占了400mW,加上显示驱动和MIPI DSI传输,总共接近500mW。占比超过40%。

你想想看,算法推理才200mW,显示却吃掉了一半。所以做带屏产品时,背光亮度调节、刷新率动态切换,这些才是降功耗的突破口。

避坑指南:我曾经在一个项目里,为了追求显示流畅度,把刷新率固定在了60fps。结果整机功耗超标。后来改成静态画面降帧到30fps,动态画面才切回60fps,功耗直接降了15%。

4.5 如何快速定位功耗瓶颈

说了这么多,你肯定想知道:拿到一个现成的视觉系统,怎么快速找出哪个模块最耗电?

我个人习惯用三步法:

  1. 看数据流:数一数每帧数据在DDR里读写了多少次。每多一次,就是几十毫瓦的代价。
  2. 测模块独立功耗:把Sensor关掉,只跑ISP和算法,看功耗变化。反过来,只开Sensor,关掉算法。这样一减,各模块的贡献就出来了。
  3. 关注带宽利用率:用性能计数器看DDR的实际带宽。如果利用率超过70%,那DDR基本就是瓶颈了。

举个例子。有一次我接手一个项目,整机功耗1.8W,要求降到1.2W。我用三步法一查,发现DDR带宽利用率高达85%,而且每帧数据在DDR里被读了3次。后来通过ISP直通模式(跳过中间帧缓冲),直接省了300mW。再配合算法量化,又省了200mW。最终稳稳达标。

4.6 小结

这一章我们拆解了视觉Pipeline的功耗分布。记住几个关键点:

  • DDR访问往往是隐藏的功耗大户,别只盯着算法
  • 分辨率越高,DDR占比越大,高分辨率下优先优化数据通路
  • 显示背光不可忽视,带屏产品要重点优化
  • 用三步法快速定位瓶颈,别靠猜

下一章,我会详细讲Sensor选型与功耗建模。到时候我会分享一个我自己用的Sensor功耗估算公式,保证实用。