端边协同的增量目标检测系统-1 系统架构与技术选型
一直以来都想做一个端侧部署的系统,苦于没有完整的想法以及对应的技术栈,经过上一年的学习,相应的技术点基本都会了些,正好也到了准备大论文第三部分系统构建的时段,就决定将之前的tensorRT项目包装一下,做个系统出来,姑且命名为:端边协同的增量目标检测系统
想法构建
大论文的主线工作是:增量目标检测。目标检测的应用场景总体还是比较多的,比如安防、生产线上的瑕疵检测、无人驾驶等等环境,有个可行的方案是用边云协同,但对于视频流这个传输压力还是很大的,同时受上一个项目的影响,个人会更倾向于局域网内解决问题,避免上公网。基于以上两个考虑,决定在常见的监控系统上展开初步的系统构建。
常见的一些监控系统上都会配置:局域网、摄像头(提供RSTP流)、主机、存储。几乎提供了除GPU以外的全部硬件设备,如果不对主机进行硬件升级,是否可以单独采购一个AI推理的硬件?比如:NVIDIA Jetson,将所有的AI相关的服务构建为web或者其他可供调用的服务,再通过主机上的软件对开发板进行一些可视化的操作,或许是一个可行的方案。
任务拆解
根据上述构思,我们针对端侧硬件与主机硬件做一些任务上的划分:
端侧
端侧由英伟达开发板(NVIDIA Jetson)作为硬件层,接入RSTP摄像头作为图像输入源,通过WiFi或网线连接网络。软件需求功能如下:
-
基于英伟达GPU与CUDA生态,利用tensorRT框架对用户上传的onnx模型进行构建与部署,实现高效的推理。基于业务场景,只针对yolox这一模型进行动态的部署构建,因此yolox的后处理代码可以提前构建且不发生多次改变。
-
基于pytorch实现增量训练。中控将需要增量学习的图像与标签发送到端侧系统,端侧系统进行增量训练,对增量后的模型进行评估,评估结果返回中控,训练模型由pytorch格式导出为onnx格式,再调用功能1进行重新部署,同时对原有旧类别标签数量进行扩展。
-
支持标记高危类别的消息报送。
-
基于蒸馏框架实现增量学习策略。模型原始训练框架参照yolox
-
基于nodejs与JavaScript语言实现小型web服务。需求1与2需要根据用户请求进行分别调用,需求1与2被调用的方式依据业务进行适当区分,需求1中采用ZeroMQ,需求2中采用命令行调用脚本。
-
可通过web调用的方式为端侧设备添加新的监控视频流进行推理,推理开关可通过web启停。
中控
中控使用windows作为操作系统,硬件平台不做要求,可复用监控平台,需要连接网络,中控开发成果为web网页与应用程序两种显示效果,中控需要同时监看多个摄像头(类似于原始监看功能)。中控开发为前后端不分离的软件,中控控制端侧采用http请求,端侧返回报警消息采用websocket。
-
通过web或客户端软件管理端侧设备,连接端侧的设备,调用端侧的web服务,给端侧添加新摄像头RSTP的URL,添加标志位,连接成功显示为绿色,标记延迟等相关信息,添加功能按钮可查看端侧系统的视频监控画面(默认附带yolox检测结果框,可手动进行关闭)
-
截图保存端侧设备视频流中的某些画面,支持用户对画面进行截图并画框标注,针对设备不同进行分别保存图像与标注结果,标注方式参考COCO的json标注,待累计一定数目后,发送给端侧设备进行学习。
-
支持用户导入图片进行数据标注。
-
支持自定义高危类别。
-
通过弹窗或者其他历史记录本地化保存报警信息,以log的方式,以日志文件形式进行持久化保存。
整体架构
中控:涉及到数据标注以及一些页面的布局管理
- UI页面:React Vite Electron
- 业务服务:python
端侧: 由三部分组成:
- Nodejs服务。依据中控的请求,转发处理,通过zeroMQ调用不同的服务
- C++ 推理框架
- pytorch yolox的蒸馏训练框架





