基于C++ DNN部署Yolov8出现的问题记录

代码问题

报错行:net.forward(outputs, net.getUnconnectedOutLayersNames())

错误展示

错误代码:Exception message: OpenCV(4.8.1) C:\GHA-OCV-2\_work\ci-gha-workflow\ci-gha-workflow\opencv\modules\dnn\src\layers\reshape_layer.cpp:109: error: (-215:Assertion failed) total(srcShape, srcRange.start, srcRange.end) == maskTotal in function 'cv::dnn::computeShapeByReshapeMask'

错误解析

文心一言的解释:

total(srcShape, srcRange.start, srcRange.end) == maskTotal in function 'cv::dnn::computeShapeByReshapeMask' 这句信息看起来像是OpenCV(一个开源的计算机视觉库)中的DNN(深度神经网络)模块在尝试进行形状重塑时抛出的一个条件判断。

具体来说,cv::dnn::computeShapeByReshapeMask 函数用于根据一个给定的重塑掩码(reshape mask)计算一个新的张量形状。这个掩码定义了输入张量中哪些维度需要保持不变,哪些维度可以通过某种方式(如调整大小或填充)来改变。

在这个条件判断中:

  • srcShape 是原始张量的形状。
  • srcRange.startsrcRange.end 定义了srcShape中需要被考虑用于重塑的维度范围。
  • maskTotal 则是重塑后,在这个范围内所有维度上的元素总数(通常称为体积)。

total(srcShape, srcRange.start, srcRange.end) 这部分代码会计算原始形状中,指定范围内维度的元素总数。然后这个计算出来的值需要与 maskTotal 进行比较。如果两者相等,那么重塑操作是可行的,因为这意味着重塑后的张量在指定维度上的元素总数与原始张量相同。

如果条件不满足(即两者不相等),那么函数可能会抛出一个错误,因为这意味着无法在不改变元素总数的情况下,通过给定的重塑掩码来重塑张量。

简而言之,这个条件判断是确保重塑操作不会改变张量在指定维度上的元素总数。

改正错误

我这边修改模型的cv::Size(640, 480)修改为cv::Size(640, 640),即onnx转换后应该为640*640,不是640*480,所以tensor张量匹配不上,修改后即可运行

// 1. 设置你的onnx模型

// Note that in this example the classes are hard-coded and 'classes.txt' is a place holder.

Inference inf("last.onnx", cv::Size(640, 640), "classes.txt", runOnGPU); // classes.txt 可以缺失

结果展示:

相关推荐
冬奇Lab6 小时前
Workflow 系列(01):基础理论——三种执行模型与 Anthropic 5 种模式
人工智能·agent·工作流引擎
冬奇Lab6 小时前
每日一个开源项目(第143篇):page-agent - 纯 JS 的网页 GUI Agent,无需截图、无需插件、无需后端
前端·人工智能·agent
程序员cxuan8 小时前
虽迟但到!GPT-5.6 终于来了!
人工智能·后端·程序员
ZhengEnCi10 小时前
Q03-UI设计进阶技巧-让界面更高级的7个核心原则
人工智能
IT_陈寒10 小时前
React的这个渲染问题连官方文档都没说清楚
前端·人工智能·后端
不加辣椒12 小时前
第12章 工具调用与 Agent 提示工程
人工智能
用户16931761726612 小时前
前端给AI消息做日期分组与时间线
人工智能
i晟12 小时前
Claude Code Harness 深度拆解:从你敲回车到模型回复,中间发生了什么
人工智能
用户2527362781413 小时前
【踩坑复盘】我在本地跑 RAG 知识库时踩了 5 个大坑,吐血整理避坑指南
人工智能
大模型真好玩13 小时前
LangChain DeepAgents 速通指南(九)—— 生产级智能体框架 DeepAgents Code 源码导读
人工智能·langchain·agent