YOLOv10模型训练、验证、推理

news2025/1/22 13:09:44

前言

yolov10关于模型的各种参数其实都写到了一起(包括训练、验证和推理的参数),在./ultralytics/cfg/default.yaml中,通过使用这些指令我们可以实现各种所需的操作。

代码地址:https://github.com/THU-MIG/yolov10

在这里插入图片描述

目录

  • 一、train.py
  • 二、val.py
  • 三、detect.py
  • 四、export_onnx.py

一、train.py

训练时比较重要的几个参数:

YOLOv10(): 这个参数里面可以写你模型 yaml文件的路径,也可以直接写 .pt 文件
model.load(): 如果你不加 .load(),那就是不使用权重从头训练,加了就是使用使用预训练权重训练
data :数据集 yaml 文件的路径
epochs: 训练轮数
batch :batch size的大小
cache :设置成 True 可以加速训练
patience :早停轮数,不想设置早停的话,可以把这个值设置成一个非常大的数
optimizer: 优化器,最新版应该是提供了 7 种,注释有写包含哪几种,还可以设置成 auto
close_mosaic: 最后多少轮关闭马赛克数据增强,这是一种训练技巧,很有效,一般设置 10-30
resume : 断点续训,一个最实用的参数,直接在这里写你断了的那轮的last.pt 的路径就接上了
single_cls: 数据集是单个类别的时候记得开启,不开其实也没事
cos_lr:是否开启余弦学习率
label_smoothing : 数据集标注质量很差的时候可以考虑给这个参数设置个0.1-0.5
device :多 GPu 训练时这里直接写一个列表,比如[0,1]

import warnings

warnings.filterwarnings('ignore')
from ultralytics import YOLOv10

if __name__ == '__main__':
    model = YOLOv10('/media/sys410/code/sss/yolov10-main/ultralytics/cfg/models/v10/yolov10n-C2fMMLA-SPPELAN-GCSA.yaml')
    # 如何切换模型版本, 上面的ymal文件可以改为 yolov8s.yaml就是使用的v8s,
    # 类似某个改进的yaml文件名称为yolov8-XXX.yaml那么如果想使用其它版本就把上面的名称改为yolov8l-XXX.yaml即可(改的是上面YOLO中间的名字不是配置文件的)!
    model.load('yolov10n.pt') # 是否加载预训练权重,科研不建议大家加载否则很难提升精度
    model.train(
        data=r"/media/sys410/code/sss/yolov10-main/Xray.yaml",
        # 如果大家任务是其它的'ultralytics/cfg/default.yaml'找到这里修改task可以改成detect, segment, classify, pose
        cache=False,
        imgsz=640,
        epochs=300,
        single_cls=False,  # 是否是单类别检测
        batch=8,
        close_mosaic=0,
        workers=0,
        device='0',
        optimizer='SGD',  # using SGD
        # resume='runs/train/exp21/weights/last.pt', # 如过想续训就设置last.pt的地址
        amp=True,  # 如果出现训练损失为Nan可以关闭amp
        project='runs/train',
        name='n-SPPELAN-GCSA',
        )

二、val.py

YOLOv10(): 这里写你想要验证的权重的路径,如best.pt
data :这里写自己数据集 yaml 文件的路径
split :写val就是看验证集的指标,写 test 就是看测试集的指(前提是划分了测试集)
batch :测试速度时一般都设置成1(验证比较稳定),设置越大,速度越快

from ultralytics import YOLOv10
if __name__ == '__main__':
    # 加载模型
    model = YOLOv10('runs/train/yolov10n/weights/best.pt')  
    # 验证模型
    metrics=model.val(
        val=True,  # (bool) 在训练期间进行验证/测试
        data='datasets/data_config.yaml',
        split='val',  # (str) 用于验证的数据集拆分,例如'val'、'test'或'train'
        batch=1,  # (int) 每批的图像数量(-1 为自动批处理)
        imgsz=640,  # 输入图像的大小,可以是整数或w,h
        device='',  # 运行的设备,例如 cuda device=0 或 device=0,1,2,3 或 device=cpu
        workers=8,  # 数据加载的工作线程数(每个DDP进程)
        save_json=False,  # 保存结果到JSON文件
        save_hybrid=False,  # 保存标签的混合版本(标签 + 额外的预测)
        conf=0.001,  # 检测的目标置信度阈值(默认为0.25用于预测,0.001用于验证)
        iou=0.6,  # 非极大值抑制 (NMS) 的交并比 (IoU) 阈值
        project='runs/val',  # 项目名称(可选)
        name='yolov10n',  # 实验名称,结果保存在'project/name'目录下(可选)
        max_det=300,  # 每张图像的最大检测数
        half=False,  # 使用半精度 (FP16)
        dnn=False,  # 使用OpenCV DNN进行ONNX推断
        plots=True,  # 在训练/验证期间保存图像
    )

    print(f"mAP50-95: {metrics.box.map}") # map50-95
    print(f"mAP50: {metrics.box.map50}")  # map50
    print(f"mAP75: {metrics.box.map75}")  # map75
    speed_metrics = metrics.speed
    total_time = sum(speed_metrics.values())
    fps = 1000 / total_time
    print(f"FPS: {fps}") # FPS

