改过结构的yolov5转onnx,转换成功,但是用detect.py --weights best.onnx验证的时候出现下面报错:
IndexError: The shape of the mask [3, 40, 2] at index 2 does not match the shape of the indexed tensor [3, 40, 6] at index 2
是输出张量不匹配,请问要怎么修改呢?看哪一个文件修改?
码龄 粉丝数 原力等级 --
- 被采纳
- 被点赞
- 采纳率
yolov5转onnx验证出错
收起
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
微信扫一扫
点击复制链接分享
- 邀请回答
- 编辑 收藏 删除
- 收藏 举报
当前问题酬金
¥ 15 (您已提供 ¥ 20, 还可追加 ¥ 485)
支付方式
扫码支付
6条回答 默认 最新
- 关注
码龄 粉丝数 原力等级 --
- 被采纳
- 被点赞
- 采纳率
这一次有糖 2023-05-27 21:08关注获得2.40元问题酬金 输入输出张量图像检查过了吗,可以去看看输出节点的定义--在模型的ONNX文件里
本回答被题主选为最佳回答 , 对您是否有帮助呢? 本回答被专家选为最佳回答 , 对您是否有帮助呢? 本回答被题主和专家选为最佳回答 , 对您是否有帮助呢?解决 1无用举报 编辑记录微信扫一扫
点击复制链接分享
评论按下Enter换行,Ctrl+Enter发表内容
- 关注
码龄 粉丝数 原力等级 --
- 被采纳
- 被点赞
- 采纳率
瞬间动力 2023-05-27 22:34关注获得1.50元问题酬金 这个问题是由于模型输出的张量的形状(shape)与推理过程中的处理方式不匹配导致的。推理过程中的处理方式要求输出张量中的值必须为385或36,而您的模型输出张量的形状为[3, 40, 6]或[3, 40, 2],其中2或6是对两个坐标的预测,而在模型输出的张量中,每个预测都应该包含5+num_classes个值(5个常数+类别数目个置信度分数)。
为了解决这个问题,建议您按照以下步骤进行修改:
首先,您需要先检查生成ONNX模型的代码,看看生成模型的时候是否正确地给每个输出层定义了名称,并验证每个输出层的维度信息是否正确。
然后,使用ONNX模型检查器(如Netron)来检查您的模型的输出形状是否正确。如果不正确,需要进一步检查生成ONNX模型的代码,尤其需要重点关注输出张量的形状信息是否正确。如果模型输出的张量形状与期望值不一致,需要相应地进行修改。
最后,您需要检查使用ONNX模型执行推理时的代码,确保您为每个输出层指定了正确的名称,并正确地处理每个输出张量。您需要检查输出张量形状信息是否与您在ONNX模型检查器中预期的一致,如果不一致,则需要相应地调整代码。
综上所述,在优化和修改模型输出张量的形状之前,最好先检查生成ONNX模型的代码,确保每个输出层都有正确的名称和形状。因为模型输出的形状可能会因模型结构、输入形状等多个因素而发生变化。只有在对生成ONNX模型的代码进行仔细检查和确认后,才能及时解决模型输出张量与推理过程中的处理方式不匹配的问题。
本回答被题主选为最佳回答 , 对您是否有帮助呢? 本回答被专家选为最佳回答 , 对您是否有帮助呢? 本回答被题主和专家选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏举报微信扫一扫
点击复制链接分享
评论按下Enter换行,Ctrl+Enter发表内容 - 关注
码龄 粉丝数 原力等级 --
- 被采纳
- 被点赞
- 采纳率
我就只会python 2023-05-27 22:37关注获得0.45元问题酬金 根据您提供的错误信息,似乎是输出张量的维度不匹配导致的问题。要解决这个问题,您需要修改detect.py文件中的相关代码,以确保输出张量的形状与模型的期望形状相匹配。
具体来说,您可以尝试按照以下步骤进行修改:
打开detect.py文件,找到与输出张量相关的部分。通常,在使用ONNX模型进行推理时,会涉及到对输出张量的处理和解析。
确定输出张量的名称或索引。根据报错信息中的索引2,您需要查找代码中与该索引相关的部分。
检查输出张量的形状。通过输出张量的形状信息,您可以确定预期的形状和实际形状是否匹配。
根据模型的期望形状修改输出张量的处理方式。您可能需要调整相关代码,以确保输出张量的形状与模型的期望形状相匹配。
请注意,具体的修改方式取决于您使用的代码库和detect.py文件的实现细节。如果您能提供更多关于detect.py文件的代码片段或上下文信息本回答被题主选为最佳回答 , 对您是否有帮助呢? 本回答被专家选为最佳回答 , 对您是否有帮助呢? 本回答被题主和专家选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏举报 编辑记录微信扫一扫
点击复制链接分享
评论按下Enter换行,Ctrl+Enter发表内容 - 关注
码龄 粉丝数 原力等级 --
- 被采纳
- 被点赞
- 采纳率
关注
获得1.50元问题酬金 根据你提供的错误信息,可以看出这是在使用 ONNX 模型进行推理时出现的错误。具体来说,错误信息表明在第2个索引位置上,尝试将一个形状为 [3, 40, 2] 的掩码应用于一个形状为 [3, 40, 6] 的张量上,导致形状不匹配。
要解决这个问题,你需要找到产生错误的代码,并确认哪个文件需要进行修改。一般来说,可能需要修改以下几个文件:
detect.py:这是用于运行检测模型的脚本文件,你可以检查该文件中与 ONNX 模型相关的代码,例如载入模型、进行推理等代码,以确保代码正确。
yolov5/models/yolo.py:这是 YOLOv5 的模型定义文件,你可以检查该文件中与模型结构相关的代码,例如层定义、张量形状等,以确保模型正确。
utils/activations.py:这是定义激活函数的文件,你可以检查该文件中与激活函数相关的代码,例如 Sigmoid、ReLU 等,以确保激活函数的输出形状与模型结构匹配。
在检查代码时,你需要仔细阅读错误信息,尤其是错误信息中提到的索引位置和形状大小,以确定哪个张量形状不匹配。然后,你可以根据错误信息来修改代码,以确保张量形状匹配。具体的修改方式可能有很多种,例如更改层定义、调整张量形状、更改激活函数等,具体取决于你的模型结构和代码实现。
总之,要解决这个问题,你需要仔细检查代码和错误信息,并进行必要的修改。如果你不确定如何修改代码,可以参考 YOLOv5 的官方文档或在线社区,或者寻求更专业的帮助。
本回答被题主选为最佳回答 , 对您是否有帮助呢? 本回答被专家选为最佳回答 , 对您是否有帮助呢? 本回答被题主和专家选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏举报微信扫一扫
点击复制链接分享
评论按下Enter换行,Ctrl+Enter发表内容 - 关注
码龄 粉丝数 原力等级 --
- 被采纳
- 被点赞
- 采纳率
还有头发的程序员- 2023-05-29 19:57关注获得0.45元问题酬金 可以试试
class Detect(nn.Module): stride = None # strides computed during build # export = False # onnx export def __init__(self, nc=80, anchors=(), ch=()): # detection layer super(Detect, self).__init__() self.nc = nc # number of classes self.no = nc + 5 # number of outputs per anchor self.nl = len(anchors) # number of detection layers self.na = len(anchors[0]) // 2 # number of anchors self.grid = [torch.zeros(1)] * self.nl # init grid a = torch.tensor(anchors).float().view(self.nl, -1, 2) self.register_buffer('anchors', a) # shape(nl,na,2) self.register_buffer('anchor_grid', a.clone().view(self.nl, 1, -1, 1, 1, 2)) # shape(nl,1,na,1,1,2) self.m = nn.ModuleList(nn.Conv2d(x, self.no * self.na, 1) for x in ch) # output conv def forward(self, x): # x = x.copy() # for profiling z = [] # inference output # self.training |= self.export for i in range(self.nl): x[i] = self.m[i](x[i]) # conv #修改1 bs, _, ny, nx = map(int, x[i].shape) # x(bs,255,20,20) to x(bs,3,20,20,85) #修改2 x[i] = x[i].view(-1, self.na, self.no, ny, nx).permute(0, 1, 3, 4, 2).contiguous() if not self.training: # inference self.grid[i] = self._make_grid(nx, ny).to(x[i].device) y = x[i].sigmoid() #修改3 xy = (y[..., 0:2] * 2. - 0.5 + self.grid[i]) * self.stride[i] # xy wh = (y[..., 2:4] * 2) ** 2 * self.anchor_grid[i].view(1, self.na, 1, 1, 2) # wh y = torch.cat((xy, wh, y[..., 4:]), -1) #修改4 z.append(y.view(-1, int(y.size(1) * y.size(2) * y.size(3)), self.no)) return x if self.training else torch.cat(z, 1)
本回答被题主选为最佳回答 , 对您是否有帮助呢? 本回答被专家选为最佳回答 , 对您是否有帮助呢? 本回答被题主和专家选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏举报微信扫一扫
点击复制链接分享
评论按下Enter换行,Ctrl+Enter发表内容 - 关注
码龄 粉丝数 原力等级 --
- 被采纳
- 被点赞
- 采纳率
会跑的小鹿 2023-06-02 12:42关注获得0.90元问题酬金 这个错误提示表明输出的张量维度不匹配。要修复这个问题,需要在转换模型时修改输出张量的维度,以便与正在使用的代码相匹配,可以检查代码中要求输出张量的维度和形状
本回答被题主选为最佳回答 , 对您是否有帮助呢? 本回答被专家选为最佳回答 , 对您是否有帮助呢? 本回答被题主和专家选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏举报微信扫一扫
点击复制链接分享
评论按下Enter换行,Ctrl+Enter发表内容
报告相同问题?
- 2021-02-01 16:44回答 3 已采纳 需要更换索引式的切片操作,解决办法可以参考我的文章 https://blog.csdn.net/nihate/article/details/112731327#comments_14884604
- 2022-03-02 08:16回答 2 已采纳 img里面没数据,是空的。
- 2022-06-22 10:51回答 3 已采纳 不是,你这个是class_loss一塌糊涂导致你的pr和map曲线也不行,但是你的obj和box是正常的,也就是说网络有找到目标,只不过目标在分类的时候分错了。首先考虑的应该是你的数据集情况。1.你的
- 2021-01-17 13:23nihate的博客 最近在微信公众号里看到多篇讲解yolov5在openvino部署做目标检测文章,但是没看到过用opencv的dnn模块做yolov5目标检测的。于是,我就想着编写一套用opencv的dnn模块做yolov5目标检测的程序。在编写这套程序时,遇到...
- 2022-11-09 14:05回答 2 已采纳 你可以看下这个问题的回答https://ask.csdn.net/questions/7762455你也可以参考下这篇文章:训练yolov5的报错问题
- 2022-03-03 20:30回答 2 已采纳 我没试过openvino,但是这个不是可以直接读取onnx的吗?或者你可以直接从export.py导出openvino的文件 你这里的报错应该是说你的blob.shape返回值长度不是4个,但是你期望
- 2022-05-06 18:19回答 1 已采纳 这个自己转啊,export.py里面都写好了转换程序的,你安装好在include参数里面加上openvino运行就是了,别人转的版本不一致兼容性会出问题
- 2023-03-03 08:59自学小学生的博客 手把手教你用YOLOv5算法训练数据和检测目标(不会你捶我)
- 2022-05-09 19:49回答 1 已采纳 训练集相当于课后的作业,用于日常的知识巩固验证集相当于月考,用来纠正和强化学到的知识测试集相当于期末考试,用来最终评估学习效果 测试集并不会影响模型最终的性能。
- 2022-10-13 20:50回答 1 已采纳 单个类别的时候,train里面要将single-cls设置为true,或者参数里面加上--single-cls
- 2022-04-02 19:40回答 6 已采纳 这可能是PyTorch在其他一些问题中提到的Windows/conda/CUDA11错误,在这种情况下,降级到CUDA 10可以解决这个问题。 或者,您的数据集标签可能存在一些问题。
- 2023-01-30 11:58whaosoft143的博客 在明白了这些之后,在转换生成onnx文件,你需要执行两个步骤,第一步把原始训练模型.pt文件里的参数保存到新的.pth文件里,第二步编写yolov5.py文件,把yolov5的往来结构定义在.py文件里,此时需要注意网络结构里不...
- 2022-08-12 13:39回答 1 已采纳 将学习率改为0.00001,步子太大,扯到蛋了,改小点
- 2022-01-07 00:10计算机视觉研究院的博客 关注并星标从此不迷路计算机视觉研究院公众号ID|ComputerVisionGzq学习群|扫码在主页获取加入方式计算机视觉研究院专栏20在深度学习模型部署时,从pytorch转换onnx的...
- 2021-03-09 12:14啥都会一点的老程,自在地镜强者的博客 一点就分享系列(实践篇3—上篇)—“全网首发” 正确手法修改YOLOV5 魔刀小试+ Trick心得分享 现在部署大热,而我觉得回归原理和源码更加重要!在检测领域YOLOV5肯定是大家的炼丹必备模型,收敛快,精度高都是其...
- 没有解决我的问题, 去提问
悬赏问题
- ¥15 在工控机(Ubuntu系统)上外接USB蓝牙硬件进行蓝牙通信
- ¥15 关于PROCEDURE和FUNCTION的问题
- ¥100 webapi的部署(标签-服务器)
- ¥20 怎么加快手机软件内部计时的时间(关键词-日期时间)
- ¥15 C语言除0问题的检测方法
- ¥15 为什么四分管的内径有的是16mm有的15mm,四分不应该是12.7mm吗
- ¥15 macos13下 ios交叉编译的问题
- ¥15 bgz压缩文件怎么打开
- ¥15 封装dll(引入了pcl的点云设计库)
- ¥30 关于#开发语言#的问题:我需要在抄板的基础上再抄板抄程序,根据RDA8851CM基础上开发