基于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 可以缺失

结果展示:

相关推荐
小淮AI7 分钟前
AI远程操控电脑,距离日常办公还有多远?
人工智能·电脑
头发够用的程序员7 分钟前
别被 TOPS 参数迷惑:手把手推导边缘 GPU 整型算力
人工智能·python·ubuntu·计算机视觉·硬件架构·边缘计算
思考着亮16 分钟前
5.成本、缓存与可观测性
人工智能
大闸蟹u22 分钟前
图解 AI Agent:Agent = 模型 + Harness
人工智能
dunge202623 分钟前
ChatGPT Plus / Pro 与 Codex 深度实战:2026年9月5日 从模型能力对比到代码生成工作流全解析
人工智能·chatgpt
阿拉斯攀登23 分钟前
SpringCloudAlibaba微服务消息调用:跨服务业务异步解耦
人工智能
joinwell5225 分钟前
只发 GET,为什么还是写进去了?从公共 Wiki 到 Agent 工具门禁的效果边界
人工智能·http
zhuhai_xigedian27 分钟前
源网荷储一体化柜的经济效益优化功能实现机制
大数据·运维·人工智能·重构·能源
jay神33 分钟前
深度学习的损失函数怎么选?
人工智能·深度学习·计算机视觉·毕业设计·损失函数
zhaoali070935 分钟前
深度学习系列实验-计算机视觉基础
人工智能·深度学习·计算机视觉