【yolov7报错UnicodeDecodeError: ‘gbk‘ codec can‘t decode bytein position 2: illegal multibyte sequenc】

最近在跑yolov7的代码,训练数据集过程中代码有报错
UnicodeDecodeError: ‘gbk‘ codec can‘t decode bytein position 2: illegal multibyte sequenc
这里直接给出代码修改部分。
这个错误是由于在读取yaml配置文件时,使用了错误的编码格式导致的。
问题是系统的默认编码格式是GBK,而读取的yaml配置文件使用了其他编码格式。
解决方法仍然是在读取yaml配置文件时,指定正确的编码格式为utf-8。
在train.py文件中找到读取yaml配置文件的部分,并将其修改如下:

# Configure
plots = not opt.evolve  # create plots
cuda = device.type != 'cpu'
init_seeds(2 + rank)
with open(opt.data, encoding='utf-8') as f:
    data_dict = yaml.load(f, Loader=yaml.SafeLoader)  # data dict
is_coco = opt.data.endswith('coco.yaml')

通过添加encoding='utf-8’参数,告诉Python在读取文件时使用utf-8编码,以解决UnicodeDecodeError的问题。
大概在59行:
在这里插入图片描述
修改完毕直接运行即可。
上述方法只针对yolov7运行报错使用

如果上述方法,仍然报错gbk错误,可能就需要在打开文件的地方全部修改:
可以在文件读取时指定正确的编码格式为UTF-8,这样可以避免编码问题。修改train.py文件中读取yaml配置文件的部分如下:

# 将原来的代码
with open(opt.data) as f:
    data_dict = yaml.load(f, Loader=yaml.SafeLoader)  # data dict

修改为

# 使用UTF-8编码读取配置文件
with open(opt.data, encoding='utf-8') as f:
    data_dict = yaml.load(f, Loader=yaml.SafeLoader)  # data dict

下面这个:

 # Save run settings
    with open(save_dir / 'hyp.yaml', 'w') as f:
        yaml.dump(hyp, f, sort_keys=False)
    with open(save_dir / 'opt.yaml', 'w') as f:
        yaml.dump(vars(opt), f, sort_keys=False)如何修改

修改为:

# Save run settings with UTF-8 encoding
with open(save_dir / 'hyp.yaml', 'w', encoding='utf-8') as f:
    yaml.dump(hyp, f, sort_keys=False)
with open(save_dir / 'opt.yaml', 'w', encoding='utf-8') as f:
    yaml.dump(vars(opt), f, sort_keys=False)

with open(opt.hyp, errors='ignore') as f:
    hyp = yaml.load(f, Loader=yaml.SafeLoader)  # load hyps dict
    if 'anchors' not in hyp:  # anchors commented in hyp.yaml
        hyp['anchors'] = 3

改为

with open(opt.hyp, errors='ignore') as f:
    hyp = yaml.safe_load(f)  # load hyps dict safely
    if 'anchors' not in hyp:  # anchors commented in hyp.yaml
        hyp['anchors'] = 3

重新运行,如果在运行依旧报错,很大可能是读取的文件yaml不是utf-8的编码格式,需要检查编码格式,较为繁琐,建议去官网重新下载yolov7,重新运行。

其他情况下可参考以下几篇文章:

https://blog.csdn.net/sinat_26811377/article/details/107629934?ops_request_misc=&request_id=&biz_id=102&utm_term=UnicodeDecodeError:%20%27gbk%27%20code&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduweb~default-2-107629934.nonecase&spm=1018.2226.3001.4187

这篇文章讲述的是python代码运行出错,可以参考这个文章,适用于代码少,找得到打开文件的代码使用。

《机器学习实战》朴素贝叶斯算法中遇到这个问题,可以参考以下两篇文章:

https://blog.csdn.net/wzk4869/article/details/125634768?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522169098051316800184141248%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=169098051316800184141248&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_ecpm_v1~rank_v31_ecpm-1-125634768-null-null.142^v92^insert_down1&utm_term=UnicodeDecodeError%3A%20gbk%20codec%20cant%20decode%20byte%200xae%20in%20position%20781%3A%20illegal%20multibyte%20sequence&spm=1018.2226.3001.4187
https://blog.csdn.net/qq_29592829/article/details/71598664?ops_request_misc=&request_id=&biz_id=102&utm_term=UnicodeDecodeError:%20%27gbk%27%20code&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduweb~default-1-71598664.nonecase&spm=1018.2226.3001.4187

《Python编程:从入门到实践》报错

https://blog.csdn.net/ProgramNovice/article/details/126712944?ops_request_misc=&request_id=&biz_id=102&utm_term=UnicodeDecodeError:%20%27gbk%27%20code&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduweb~default-0-126712944.nonecase&spm=1018.2226.3001.4187

造成这个错误的原因通常是文件的实际编码方式与Python尝试使用的编码方式不匹配。解决这个问题的方法通常是:

指定正确的编码方式:在打开文件时,可以明确指定文件的编码方式。比如,如果文件是UTF-8编码的,可以这样打开:

with open('file.txt', 'r', encoding='utf-8') as file:
    content = file.read()

这里utf-8是文件的编码方式,确保它与文件实际的编码方式相匹配。

使用更加通用的编码方式:如果你不确定文件的具体编码方式,可以使用Python内置的chardet库来自动检测文件的编码方式:

import chardet

with open('file.txt', 'rb') as file:
    detector = chardet.UniversaDetector()
    result = detector.detect(file.read())
    file_encoding = result['encoding']

with open('file.txt', 'r', encoding=file_encoding) as file:
    content = file.read()

这样会自动检测文件的编码方式,然后使用正确的编码方式打开文件。

转换文件编码:如果你确定文件编码不符合预期,可以尝试将文件的编码方式转换为你需要的编码方式。例如,将文件从GBK编码转换为UTF-8编码:

with open('file.txt', 'r', encoding='gbk') as file:
    content = file.read()

with open('file.txt', 'w', encoding='utf-8') as file:
    file.write(content)

在Python中,字符编码是一种将字符映射为二进制数据的规则。不同的字符编码使用不同的方式将字符转换为字节序列。在这个问题中,我们的文件使用utf-8编码,这种编码方式将一个汉字编码为3个字节。然而,在尝试用gbk编解码器(在Windows平台上默认的字符编码)解码时,出现了问题。因为gbk将一个汉字编码为2个字节,所以当解码器尝试处理3个字节的utf-8编码时,就会出现多余的、无法解码的字节。
https://blog.csdn.net/weixin_47869094/article/details/132086726?csdn_share_tail=%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%2C%22rId%22%3A%22132086726%22%2C%22source%22%3A%22weixin_47869094%22%7D

  • 1
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值