三、detect.py

from ultralytics import YOLOv10

if __name__ == '__main__':
    # 加载模型
    model = YOLOv10(r'yolov10n.pt')  # YOLOv8n模型
    model.predict(
        source=r'ultralytics/assets/bus.jpg',
        save=True,  # 保存预测结果
        imgsz=640,  # 输入图像的大小,可以是整数或w,h
        conf=0.25,  # 用于检测的目标置信度阈值(默认为0.25,用于预测,0.001用于验证)
        iou=0.45,  # 非极大值抑制 (NMS) 的交并比 (IoU) 阈值
        show=False,  # 如果可能的话,显示结果
        project='runs/predict',  # 项目名称(可选)
        name='exp',  # 实验名称,结果保存在'project/name'目录下(可选)
        save_txt=False,  # 保存结果为 .txt 文件
        save_conf=True,  # 保存结果和置信度分数
        save_crop=False,  # 保存裁剪后的图像和结果
        show_labels=True,  # 在图中显示目标标签
        show_conf=True,  # 在图中显示目标置信度分数
        vid_stride=1,  # 视频帧率步长
        line_width=3,  # 边界框线条粗细(像素)
        visualize=False,  # 可视化模型特征
        augment=False,  # 对预测源应用图像增强
        agnostic_nms=False,  # 类别无关的NMS
        retina_masks=False,  # 使用高分辨率的分割掩码
        boxes=True,  # 在分割预测中显示边界框
    )

四、export_onnx.py

onnx是一种跨平台、开放式的机器学习框架。

from ultralytics import YOLOv10

# Load a model
model = YOLOv10('yolov8n.pt')  # load an official model
model = YOLOv10('path/to/best.pt')  # load a custom trained

# Export the model
model.export(format='onnx')

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

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

相关文章

【Material-UI 组件】Autocomplete 中的 Grouped 功能详解

文章目录 一、组件概述1.1 Grouped 功能介绍1.2 适用场景 二、基础用法2.1 实现 Grouped 功能代码拆解 三、高级配置3.1 自定义组渲染3.2 常见配置 四、最佳实践4.1 数据排序4.2 组标题优化4.3 性能优化4.4 可访问性 五、总结 Grouped 功能使得 Autocomplete 组件能够按特定维度…

Linux系统驱动(三)ioctl函数

文章目录 一、ioctl函数(一)函数格式(二)ioctl命令码的组成1. 命令码的组成2. 自己封装命令码2. 内核提供了封装命令码的宏 (三)使用示例1. 驱动2. 应用 一、ioctl函数 Linux内核开发者想要将数据的读写和…

c++ 21 指针

*像一把钥匙 通过钥匙去找内存空间 间接修改内存空间的值 不停的给指针赋值 等于不停的更改指针的指向 指针也是一种数据类型 指针做函数参数怎么看都不可以 指针也是一个数据类型 是指它指向空间的数据类习惯 作业 野指针 向null空间地址copy数据 不断改变指针指向 …

JVM的组成 -- 字节码文件

类加载器(ClassLoader):将字节码文件加载到内存中运行时数据区(JVM管理的内存):负责管理JVM使用的内存,比如创建对象和销毁对象执行引擎:即时编译器、解释器、垃圾回收器。负责本地接口的调用本地接口:native方法&…

高等数学 第八讲 积分学计算_不定积分_定积分_反常积分的计算

高等数学 第八讲 积分学计算 文章目录 高等数学 第八讲 积分学计算1.不定积分的计算1.1 基本积分公式1.2 不定积分的计算方法1.2.1 凑微分法1.2.2 换元法1.2.3 分布积分法1.2.4 有理函数的积分计算(待更新)1.2.5 不定积分的一些计算结论总结 2.定积分的计算2.1 牛顿莱布尼茨公式…

大数据Flink(一百零八):阿里云与开源的功能优势对比

文章目录 阿里云与开源的功能优势对比 阿里云与开源的功能优势对比 下面通过表格介绍阿里云实时计算Flink全托管产品的功能点和价值,以及和开源Flink的对比优势。 类型 功能 描述 价值 性能与成本 资源利用率提升 可以根据业务负载进行弹性扩缩容。 更好的…

手摸手教你前端和后端是如何实现导出 Excel 的?

前言 大家好呀,我是雪荷。在上篇文章(EasyExcel 初使用—— Java 实现多种写入 Excel 功能-CSDN博客)中给大家介绍了 Java 是如何写入 Excel 的,那么这篇算是对上篇文章的拓展,主要介绍前端和后端分别是如何导出数据至…

一篇了解: MyBatis-Plus 操作数据库的使用

