一、YOLO V10安装、使用、训练大全

news2024/10/1 6:21:28

YOLO V10安装、使用、训练大全

  • 一、下载官方源码
  • 二、配置conda环境
  • 三、安装YOLOV10依赖
  • 四、使用官方YOLO V10模型
    • 1.下载模型
    • 2.使用模型
      • 2.1 图片案例
  • 五、制作数据集
    • 1.数据集目录结构
    • 2.标注工具
      • 2.1 安装标注工具
      • 2.2 运行标注工具
      • 2.3 设置自动保存
      • 2.4 切换yolo模式
      • 2.5 开始标注
      • 2.6 数据集准备
        • 2.6.1 数据集文件夹准备
        • 2.6.2 xml格式转yolo的txt训练格式
    • 3.训练
      • 3.1 创建训练配置文件
      • 3.2 命令训练
      • 3.3 代码训练
    • 4.测试模型
      • 4.1 图片
        • 4.1.1 命令行
        • 4.1.2 代码
      • 4.2 视频
        • 4.2.1 命令行
        • 4.2.2 代码

一、下载官方源码

  • 源码点击下载

二、配置conda环境

# 1.在conda创建python3.9环境
conda create -n yolov10 python=3.9
# 2.激活切换到创建的python3.9环境
conda activate yolov10

三、安装YOLOV10依赖

# 1.切换到yolov10源码根目录下,安装依赖
# 注意:会自动根据你是否有GPU自动选择pytorch版本进行按照,这里不需要自己去选择pytorch和cuda按照,非常良心
pip install -r requirements.txt -i https://pypi.doubanio.com/simple
# 2.运行下面的命令,才可以在命令行使用yolo等命令
pip install -e .

四、使用官方YOLO V10模型

1.下载模型

在这里插入图片描述

  • 模型下载
    • YOLOv10-N:https://github.com/THU-MIG/yolov10/releases/download/v1.1/yolov10n.pt
    • YOLOv10-S:https://github.com/THU-MIG/yolov10/releases/download/v1.1/yolov10s.pt
    • YOLOv10-M:https://github.com/THU-MIG/yolov10/releases/download/v1.1/yolov10m.pt
    • YOLOv10-B:https://github.com/THU-MIG/yolov10/releases/download/v1.1/yolov10b.pt
    • YOLOv10-L:https://github.com/THU-MIG/yolov10/releases/download/v1.1/yolov10l.pt
    • YOLOv10-X:https://github.com/THU-MIG/yolov10/releases/download/v1.1/yolov10x.pt
  • 下载完放入源码根目录

2.使用模型

2.1 图片案例

import cv2
from ultralytics import YOLOv10

# 加载模型
model = YOLOv10("yolov10m.pt")

# 批量运算
results = model(["./datasets/group1/images/train/9597185011003UY_20240610_092234_555.png"], stream=True)

for result in results:
    boxes_cls_len = len(result.boxes.cls)
    if not boxes_cls_len:
        # 没有检测到内容
        continue
    for boxes_cls_index in range(boxes_cls_len):
        # 获取类别id
        class_id = int(result.boxes.cls[boxes_cls_index].item())
        # 获取类别名称
        class_name = result.names[class_id]

        # 获取相似度
        similarity = result.boxes.conf[boxes_cls_index].item()

        # 获取坐标值,左上角 和 右下角:lt_rb的值:[1145.1351318359375, 432.6763000488281, 1275.398681640625, 749.5224609375]
        lt_rb = result.boxes.xyxy[boxes_cls_index].tolist()
        # 转为:[[1145.1351318359375, 432.6763000488281], [1275.398681640625, 749.5224609375]]
        lt_rb = [[lt_rb[0], lt_rb[1]], [lt_rb[0], lt_rb[1]]]

        print("类别:", class_name, "相似度:", similarity, "坐标:", lt_rb)

    # 图片展示
    annotated_image = result.plot()
    annotated_image = annotated_image[:, :, ::-1]
    if annotated_image is not None:
        cv2.imshow("Annotated Image", annotated_image)
        cv2.waitKey(0)
        cv2.destroyAllWindows()

五、制作数据集

  • 一般会将所有图片放到一个文件夹,打完标注后,从总的文件夹中,分别分不同的图片到训练集和数据集

