首页
社区
课程
招聘
[原创]Tk滑块篇之模型训练(底部交流群)
发表于: 2025-4-13 13:49 974

[原创]Tk滑块篇之模型训练(底部交流群)

2025-4-13 13:49
974

前言

  • 免责声明: 本文内容仅供学习交流使用, 请勿用于其他用途, 如因使用本文内容而产生任何问题, 与作者无关, 如果本文侵害贵司权益, 请联系 zhiyitracer@163.com 下架处理

  • 文章尽量还原每一步, 尽可能写的详细, 如果还是有问题可以加我微信沟通 Alive0501

  • 搞定滑块以后, 有些验证比较严格的还会出点选, 如登录接口

    在这里插入图片描述

    • 其实点选的难度比滑块在低, 因为没有轨迹, 识别出来就可以过
    • 之前版本可以强制替换验证码的类型把滑块换成点选, 现在已经不行了
  • 本文带大家搞定点选的模型识别, 从 0-1 的训练一个自己的模型出来(搞定后的识别效果, 下图)

    在这里插入图片描述

识别思路

  • 对于上面的验证码, 需要点击的是两个相同的形状的物体, 我们拆解一下需求
  • 模型识别出来每一个图片是什么形状, 以及对应的坐标放在列表里返回
  • 然后我们写代码循环这个列表, 判断出两个相同的物体 返回他的坐标, 供协议使用

环境

  • Yolov8
  • 环境问题比较容易出错, 本文章节反复修改四五次, 踩了比较多坑, 请严格复现每一步, 避免出现未知错误

图片下载

  • 去请求图片获取的连接, 把图片保存到本地找一个文件夹, 大概下载 200 张左右就可以了

    在这里插入图片描述

Conda 安装

  • 建议使用 conda 或者 miniconda 创建虚拟环境

  • 通过 conda 我们可以创建 导入和导出环境 以确保项目的可重复性

  • 安装可以参考以下链接

    win: https://blog.csdn.net/weixin_60359250/article/details/139096121

    linux: https://zhuanlan.zhihu.com/p/715587925

虚拟环境安装

  • 创建虚拟环境: conda create -n yolov8 python=3.9

  • 安装好 Conda 以后就可以创建虚似环境了

  • 如果 Python 版本过高, 后面使用 labelimg 会出现错误, 还得回来降级 (一开始我用的 3.11, 后面还得降回来 3.9, 所以直接用 3.9 不踩坑)

  • 下图我是之前装了, 现在重装提示, 你们执行命令后就会正常安装了

    在这里插入图片描述

  • 进入虚拟环境: activate yolov8

    在这里插入图片描述

  • 查看显卡驱动版本: nvidia-smi

    在这里插入图片描述

    • 这里需要用命令 nvidia-smi 查看本机的显卡驱动版本
    • 电脑没有显卡的话只能使用 cpu 训练但是速度会很慢
    • 上面红框标起来的就是本机的版本, 我这里是 11.6
  • 安装 pyTorch:

    1
    conda install pytorch torchvision torchaudio pytorch-cuda=11.6 -c pytorch -c nvidia
    • 11.6 注意更换为你自己电脑对应的版本

    • 默认国外源下载太慢了, 可以在后面直接添加 -c https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/ -c pytorch -c nvidia 临时换国内源下载

      在这里插入图片描述

      在这里插入图片描述

  • 安装 yolo pip install ultralytics

    • 正常安装

      在这里插入图片描述

    • 异常报错

      在这里插入图片描述

    • 安装过程中有可能出现上图的错误

    • 如果安装中出现拒绝访问没有权限的情况

在这里插入图片描述

  • 直接 win + s 搜索 PowerShell , 以管理员模式打开, 进入虚拟环境后再执行命令

Pycharm 导入环境

  • 点击 File > settings 出现下图内容, 然后点击 add

    在这里插入图片描述

  • 在虚似环境里, 输入命令 where python

    在这里插入图片描述

  • 找到带 yolov8 的变量, 这个就是我们前面建的虚似环境的名字, 把路径复制过来

    在这里插入图片描述

  • 选择使用就可以了

    在这里插入图片描述

