2、性能指标定义:帧率、延迟、功耗、内存、收敛速度与稳定性
做算法落地这些年,我见过太多团队一上来就调模型、改代码,忙活半天却连「到底该优化什么」都没想清楚。说白了,性能优化不是玄学,你得先有一把能度量的尺子。这一章,我就把最常用的六个指标掰开揉碎讲清楚。
嗯,先看一张总览图,帮你快速建立全局认知。
2.1 帧率(FPS)—— 用户最直观的感受
帧率,就是每秒能渲染多少帧画面。单位是 fps(frames per second)。你想想看,一个视频通话如果只有 15fps,画面是不是明显卡顿?但到了 60fps,就感觉丝滑了。
我个人习惯把帧率分成三个档位:
- 30fps:可接受的下限。视频播放、普通 UI 交互勉强能用。
- 60fps:流畅标准。大多数游戏、实时视频处理的目标值。
- 90/120fps:极致体验。VR/AR、高刷屏设备才需要。
2.2 延迟(Latency)—— 从输入到输出的时间差
延迟和帧率容易搞混。帧率是「每秒多少张」,延迟是「一张图从拍到显示花了多久」。单位是毫秒(ms)。
举个例子:你按下快门,手机要经过 ISP 处理、算法增强、屏幕输出。这一整套流程的时间,就是端到端延迟。
我一般把延迟拆成三段来看:
- 采集延迟:传感器曝光 + 数据读取。硬件瓶颈,很难优化。
- 处理延迟:算法推理 + 后处理。这是算法工程师的主战场。
- 显示延迟:缓冲区排队 + 屏幕刷新。跟系统调度有关。
2.3 功耗(Power)—— 移动设备的生命线
功耗,说白了就是算法跑起来要消耗多少电。单位是瓦特(W)或毫瓦(mW)。
你想想看,手机电池就那么大。一个算法如果让手机发烫、掉电快,用户分分钟卸载。我见过一个美颜算法,效果确实好,但跑 10 分钟手机就烫得拿不住——这种算法注定上不了线。
功耗优化的核心思路:
- 减少计算量:模型剪枝、量化、算子融合。
- 利用硬件加速:NPU/DSP 比 CPU 省电得多。
- 动态调频:轻负载降频,重负载升频。
关键认知: 功耗和帧率往往是跷跷板。帧率越高,功耗越大。你需要找到那个「甜点区间」——用户觉得流畅,手机又不烫。
2.4 内存占用(Memory)—— 别让 App 被系统杀掉
内存占用,就是算法运行时占了多少 RAM。单位是 MB 或 GB。
我遇到过最头疼的情况:算法在开发机上跑得好好的,一上真机就被系统 kill。为什么?因为手机后台还有、抖音在抢内存。你的算法占得太多,系统直接「请」你出去。
内存占用通常分三块:
| 类型 | 说明 | 优化方向 |
|---|---|---|
| 模型权重 | 网络参数占用的空间 | 量化、剪枝、知识蒸馏 |
| 中间特征图 | 推理过程中每层的输出 | in-place 操作、内存复用 |
| 运行时缓存 | 输入输出 buffer、临时变量 | 预分配、池化管理 |
2.5 收敛速度(Convergence Speed)—— 训练快不快
收敛速度,指的是模型训练到目标精度需要多少轮(epoch)或多长时间。这直接影响你的迭代效率。
我个人习惯用两个指标衡量:
- 收敛轮数:多少 epoch 后验证集精度不再提升。
- 收敛时间:达到目标精度实际花了多少小时。
收敛慢的原因很多:学习率设置不对、数据分布有问题、模型初始化不好。嗯,这里要注意,收敛速度不是越快越好——太快可能过拟合,太慢可能欠拟合。
我的做法: 每次训练前先跑 5 个 epoch 看看 loss 曲线。如果 loss 下降太慢,先调学习率;如果 loss 震荡剧烈,先检查 batch size 和数据增强。
2.6 稳定性(Stability)—— 别动不动就崩
稳定性,就是算法在各种场景下能不能稳定运行。不闪退、不花屏、不掉帧。
你想想看,一个算法在实验室测了 1000 张图都正常,一上线就被用户投诉闪退。为什么?因为用户的环境千奇百怪——光线暗、角度偏、手机型号老。
稳定性通常看这几个方面:
- 无崩溃率:连续运行 24 小时不 crash 的概率。
- 精度抖动:同一张图多次推理,结果是否一致。
- 边界鲁棒性:极端输入(全黑图、全白图、超大分辨率)下是否正常。
2.7 六个指标的关系:一张表说清楚
最后,我把六个指标放在一起对比一下。方便你快速查阅。
| 指标 | 单位 | 测量方式 | 典型目标值 | 优化难度 |
|---|---|---|---|---|
| 帧率 (FPS) | fps | 帧计数器 / 性能工具 | ≥ 30fps | 中 |
| 延迟 (Latency) | ms | 时间戳打点 | ≤ 100ms(实时) | 高 |
| 功耗 (Power) | mW | 电流计 / 功耗分析仪 | ≤ 500mW(手机) | 高 |
| 内存占用 (Memory) | MB | profiler / 任务管理器 | ≤ 200MB(手机) | 中 |
| 收敛速度 | epoch / 小时 | 训练日志 | 视任务而定 | 中 |
| 稳定性 | 无 | 长时间压测 / 边界测试 | 24h 无崩溃 | 高 |
说白了,这六个指标就是算法落地的「体检报告」。哪个指标不合格,你的算法就上不了线。我个人建议,在项目启动的第一天就把这些指标的目标值定下来,写到需求文档里。别等到快上线了才发现帧率不够、内存爆了——那时候再改,代价就大了。