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

Windows系统无法实例化PosixPath?YOLOv5模型加载报错求助

问题描述

我编写了一段基于YOLOv5的目标检测Python代码,代码如下:

# 导入库
import torch
import cv2
import numpy as np

# 加载模型
model = torch.hub.load('ultralytics/yolov5', 'custom', path='best.pt', force_reload=True)

# 初始化视频捕获
cap = cv2.VideoCapture(1)

# 开始检测循环
while True:
     # 读取视频帧
     ret, frame = cap.read()

     # 执行检测
     detect = model(frame)

     # 显示检测结果(包含FPS)
     cv2.imshow('香蕉检测器', np.squeeze(detect.render()))

     # 监听键盘输入,ESC键退出
     t = cv2.waitKey(5)
     if t == 27:
         break

cap.release()
cv2.destroyAllWindows()

运行时出现如下错误:

回溯(最近的调用最后):
  文件 "C:\Users\HP/.cache\torch\hub\ultralytics_yolov5_master\hubconf.py", 第50行, 在 _create 函数中
    model = DetectMultiBackend(path, device=device, fuse=autoshape)  # 检测模型
  文件 "C:\Users\HP/.cache\torch\hub\ultralytics_yolov5_master\models\common.py", 第467行, 在 __init__ 函数中
    model = attempt_load(weights if isinstance(weights, list) else w, device=device, inplace=True, fuse=fuse)
  文件 "C:\Users\HP/.cache\torch\hub\ultralytics_yolov5_master\models\experimental.py", 第97行, 在 attempt_load 函数中
    ckpt = torch.load(attempt_download(w), map_location="cpu")  # 加载模型
  文件 "C:\Users\HP\AppData\Local\Programs\Python\Python39\lib\site-packages\torch\serialization.py", 第1026行, 在 load 函数中
    return _load(opened_zipfile,
  文件 "C:\Users\HP\AppData\Local\Programs\Python\Python39\lib\site-packages\torch\serialization.py", 第1438行, 在 _load 函数中
    result = unpickler.load()
  文件 "C:\Users\HP\AppData\Local\Programs\Python\Python39\lib\pathlib.py", 第1084行, 在 __new__ 函数中
    raise NotImplementedError("无法在你的系统上实例化%r"
NotImplementedError: 无法在你的系统上实例化'PosixPath'

在处理上述异常期间,发生了另一个异常:

回溯(最近的调用最后):
  文件 "C:\Users\HP/.cache\torch\hub\ultralytics_yolov5_master\hubconf.py", 第65行, 在 _create 函数中
    model = attempt_load(path, device=device, fuse=False)  # 任意模型
  文件 "C:\Users\HP/.cache\torch\hub\ultralytics_yolov5_master\models\experimental.py", 第97行, 在 attempt_load 函数中
    ckpt = torch.load(attempt_download(w), map_location="cpu")  # 加载模型
  文件 "C:\Users\HP\AppData\Local\Programs\Python\Python39\lib\site-packages\torch\serialization.py", 第1026行, 在 load 函数中
    return _load(opened_zipfile,
  文件 "C:\Users\HP\AppData\Local\Programs\Python\Python39\lib\site-packages\torch\serialization.py", 第1438行, 在 _load 函数中
    result = unpickler.load()
  文件 "C:\Users\HP\AppData\Local\Programs\Python\Python39\lib\pathlib.py", 第1084行, 在 __new__ 函数中
    raise NotImplementedError("无法在你的系统上实例化%r"
NotImplementedError: 无法在你的系统上实例化'PosixPath'

上述异常是以下异常的直接原因:

回溯(最近的调用最后):
  文件 "c:\Users\HP\OneDrive - Universidad Politecnica Salesiana\Escritorio\Prueba\Ia.py", 第7行, 在主模块中
    model = torch.hub.load('ultralytics/yolov5', 'custom', path='best.pt', force_reload=True)
  文件 "C:\Users\HP\AppData\Local\Programs\Python\Python39\lib\site-packages\torch\hub.py", 第566行, 在 load 函数中
    model = _load_local(repo_or_dir, model, *args, **kwargs)
  文件 "C:\Users\HP\AppData\Local\Programs\Python\Python39\lib\site-packages\torch\hub.py", 第595行, 在 _load_local 函数中
    model = entry(*args, **kwargs)
  文件 "C:\Users\HP/.cache\torch\hub\ultralytics_yolov5_master\hubconf.py", 第88行, 在 custom 函数中
    return _create(path, autoshape=autoshape, verbose=_verbose, device=device)
  文件 "C:\Users\HP/.cache\torch\hub\ultralytics_yolov5_master\hubconf.py", 第83行, 在 _create 函数中
    raise Exception(s) from e
Exception: 无法在你的系统上实例化'PosixPath'。缓存可能过期,请尝试`force_reload=True`或查看帮助文档。

请问该如何解决?

解决方案

这个错误的核心原因是你使用的best.pt模型是在Linux/macOS系统下训练保存的,模型文件中嵌入了类Unix系统特有的PosixPath路径对象,而Windows系统只支持WindowsPath,因此加载时出现兼容问题。以下是几种可行的解决方法:

  • 临时路径兼容补丁:在代码最开头添加以下代码,强制替换PosixPath为Windows兼容的路径类,这样就能直接加载模型:

    import pathlib
    # 临时替换PosixPath,解决跨系统加载问题
    temp_posix = pathlib.PosixPath
    pathlib.PosixPath = pathlib.WindowsPath
    

    把这段代码放在所有导入语句的最前面,再执行后续的库导入和模型加载操作。

  • 使用绝对路径加载模型:将best.pt的路径改为Windows格式的绝对路径,避免相对路径可能带来的解析问题,示例如下:

    model = torch.hub.load('ultralytics/yolov5', 'custom', 
                           path=r'C:\Users\HP\OneDrive - Universidad Politecnica Salesiana\Escritorio\Prueba\best.pt', 
                           force_reload=True)
    

    注意路径前的r表示原始字符串,避免转义字符影响路径解析。

  • 重新保存模型:如果你能访问训练该模型的环境,或者可以在Windows上重新训练,保存模型时使用字符串格式的路径(而非Path对象),这样生成的模型文件就能在Windows系统上正常加载。

  • 更新YOLOv5版本:较新的YOLOv5版本已经修复了跨系统路径兼容的问题,你可以尝试重新拉取最新的YOLOv5代码,再加载模型。

内容的提问来源于stack exchange,提问作者Luis Poveda

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 23:20:54