AttributeError: Can‘t get attribute ‘SPPF‘ on <module ‘models.common‘ from ‘/home/yolov5/models/comm
Posted 振华OPPO
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了AttributeError: Can‘t get attribute ‘SPPF‘ on <module ‘models.common‘ from ‘/home/yolov5/models/comm相关的知识,希望对你有一定的参考价值。
我在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
重新运行:
以上是关于AttributeError: Can‘t get attribute ‘SPPF‘ on <module ‘models.common‘ from ‘/home/yolov5/models/comm的主要内容,如果未能解决你的问题,请参考以下文章
Unpickling 保存的 pytorch 模型会引发 AttributeError: Can't get attribute 'Net' on <module '__main__' 尽管内联
AttributeError: Can‘t pickle local object ‘Stage.__init__.<locals>.<lambda>‘
AttributeError: Can‘t pickle local object ‘Stage.__init__.<locals>.<lambda>‘
metaxcan出现“AttributeError: Can only use .str accessor with string values!”报错的解决方案
踩坑——Doris,Can‘t get Kerberos realm, cause by: Can‘t get Kerberos realm
踩坑——Doris,Can‘t get Kerberos realm, cause by: Can‘t get Kerberos realm