yolov5【报错-已解决】RuntimeError: result type Float can‘t be cast to the desired output type __int64
解决yolov5进行模型训练时报错RuntimeError: result type Float can’t be cast to the desired output type __int64
·
问题场景:
在使用yolov5进行模型训练时报错RuntimeError: result type Float can’t be cast to the desired output type __int64
报错如下:
Traceback (most recent call last):
File "train.py", line 543, in <module>
train(hyp, opt, device, tb_writer)
File "train.py", line 304, in train
loss, loss_items = compute_loss(pred, targets.to(device)) # loss scaled by batch_size
File "C:\Users\BMC\Desktop\yolov5-5.0\utils\loss.py", line 117, in __call__
tcls, tbox, indices, anchors = self.build_targets(p, targets) # targets
File "C:\Users\BMC\Desktop\yolov5-5.0\utils\loss.py", line 212, 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 __int64
报错原因:
当前环境所安装的pytorch版本太新了,不支持float直接转换为long int 型数据类型,所以我们需要手动转换数据类型。老版本的pytorch貌似就没有这个问题。
解决方案:
打开yolov5项目目录中的utils文件夹下的loss.py文件,找到163行下的def build_targets(self, p, targets):,将gain = torch.ones(7, device=targets.device)改为gain = torch.ones(7, device=targets.device).long(),也就是在末尾添加.long(),保存即可。当然还有一种解决方式通过降低训练环境中pytorch的版本也可以,但具体哪个版本就需要自己尝试了。
gain = torch.ones(7, device=targets.device).long()
更多推荐
所有评论(0)