训练yolov7时遇到的几个问题及解决办法记录在此,再遇到问题随时补充

yolov7的github地址:

GitHub – WongKinYiu/yolov7 at v0.1

1.运行train.py后,显示读取到train和val图片后,一直卡住,既不报错也没任何反应

我是在自己的笔记本上训练,没有用服务器,GPU是RTX3060,win系统。解决办法是把–works参数默认值改成0(原本是8)。据说win系统不改这个参数会出现错误,至少我没有报错,但可能是电脑本身算力不够导致的。

2.from utils.google_utils import XX显示找不到google_utils

还有几个同类问题,都是from utils.XX 标红。错误原因在于项目打开不对。我之前用过yolov5,yolov5是在“yolov5-7.0”这个文件夹外单独建一个datasets文件夹,因此打开项目时会习惯于打开yolov5-7.0的上一级目录。但yolov7不是这样,直接将数据放在yolov7-1.0文件夹内就可以,打开项目时也直接打开yolov7-1.0文件夹

3.RuntimeError:result type Float can't be cast to the desired output type __int64

RuntimeError: result type Float can't be cast to the desired output type long int

这个问题据说是在因为torch的版本问题,github上yolov7#35号问题有解答。我目前是python3.9+CUDA11.8+torch1.13,好像torch1.12就没有这个问题了,可以选择重装换版本。或者进入loss.py文件,CTRL+F,搜索gain,找到

gain = torch.ones(7, device=targets.device)

在后面添加.long,改成

gain = torch.ones(7, device=targets.device).long()

注意loss.py里有不止一句这个代码,都要改掉

4.RuntimeError:indices should be either on cpu or on the same device as the indexed tensor (cpu)

原因应该是torch调用gpu的问题,从解决办法上看,loss.py好像并没有做torch调用gpu的工作,解决办法就是把这个工作补上

这里参考YOLO7报错:indices should be either on cpu or on the same device as the indexed tensor (cpu)_猿代码_xiao的博客-CSDN博客

打开loss.py文件,在638行build_targets函数内的第一行添加

device = targets.device

 将685行的代码

from_which_layer.append((torch.ones(size=(len(b),)) * i)

添加gpu的用法

from_which_layer.append((torch.ones(size=(len(b),)) * i).to(torch.device(device)))

再在757行添加gpu的用法

fg_mask_inboxes = fg_mask_inboxes.to(torch.device(device))

物联沃分享整理
物联沃-IOTWORD物联网 » YOLOV7训练问题的记录

发表评论