目录 一、MyBatis-Plus介绍 二、基础使用 2.1 准备工作 2.2 编码 2.3 CRUD单元测试 三、MyBatis-Plus复杂操作 3.1 打印日志 3.2 常见注解 3.2.1 TableName 3.2.2 TableField 3.2.3 TableId 3.3 条件构造器 3.3.1 QueryWrapper 3.3.2 UpdateWrapper 3.3.3 Lamb…

网络空间安全专业怎么样,可通过哪些途径自学?

网络空间安全主要研究网络空间的组成、形态、安全、管理等,进行网络空间相关的软硬件开发、系统设计与分析、网络空间安全规划管理等。例如,网络犯罪的预防,国家网络安全的维护,杀毒软件等安全产品的研发,网络世界的监…

计算机常识与NOIP历史-CSP初赛知识点整理

真题练习 [2021-CSP-J-第2题] 以下奖项与计算机领域最相关的是( )。 A.奥斯卡奖 B.图灵奖 C.诺贝尔奖 D.普利策奖 [2017-NOIP-第7题] 中国计算机学会于( )年创办全国青少年计算机程序设计竞赛。 A. 1983 B. 1984 C. 1985 D. 1986 [2018-NOIP-第5题…

Professional Scrum Master (PSM) 官方认证培训班:掌握Scrum,提升项目管理能力

在快速变化的商业环境中,高效的项目管理和团队协作是企业成功的关键。作为一种广泛认可的敏捷框架,Scrum已成为推动项目成功和提高团队效率的重要工具。为了帮助专业人士掌握Scrum方法和实践,Scrum.org推出了Professional Scrum Master (PSM)…

C++ 初探:不要‘下次一定’,立即开始你的C++之旅

C初识 文章目录 C hello worldnamespace,命名空间命名空间的使用域作用限定符展开命名空间指定展开命名空间成员 C的域 C的输入和输出缺省参数函数重载引用(reference)引用概念引用的特性引用的使用const引用 inlinenullptr C hello world #…

学习C语言遇到的问题

前言 这是博主在班训班培训期间学习C基础过程中遇到的一些问题,我把遇到的问题以及这些问题的解答链接统一放在这篇文章了。这只是博主遇到的一些问题,可能不会适用于全部人,希望大家把这篇文章当做查漏补缺的内容吧。 问题一:把字符串赋给…

三十种未授权访问漏洞复现 合集( 三)

未授权访问漏洞介绍 未授权访问可以理解为需要安全配置或权限认证的地址、授权页面存在缺陷,导致其他用户可以直接访问,从而引发重要权限可被操作、数据库、网站目录等敏感信息泄露。---->目录遍历 目前主要存在未授权访问漏洞的有:NFS服务&a…

CnosDB 元数据集群 – 分布式时序数据库的大脑

CnosDB 是一个分布式时序数据库系统,其中元数据集群是核心组件之一,负责管理整个集群的元数据信息。 1. 概述 CnosDB 是一个分布式时序数据库系统,其中元数据集群是核心组件之一,负责管理整个集群的元数据信息。元数据包括数据库…

用Ollama 和 Open WebUI本地部署Llama 3.1 8B

说明: 本人运行环境windows11 N卡6G显存。部署Llama3.1 8B 简介 Ollama是一个开源的大型语言模型服务工具,它允许用户在自己的硬件环境中轻松部署和使用大规模预训练模型。Ollama 的主要功能是在Docker容器内部署和管理大型语言模型(LLM&…

[CR]厚云填补_GridFormer

GridFormer: Residual Dense Transformer with Grid Structure for Image Restoration in Adverse Weather Conditions Abstract 恶劣天气条件下的图像恢复是计算机视觉中的一个难点。在本文中,我们提出了一种新的基于变压器的框架GridFormer,它可以作为…

【Android】ContentProvider基本概念

ContentProvider Android权限机制详解 <manifest xmlns:android"http://schemas.android.com/apk/res/android"package"com.example.broadcasttest"> <uses-permission android:name"android.permission.RECEIVE_BOOT_COMPLETED" />…

8.2 grafana上导入模板看图并讲解告警

本节重点介绍 : grafana 上导入mysqld-dashboardglobal status 相关源码解读重要指标讲解 连接数内存TPS、QPS 将采集任务添加到prometheus中 - job_name: mysqld_exporterhonor_timestamps: truescrape_interval: 8sscrape_timeout: 8smetrics_path: /metricsscheme: httpf…

七天打造一套量化交易系统:Day7-实盘交易接入方式与注意事项

七天打造一套量化交易系统&#xff1a;Day7-实盘交易接入方式与注意事项 前情回顾证券交易接口XTP 接口头文件列表XTP 接口 demo 示例 期货交易接口CTP-API开发系列专栏 数字货币交易接口实盘接入注意事项 量化交易系统的核心要素包括选择投资标的、资金的分配、何时入场、何时…