首页 > Python资料 博客日记

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

2024-11-02 06:00:07Python资料围观29

本篇文章分享python:浅谈yolov10对比yolov5的方便之处,对你有帮助的话记得收藏一下,看Python资料网收获更多编程知识


前言

‌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方便了不少,而且框架代码封装性高,扩展性高。


版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:jacktools123@163.com进行投诉反馈,一经查实,立即删除!

标签:

相关文章

本站推荐