1.Can’t get attribute ‘SPPF’ on <module ‘models.common’ from ‘D:\develop\yolo\yolov5-hat\models\common.py’>
在编译detect.py文件时遇到这个问题,在使用yolov5s.pt中,可以发现在common.py中缺少SPPF模块,应该是由于版本问题。解决方法如下:
找到common.py文件,添加下面代码,添加之后导入import warnings这个模块
class SPPF(nn.Module):
def __init__(self, c1, c2, k=5):
super().__init__()
c_ = c1 // 2
self.cv1 = Conv(c1, c_, 1, 1)
self.cv2 = Conv(c_ * 4, c2, 1, 1)
self.m = nn.MaxPool2d(kernel_size=k, stride=1, padding=k // 2)
def forward(self, x):
x = self.cv1(x)
with warnings.catch_warnings():
warnings.simplefilter('ignore')
y1 = self.m(x)
y2 = self.m(y1)
return self.cv2(torch.cat([x, y1, y2, self.m(y2)], 1))
但是添加之后会遇到一个新的问题如下:
2.The size of tensor a (80) must match the size of tensor b (56) at non-singleton dimension 3
这是由于下载的yolov5s.pt版本不一样导致的,默认下载的是tag6.1的yolov5s.pt,我们需要重新下载tag5的yolov5s.pt进行提换,下载链接如下:
https://github.com/ultralytics/yolov5/releases/download/v5.0/yolov5s.pt
替换之后就能够运行了