【YOLOv5】学习中遇到的报错

 在此教程中跟着博主一步一步进行项目复现时出现了一些代码运行时的报错,查阅网上的解决方法后做一个集合。

 目标检测--手把手教你搭建自己的YOLOv5目标检测平台

问题一

在运行train.py时报错如下:

AttributeError: Can‘t get attribute ‘SPPF‘ on <module ‘models.common‘ from ‘E:\yolov5-5.0\models\

 解决方法:

在项目的models目录下找到common.py把SPPF这个类加进去(记得引入warnings这个包),代码如下:

import warnings
class SPPF(nn.Module):
    # Spatial Pyramid Pooling - Fast (SPPF) layer for YOLOv5 by Glenn Jocher
    def __init__(self, c1, c2, k=5):  # equivalent to SPP(k=(5, 9, 13))
        super().__init__()
        c_ = c1 // 2  # hidden channels
        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')  # suppress torch 1.9.0 max_pool2d() warning
            y1 = self.m(x)
            y2 = self.m(y1)
            return self.cv2(torch.cat([x, y1, y2, self.m(y2)], 1))

问题二

在运行train.py训练过程中报错如下:

RuntimeError: result type Float can‘t be cast to the desired output type __int64RuntimeError: result type Float can‘t be cast to the desired output type __int64 

解决方法:

在项目的utils目录下找到loss.py将末尾的for函数进行替换,替换版本为yolov5-master版本。

代码如下:

        for i in range(self.nl):
            anchors, shape = self.anchors[i], p[i].shape
            gain[2:6] = torch.tensor(shape)[[3, 2, 3, 2]]  # xyxy gain
 
            # Match targets to anchors
            t = targets * gain  # shape(3,n,7)
            if nt:
                # Matches
                r = t[..., 4:6] / anchors[:, None]  # wh ratio
                j = torch.max(r, 1 / r).max(2)[0] < self.hyp['anchor_t']  # compare
                # j = wh_iou(anchors, t[:, 4:6]) > model.hyp['iou_t']  # iou(3,n)=wh_iou(anchors(3,2), gwh(n,2))
                t = t[j]  # filter
 
                # Offsets
                gxy = t[:, 2:4]  # grid xy
                gxi = gain[[2, 3]] - gxy  # inverse
                j, k = ((gxy % 1 < g) & (gxy > 1)).T
                l, m = ((gxi % 1 < g) & (gxi > 1)).T
                j = torch.stack((torch.ones_like(j), j, k, l, m))
                t = t.repeat((5, 1, 1))[j]
                offsets = (torch.zeros_like(gxy)[None] + off[:, None])[j]
            else:
                t = targets[0]
                offsets = 0
 
            # Define
            bc, gxy, gwh, a = t.chunk(4, 1)  # (image, class), grid xy, grid wh, anchors
            a, (b, c) = a.long().view(-1), bc.long().T  # anchors, image, class
            gij = (gxy - offsets).long()
            gi, gj = gij.T  # grid indices
 
            # Append
            indices.append((b, a, gj.clamp_(0, shape[2] - 1), gi.clamp_(0, shape[3] - 1)))  # image, anchor, grid
            tbox.append(torch.cat((gxy - gij, gwh), 1))  # box
            anch.append(anchors[a])  # anchors
            tcls.append(c)  # class

问题三

训练完成后,运行detect.py进行推理时,出现如下报错:

AttributeError: ‘Upsample‘ object has no attribute ‘recompute_scale_factor’ 

解决方法:

根据光标定位报错的位置,找到自定义函数def forward(self, input: Tensor) -> Tensor进行替换,

代码如下:

    def forward(self, input: Tensor) -> Tensor:
        return F.interpolate(input, self.size, self.scale_factor, self.mode, self.align_corners)

问题四

想通过调用电脑自带摄像头,运行detect.py进行推理时,报错如下:

TypeError: argument of type ' int ' is not iterable 

解决方法:

在项目的utils目录下找到datasets.py,在文件的第279行给两个url参数进行类型转换,

将两个url变成str(url)。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在进行yolov8单机双卡训练时,如果出现报错,可能是由于参数设置或版本不兼容引起的。引用提到了一个错误类型为"typeerror: barrier() got an unexpected keyword arg",这个错误可能是由于版本不匹配导致的。另外,引用也提到了一些参数设置需要注意,例如"--save_period"参数的写法以及"batch-size"需要能被3整除等。 为了解决yolov8单机双卡训练报错,可以尝试以下方法: 1. 确保使用的版本是兼容的,可以检查一下使用的yolov8版本是否支持单机双卡训练。 2. 检查参数设置是否正确,比如"--save_period"的写法和"batch-size"是否能被3整除。 3. 如果希望只使用其的三张卡进行训练,可以尝试使用"--nproc_per_node"参数并设置为3,这样可以指定使用哪三张卡进行训练。 综上所述,如果yolov8单机双卡训练报错,可以通过检查版本兼容性、正确设置参数以及使用"--nproc_per_node"参数来指定使用的卡片数量来解决问题。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [初次使用yolov8遇到的问题](https://blog.csdn.net/qq_22764813/article/details/130099138)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [【深度学习 pytorch yolov 单机多卡的训练命令方式和注意事项](https://blog.csdn.net/weixin_40293999/article/details/127782051)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值