1.数据集目录结构

在这里插入图片描述

2.标注工具

  • Labelimg是一款开源的数据标注工具,可以标注三种格式。
    • VOC标签格式,保存为xml文件。
    • yolo标签格式,保存为txt文件。
    • createML标签格式,保存为json格式。

2.1 安装标注工具

pip install labelimg -i https://pypi.doubanio.com/simple

2.2 运行标注工具

在这里插入图片描述

  • labelimg:运行工具
  • images:图片文件夹路径
  • classes.txt:类别的文件
labelimg images label/classes.txt

在这里插入图片描述

2.3 设置自动保存

在这里插入图片描述

2.4 切换yolo模式

在这里插入图片描述

2.5 开始标注

在这里插入图片描述
在这里插入图片描述

标注完退出软件即可

2.6 数据集准备

2.6.1 数据集文件夹准备

在这里插入图片描述

yolo的label文件内容:<class_index> <x_center> <y_center> <width> <height>

2.6.2 xml格式转yolo的txt训练格式
  • 运行下面脚本,就会转换
import os
import xml.etree.ElementTree as ET

classes = ['hero', 'monster', 'goods']


def convert(size, box):
    dw = 1. / size[0]
    dh = 1. / size[1]
    x = (box[0] + box[1]) / 2.0
    y = (box[2] + box[3]) / 2.0
    w = box[1] - box[0]
    h = box[3] - box[2]
    x = x * dw
    w = w * dw
    y = y * dh
    h = h * dh
    return (x, y, w, h)


def convert_annotation(xml_file_paths, is_delete=False):
    """将某个文件夹下面所有的xml转换为yolo格式"""
    for xml_file_path in xml_file_paths:
        xml_file_dir, xml_file_name = os.path.split(xml_file_path)
        in_file = open(xml_file_path, 'r')
        out_file = open(os.path.join(xml_file_dir, xml_file_name[:-4]) + '.txt', 'w')
        tree = ET.parse(in_file)
        root = tree.getroot()
        size = root.find('size')
        w = int(size.find('width').text)
        h = int(size.find('height').text)

        for obj in root.iter('object'):
            cls = obj.find('name').text
            if cls not in classes:
                print(cls)
                continue
            cls_id = classes.index(cls)
            xmlbox = obj.find('bndbox')
            b = (float(xmlbox.find('xmin').text), float(xmlbox.find('xmax').text), float(xmlbox.find('ymin').text),
                 float(xmlbox.find('ymax').text))
            bb = convert((w, h), b)
            out_file.write(str(cls_id) + " " + " ".join([str(a) for a in bb]) + '\n')


def traverse_folder(folder_path):
    """获取某个文件夹下面所有的xml文件"""
    for root, dirs, files in os.walk(folder_path):
        for file in files:
            if file.lower().endswith(('.xml')):
                yield os.path.join(root, file)


if __name__ == '__main__':
    convert_annotation(traverse_folder(os.path.join(".", "datasets", "group1", "labels")))

在这里插入图片描述

  • txt格式就是yolo训练的格式

3.训练

3.1 创建训练配置文件

  • group1.yaml:文件和datasets文件夹同一个目录
path: group1 # 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: hero
  1: monster
  2: goods

3.2 命令训练

yolo task=detect mode=train data=group1.yaml model=yolov10m.pt epochs=100 batch=16 device=cpu plots=True
  • 上述各个参数解释如下,请根据自己的情况修改。
    • yolo:运行yolo程序
    • task=detect:指定任务为检测(detect)。YOLO模型可以用于不同的任务,如检测、分类等,这里明确指定为检测任务。
    • mode=train:指定模式为训练(train)。这意味着你将使用提供的数据集来训练模型。
    • data=group1.yaml:指定你自己的数据集yaml文件
    • model=yolov10m.pt: 指定下载的yolov10预训练权重文件
    • epochs=100:设置训练轮次,可以先设置一个5轮或者10轮,测试看看,顺利进行再设置大一点进行下一步训练。
    • batch=4:设置训练集加载批次,主要是提高训练速度,具体得看你的显卡或者内存容量。如果显存大,则可以设置大一些。或许训练再详细讲解如何设置
    • device=0:指定训练设备,如果没有gpu,则令device=cpu,如果有一个gpu,则令device=0,有两个则device=0,1以此类推进行设置。
    • plots:指定在训练过程中生成图表(plots)。这可以帮助你可视化训练进度,如损失函数的变化等。

