yolov5报错:‘gbk‘ codec can‘t decode byte 0x8b in position xxx: illegal multibyte sequence(已解决)

如题,使用yolov5训练模型时反复出现这个报错,尝试了两个方法,最终第二个方法成功

方法一:ctrl+F 搜索 “open”,在所有匹配项的括号内增加encoding='UTF-8' ,如下图

方法二:进入自己模型的yaml文件,把上面一段注释及中间的空行全部删除(注意一定要全部删除,删除那个🚀是不够的)

如这样

删除后变为这样

再次尝试训练模型即成功

参考链接:

记录yolov5出现UnicodeDecodeError中gbk解码问题的解决_yolov5 'gbk' codec can't decode byte 0xad in posit-优快云博客

Python报错 UnicodeDecodeError: ‘gbk‘ codec can‘t decode bytein position 2: illegal multibyte sequence_unicodedecodeerror: 'gbk' codec can't decode byte -优快云博客

### YOLOv5 ONNX推理报错解决方案 YOLOv5在进行ONNX推理时可能会遇到`onnxruntime.capi.onnxruntime_pybind11_state.InvalidArgument`错误,提示输入维度不匹配。具体表现为模型期望的输入尺寸与实际提供的输入尺寸不符[^1]。 #### 错误分析 该错误的核心在于模型定义中的输入张量形状与实际传入的数据形状存在差异。例如,在某些情况下,模型可能被配置为接受批量大小为16的输入数据,而推理过程中仅提供了一个样本作为输入(即批量大小为1)。这种不一致会引发上述错误。 #### 解决方法 以下是几种常见的解决策略: 1. **调整模型输入形状** 修改导出ONNX模型时指定的输入形状参数,使其更灵活地支持动态批量处理或单样本推理。可以通过设置`dynamic_axes`来实现这一点。例如: ```python import torch from models.experimental import attempt_load # 加载YOLOv5模型 model = attempt_load('yolov5s.pt', map_location=torch.device('cpu')) # 导出ONNX模型并启用动态轴 dummy_input = torch.zeros(1, 3, 640, 640) # 输入张量 (batch_size=1, channels=3, height=640, width=640) torch.onnx.export( model, dummy_input, "yolov5s_dynamic.onnx", opset_version=12, do_constant_folding=True, input_names=['images'], output_names=['output'], dynamic_axes={'images': {0: 'batch_size'}, # 动态批量大小 'output': {0: 'batch_size'}} ) ``` 2. **验证ONNX模型结构** 使用工具如`netron`可视化ONNX模型,确认其输入节点的确切名称和预期形状是否正确。如果发现模型输入层硬编码了特定批次大小,则需重新训练或转换模型以适应不同需求。 3. **修改推理脚本** 如果无法更改已有的ONNX文件,可以尝试调整推理代码中传递给模型的数据形式。比如将单一图片扩展成符合要求的多维数组后再送入网络计算。 ```python import numpy as np image = ... # 原始图像读取操作省略 resized_image = cv2.resize(image, (640, 640)) / 255.0 # 调整分辨率至640x640并归一化像素值范围到[0,1] # 构造满足批处理规格的四维Tensor batched_data = np.expand_dims(resized_image.transpose((2, 0, 1)), axis=0).astype(np.float32) session.run(["output"], {"images": batched_data}) ``` 通过以上措施之一或者组合应用它们通常能够有效缓解乃至彻底消除此类异常状况的发生概率。 ```python import onnxruntime as ort session = ort.InferenceSession("yolov5s_dynamic.onnx", providers=["CPUExecutionProvider"]) input_name = session.get_inputs()[0].name print(f"Input name: '{input_name}'") # 应打印出'images' ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值