异常问题

  • 如果我们这样安装以后, 后面在训练模型的时候会报一个 GPU 找不到的错误, 我已经踩过坑了, 所以我们这里一起解决一下

    在这里插入图片描述

    运行后报错说找不到 GPU, 这个异常问题是前面用命令下载的 torch 不是支持 Gpu 版本的

    1. 解决的话只需要打开 Pycharm, 找到管理包的位置, 把 torch 和 torchvision 删除

    2. 或者用命令 pip uninstall torch pip uninstall torchvision

    3. 然后打开 Pytorch 官网 https://pytorch.org/get-started/previous-versions/

      在这里插入图片描述

      1. 直接搜索自己 GPU 版本, 找到 pip 开头的

        在这里插入图片描述

      2. 复制下来在虚拟环境里执行, 有 2.4 个 G 要慢慢等, 下载完后环境就配置 OK 了

Numpy 报错

  • 训练时可能会出现, Numpy 报错的问题, 这个是 Numpy 版本问题, 我们卸载原来的 Numpy pip uninstall numpy

  • 安装版本为 pip install numpy==1.23.5 就可以解决问题

模型下载

  • 下载 yolo 预训练的模型 https://docs.ultralytics.com/zh/models/yolov8/#performance-metrics

    • 点击红框把 yolov8n 文件下载下来, 到此基本环境都已经准备好了, 当我们标注完成后就可以开始训练了

标注相关

  • 首先需要借助标注工具对元素进行逐一标注.这里采用是 labelimg

  • 安装 labelimg

    使用命令 pip install labelImg 进行安装, 注意要在我们刚才的 yolov8 环境里安装, 别搞错了

    在这里插入图片描述

  • 执行 labelimg

    在这里插入图片描述

  • 命令行输入 labelimg 后就会弹出一个界面

    在这里插入图片描述

  • 这就是我们用来标注的工具, 介绍一下怎么用

    在这里插入图片描述

  • 先点击 Open Dir 然后打开刚才在图片下载那一步, 保存图片的文件夹, 点右下角的选择文件夹

    在这里插入图片描述

  • 这个时候会接着弹出来一个页面, 让你选择标注完后的图片保存到什么位置, 我这里是随便新建了一个文件夹

    在这里插入图片描述

  • 确定后, 右下角就会出现咱们刚才选择文件夹里面的所有图片了, 点击第一张, 开始标注

    在这里插入图片描述

  • 点击鼠标 w 键 可以进行框选, 框完之后会让你输入对应的名字, 这里我们可以直接用 8, 像字母 数字都可以直接用对应的, 像圆柱体 正方形之类的 可以用对应的英文

  • 注意比如第一张图 你的圆柱体是用拼音标注的, 那后面再出现圆柱体都要用拼音, 一个字也不能错, 大小写都不能变

    在这里插入图片描述

  • 比如我们标好一张之后, 在右边就有对应的展示了, 如果标错了, 想修改就右键 edit label

  • 标注的时候要保证每一张的质量, 你框的越精准, 后面识别的效果越好

  • 标注完成后点击 Next Image 选择下一张

    在这里插入图片描述

  • 标注完后, 会在同级目录出现两个文件, 183.txt 就是我们刚才标注这个图片

    在这里插入图片描述

    • 前面是对应的类别, 后面是它的坐标
  • classes.txt 文件

    在这里插入图片描述

    • classes 文件里记录的就是, 当前所有的分类
  • 注意的问题

    • 如果标注到一半, 关掉了 下次再打开标注的话, 可能会出现错误或者盖掉之前的数据

    • 使用命令 labelimg images classes.txt 指定 classes.txt 即可解决

      labelimg H:\Code\labels\classes.txt

划分数据集

  • 训练之前需要把标注的数据拆分出一个训练集和验证集,按照 9:1 的比例即可(训练集 9: 验证集 1).我这里的文件路径如下

  • train 这是训练集, 目录下有两个文件夹

    • images 存放的是我们下载的图片
    • labels 存放的是我们标注后的文件
    • 注意两个要对应, 比如训练集的图片取的是名称 1-180 的图片, 那 labels 里面的文件也得是 1-180 图片所对应的标注信息
  • 验证集同上

创建配置文件

  • 创建一个 conf.yaml 配置文件

    train: dataset\train\images
    val: dataset\valid\images
    nc: 55
    names: ["o","c","d","D","h","7","6","n","r","m","k","9","icosahedron","M","u","U","g","5","8","L","2","a","Q","t","V","F","C","4","E","sphere","cylinder","Y","T","y","circularcone","cube","S","w","G","P","x","3","e","R","Z","v","A","p","H","K","B","X","s","W","O"]
    
    • train: 训练集的路径, 如果相对路径找不到, 可以写死
    • val: 验证集的路径, 如果相对路径找不到, 可以写死
    • nc: 分类总数
    • names: 所有分类的名字, 这里就是前面的 classes.txt 文件复制进来就行

