多线程是加载一个复用推理模型还是用多个独立的推理模型

多线程 + 多相机并行推理:必须每个线程独立拥有一个 cv::dnn::Net 对象,不能多个线程共用同一个 Net! 也就是:线程数 = Net 实例数量。

cpp 复制代码
    cv::dnn::Net netCam5,netCam6,netCam7,netCam8,netCam11,netCam12;

    netCam5 = readNetFromONNX(onnx_seg_path);
    netCam5.setPreferableBackend(DNN_BACKEND_OPENCV);
    netCam5.setPreferableTarget(DNN_TARGET_CPU);
    netCam6 = readNetFromONNX(onnx_seg_path);
    netCam6.setPreferableBackend(DNN_BACKEND_OPENCV);
    netCam6.setPreferableTarget(DNN_TARGET_CPU);
    netCam7 = readNetFromONNX(onnx_seg_path);
    netCam7.setPreferableBackend(DNN_BACKEND_OPENCV);
    netCam7.setPreferableTarget(DNN_TARGET_CPU);
    netCam8 = readNetFromONNX(onnx_seg_path);
    netCam8.setPreferableBackend(DNN_BACKEND_OPENCV);
    netCam8.setPreferableTarget(DNN_TARGET_CPU);

原因分析:

  1. 底层原因(OpenCV DNN 不管 CPU/CUDA 后端都适用)

cv::dnn::Net 不是线程安全。

Net 内部包含:计算图、中间张量缓存、推理上下文、GPU 显存上下文。

多线程同时调用同一个 Net 的 setInput() / forward(),会发生:

内存覆盖、张量错乱

随机崩溃、偶发断言报错(就是你之前遇到的各种 Reshape /assign 异常)

推理结果随机错乱、mask / 检测框忽对忽错

简单一句话:同一个 Net 不能被多个线程并发调用 forward。

2.每个线程内部只操作自己专属的 Net,无锁,并发安全。

优点:不需要互斥锁,并发性能最好,逻辑简单稳定,工业视觉首选。

缺点:CPU 推理:每个 Net 会在内存里加载一份模型权重,内存占用成倍增加。

相关推荐
云和数据.ChenGuang29 分钟前
Python 重写(Override)深度解析:从 MRO 到 super() 的完整机制
java·开发语言·人工智能·python·langchain·1024程序员节
西西木科技丨Shopify开发机构1 小时前
CalDigit TS4案例:AI产品图的Shopify整站接入与验收
人工智能·shopify·独立站
2601_965448871 小时前
AI视频制作:做系列节气民俗视频音色不统一,AI 音色克隆省事的方法
人工智能·机器学习·音视频
美狐美颜SDK开放平台1 小时前
视频美颜SDK试用DEMO阶段应该测试什么?直播APP接入实操指南
开发语言·人工智能·深度学习·音视频·美颜sdk·直播美颜sdk·第三方美颜sdk
HRaitest1 小时前
秋招技术岗招聘提效:三类 AI 招聘方案的技术底层与选型逻辑
大数据·人工智能·求职招聘·ai-native
天远数科2 小时前
零信任架构实战:基于天远企业股权变更构建自动化商业银行对公授信存续期股权异动与资产抽逃预警网关
运维·人工智能·架构·自动化
车软学堂2 小时前
从测试转开发,到底要补什么
网络·人工智能·python·功能测试·单片机·车载系统·自动化
海盗12342 小时前
AI 新闻日报 10-28:Atria Dawn 完整版开源、Cursor Agent SDK 转正、Genie 4 实时世界模型
人工智能·机器人·开源·人工智能aigc
志尊宝3 小时前
AI原生前端开发(035):AI时代的工程化最佳实践总结
人工智能·ai-native
冬奇Lab3 小时前
一天一个开源项目(第251篇):Claude SEO —— 装进 Claude Code 的 SEO 审计团队,26 个子技能 + 19 个专家 Agent 并行体检网站
人工智能·开源