1. 升级前夜:安防平台从“看得见”到“看得懂”卡在哪里
复盘某园区安防体系升级项目时,我翻出立项后的第一版方案,当时技术人员提的是:在中心机房加两台带显卡的高性能服务器,把所有摄像头的视频流集中拉回来跑AI分析。方案看着很完整,真正落地才知道问题不少——主干网络要从千兆升万兆,机房配电要扩容,设备采购价格很高,最后算下来的单路成本高得离谱。后来换成“算法轻量化部署”的思路,项目才顺利推进下去。
这个项目里,核心载体是EasyGBS平台。EasyGBS基于GB/T 28181协议实现视频接入,把各种品牌、各种编码格式的摄像头统一管理起来,还能提供转码、分发、录像回放能力。平时它解决的是“看得见”的问题。而这次升级,我们希望在此基础上叠加AI分析能力,让系统能自动识别和预警,比如区域越界、未戴安全帽、重点区域闯入等。不是在一片空地上新上一套AI系统,而是在存量视频体系里低成本叠加智能能力。
如果你也负责类似的老旧视频系统升级,多半会有同感:平台本身已经很稳定,但一提到AI,总觉得处处被制约。下面先拆三个最核心的障碍,再讲我们是怎么一步一步解决的。
1.1 EasyGBS的平台定位与升级突破口
先给没接触过的读者补个底。EasyGBS是一类面向GB/T 28181标准的流媒体服务系统。它负责注册前端设备、按SIP协议交换信令;摄像头的RTP码流推上来后,系统完成解码、转码、封装,再输出给上层业务平台调用。你可以把EasyGBS理解成一条“视频总线”:前端的摄像头品牌再杂乱,后面接的各种业务系统只看到一个统一的标准接口。
这次升级的突破口,就是这条“视频总线”的两头。一头靠近摄像头,我们称为“边缘侧”,适合放轻量模型;另一头是平台自身,它已经具备比较完整的事件处理、告警推送、联动录像能力,只要把AI分析产生的结果喂进来,平台就能像处理普通设备告警一样,把结果分发给各个业务模块。换句话说,我们不需要把EasyGBS平台拆了重建,而是在它的数据入口和出口之间加一层AI“翻译层”。
这里补充一个关键认识:很多团队做安防AI升级,容易把重点放在算法精度上,忽略了“平台怎么和算法模块通信”。实际上,AI模块在边缘算得再准,如果事件格式平台不认,或者告警推送链路没有打通,项目仍然白做。所以理解EasyGBS的API、事件订阅能力、设备通道关联关系,是和训练模型同等重要的工作。
1.2 旧系统叠加AI时最难处理的三个问题
第一个问题是算力位置。监控点位分布在园区的各个角落,甚至在不同建筑物、不同物理位置。如果所有视频都往中心机房送,一台主机的解码能力、网络带宽都会率先见顶。很多推理场景其实边缘就近处理效果更好——比如周界告警,目标已经在画面里出现了,画面再绕一圈回中心,决策就慢了。
第二个问题是码流形态太杂。同一个系统里既有主码流又有子码流,编码有H.264也有H.265,分辨率从720P到4K都有。算法模型直接拿原始视频流做推理,可操作性很差,必须先做统一拉流、抽帧、缩放、格式转换等预处理。这块必须和视频平台配合好。谁负责取流,谁负责抽帧,谁负责把结果转出去,责任边界不提前划分清楚,后面调试会非常痛苦。
第三个问题是模型更新。安防场景的算法需求变化很频繁,今天要看安全帽,明天要查烟火,后天可能又要换成检测其他目标。如果每次更新模型都要重启服务、断掉视频链路,现场运维端接受程度很低。所以设计方案时必须提前考虑模型热切换能力,把“更新模型”做成像“替换配置文件”一样简单的事。这三个问题,最后都成了我们选型和架构设计的主要约束条件。
2. 部署路线选型:中心算力集中推理与边缘轻量化的真实权衡
在技术选型环节,并不是说中心集中式推理不可用,而是要看项目现状。很多旧系统的机房没有多余电力和机柜空间,更不希望因为AI功能而升级核心交换设备。我的判断逻辑一般是:先判断业务对实时性的敏感程度,再计算网络和机房改造的代价,最后看每路视频的分析成本。对园区安防这类场景,多数告警不需要毫秒级延迟,但也没必要把延迟拖到三秒以上,边缘推理正好适用于这种“中等实时”需求。
2.1 中心集中式的三个隐性成本
第一是带宽。按200万像素摄像头、4Mbps码流估算,1000路摄像头同时往中心拉流,中心要承接近4Gbps的入站流量。这还没算上行方向的控制信令和录像备份流量。如果园区现状是千兆主干,这一条基本就把集中式方案否掉了。即使改成只在告警时拉流,也会因为频繁的流建立和拆除带来新的稳定性问题。
第二是时延链路。视频流要经过摄像头编码、网络传输、平台转码,再到推理服务器,一次推理前前后后要经过多次封装转换。而对周界安防这种场景,目标可能只在画面里停留几秒钟,时延越高,告警的实用价值就越低。我们实测过一套集中式链路,从目标出现在画面到平台收到告警,经常超过两秒;边缘推理能把这段耗时压缩到几百毫秒。
第三是成本结构失衡。集中式设备采购价格高,上架后通常只跑两三个模型,还要专门有人会维护深度学习环境,包括驱动、依赖库、虚拟环境等。边缘轻量化设备成本低、功耗低,即使某个点位出了问题,现场直接换一台备用设备就行,不用动后台。对运维团队来说,这种“可以随手换”的可维护性,比账面算力数字更重要。
2.2 轻量化部署的三个切入方向
模型层面,选择参数规模小、推理时延低的检测或分类模型,比如YOLO系列的轻量版本、MobileNet系列分类网络。不要一上来就追求大精度模型,而是根据真实场景的数据分布,先定一个能达到90分需求的轻量模型,再逐步迭代。
推理框架层面,如果目标硬件是带有NPU的国产边缘计算盒子,优先使用厂家提供的推理运行时和模型转换工具。通用框架,比如ONNX Runtime或者TensorRT,可以作为跨平台服务或GPU环境中的选择,但不要盲目套用。
部署位置层面,尽量选择可以靠近摄像头接入点的边缘计算设备,复用原有局域网线路,不重新布缆。这里有一个容易被忽略的好处:边缘设备如果具备本地存储,即使中心平台短暂不可用,边缘侧告警仍然能记录下来,网络恢复后再补传给平台。
2.3 边缘设备选型参考与性能估算
我整理了一张参考表,数据来自项目实测,不是官方标称值。不同固件版本和模型配置会有浮动,但方向是可靠的:
| 设备类型 | 可用算力 | 可支持实时分析路数 | 单路成本 | 适用场景 |
|---|---|---|---|---|
| 轻量ARM盒子 | 2-3 TOPS | 4-8路1080P | 低 | 小型点位、单栋楼 |
| 中档NPU盒子 | 6-8 TOPS | 8-16路1080P | 中 | 普通园区、厂区 |
| GPU小服务器 | 较高 | 较高但运维复杂 | 高 | 汇聚节点、大并发 |
实际测试中,一台8 TOPS的中档盒子跑安全帽检测,模型输入尺寸调到640x640,单路1080P视频按10FPS抽帧推理,能稳定跑到10到14路,CPU和内存还留着一定余量。这里要强调一下:不要追求把设备跑到极限帧率,边缘设备长期高负载运行,散热和寿命都会受很大影响。留20%左右的资源冗余,运维会轻松很多。
3. 在EasyGBS平台集成轻量AI的落地方法
选完边缘设备后,最关键的环节就是把AI模块和EasyGBS有机融合。很多人以为EasyGBS只是个视频播放平台,和AI扯不上关系。实际上有三种路径可以实现:一是平台侧旁挂推理服务,二是平台拉视频流交给独立推理服务,三是在边缘盒子内完成分析后再对接平台。三种路径差别很大,放一起对比会清楚很多。
3.1 三种集成方式怎么选
| 集成方式 | 部署位置 | 优点 | 缺点 | 适合场景 |
|---|---|---|---|---|
| A. 平台旁挂推理服务 | 平台所在网络内 | 对接简单,可复用平台账号和摄像机管理 | 视频流要先经过平台,占用带宽和转码资源 | 路数少、试点阶段 |
| B. 平台拉流后交给推理服务 | 推理服务独立部署 | 模块解耦,方便扩容和独立升级 | 实时性受拉流链路影响 | 一定路数、需要灵活扩展 |
| C. 边缘盒子内计算为主 | 摄像头接入侧 | 延迟最低,带宽消耗小,断网也能本地告警 | 边缘设备承载能力有限 | 点位分散、识别目标明确的场景 |
我们这次用C方式为主、B方式为辅的组合。摄像头先接入边缘盒子,盒子内置轻量模型完成第一轮分析;需要看原始画面回放时,再由EasyGBS通过GB/T 28181把这条流要过去。中心平台不丢失视频管理能力,边缘侧又把AI计算扛了下来。对平台来说,它不需要关心模型是怎么跑的,只需要接收边缘侧上报的事件结果。
3.2 一条链路走通目标检测的完整步骤
大体拆成四步。
第一步,边缘盒子注册到EasyGBS。以GB28181接入为例,在盒子配置里填上平台IP、SIP域、设备编码等参数,盒子底层会自行完成SIP注册,管理页面上的设备状态变为在线。
第二步,在EasyGBS上配置拉流和视频通道。EasyGBS按GB28181或RTSP协议,从边缘盒子按需拉取实时流。这一步要确认通道编号、码流类型和分辨率,避免拉到主码流导致带宽浪费。
第三步,边缘盒子内部跑推理。代码里有一个帧获取模块,从本地解码后的视频帧中按固定间隔抽取,经过缩放、归一化、颜色空间转换后送入NPU推理。推理结果打上时间戳和通道号,先放进本地消息队列。
第四步,把事件结果上报给EasyGBS。我们用平台开放的接口提交一条标准JSON,现场留存示意如下:
{ "deviceId": "34020000001320000015", "eventType": "AI_SMART_ANALYSIS", "eventTime": "2024-06-21 15:30:12", "channelId": "34020000001320000016", "analysisResult": { "algorithm": "helmet_detection", "targetType": "person", "confidence": 0.91, "bbox": [1024, 540, 1180, 800], "snapshotUrl": "" } }平台收到消息后,根据通道关联信息查出对应的摄像机名称、安装位置,再把告警截图和事件描述推给监控大屏、手机端等下游应用。整个过程里,边缘盒子不需要关心平台下游是什么形态,它只负责把事情讲清楚。
3.3 事件数据回传与告警联动要注意的细节
第一,事件ID要保证全局唯一。如果边缘盒子网络闪断后重发了同一帧的检测结果,平台端要做去重。否则一次穿越围栏的行为,可能给平台推送十几条重复告警,操作员很快就麻了。
第二,告警截图尽量由边缘盒子直接生成,随事件一起发给平台。这一步看似无关紧要,实际能省掉平台从录像切片的时间。尤其是网络录像机存储不在本地时,事后切片会有好几秒的延迟,而边缘盒子截图的时延几乎为零。
第三,消息队列做落盘。NPU推理速度很快,但平台API响应可能不稳定。边缘盒子里的事件消息要先落在本地索引或轻量数据库中,再异步上传,保证网络故障时不丢事件。我们现场遇到过平台临时重启的情况,边缘盒子本地存了一万多条事件,等平台恢复后慢慢补齐,数据一条没丢。
4. 模型瘦身与推理加速的实战细节
轻量化部署不等于“模型小就行”。同一个检测模型,放到不同硬件上,表现可能相差三倍以上。这一环节我们踩了不少坑,重点集中在量化、剪枝蒸馏,以及推理引擎选型上。
4.1 先上量化:把FP32降到INT8的损失控制技巧
同一个模型从FP32量化到INT8,体积能降到原来的四分之一,推理速度根据不同硬件能提升30%到60%。量化不是简单转换,最关键的是校准集怎么选。
我头一次做量化,图省事直接用公开数据集里的图片去校准,结果模型部署到现场后,在逆光场景下漏检率突然变高。后来才明白,校准集必须接近真实业务数据。安防场景要专门抽夜间图像、逆光画面、模糊人像、远距离小目标,每类场景至少100到200张,混合起来作为校准集。宁可多花一晚跑数据,也别为了省事做一份“看起来正常”的校准集。
另一个技巧是混合精度量化。现在很多工具链支持对部分层保留FP16。检测模型里负责目标定位回归的层对量化非常敏感,让这些层保持中高精度,其他层用INT8,能明显减少精度损失,而体积和速度收益仍然可观。
4.2 剪枝和蒸馏什么时候才值得做
剪枝和蒸馏能让模型进一步瘦身,但实施成本比量化高太多。我的经验是:如果模型量化后已经能在目标硬件上达到期望帧率,就不要再折腾剪枝。只有当硬件性能确实吃紧,或者客户希望把多种检测功能压进同一个盒子时,才值得做蒸馏。
蒸馏对数据的要求高,至少需要几千张带标签的业务样本,还得覆盖不同时段、不同天气,否则小模型学不到大模型的泛化能力。剪枝也有讲究,用自动剪枝工具时,别把最后的检测头裁掉,那会导致输出维度错乱。实际经验是,结构化剪枝对普通团队来说风险不小,动不动就要重新微调一两周,不如模型量化来得直接。
4.3 推理引擎选型与性能基准
不同硬件平台的最佳推理路径完全不同。桌面GPU平台和国产NPU平台是两个世界,不能拿一套经验硬套。给一张实测对比表,模型是同一个轻量检测模型,测试视频是几段1080P的监控录像:
| 推理路径 | 平均单路延迟 | 帧率 | 备注 |
|---|---|---|---|
| 通用深度学习框架直接跑 | 偏高 | 偏低 | 一般不推荐用于生产 |
| ONNX Runtime | 中等 | 中等 | 跨平台、熟悉人群多,但性能一般 |
| GPU平台专用推理引擎 | 低 | 高 | 在对应GPU硬件上效果明显,有环境依赖 |
| 国产NPU原生SDK | 低 | 高 | 与硬件深度绑定,性能收益较大 |
我们最终在边缘盒子上用了国产NPU原生SDK。模型经过转换后,单路推理耗时从原来的两三百毫秒降到几十毫秒,总算把10路并发跑满了。这里的选择逻辑是:边缘设备的硬件已经确定,与其用通用引擎将就,不如一开始就摸清NPU工具链的算子支持列表,把模型里不支持的算子提前替换掉,后面会顺畅很多。
5. 现场维护与踩坑复盘:稳定运行比跑得快更重要
算法跑通只是开始,真正决定升级成败的,是连续跑一个月不出大问题。安防项目是7x24小时业务,现实场景里的夜间反光、雨天水渍、树叶摇摆,都能把模型折腾出各种幺蛾子。这章直接复盘踩过的坑,希望对做类似项目的同行有参考价值。
5.1 多路并发下的资源竞争处理
上线初期,把8路视频推到一块边缘盒子后,发现总帧率没上去,反而个别通道的延时变大了。排查后才知道,盒子里解码占用的硬件资源和NPU推理争抢同一块内存带宽,一路视频发生关键帧请求时,其他路的推理任务就被卡住了。
解法是给每路视频设置独立的抽帧间隔、推理队列和超时控制,避免一路的卡顿影响其他路。另外,在盒子侧尽量把NV12转RGB、图像缩放这类预处理放到硬件加速模块里,把CPU释放出来用于线程调度和协议处理。还有一个细节:抽帧策略从“按时间间隔抽”改成“按关键帧后首帧抽”,能降低视频解码压力,还没明显影响识别连续性。
5.2 模型热更新时踩过的坑
有一次更新算法包,我直接在服务运行状态里kill掉了推理进程,结果现场几十路视频业务全部中断,平台端疯狂报警。事后才知道,边缘设备的模型更新不能按“重启服务”的思路做,必须设计成热切换。
后来改成两阶段方案:先把新模型文件上传到独立目录,再做模型校验,确认结构、类别数和输入尺寸没有异常;然后通过一个模型管理进程加载并切换,推理进程用版本号机制感知新模型,整个过程几百毫秒内完成,业务视频流不断。类别数如果变了,平台端的过滤规则也要同步更新,这个联动要注意,否则检测结果和旧规则对不上,漏报误报都会出现。
5.3 误报率和告警风暴怎么压
误报一多,平台上的报警量就失控,操作员不敢信告警,最终连真报警也会被忽略。降误报要从源头和上报两层一起做。以下办法是我们验证过有效的:
- 场景过滤:提前设置检测区域,只识别划定区域内的目标。比如围墙外的人影,不该影响围墙内的入侵检测;
- 连续帧确认:单帧检测到目标不立即报警,连续3帧都检测到且置信度高于阈值才上报,能滤掉大量瞬时噪点;
- 告警去重:同一目标在两分钟内重复触发只推送一条,把“持续报警”变成“进入事件”和“离开事件”两个节点;
- 小目标抑制:对面积小于设定阈值的检测框直接忽略,这类框大多是远处噪点或树叶缝隙造成的。
这些规则上线后,系统整体误报量下降了大概七成,客户那边更关键的漏报率没有明显上升。实际操作中,每条规则都要反复调阈值,一定要留好参数配置入口,不要写死在代码里。
6. 经验沉淀:如果再让我做一次,我会怎么规划
项目收尾后,我把这套打法整理成了可复用的流程。以后再做类似的EasyGBS平台AI升级,基本可以按照下面几个阶段走,能减少沟通成本,也能少走弯路。
6.1 项目推进顺序建议
第一,先确认业务识别场景,再做硬件选型。不要为了“AI”而AI,先问清楚客户到底要识别什么目标、可接受的误报率是多少、响应时间要求是多少秒。这些直接决定了模型、设备和平台配置。
第二,试点阶段只拿部分路数跑通链路。不需要一上来就接全量摄像头,先用两三路摄像头,把“取流、抽帧、推理、事件回传、平台联动”的闭环跑通,再逐步扩大规模。试点阶段暴露出的问题,往往比后面集中爆发省力得多。
第三,软硬件同步固化。确定好模型、盒子固件、平台接口的版本,把部署脚本和批量刷机方案也保留下来。否则后期扩展时,每台设备手工配置一遍,出错概率很高,而且没人能说清哪台设备是哪个版本。
第四,上线后留观察窗口,再进入验收。7x24小时系统至少观察两周,前两周重点看误报占比、资源水位、事件丢失率。没有观察数据的验收都是走形式,等出问题再补救,成本高得多。
6.2 写给实施团队的一些备忘
两个关键词:预案和标准。预案是指,边缘盒子硬件故障时必须能十分钟内冷替换,模型和配置提前备份在统一位置;标准是指,模型训练数据、校准数据集、模型版本号、平台接口版本都要有固定目录和命名规范。AI项目最大的坑往往不是算法跑不动,而是团队没给系统留一条可退回的路。
最后再说一个细节,白天和夜晚差异大的场景,尽量训练两个模型,或者边缘盒子白天跑一套权重、夜晚自动切换到另一套。虽然样本收集和维护成本会高一些,但对识别率的提升是实打实的。这是我们在现场反复测出来的结论,同类升级项目里值得直接参考。