关于torch.jit.trace在yolov8中出现的问题

关于torch.jit.trace在yolov8中出现的问题

疑问:

1)为什么yolov8不能直接torch.jit.trace,需要经过图像检测后才能,且检测后self.net发生变化;而2中的第一版yolov5可以直接torch.jit.trace

2)3中的第二版yolov5初始不能直接torch.jit.trace,用了两种方式后,都能了,但两种方式却不是相同的,那他们哪一点共同点,导致都能转模型了呢

1.yolov8

self.net 

在这里插入图片描述

此时,直接torch.jit.trace会报错

torch.jit.trace(self.net, torch.rand((1, 3, 640, 640)), strict=False)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-z6YmQW7G-1688017560648)(D:\otherdocuments\typora\images\image-20230629132150376.png)]

但增加一步检测图片后,可以实现

self.net(torch.rand((1, 3, 640, 640)))

在这里插入图片描述

torch.jit.trace(self.net, torch.rand((1, 3, 640, 640)), strict=False)

在这里插入图片描述

此时的self.net发生变化,如shape从none变为torch.size([1,128,80,80])

在这里插入图片描述

2.对比yolov5

self.net 

在这里插入图片描述

此时,直接torch.jit.trace不会报错

torch.jit.trace(self.net, torch.rand((1, 3, 640, 640)), strict=False)

在这里插入图片描述

先增加一步检测图片,在看self.net,无变化

在这里插入图片描述
在这里插入图片描述

3.对比另一版yolov5的export

直接torch.jit.trace(model, img)会报错

torch.jit.trace(model, img)

在这里插入图片描述

此时的model

在这里插入图片描述

1)运行一步

model.model[-1].export = True  # set Detect() layer export=True

之后就可以torch.jit.trace

在这里插入图片描述

此时的model.model[-1]中的export有False变为True

在这里插入图片描述

2)或者增加一步检测

model(img)

在这里插入图片描述

接着torch.jit.trace成功

在这里插入图片描述

但此时model.model[-1]中的export还是False

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值