TNN_Demo icon indicating copy to clipboard operation
TNN_Demo copied to clipboard

E/WZT_TNN: TNN init failed 4096(有该项目YOLOv5模型详细转换过程描述)

Open duyuankai1992 opened this issue 4 years ago • 51 comments

使用您的权重文件没有任何问题,当使用自己的自己的权重文件(通过https://convertmodel.com转换,出现了一下错误。 KnockPic_20210107111531

duyuankai1992 avatar Jan 07 '21 03:01 duyuankai1992

使用您的权重文件没有任何问题,当使用自己的自己的权重文件(通过https://convertmodel.com转换,出现了一下错误。 KnockPic_20210107111531

同样的模型,转换成ncnn后可正常运行

duyuankai1992 avatar Jan 07 '21 03:01 duyuankai1992

20210423:最新版tnn好像已经支持5维可以直接导出,不用修改导出部分但需要修改后处理部分代码(未测试)。 以下为4维方式,按这种方式可以不修改后处理部分代码。 yolov5 支持v1/v2/v3 版本,v4/v5版本好像模型有改动,未测试。 首先tnn暂时不支持5维的计算,所以在模型输出部分有5维的数据需要修改: image

然后导出部分: image

导出 onnx 后使用 onnx-simplifier 优化一下。 再使用 https://convertmodel.com 直接 onnx -> tnn 生成模型就好了。

再用 netron 打开 .tnnproto 看下对应的输出名称,并修改 .h 文件对应的值。 image image

然后运行,搞定!

cmdbug avatar Jan 07 '21 04:01 cmdbug

首先tnn暂时不支持5维的计算,所以在模型输出部分有5维的数据需要修改: 图片

然后导出部分: 图片

导出onnx后使用onnx-简化器优化一下。 再使用https://convertmodel.com直接onnx - > TNN生成模型就好了。

再用netron:.tnnproto看下对应的输出名称,并修改.h文件对应的值。 图片 图片

然后运行,搞定!

谢谢大佬的解答 ,ok了。

duyuankai1992 avatar Jan 07 '21 05:01 duyuankai1992

大佬,加我一下QQ啊:446143919

duyuankai1992 avatar Jan 07 '21 05:01 duyuankai1992

大佬,加我一下QQ啊:446143919

做什么?

cmdbug avatar Jan 07 '21 05:01 cmdbug

大佬,加我一下QQ啊:446143919

做什么?

我想以后优化再请教一下大佬,还有跟着大佬在学点MNN 呢

duyuankai1992 avatar Jan 07 '21 06:01 duyuankai1992

刚开始学,不敢瞎带 QAQ

cmdbug avatar Jan 07 '21 06:01 cmdbug

刚开始学,不敢瞎带QAQ 没事的,我一个人回踩更多的坑

duyuankai1992 avatar Jan 07 '21 06:01 duyuankai1992

Why did it report this error after I modified it like this? "yolov5-master\utils\loss.py", line 129, in call pxy = ps[:, :2].sigmoid() * 2. - 0.5 IndexError: too many indices for tensor of dimension 1

gangping avatar Apr 01 '21 00:04 gangping

首先tnn暂时不支持5维的计算,所以在模型输出部分有5维的数据需要修改: image

然后导出部分: image

导出 onnx 后使用 onnx-simplifier 优化一下。 再使用 https://convertmodel.com 直接 onnx -> tnn 生成模型就好了。

再用 netron 打开 .tnnproto 看下对应的输出名称,并修改 .h 文件对应的值。 image image

然后运行,搞定!

我这样修改了之后,报这个错误是为什么呢? "yolov5-master\utils\loss.py", line 129, in call pxy = ps[:, :2].sigmoid() * 2. - 0.5 IndexError: too many indices for tensor of dimension 1

gangping avatar Apr 01 '21 00:04 gangping

model.model[-1].export = True 写对了嘛,导出 onnx 时不应该进入你报错的这一部分啊。即:if not srlf.training: 这个 if 是不进入的。

cmdbug avatar Apr 01 '21 00:04 cmdbug

写对了嘛,导出 onnx 时不应该进入你报错的这一部分啊

训练的时候报这个错

gangping avatar Apr 01 '21 01:04 gangping

不需要重新训练,,按原始的训练,,只有在导出的时候改成这样就可以了。

cmdbug avatar Apr 01 '21 01:04 cmdbug

不需要重新训练,,按原始的训练,,只有在导出的时候改成这样就可以了。

转换成tnn模型后,检测Box对不上了,是为什么呢?

gangping avatar Apr 01 '21 08:04 gangping

发个图片

cmdbug avatar Apr 01 '21 13:04 cmdbug

3

5

6

gangping avatar Apr 02 '21 01:04 gangping

看图片有部分是对的, 是不是 .h 文件里面的 layers 对应的输出没有改?就是 output, 413, 431 这3个没有改?

cmdbug avatar Apr 02 '21 01:04 cmdbug

改了

gangping avatar Apr 02 '21 01:04 gangping

怎么改的?步骤是什么?

cmdbug avatar Apr 02 '21 01:04 cmdbug

在netron看的outputs

gangping avatar Apr 02 '21 01:04 gangping

...

cmdbug avatar Apr 02 '21 01:04 cmdbug

找到问题了吗?

gangping avatar Apr 02 '21 01:04 gangping

你觉得你的回答有提供有用的信息嘛?我打的字都比你的多。。。

cmdbug avatar Apr 02 '21 01:04 cmdbug

先不用自己训练的模型,使用官方的模型,按上面的说明来学习下过程是不是对的。如果结果是对的再使用自己的模型,自己的模型错了请详细说明转换过程。如果官方模型都错了再认真看说明是不是哪一步错了。

cmdbug avatar Apr 02 '21 01:04 cmdbug

在netron看的输出name,然后修改的layers

gangping avatar Apr 02 '21 01:04 gangping

修改了yolo.py的5维数组,用官方的模型yolov5s.pt转成onnx,然后再用官方的tnn convert转成tnn模型,替换掉TNN_Demo的模型,修改了layers,就这样的步骤

gangping avatar Apr 02 '21 01:04 gangping

onnx-simplifier 呢?

cmdbug avatar Apr 02 '21 02:04 cmdbug

install了,用onnx-sim转换的

gangping avatar Apr 02 '21 02:04 gangping

试v3版本吧,v4的没试过。

cmdbug avatar Apr 02 '21 02:04 cmdbug

yolov5版本吗?

gangping avatar Apr 02 '21 02:04 gangping