0. 一个反直觉的结论
做事件检测的项目,大家习惯盯着模型推理速度优化。但把整条链路拆开测下来会发现:
技术环节加起来往往不到 1 秒,真正吃掉时间的是人和流程。
下面按链路逐段拆。
1. 全链路六个环节
摄像头采集
↓ ① 取流传输
接入/汇聚服务器
↓ ② 解码
↓ ③ 预处理 + 推理
↓ ④ 告警生成与去重
告警服务
↓ ⑤ 通知下发
值班员终端
↓ ⑥ 人工确认 → 派单 → 出发
现场
| 环节 | 典型耗时量级 | 主要优化手段 |
|---|---|---|
| ① 取流传输 | 百毫秒级 | 就近接入、改 TCP 传输、检测用子码流 |
| ② 解码 | 十毫秒级 | 硬解替代软解,注意并发时的解码瓶颈 |
| ③ 预处理 + 推理 | 十~百毫秒级 | 模型轻量化、批处理、流水线重叠 |
| ④ 告警生成与去重 | 秒级 | 多帧确认 + 时间窗聚合 |
| ⑤ 通知下发 | 秒级 | 定向推送,而非广播式通知 |
| ⑥ 人工确认 → 出发 | 分钟级 | 移动端核警、桩号自动定位、就近派单 |
量级区间为一般性工程经验,具体数值请以你们自己的链路实测为准,不同架构差异可以很大。
2. 逐环节说几个实操点
① 取流:别在检测链路上拉主码流
主码流码率高,在接入侧上行带宽紧张的路段会直接堆积延迟。
检测用子码流,取证用主码流,这是分流的基本原则。另外跨网域场景下,UDP 丢包重传带来的抖动远比 TCP 大,实测经常是几百毫秒级的差异。
② 解码:多路并发时最先曝光的位置
单流压测时解码从不构成瓶颈,多路并发时它经常是第一个倒的。
原因很简单:解码吃的是 CPU/专用编解码单元资源,是线性增长的,而 GPU 推理还能靠批处理摊薄。建议压测时把解码和推理分开计时,否则定位不到真瓶颈。
③ 推理:批处理不是万能的
批处理能提升吞吐,但会引入等待窗口(攒 batch 的时间)。对于响应延迟敏感的事件检测,要在吞吐和延迟之间取平衡点,而不是无脑调大 batch。
另外,流水线设计(解码/传输/推理重叠执行)带来的收益,往往比压缩模型本身更明显。
④ 告警去重:降误报的关键,但有代价
多帧确认(连续 N 帧都检出才告警)和时间窗聚合,是压低误报最有效的两个手段,效果显著。
但两者都在主动增加延迟。这里必须和业务方明确约定:允许为了降低误报牺牲多少秒。
我的建议是按事件分级:
| 事件类型 | 时效要求 | 策略 |
|---|---|---|
| 逆行、主线违停 | 极高 | 最小确认帧数,先告警后精筛 |
| 行人/非机动车闯入 | 高 | 短时窗确认 |
| 抛洒物、占道施工 | 中 | 可容忍较长时窗,优先降误报 |
一刀切的策略,一定会同时踩高延迟和高误报两个坑。
⑤ 通知:别让好消息卡在最后一米
这一环的工程问题比技术问题多:
- 告警推送是全量广播还是按路段/班组定向?广播是错的做法,无效告警会让接收方在两周内彻底忽视这个渠道。
- 通知要到移动端,不只是到大屏。大屏前未必一直有人。
- 必须要有送达确认和超时升级机制:告警发出去没人认领,要有第二条路径自动往上升级。这一条是很多系统缺失的。
⑥ 人工环节:真正的大头
到这里才是重点。
前面五个环节优化到极致,能省下来的是几百毫秒到几秒。而人工这一环,常见的是:
- 值班员没第一时间看到(在做别的事、在另一块屏前)
- 看到了要交叉确认,切几个点位(几十秒到几分钟)
- 确认后打电话描述位置(几十秒到几分钟,且容易说错)
- 派单、找车、出发(几分钟)
这段是分钟级的,而且是流程和组织问题,不是技术能解决的。
3. 所以优化重点应该放哪
如果把"从事件发生到路巡出发"作为优化目标,杠杆最大的三件事依次是:
第一,让告警自己带全信息。 桩号、实时画面、事件类型一并推送到移动端,把"切几个点位交叉确认"这几十秒省掉。
第二,用坐标替代口头位置。 派单直接带定位和导航,省掉描述和复述,同时消除传错的风险。
第三,建立超时升级机制。 没人认领的告警自动升级到上一级,这一条能兜住最坏情况。
至于推理耗时从 40ms 压到 25ms------技术上很漂亮,但在这个目标下的贡献,可能不到 1%。
4. 小结
延迟优化有个方法论上的坑:大家默认在自己最擅长的环节优化。
做算法的人优化推理速度,做平台的人优化取流,做前端的人优化推送。每个环节都做得很好,端到端时间却几乎没变,因为最慢的那一环在职责边界之外。
先测,再优化。把六个环节分别打时间戳跑一遍,拿到真实分布再动手。
我把这条链路的指标怎么定(每个环节该给多少预算、怎么写进验收条款)整理进了《高速视频监控·AI事件检测选型清单》,另外还有接入方式对比和算力估算口径。需要的评论或私信【云监方案】。