1.环境:训练自己的YOLOv5-5.0模型。
2.报错原因:预训练权重的版本与源码框架不匹配,在下面的网站中找到对应的YOLOv5-5.0的版本:
Releases · ultralytics/yolov5 ()
将5.0下的拷贝至weights文件夹下,仍然报上述错误,于是将拷贝至对应文件夹下,bug消失。
注:有一种下载对应预训练权重的方式:修改util/文件夹下google_utils.py文件的对应行为response=(f'/repos/{repo}/releases/tags/v5.0').json()
3.根据github官网上的描述,
-
YOLOv5-P5 models (same architecture as v4.0 release): 3 output layers P3, P4, P5 at strides 8, 16, 32, trained at
--img 64
-
YOLOv5-P6 models: 4 output layers P3, P4, P5, P6 at strides 8, 16, 32, 64 trained at
--img 1280
可知,YOLOv5-P5的网络结构与YOLOv5-4.0的网络结构相似,都是三个输出层,而YOLOv5-P6多了一个输出层,增加了对更大目标的检测效果。
4.另:看到还有一种解决方式就是更改项目源码,即在model/添加SPPF类,个人觉得这种方式像是间接地变成了训练YOLOv5-6.0网络模型,不过也可以解决问题。
5.参考文章
AttributeError: Can't get attribute 'SPPF' · Issue #5175 · ultralytics/yolov5 ()/ultralytics/yolov5/issues/5175