报错原因
相信遇到这个问题的小伙伴已经在网上进行了各种查找,简单来说,这个bug出现的原因就是ultralytics公司在代码里面加入了一段可以将我们的训练数据实时上传到云端并方便我们可视化的一个工具,但是由于我们没有科学上网,或者你科学上网了,但是没有登录wandb,就会出现这个报错。
下面我将给出我这边总结的几种解决方式,是我亲测可用的,如果一种不行,大家可以尝试这其他的解决方法,总之,多试,总会解决问题的。
方案1
点开pycharm自带的终端,确保我们在代码所处的环境下,并且路径是我们项目的所在路径。然后在终端中输入以下指令:
wandb login --relogin
如图所示:
然后按下回车,会看到以下界面:
点击出现那个链接,会进入这个网站:
这里由于我已经注册并登录过了,网站记录下了我的账户信息,因此和很多小伙伴的也许不一样,但是问题不大,只要注册一下账号就可以了。注册完之后,登录进去,就会给我们一个设备码:
复制这一串设备码,刚才的终端那边可以不用管了,现在我们回到代码中。这里以yolov8的训练代码为例子,我们打开项目下的train.py文件,找到主函数那边,添加以下这些代码:
import os
os.environ["WANDB_API_KEY"] = "xxx"
os.environ["WANDB_MODE"] = "offline"
其中这里的xxx,填入你刚才复制的那串设备码:
再次点击运行之后,可以正常训练。(但是这个方法我只在yolov8上成功了,yolov5使用该方法可能还是无法正常训练,这里就要看我们下面的这个方法了!)
方案2
找到yolov5路径下的 “utils/loggers/init.py”
try:
import wandb
assert hasattr(wandb, '__version__') # verify package import not local dir
if pkg.parse_version(wandb.__version__) >= pkg.parse_version('0.12.2') and RANK in [0, -1]:
try:
wandb_login_success = wandb.login(timeout=30)
except wandb.errors.UsageError: # known non-TTY terminal issue
wandb_login_success = False
if not wandb_login_success:
wandb = None
except (ImportError, AssertionError):
wandb = None
wandb = None
加上最下面的wandb = None:
然后,找到"utils/loggers/wandb/wandb_utils.py":
try:
import wandb
assert hasattr(wandb, '__version__') # verify package import not local dir
except (ImportError, AssertionError):
wandb = None
wandb = None
加上最下面的wandb = None:
再运行train.py,此时可以正常训练!
方案3
如果方案一和方案二都试了还有这个报错,我的建议是两个一块使用,问题解决,哈哈