python:浅谈yolov10对比yolov5的方便之处

文章目录

  • 前言
  • 一、环境配置
  • 二、数据标注
  • 三、配置文件
  • 四、训练数据
  • 五、数据预测
  • 总结

  • 前言

    ‌YOLOv10‌是YOLO系列的最新版本,旨在提高推理速度并减少计算开销。它是实时目标检测领域中的一项重要进展,通过移除非最大值抑制(NMS)并采用双重标签分配、空间信道解耦向下采样和排序引导块设计,实现了更高的性能和效率。简单来说就是相比之前的框架更快捷,更高效,更高准确度,闲话少说,对比我之前yolov5操作文章连接方便了多少吧,这里我挑一些重点讲一下。


    一、环境配置

    推荐使用conda

    conda create -n yolov10 python=3.9
    conda activate yolov10
    pip install -r requirements.txt
    pip install -e .
    pip install ultralytics 
    

    cuda安装以及代码确定

    import torch
     
    # 检查 CUDA 是否可用
    cuda_available = torch.cuda.is_available()
    # 返回值为Ture代表可用GPU
    

    二、数据标注

    首先,标注数据还是推荐使用labelimg,还是以我之前的文章案例为例,识别图片数字的需求

    这里选择yolo格式,这样保存的数据格式是txt

    三、配置文件

    拉取yolov10代码

    git clone https://github.com/THU-MIG/yolov10.git
    

    同级路径创建datasets文件夹,放入标注好的图片数据,如图:

    train文件放入训练的数据,val放入预测图片数据,标注好保存的txt文件放入labels文件中


    创建test.yaml文件,写入代码:

    path: test # dataset root dir
    train: images/train # train images (relative to 'path') 128 images
    val: images/val # val images (relative to 'path') 128 images
    test: # test images (optional)
    
    # Classes
    names:
      0: zero
      1: one
      2: two
      3: three
      4: four
      5: five
      6: six
      7: seven
      8: eight
      9: nine
    

    四、训练数据

    在终端:

    yolo task=detect mode=train data=test.yaml model=yolov10m.pt epochs=100 batch=16 device=0 plots=True
    

    yolo:运行yolo程序
    task=detect:指定任务为检测(detect)
    mode=train:指定模式为训练(train)
    data=test.yaml:指定你自己的数据集 yaml 文件
    model=yolov10m.pt: 指定下载的yolov10预训练权重文件
    epochs=100:设置训练轮次,
    batch=4:设置训练集加载批次,主要是提高训练速度,具体得看你的显卡或者内存容量。如果显存大,则可以设置大一些。或许训练再详细讲解如何设置
    device=0:指定训练设备,如果没有gpu,则令device=cpu,如果有一个gpu,则令device=0,有两个则device=0,1以此类推进行设置。


    训练完成之后会形成best.pt文件,记住路径,如图:

    到这里基本已经成功了,接下来测试我们训练出来的到底准不准吧


    五、数据预测

    同级路径创建detect.py,代码如下:

    # coding=utf-8
    from ultralytics import YOLOv10
    import supervision as sv
    import cv2
    from loguru import logger
    
    classes = {
        0: 'zero',
        1: 'one',
        2: 'two',
        3: 'three',
        4: 'four',
        5: 'five',
        6: 'six',
        7: 'seven',
        8: 'eight',
        9: 'nine',
    }
    
    model = YOLOv10('runs/detect/train9/weights/best.pt')
    image = cv2.imread('datasets/group1/images/val/1.png')
    
    # 预测数据值
    results = model(source=image, conf=0.25, verbose=False,device='cpu')[0]
    detections = sv.Detections.from_ultralytics(results)
    distance_list = []
    for i in detections:
        distance_list.append([i[0][0],i[-3]])
    sorted_list = sorted(distance_list, key=lambda x: x[0])
    distance_list.sort(key=lambda x: x[0])
    logger.debug('预测结果: '+''.join([str(i[-1]) for i in sorted_list]))
    
    
    # 使用标注器显示图片
    bounding_box_annotator = sv.BoundingBoxAnnotator()
    label_annotator = sv.LabelAnnotator()
    labels = [
        f"{classes[class_id]} {confidence:.2f}"
        for class_id, confidence in zip(detections.class_id, detections.confidence)
    ]
    annotated_image = bounding_box_annotator.annotate(image.copy(), detections=detections)
    annotated_image = label_annotator.annotate(annotated_image,detections=detections,labels=labels)
    cv2.imshow('test', annotated_image)
    cv2.waitKey()
    cv2.destroyAllWindows()
    

    运行如下图,预测正确,收工


    总结


    总体操作流程下来确实比yolov5方便了不少,而且框架代码封装性高,扩展性高。

    作者:_一路向北_

    物联沃分享整理
    物联沃-IOTWORD物联网 » python:浅谈yolov10对比yolov5的方便之处

    发表回复