3.3 代码训练

  • 待补充

4.测试模型

4.1 图片

4.1.1 命令行
yolo task=detect mode=predict conf=0.25 save=True model=runs/detect/train/weights/best.pt source=test_images_1/veh2.jpg
  • 上述各个参数解释如下,请根据自己的情况修改。
    • yolo:运行yolo程序
    • task=detect:指定任务为检测(detect)。YOLO模型可以用于不同的任务,如检测、分类等,这里明确指定为检测任务。
    • mode=predict:设置模式为预测(predict)。这意味着模型将使用提供的权重和图像进行预测,而不是进行训练。
    • conf=0.25:设置置信度阈值为0.25。这意味着只有模型预测置信度大于或等于0.25的检测结果才会被考虑。
    • save=True:指示模型保存预测结果。这通常会将结果保存为图像文件,其中检测到的对象会被标记出来。
    • model=runs/detect/train/weights/best.pt:指定模型权重文件的位置。这里,best.pt是训练过程中保存的最佳权重文件,用于进行预测。
    • source=test_images_1/veh2.jpg:指定要检测的源图像。这里,veh2.jpg是要进行对象检测的图像文件。
4.1.2 代码
from ultralytics import YOLOv10
import supervision as sv
import cv2

classes = {0: 'licence'}

model = YOLOv10('runs/detect/train6/weights/best.pt')
image = cv2.imread('veh2.jpg')

results = model(source=image, conf=0.25, verbose=False)[0]
detections = sv.Detections.from_ultralytics(results)
# 使用新的标注器
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('result', annotated_image)
cv2.waitKey()
cv2.destroyAllWindows()

4.2 视频

4.2.1 命令行
yolo task=detect mode=predict conf=0.25 save=True model=runs/detect/train/weights/best.pt source=b.mp4
  • 上述各个参数解释如下,请根据自己的情况修改。
    • yolo:运行yolo程序
    • task=detect:指定任务为检测(detect)。YOLO模型可以用于不同的任务,如检测、分类等,这里明确指定为检测任务。
    • mode=predict:设置模式为预测(predict)。这意味着模型将使用提供的权重和图像进行预测,而不是进行训练。
    • conf=0.25:设置置信度阈值为0.25。这意味着只有模型预测置信度大于或等于0.25的检测结果才会被考虑。
    • save=True:指示模型保存预测结果。这通常会将结果保存为图像文件,其中检测到的对象会被标记出来。
    • model=runs/detect/train/weights/best.pt:指定模型权重文件的位置。这里,best.pt是训练过程中保存的最佳权重文件,用于进行预测。
    • source=b.mp4:指定要检测的源视频。
4.2.2 代码
from ultralytics import YOLOv10
import supervision as sv
import cv2

classes = {0: 'licence'}

model = YOLOv10('runs/detect/train6/weights/best.pt')


def predict_and_detect(image):
    results = model(source=image, conf=0.25, verbose=False)[0]
    detections = sv.Detections.from_ultralytics(results)
    # 使用新的标注器
    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
    )

    return annotated_image


