使用Torch加载训练好的YoloV5模型时遇ImportError错误求助
解决Yolov5模型加载时
is_jupyter导入错误的方案 这个错误的核心原因是本地训练使用的Yolov5版本与torch.hub自动拉取的Yolov5版本不兼容:新版本Yolov5的utils.general模块新增了is_jupyter函数,但你训练模型时用的旧版本没有这个函数,导致加载时出现导入失败。
以下是三种可行的解决方法:
方法1:指定torch.hub加载与训练一致的Yolov5版本
找到你训练模型时使用的Yolov5版本(比如v6.2),在torch.hub.load中指定对应的commit哈希或tag,确保版本匹配:
import torch yolo = torch.hub.load( 'ultralytics/yolov5', 'custom', path='/content/yolov5/runs/train/yolov5s_results/weights/best.pt', force_reload=True, trust_repo=True, repo_commit='31212f0' # 替换为你训练时Yolov5版本的commit哈希 )
你可以在本地yolov5目录执行git log查看训练时的commit记录。
方法2:直接使用本地Yolov5代码加载模型
跳过torch.hub,直接调用本地训练用的Yolov5代码加载模型,完全避免版本差异:
import sys sys.path.insert(0, '/content/yolov5') # 添加本地yolov5路径到环境变量 import torch # 针对Yolov5 v6.x及更早版本 from models.experimental import attempt_load model = attempt_load('/content/yolov5/runs/train/yolov5s_results/weights/best.pt', map_location='cuda' if torch.cuda.is_available() else 'cpu') # 针对Yolov5 v7+版本 # from models.common import DetectMultiBackend # model = DetectMultiBackend(weights='/content/yolov5/runs/train/yolov5s_results/weights/best.pt', # device='cuda' if torch.cuda.is_available() else 'cpu')
方法3:更新本地Yolov5到最新版本并重新训练
如果允许重新训练,将本地Yolov5更新到最新版本,再重新训练模型,之后即可用原代码正常加载:
cd /content/yolov5 git pull
重新训练完成后,原有的torch.hub.load代码就能正常运行。
内容的提问来源于stack exchange,提问作者Ahmed Adel
相关产品推荐
相关产品推荐

