首先定位到报错的位置
File "/home/zhangh/project1/pytorch-YOLOv4-master/PyTorch_YOLOv4-master/PyTorch_YOLOv4-master/utils/loss.py", line 148
通过
print("------------------------------------------------------------------------")
print(f"at device: {at.device}")
print(f"j device: {j.device}")print(f"t device: {t.device}")
输出得知
at device居然在CPU上,然后用
at = torch.arange(na).view(na, 1).repeat(1, nt).to(torch.device(device))
把 at转移到GPU上,然后再运行
居然再次报错,不过好在不是同一个地方报错
分析可知此处报错是因为数据类型报错,然后查博客得知:原因:新版本的torch无法自动执行转换操作,而旧版本可以。本文中报错版本为torch 1.13.1, torchaudio 0.13.1, torchvision 0.14.1
。(博客链接如下)
此处博客有个问题,转换数据类型应该是
gain[2].to(torch.long)
完整修正如下:
indices.append((b, a, gj.clamp_(0, gain[3].to(torch.long) - 1), gi.clamp_(0, gain[2].to(torch.long) - 1))) # image, anchor, grid indices
自此就大功告成
完美开始训练
奈斯~~~