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

如何连续运行YOLOv5姿态检测模型与非姿态检测模型?

问题分析与解决方案

这个报错的核心是连续运行两个不同的YOLOv5模型时,后一个模型的输出维度参数(self.no)与实际张量尺寸不匹配。单独运行时模型会正确初始化自身的输出维度(普通检测为85,姿态检测因包含关键点维度会更高),但连续运行时,模型实例的参数或torch hub缓存未完全隔离,导致后一个模型错误复用了前一个模型的维度参数,进而在view操作时触发形状不匹配错误。

解决方案:

  • 彻底隔离模型实例,显式释放资源
    每次运行完一个模型后,删除模型变量并清空GPU缓存,避免参数残留:

    import torch
    
    # 运行普通检测模型
    det_model = torch.hub.load('ultralytics/yolov5', 'yolov5s')
    det_results = det_model(your_image)
    # 释放资源
    del det_model
    torch.cuda.empty_cache()
    
    # 运行姿态检测模型
    pose_model = torch.hub.load('ultralytics/yolov5', 'yolov5s-pose')
    pose_results = pose_model(your_image)
    del pose_model
    torch.cuda.empty_cache()
    
  • 强制重载模型定义
    使用force_reload=True参数加载模型,确保torch hub每次都重新加载对应模型的代码,避免缓存的旧模型定义干扰:

    det_model = torch.hub.load('ultralytics/yolov5', 'yolov5s', force_reload=True)
    pose_model = torch.hub.load('ultralytics/yolov5', 'yolov5s-pose', force_reload=True)
    
  • 避免复用同一变量名
    确保两个模型使用不同的变量名,防止变量引用导致的参数覆盖不彻底。

报错验证:

计算报错中的形状要求:1*3*57*72*120 = 1477440,但实际输入张量大小是155520,两者差距明显,说明模型使用了错误的self.no值(120),而实际张量对应的维度应该是更小的数值(比如普通检测的85),这就是连续运行时参数未正确重置的直接证据。

内容的提问来源于stack exchange,提问作者Uvais Karni

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 09:32:56