【已解决】训练yolov5-6.0过程中出现报错result type Float can not be cast to the desired output type long int

解决方法:找到yolov5-6.0/ultils/loss.py第217行

把indices.append((b, a, gj.clamp_(0, gain[3] - 1), gi.clamp_(0, gain[2] - 1)))  # image, anchor, grid indices

方法1:改成indices.append((b, a, gj.clamp_(0, int(gain[3] - 1)), gi.clamp_(0, int(gain[2] - 1)))),这是使用int() 函数,这种修改将 gain[3] - 1gain[2] - 1 转换为整数,并传递给 clamp_() 方法。

indices.append((b, a, gj.clamp_(0, int(gain[3] - 1)), gi.clamp_(0, int(gain[2] - 1))))

方法2:或者改成indices.append((b, a, gj.clamp_(0, (gain[3] - 1).long()), gi.clamp_(0, (gain[2] - 1).long()))),这是使用.long() 方法,将 gain[3] - 1gain[2] - 1 的计算放在 .long() 方法之后。这样可以确保在 clamp_() 方法中使用正确的整数类型。(gain[3] - 1).long():这种写法确保了计算 gain[3] - 1 的结果是一个张量,然后将其转换为长整型张量(long)。gj.clamp_(0, ...)gi.clamp_(0, ...):这样就可以确保 clamp_() 方法中的上限是一个正确的张量类型,从而避免潜在的运行时错误。

indices.append((b, a, gj.clamp_(0, (gain[3] - 1).long()), gi.clamp_(0, (gain[2] - 1).long())))

原因分析:indices.append((b, a, gj.clamp_(0, gain[3] - 1), gi.clamp_(0, gain[2] - 1))) 的主要目的是将特定的值添加到 indices 列表中,其中 gjgi 是张量(tensor),而 gain 是一个包含浮点数的张量或数组。

  • 类型一致性:您需要确保在添加索引时,所有值的类型一致,以避免运行时错误。longint 是两种常用的整型,但在 PyTorch 中,张量的类型必须与期望的类型匹配。
  • 性能考虑:在训练期间,尤其是在大规模数据处理时,类型转换可能会引入不必要的性能开销。因此,确保在适当的位置进行转换是很重要的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值