def create_video_writer(video_cap, output_filename):
    # grab the width, height, and fps of the frames in the video stream.
    frame_width = int(video_cap.get(cv2.CAP_PROP_FRAME_WIDTH))
    frame_height = int(video_cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
    fps = int(video_cap.get(cv2.CAP_PROP_FPS))
    # initialize the FourCC and a video writer object
    fourcc = cv2.VideoWriter_fourcc(*'MP4V')
    writer = cv2.VideoWriter(output_filename, fourcc, fps,
                             (frame_width, frame_height))
    return writer


video_path = 'b.mp4'
cap = cv2.VideoCapture(video_path)

output_filename = "out.mp4"
writer = create_video_writer(cap, output_filename)

while True:
    success, img = cap.read()
    if not success:
        break
    frame = predict_and_detect(img)
    writer.write(frame)
    cv2.imshow("frame", frame)

    if cv2.waitKey(1) & 0xFF == 27:  # 按下Esc键退出
        break

cap.release()
writer.release()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1912773.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【C++ | 继承】C++的继承详解 及 例子源码演示

&#x1f601;博客主页&#x1f601;&#xff1a;&#x1f680;https://blog.csdn.net/wkd_007&#x1f680; &#x1f911;博客内容&#x1f911;&#xff1a;&#x1f36d;嵌入式开发、Linux、C语言、C、数据结构、音视频&#x1f36d; ⏰发布时间⏰&#xff1a; 本文未经允许…

C++视觉开发 七.模板匹配

模板匹配是一种基于图像处理的技术&#xff0c;用于在目标图像中寻找与给定模板图像最相似的部分。通过设定的模板&#xff0c;将目标图像与模板图像比较&#xff0c;计算其相似度&#xff0c;实现对目标图像的判断。 目录 一.手写数字识别 重要函数&#xff1a; 1.cv::glob…

Mac平台虚拟机 Parallels Desktop v19.4.1,支持M1/M2/M3芯片组

Parallels Desktop for Mac是功能强大灵活度高的虚拟化方案&#xff0c;无需重启即可在同一台电脑上随时访问Windows和Mac两个系统上的众多应用程序。从仅限于PC的游戏到生产力软件&#xff0c;Parallels Desktop都能帮您实现便捷使用。Parallels Desktop 是一款专业的Mac虚拟机…

虚拟机因断电进入./#状态解决办法

现象&#xff1a; 解决&#xff1a;先查看错误日志&#xff1a;journalctl -p err -b查看自己虚拟机中标黄部分的名字 之后运行&#xff1a;xfs_repair -v -L /dev/sda #这里sda用你自己标黄的 最后重启 reboot 即可。

ArcGIS的智慧与情怀

初识ArcGIS 在这个信息化的时代&#xff0c;ArcGIS如同一位智者&#xff0c;静静地伫立在地理信息系统的巅峰。初识它时&#xff0c;我仿佛走进了一片未知的领域&#xff0c;心中充满了好奇与期待。ArcGIS&#xff0c;这款专业的地理信息系统软件&#xff0c;凭借其强大的功能…

【k8s中安装rabbitmq】k8s中安装rabbitmq并搭建镜像集群-hostpath版

文章目录 简介一.条件及环境说明二.需求说明三.实现原理及说明四.详细步骤4.1.规划节点标签4.2.创建configmap配置4.3.创建三个statefulset和service headless配置4.4.创建service配置 五.安装完后的配置六.安装说明 简介 k8s集群中搭建rabbitmq集群服务一般都会用到pvc&#x…

传知代码-图神经网络长对话理解(论文复现)

代码以及视频讲解 本文所涉及所有资源均在传知代码平台可获取 概述 情感识别是人类对话理解的关键任务。随着多模态数据的概念&#xff0c;如语言、声音和面部表情&#xff0c;任务变得更加具有挑战性。作为典型解决方案&#xff0c;利用全局和局部上下文信息来预测对话中每…

2024世界人工智能大会:AI产品技术与未来趋势的深度解析

随着2024年世界人工智能大会&#xff08;WAIC 2024&#xff09;在上海的圆满落幕&#xff0c;我们见证了人工智能技术的又一次飞跃。本次大会以“以共商促共享&#xff0c;以善治促善智”为主题&#xff0c;汇聚了全球顶尖的智慧&#xff0c;共同探讨了AI技术的未来趋势和应用前…

妙笔生词智能写歌词软件:创新助力还是艺术之殇?

在音乐创作日益普及和多样化的当下&#xff0c;各种辅助工具层出不穷&#xff0c;妙笔生词智能写歌词软件便是其中之一。那么&#xff0c;它到底表现如何呢&#xff1f; 妙笔生词智能写歌词软件&#xff08;veve522&#xff09;的突出优点在于其便捷性和高效性。对于那些灵感稍…

JVM内存泄露的ThreadLocal详解

目录 一、为什么要有ThreadLocal 二、ThreadLocal的使用 三、实现解析 实现分析 具体实现 Hash冲突的解决 开放定址法 链地址法 再哈希法 建立公共溢出区 四、引发的内存泄漏分析 内存泄漏的现象 分析 总结 错误使用ThreadLocal导致线程不安全 一、为什么要有Thr…

Test-Time Adaptation via Conjugate Pseudo-labels--论文笔记

论文笔记 资料 1.代码地址 https://github.com/locuslab/tta_conjugate 2.论文地址 https://arxiv.org/abs/2207.09640 3.数据集地址 论文摘要的翻译 测试时间适应(TTA)指的是使神经网络适应分布变化&#xff0c;在测试时间仅访问来自新领域的未标记测试样本。以前的TT…

【pytorch24】Visdom可视化

TensorboardX pytorch有一个工具借鉴了tensorboard pip install tensorboardX 有查看变量的数值、监听曲线等功能 如何使用 新建SummaryWriter()实例 要把监听的数据&#xff0c;比如说要监听dummy_s1[0]&#xff08;y 坐标&#xff09;存放到data/scalar1中&#xff0c;…

普中51单片机:中断系统与寄存器解析(六)

文章目录 引言中断流程图中断优先级下降沿中断结构图中断相关寄存器IE中断允许寄存器&#xff08;可位寻址&#xff09;XICON辅助中断控制寄存器&#xff08;可位寻址&#xff09;TCON标志控制寄存器SCON串行口控制寄存器 中断号中断响应条件中断函数代码模板电路图开发板IO连接…

洁净车间的压缩空气质量如何检测(露点、水油、粒子、浮游菌)

通常一个空压机站的设备即为一个狭义的压缩空气系统&#xff0c;下图为一个典型的压缩空气系统流程图&#xff1a; 气源设备&#xff08;空气压缩机&#xff09;吸入大气&#xff0c;将自然状态下的空气压缩成为具有较高压力的压缩空气&#xff0c;经过净化设备除去压缩空气中的…

新手如何正确学习Python?分享我是如何2个月熟练掌握Python的!学习大纲+学习方式+学习资料 汇总!

前言 一直以来都有很多想学习Python的朋友们问我&#xff0c;学Python怎么学&#xff1f;爬虫和数据分析怎么学&#xff1f;web开发的学习路线能教教我吗&#xff1f; 我先告诉大家一个点&#xff0c;不管你是报了什么培训班&#xff0c;还是自己在通过各种渠道自学&#xff…

[C++][ProtoBuf][Proto3语法][三]详细讲解

目录 1.默认值2.更新消息1.更新规则2.保留字段reserved 3.未知字段1.是什么&#xff1f;2.未知字段从哪获取 4.前后兼容性5.选项option1.选项分类2.常用选项列举3.设置自定义选项 1.默认值 反序列化消息时&#xff0c;如果被反序列化的⼆进制序列中不包含某个字段&#xff0c;…

elasticsearch集群模式部署

系统版本&#xff1a;CentOS Linux release 7.9.2009 (Core) es版本&#xff1a; elasticsearch-7.6.2 本次搭建es集群为三个节点 添加启动用户 确保elasticsearch的启动用户为普通用户&#xff0c;这里我创建了es用户用于启动elasticsearch 执行命令为es用户添加sudo权限 v…

数学建模及国赛

认识数学建模及国赛 认识数学建模 环境类&#xff1a;预测一下明天的气温 实证类&#xff1a; 评价一下政策的优缺点 农业类&#xff1a; 预测一下小麦的产量 财经类&#xff1a; 分析一下理财产品的最优组合 规划类&#xff1a; 土地利用情况进行 合理的划分 力学类&#xf…

如何在 CentOS 中配置 Linux 命名空间(ip netns)

引言 Linux 命名空间是一项强大的技术&#xff0c;允许在同一系统上创建多个独立的虚拟化实例&#xff0c;每个实例可以拥有自己的网络栈、路由表、IP 地址等网络资源&#xff0c;实现资源的隔离和管理。本文将深入探讨如何在 CentOS 中配置和使用 ip netns 命名空间&#xff0…

网络安全合规建设

网络安全合规建设 一、法律安全需求基本合规&#xff08;1&#xff09;《网络安全法》重要节点等级保护政策核心变化 二、安全需求 业务刚需&#xff08;1&#xff09;内忧&#xff08;2&#xff09;外患 三、解决方法&#xff08;1&#xff09;总安全战略目标图&#xff08;2&…