YOLOv5 王者荣耀 目标检测

        YOLOv5算法如此强大,是学习深度学习图像识别无法绕过去的一个门槛;在掌握了一些基本模型(CNN/UNet/ResNet等)以后;是时候向YOLOv5发起挑战了;通过一个月的学习,基本理解了YOLOv5的原理和并实现基础的部署、训练和测试

        YOLOv5 王者荣耀目标检测羡慕是个非常好的实战项目,非常适合用来练手;本人硬件配置:I7 10870h+3070+16G内存    cuda 11.6  torch 1.13
        最终结果如下方图片和视频:

WeChat_20221118204908

以下是在部署过程中遇到的坑 ,按照以下步骤一步步来即可:

yolov5版本:https://gitcode.net/mirrors/ultralytics/yolov5

最早用官方最新版本,结果有些地方不兼容,导致一直出BUG,此版本亲测好用;

新建文件夹:
mydata
       ├─ images
       │    ├─ test # 下面放测试集图片
       │    ├─ train # 下面放训练集图片
       │    └─ val # 下面放验证集图片
       └─ labels
              ├─ test # 下面放测试集标签
              ├─ train # 下面放训练集标签
              ├─ val # 下面放验证集标签


/

1.修改coco128.yaml
打开yolov5\data 文件夹,找到coco128.yaml文件,复制一份,重命名为mydata.yaml

我的路径为C:\Users\Administrator\yolov5\data

打开mydata.yaml,

修改:注释path行,

修改为train:mydata//images/train, 可以是相对于主程序train.py的位置  

修改val: mydata/images/val,此项为验证集的相对位置

修改test: mydata/images/test,此项为测试集的相对位置


//也可以是绝对路径   我的是
//train: C:\mydate\yolov5-master-155\yolov5-master\mydata\images\train  # train images (relative to 'path') 128 images
//val: C:\mydate\yolov5-master-155\yolov5-master\mydata\images\val  # val images (relative to 'path') 128 images
//test:  C:\mydate\yolov5-master-155\yolov5-master\mydata\images\test  # test images (optional)


修改nc:10

修改names: ['scissors'],更改你的标签名称,有几种写几种

注释download ,此项为下载yolov5的默认脚本,对我们没用

/
2.修改yolov5s.yaml
打开yolov5\models,找到yolov5s.yaml,复制一份重命名为myyolov5s.yaml

我的路径为C:\Users\Administrator\yolov5\models\

打开myyolov5s.yaml

只需要修改一项将nc改为10,此项为我们的标签种类数

/

3、修改train.py
打开yolov5文件夹,找到 train.py文件,复制重命名为mytrain.py

我的文件路径为C:\Users\Administrator\yolov5\train.py

 打开mytrain.py,下滑到473行 

注意,必须要修改 --data   --cfg    --batch-size   这三行代码

parser.add_argument('--cfg', type=str, default='models/myyolov5s.yaml', help='model.yaml path')
#必要修改
#修改地址为models/myyolov5s.yaml,训练模型文件位置

    parser.add_argument('--data', type=str, default='data/mydata.yaml', help='dataset.yaml path')
#必要修改

    parser.add_argument('--batch-size', type=int, default=16, help='total batch size for all GPUs, -1 for autobatch')
#打包次数为16,越小越快,不能过小

/

运行bug:
///
bug1:
报错:AttributeError: ‘Upsample’ object has no attribute ‘recompute_scale_factor

D:\anaconda\envs\pytorch39\Lib\site-packages\torch\nn\modules\upsampling

将原代码(153-154行)修改为如下所示(155行):

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

///
bug2:
RuntimeError: result type Float can‘t be cast to the desired output type __int64报错解决方法
解决方法:找到5.0版报错的loss.py中最后那段for函数,将其整体替换为yolov5-master版中loss.py最后一段for函数即可正常运行

        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
///

bug3:
YOLOV5训练模型报错:
OSError: [WinError 1455] 页面文件太小,无法完成操作。 Error loading "D:\Anaconda\envs\...

为了图省事,按照参考的这个博客直接试了修改batch size,改小了,发现没有用,还是报错,然后就按照它的第一步改yolov5\utils\datasets.py中的num_workers:
将num_workers改为0

改系统软件虚拟内存 分页大小:500000M

        到此就没再遇见新的Bug;

        YOLOv5内容超级丰富,此次只是快速实现训练和测试,后续还需要进一步的学习,在此与君共勉,哈哈 

训练所需数据集,失效的话邮箱发我站内私信,看见基本都会发,有赞更好:

https://aistudio.baidu.com/aistudio/datasetdetail/165546

主要流程参考了以下博主,遇到的坑上文全解决: 

https://blog.csdn.net/m0_55317949/article/details/125268136

 用来测试的原视频来自b站,博主 王者荣耀小二皮

https://www.bilibili.com/video/BV1Q841187nm/?spm_id_from=333.337.search-card.all.click&vd_source=ae8859b77e04d60ad41551effea9b27c

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值