You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

笔记本训练的YOLOv5模型部署树莓派4B失败求解决方案

解决YOLOv5模型从Windows部署到树莓派4B的WindowsPath实例化错误

问题场景

在Windows笔记本上训练YOLOv5自定义数据集后,将训练好的crosswalk_detection_best.pt模型复制到树莓派4B,执行以下检测命令时出现报错:

python3 detect.py --weights /home/hasha/project/yolov5/runs/train/crosswalk_detection/weights/crosswalk_detection_best.pt --source /home/hasha/project/1.jpg

报错信息

detect: weights=['/home/hasha/project/yolov5/runs/train/crosswalk_detection/weights/crosswalk_detection_best.pt'], source=/home/hasha/project/1.jpg, data=data/coco128.yaml, imgsz=[640, 640], conf_thres=0.25, iou_thres=0.45, max_det=1000, device=, view_img=False, save_txt=False, save_csv=False, save_conf=False, save_crop=False, nosave=False, classes=None, agnostic_nms=False, augment=False, visualize=False, update=False, project=runs/detect, name=exp, exist_ok=False, line_thickness=3, hide_labels=False, hide_conf=False, half=False, dnn=False, vid_stride=1
YOLOv5 🚀 v7.0-335-g40f490d9 Python-3.11.2 torch-2.3.1 CPU

Traceback (most recent call last):
  File "/home/hasha/project/yolov5/detect.py", line 313, in <module>
    main(opt)
  File "/home/hasha/project/yolov5/detect.py", line 308, in main
    run(**vars(opt))
  File "/home/hasha/myenv/lib/python3.11/site-packages/torch/utils/_contextlib.py", line 115, in decorate_context
    return func(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^
  File "/home/hasha/project/yolov5/detect.py", line 116, in run
    model = DetectMultiBackend(weights, device=device, dnn=dnn, data=data, fp16=half)
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/hasha/project/yolov5/models/common.py", line 467, in __init__
    model = attempt_load(weights if isinstance(weights, list) else w, device=device, inplace=True, fuse=fuse)
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/hasha/project/yolov5/models/experimental.py", line 98, in attempt_load
    ckpt = torch.load(attempt_download(w), map_location="cpu")  # load
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/hasha/myenv/lib/python3.11/site-packages/torch/serialization.py", line 1025, in load
    return _load(opened_zipfile,
           ^^^^^^^^^^^^^^^^^^^^^
  File "/home/hasha/myenv/lib/python3.11/site-packages/torch/serialization.py", line 1446, in _load
    result = unpickler.load()
             ^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/pathlib.py", line 874, in __new__
    raise NotImplementedError("cannot instantiate %r on your system"
NotImplementedError: 无法在您的系统上实例化'WindowsPath'

错误原因

模型在Windows系统训练时,训练日志和配置中保存了Windows格式的WindowsPath路径对象,当在Linux系统(树莓派)加载模型时,Python无法反序列化Windows专属的路径类型,导致报错。

解决方法

方法1:导出为ONNX格式跨平台部署

在Windows的YOLOv5环境中将模型导出为ONNX格式,该格式不受系统路径影响:

  1. 执行导出命令:
    python export.py --weights crosswalk_detection_best.pt --include onnx
    
  2. 将导出的crosswalk_detection_best.onnx复制到树莓派指定目录
  3. 在树莓派上用ONNX模型执行检测:
    python3 detect.py --weights crosswalk_detection_best.onnx --source /home/hasha/project/1.jpg
    

方法2:修改模型加载代码兼容路径类型

直接修改树莓派上YOLOv5的模型加载逻辑,将WindowsPath映射为Linux的PosixPath:

  1. 打开models/experimental.py文件
  2. 找到attempt_load函数里的ckpt = torch.load(attempt_download(w), map_location="cpu")代码块,替换为以下内容:
    import pickle
    from pathlib import PosixPath
    
    class PathUnpickler(pickle.Unpickler):
        def find_class(self, module, name):
            if module == 'pathlib' and name == 'WindowsPath':
                return PosixPath
            return super().find_class(module, name)
    
    with open(attempt_download(w), 'rb') as f:
        ckpt = PathUnpickler(f).load()
    
  3. 保存文件后重新执行原检测命令

方法3:在Linux/WSL环境重新训练模型

如果条件允许,直接在Linux系统或Windows的WSL子系统中训练模型,训练生成的模型会保存Linux兼容的PosixPath路径信息,复制到树莓派后可直接加载使用。


内容的提问来源于stack exchange,提问作者Hashan Senarathna

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 03:47:05