YOLO V5出现RuntimeError: result type Float can‘t be cast to the desired output type long int解决方法

在使用YOLO框架训练自己的数据集时候,开始跑train.py,出现如下报错:RuntimeError: result type Float can‘t be cast to the desired output type long int

Traceback (most recent call last):
  File "/home/sjh/project/yolov5-5.0/train.py", line 543, in <module>
    train(hyp, opt, device, tb_writer)
  File "/home/sjh/project/yolov5-5.0/train.py", line 304, in train
    loss, loss_items = compute_loss(pred, targets.to(device))  # loss scaled by batch_size
  File "/home/sjh/project/yolov5-5.0/utils/loss.py", line 117, in __call__
    tcls, tbox, indices, anchors = self.build_targets(p, targets)  # targets
  File "/home/sjh/project/yolov5-5.0/utils/loss.py", line 211, in build_targets
    indices.append((b, a, gj.clamp_(0, gain[3] - 1), gi.clamp_(0, gain[2] - 1)))  # image, anchor, grid indices
RuntimeError: result type Float can't be cast to the desired output type long int

由于是初次使用,并不确定是哪里的问题,只知道是跟着其他人的教程来的,经过查询,得到问题原因:

官网的yolov5-master可以正常运行,但是yolov5-5.0/yolov5-6.1等版本会出问题;

这是因为yolov5-master版本和yolov5-5.0/yolov5-6.1等版本下的【utils】中的【loss.py】文件不同,大概是yolov5-5.0/yolov5-6.1等版本在更新版本的时候出了问题

因此解决方法也明了了:修改loss.py文件

打开【utils】文件夹下的【loss.py】文件,一共需要修改两处代码,以yolov5-5.0为例:

1,大概是177行左右,可通过搜索找到下面这句代码

anchors = self.anchors[i]

将这一行其替换为

 anchors, shape = self.anchors[i], p[i].shape 

2,在程序的最后,找到下面这行代码

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

将其替换为

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

保存程序,重新跑train.py,便可以正常运行了

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

sagima_sdu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值