当前位置:网站首页>AttributeError: Can‘t get attribute ‘SPPF‘ on <module ‘models.common‘ from ‘/home/yolov5/models/comm

AttributeError: Can‘t get attribute ‘SPPF‘ on <module ‘models.common‘ from ‘/home/yolov5/models/comm

2022-07-06 06:35:00 振华OPPO

我在ubuntu下已经成功运行了yolov5的多个版本,也出了环境部署教程。然后因为转换模型的需求,我重新非官网仓库下载了yolov5代码,但是该仓库作者并没有标明是在哪一个版本基础上进行魔改的。然后我就正常地使用6.1版本的模型,当然环境依赖不需要安装,yolov5的环境都是一样,一次安装,永久运行。

报错信息

运行detect.py文件,然后就出现下面报错:

Namespace(agnostic_nms=False, augment=False, classes=None, conf_thres=0.25, device='', 
exist_ok=False, img_size=416, iou_thres=0.45, name='exp', project='runs/detect', 
rknn_mode=False, save_conf=False, save_txt=False, source='rtsp://admin:@192.168.144.64/h264/ch1
/main/av_stream', update=False, view_img=False, weights='./models/yolov5s.pt')
YOLOv5   torch 1.9.0 CPU

Traceback (most recent call last):
  File "detect.py", line 258, in <module>
    detect()
  File "detect.py", line 34, in detect
    model = attempt_load(weights, map_location=device)  # load FP32 model
  File "/home/firefly/yolov5-rknn/models/experimental.py", line 118, in attempt_load
    ckpt = torch.load(w, map_location=map_location)  # load
  File "/home/firefly/anaconda3/envs/yolo/lib/python3.8/site-packages/torch/serialization.py", line 607, in load
    return _load(opened_zipfile, map_location, pickle_module, **pickle_load_args)
  File "/home/firefly/anaconda3/envs/yolo/lib/python3.8/site-packages/torch/serialization.py", line 882, in _load
    result = unpickler.load()
  File "/home/firefly/anaconda3/envs/yolo/lib/python3.8/site-packages/torch/serialization.py", line 875, in find_class
    return super().find_class(mod_name, name)
AttributeError: Can't get attribute 'SPPF' on <module 'models.common' from '/home/firefly/rknn/models/common.py'>
报错分析

定位错误,发现是在models.common文件中,没有这个SPPF方法。网上的解决方法,都是从6.1版本中将SPPF方法复制过来,然后运行继续报错:

  File "/home/firefly/yolov5-rknn/models/yolo.py", line 58, in forward
    y[..., 2:4] = (y[..., 2:4] * 2) ** 2 * self.anchor_grid[i]  # wh
RuntimeError: The size of tensor a (52) must match the size of tensor b (56) at non-singleton dimension 3

后面的报错就没完没了的解决了,而且根本不适用,那些评论区底下有好多急着求解决方法的同学。

那么我就开始自己摸索了,首先考虑是不是模型问题,model中是加载了weights的,是不是weights的版本和yolov5版本不匹配呢。然后我就请舍友帮我从github上下载了yolov5 3.0的权重文件,替换,果然成功解决问题。

报错解决

yolov5仓库下载你的代码版本对应的yolov5s.pt文件,否则会因为权重文件版本和源代码版本不匹配导致错误。比如我下载后,放到了models下,detect.py最后的weights路径也修改一下:

parser.add_argument('--weights', nargs='+', type=str, default='./models/yolov5s.pt', help='model.pt path(s)')

python detect.py重新运行:

在这里插入图片描述

原网站

版权声明
本文为[振华OPPO]所创,转载请带上原文链接,感谢
https://blog.csdn.net/qq_42257666/article/details/125605265