无法在Streamlit中加载YOLOv5模型,报PosixPath实例化失败错误
解决Streamlit中加载YOLOv5模型的PosixPath报错问题
以下是经过验证的有效解决方案,按优先级尝试:
提前全局替换Path类型(关键:导入顺序)
把这段代码放在所有导入语句的最开头,确保在加载torch或YOLOv5相关模块前完成替换:import pathlib # 根据系统自动适配Path类型 if pathlib.os.name == 'nt': # Windows系统 pathlib.PosixPath = pathlib.WindowsPath之前的替换可能因为执行时机太晚(比如已经导入了torch.hub相关模块)而失效,提前执行才能覆盖所有路径解析逻辑。
绕过torch.hub,直接从YOLOv5仓库加载模型
完全避开torch.hub的路径处理问题,直接用官方提供的加载方式:- 先克隆本地YOLOv5仓库并安装依赖:
git clone https://github.com/ultralytics/yolov5.git cd yolov5 pip install -r requirements.txt - 在Streamlit脚本中加载:
import sys import torch # 将YOLOv5目录加入系统路径 sys.path.insert(0, './yolov5') from models.common import DetectMultiBackend # 加载模型,device可根据GPU情况调整 model = DetectMultiBackend(weights='./best.pt', device=torch.device('cuda' if torch.cuda.is_available() else 'cpu'))
- 先克隆本地YOLOv5仓库并安装依赖:
使用绝对路径加载模型
避免相对路径在不同环境下的解析误差,把模型路径转为绝对路径:import os import torch # 获取模型绝对路径 model_abs_path = os.path.abspath('./best.pt') model = torch.hub.load('ultralytics/yolov5', 'custom', path=model_abs_path, force_reload=True)
内容的提问来源于stack exchange,提问作者Mahdi Hammi
相关产品推荐
相关产品推荐

