Darknet如何一次加载模型权重后长期重复调用检测模型
Darknet能否实现一次加载权重长期调用检测
原生Darknet没有提供可实现该需求的官方内置命令。
你当前使用的命令以及Darknet自带的detect、detector test等所有检测类命令,都遵循单次执行的设计逻辑:进程启动后依次完成配置文件读取、模型权重加载、推理计算、结果输出,所有流程跑完后进程会直接退出,本身没有设计常驻内存、等待后续调用的运行模式,因此每次执行命令必然会重复加载权重,产生额外的等待时间和资源消耗。
如果要实现「一次加载权重、长期按需调用检测」的效果,可以参考以下两种可行方案:
- 修改Darknet源码自定义常驻运行逻辑
可以直接修改Darknet的入口代码,把网络初始化、权重加载的逻辑和单图推理的逻辑拆分开:程序启动时仅执行一次权重加载和网络初始化操作,之后通过常驻循环持续接收传入的待检测图片(支持传入本地文件路径,也可以直接读取内存中的图像数据),推理完成后直接返回检测得到的边界框结果,全程不需要退出进程。如果需要给其他业务模块调用,还可以在这个常驻逻辑外层封装简单的本地进程通信接口或者轻量HTTP服务,业务侧传入图片即可拿到检测结果。 - 换用支持YOLO9000权重的通用推理框架部署
不需要局限于OpenCV提供的YOLO实现,目前多数通用轻量推理框架都支持直接加载YOLO9000的cfg配置文件和weights权重文件,这类框架本身就支持初始化一次模型后反复执行推理,天然避免了重复加载权重的开销,多数场景下推理速度也比原生Darknet命令行执行更快。
内容的提问来源于stack exchange,提问作者İhsan Dağ
相关产品推荐
相关产品推荐

