运行Yolov5出现AttributeError: Can‘t get attribute ‘SPPF‘ 正确解决方法 + 如何将本地文件复制到docker容器内
1. 运行yolov5旧版本代码(比如4.0版本)出现错误
AttributeError: Can’t get attribute ‘SPPF’ on <module ‘models.common’ from ‘***\yolov5-5.0\models\common.py’>
错误原因
运行代码python detect.py --source data/images/ --weights yolov5s.pt --conf 0.4
会自动下载最新版本(如6.2)的pt模型文件,不是旧版本(如4.0)的模型文件,如下图所示:
解决方法
手动下载旧版本(如4.0)的pt模型文件,然后放到代码的根目录!!!
直接打开官网,只会看到最新版本的YOLOv5
那要下原来版本的YOLOv5,可以去这个网址:https://github.com/ultralytics/yolov5/releases,然后往下翻就可以找不同的版本了
然后直接点击yolov5s.pt就可以下载下来了,然后把旧的yolov5s.pt换成刚下载的新pt模型文件就好了!!
网上很多说在common文件里面添加SPPF是错误的方法!!!!因为你一旦修改common.py后,再运行会出现以下错误:RuntimeError: The size of tensor a (80) must match the size of tensor b (56) at…(我忘了截图,出现这个后我就直接clear了…)
总之,将yolov5s.pt文件进行替换一下就完全可以解决问题了!!
2. 如何将本地文件复制到docker容器内
我们通过docker cp指令来将容器外文件传递到docker容器内
- 查看容器ID
docker ps -a
就是最前面的CONTAINER ID
- 将本地文件复制到docker容器中
docker cp 本地文件路径 容器ID/容器NAME:容器内路径
比如说
docker cp /home/wang/Downloads/yolov5s.pt 1a0e8234eab2:/usr/src/app
反过来要将docker容器内的文件复制到本地,只需要将两个路径反过来就ok了