开始训练

  • 前面准备工作做完以后, 就可以开始训练了, 根据官网的教程, 两行命令开始训练

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    from ultralytics import YOLO
    # 检查数据集路径
    if __name__ == "__main__":
        model = YOLO(r"")   # 开始从官网下载的yolov8n.pt的路径放在这里
        model.train(
            data=r"\Yolov\conf.yaml",    # conf.yaml的路径conf.yaml 就是上面的配置文件
            epochs=200# 增加训练轮次
            cache=True,
            imgsz=704# 增加图像大小
            batch=4# 增加批次大小
            workers=4# 增加工作线程数
            device='0'# 或者 '0,1' 根据GPU情况
            save=True,
            lr0=0.01# 初始学习率
            hsv_h=0.015# 数据增强
            hsv_s=0.7,
            hsv_v=0.4,
            degrees=0.5,
            translate=0.1,
            scale=0.5,
            shear=0.5,
            freeze=[0, 1, 2# 冻结部分层
        )
  • 注意 device 这个参数

    '0' 代表使用第一个 GPU, 如果你的机器上有多个 GPU, 可以使用 '0,1' 来同时使用第 0 和第 1 个 GPU

    'cpu' 表示使用 CPU 进行训练

  • 开始训练

    在这里插入图片描述

    • 如上就是已经开始训练了, 训练效果的话主要看几个参数
      1. 训练损失(box_loss, cls_loss, dfl_loss)是否趋于稳定, 不再下降
      2. 验证损失是否开始上升,这可能表示过拟合

验证训练结果

  • 我这边训练了四十轮左右, box_loss 参数就已经不再下降了, 我这边就直接停了, 多跑几轮也没关系, 他会自己保存训练效果最好的模型

  • 在当前项目下找到 \runs\detect\train5\weights\best.pt 最后一次 train 的文件, 拿到他的 best.pt

  • 这就是我们刚才训练中效果最好的一次, 下面来识别看看效果

  • 代码

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    from ultralytics import YOLO
     
    # 加载训练好的 YOLO 模型
    model = YOLO(r"best.pt")
    # 使用模型进行预测
    results = model(r'\183.jpg', save=True)
     
    def extract_predictions(result):
        """
        从结果中提取类名和坐标信息,并将它们转换为更易处理的格式。
        """
        extracted_data = []
        cls_dict = result.names
        cls_all = result.boxes.cls.tolist()
        xyxy_all = result.boxes.xyxy.tolist()
     
        for i in range(len(cls_all)):
            label_name = cls_dict[int(cls_all[i])]
            box_xyxy = xyxy_all[i]
            box_mid_xy = [(box_xyxy[0] + box_xyxy[2]) / 2, (box_xyxy[1] + box_xyxy[3]) / 2]
            box_mid_xy = [coord * 0.762 for coord in box_mid_xy]
     
            extracted_data.append({
                "label_name": label_name,
                "box_mid_xy": box_mid_xy,
            })
     
        return extracted_data
     
     
    def find_duplicates(predictions):
        """
        查找预测结果中具有相同类名的项目,并返回这些项目的 box_mid_xy 坐标。
        """
        class_dict = {}
     
        for prediction in predictions:
            class_name = prediction['label_name']
            if class_name not in class_dict:
                class_dict[class_name] = []
            class_dict[class_name].append(prediction['box_mid_xy'])
     
        duplicates = {k: v for k, v in class_dict.items() if len(v) > 1}
     
        return duplicates
     
     
    # 获取并处理预测结果
    predictions = extract_predictions(results[0])
    # 查找并返回重复类名的 box_mid_xy 坐标
    duplicate_classes = find_duplicates(predictions)
    print(duplicate_classes)

    在这里插入图片描述

  • 就能正常识别出结果了, 并且返回了坐标

交流群

建立了一个爬虫交流群,如果有兴趣进群的话可以加我好友 拉你进群
图片描述


[注意]看雪招聘,专注安全领域的专业人才平台!

收藏
免费
支持
分享
最新回复 (2)
雪    币: 122
活跃值: (436)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
这有图片集吗,给点我尝试下
2025-4-13 14:24
0
雪    币: 104
活跃值: (5403)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
想请问一下  Yolo8 和 Yolo5 有什么区别嘛? 会更好嘛? 
2025-4-14 09:23
0
游客
登录 | 注册 方可回帖
返回

账号登录
验证码登录

忘记密码?
没有账号?立即免费注册