使用YOLO11训练自己的数据集【下载模型】-【导入数据集】-【训练模型】-【评估模型】-【导出模型】

news2024/12/26 23:08:05


目录

    • 前言:
    • 一、下载模型
    • 二、导入数据集
    • 三、训练自己的数据集
    • 四、验证数据集
    • 五、测试数据集

前言:

YOLO11于2024年9月30日由YOLOv8团队正式发布,为了让我们能够趁热打铁早发论文,接下来让我们仔细研究一下如何使用YOLO11训练自己的模型

一、下载模型

进入YOLOv11官方网址https://github.com/ultralytics/ultralytics/tree/main下载整个工程
在这里插入图片描述
下载完成后解压到自己的目标文件夹,通过自己的IDE打开工程在下图框选位置添加训练train.py、验证val.py和测试detect.py文件,同时在上述文件中添加相应的代码:
在这里插入图片描述

  • Train.py代码如下所示
from ultralytics import YOLO
from ultralytics import RTDETR



if __name__ == '__main__':
    # 加载模型
    model = YOLO(r'cfg/models/11/yolo11.yaml')  # 不使用预训练权重训练
    # model = YOLO(r'yolov8.yaml').load("yolov8n.pt")  # 使用预训练权重训练
    # 训练参数 ----------------------------------------------------------------------------------------------
    model.train(
        data=r'E:/dyh/ultralytics-main/data5/data.yaml',
        epochs=300,  # (int) 训练的周期数
        patience=50,  # (int) 等待无明显改善以进行早期停止的周tiao期数
        batch=16,  # (int) 每批次的图像数量(-1 为自动批处理)
        imgsz=640,  # (int) 输入图像的大小,整数或w,h
        save=True,  # (bool) 保存训练检查点和预测结果
        save_period=-1,  # (int) 每x周期保存检查点(如果小于1则禁用)
        cache=False,  # (bool) True/ram、磁盘或False。使用缓存加载数据
        device='',  # (int | str | list, optional) 运行的设备,例如 cuda device=0 或 device=0,1,2,3 或 device=cpu
        workers=8,  # (int) 数据加载的工作线程数(每个DDP进程)
        project='runs/train',  # (str, optional) 项目名称
        name='exp',  # (str, optional) 实验名称,结果保存在'project/name'目录下
        exist_ok=False,  # (bool) 是否覆盖现有实验
        pretrained=True,  # (bool | str) 是否使用预训练模型(bool),或从中加载权重的模型(str)
        optimizer='SGD',  # (str) 要使用的优化器,选择=[SGD,Adam,Adamax,AdamW,NAdam,RAdam,RMSProp,auto]
        verbose=True,  # (bool) 是否打印详细输出
        seed=0,  # (int) 用于可重复性的随机种子
        deterministic=True,  # (bool) 是否启用确定性模式
        single_cls=False,  # (bool) 将多类数据训练为单类
        rect=False,  # (bool) 如果mode='train',则进行矩形训练,如果mode='val',则进行矩形验证
        cos_lr=False,  # (bool) 使用余弦学习率调度器
        close_mosaic=0,  # (int) 在最后几个周期禁用马赛克增强
        resume=False,  # (bool) 从上一个检查点恢复训练
        amp=True,  # (bool) 自动混合精度(AMP)训练,选择=[True, False],True运行AMP检查
        fraction=1.0,  # (float) 要训练的数据集分数(默认为1.0,训练集中的所有图像)
        profile=False,  # (bool) 在训练期间为记录器启用ONNX和TensorRT速度
        freeze=None,  # (int | list, 可选) 在训练期间冻结前 n 层,或冻结层索引列表。
        # 分割
        overlap_mask=True,  # (bool) 训练期间是否应重叠掩码(仅适用于分割训练)
        mask_ratio=4,  # (int) 掩码降采样比例(仅适用于分割训练)
        # 分类
        dropout=0.0,  # (float) 使用丢弃正则化(仅适用于分类训练)
        # 超参数 ----------------------------------------------------------------------------------------------
        lr0=0.01,  # (float) 初始学习率(例如,SGD=1E-2,Adam=1E-3)
        lrf=0.01,  # (float) 最终学习率(lr0 * lrf)
        momentum=0.937,  # (float) SGD动量/Adam beta1
        weight_decay=0.0005,  # (float) 优化器权重衰减 5e-4
        warmup_epochs=3.0,  # (float) 预热周期(分数可用)
        warmup_momentum=0.8,  # (float) 预热初始动量
        warmup_bias_lr=0.1,  # (float) 预热初始偏置学习率
        box=7.5,  # (float) 盒损失增益
        cls=0.5,  # (float) 类别损失增益(与像素比例)
        dfl=1.5,  # (float) dfl损失增益
        pose=12.0,  # (float) 姿势损失增益
        kobj=1.0,  # (float) 关键点对象损失增益
        label_smoothing=0.0,  # (float) 标签平滑(分数)
        nbs=64,  # (int) 名义批量大小
        hsv_h=0.015,  # (float) 图像HSV-Hue增强(分数)
        hsv_s=0.7,  # (float) 图像HSV-Saturation增强(分数)
        hsv_v=0.4,  # (float) 图像HSV-Value增强(分数)
        degrees=0.0,  # (float) 图像旋转(+/- deg)
        translate=0.1,  # (float) 图像平移(+/- 分数)
        scale=0.5,  # (float) 图像缩放(+/- 增益)
        shear=0.0,  # (float) 图像剪切(+/- deg)
        perspective=0.0,  # (float) 图像透视(+/- 分数),范围为0-0.001
        flipud=0.0,  # (float) 图像上下翻转(概率)
        fliplr=0.5,  # (float) 图像左右翻转(概率)
        mosaic=1.0,  # (float) 图像马赛克(概率)
        mixup=0.0,  # (float) 图像混合(概率)
        copy_paste=0.0,  # (float) 分割复制-粘贴(概率)
    )



  • Val.py代码如下所示
from ultralytics import YOLO

if __name__ == '__main__':
    # 加载模型
    model = YOLO('runs/train/exp31/weights/best.pt')
    # 验证模型
    metrics=model.val(
        val=True,  # (bool) 在训练期间进行验证/测试
        data=r'data5/data.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='exp',  # 实验名称,结果保存在'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 YOLO

if __name__ == '__main__':
    # 加载模型
    model = YOLO(r'best.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,  # 在分割预测中显示边界框
    )



Ok 将上述代码复制粘贴到相应文件,训练的模型准备就完成了,接下来导入自己的数据集,进行训练

二、导入数据集

想必大家能看到这里,一定都对YOLO系列有了一定了解,那么数据集的结构大家应该也都清楚,制作自己的数据集对大家来说也不是什么难事,但我这里想给大家提供一个新的获取数据集的渠道,那就是Roboflow数据集网站,官方网址为https://universe.roboflow.com/点击进去之后可以搜索自己想要的数据集例如我这里搜索了hand
在这里插入图片描述
搜索后选择适合自己的数据集按照如下顺序下载数据集,当然这个网站功能强大,感兴趣的可以自己先摸索一下,后续我将出一期更详细的利用这个网站的教程
在这里插入图片描述
这样数据集也就准备好了,解压下载好的数据集压缩包,他的结构如下所示,按照你在Roboflow网站的划分数据集操作自动分配好了文件夹这里你只需要对应好data.yaml文件中的相应数据集图片地址就好了那么接下来就可以使用YOLO11的yaml文件进行训练了

在这里插入图片描述

三、训练自己的数据集

在刚才已经编辑好的train.py文件中添加自己的训练模型以及自己的数据集位置在这里插入图片描述
配置好了之后就可以开始训练了,训练成功结果如下:
在这里插入图片描述

四、验证数据集

将训练好的权重路径放入到图片中所示的位置
在这里插入图片描述

五、测试数据集

与验证数据集步骤类似如下图所示:
在这里插入图片描述

OK 以上就是如何使用YOLO11开始训练自己的数据集的全过程了,大家赶紧动手实践起来吧接下来将持续更新相关改进,尽情期待!

在这里插入图片描述

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

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

相关文章

通信协议感悟

本文结合个人所学,简要讲述SPI,I2C,UART通信的特点,限制。 1.同步通信 UART,SPI,I2C三种串行通讯方式,SPI功能引脚为CS,CLK,MOSI,MISO;I2C功能引…

六、输入输出管理

1.输入输出程序接口 由于各种设备的操作所提供的参数或者返回值都不同,也很难做到以设备独立性软件向上提供统一的接口,但是可以将设备进行分类,每一类设备由一种统一的接口操作。 ①字符设备接口 get/put 系统调用:向字符设备读/写一个字符…

Redis篇(Redis原理 - RESP协议)

目录 一、简介 二、Redis通信协议 基于Socket自定义Redis的客户端 三、Redis内存回收 1. 过期key处理 1.1. 惰性删除 1.2. 周期删除 1.3. 知识小结 2. 内存淘汰策略 一、简介 Redis是一个CS架构的软件,通信一般分两步(不包括pipeline和PubSub&a…

【Linux系统编程】第二十六弹---彻底掌握文件I/O:C/C++文件接口与Linux系统调用实践

✨个人主页: 熬夜学编程的小林 💗系列专栏: 【C语言详解】 【数据结构详解】【C详解】【Linux系统编程】 目录 1、回顾C语言文件接口 1.1、以写的方式打开文件 1.2、以追加的方式打开文件 2、初步理解文件 2.1、C文件接口 3、进一步理…

街道办事处智慧查询系统方案——未来之窗行业应用跨平台架构

一、政务公开建设的必要性 1.1.1使用便捷 人民的生活因为科学技术的发展,发生了翻天覆地的变化,也是实现智能化社区发展的重要发展环节,并在触摸一体机设备的运用中,“社区办事查询软件”运用,基本能够实现***科学技…

【优选算法】(第十五篇)

目录 和为k的⼦数组(medium) 题目解析 讲解算法原理 编写代码 和可被K整除的⼦数组(medium) 题目解析 讲解算法原理 编写代码 和为k的⼦数组(medium) 题目解析 1.题目链接:. - 力扣&am…

【EXCEL数据处理】000010 案列 EXCEL文本型和常规型转换。使用的软件是微软的Excel操作的。处理数据的目的是让数据更直观的显示出来,方便查看。

前言:哈喽,大家好,今天给大家分享一篇文章!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏关注哦 💕 目录 【EXCEL数据处理】000010 案列 EXCEL单元格格式。EXCEL文本型和常规型转…

TypeScript 算法手册 【归并排序】

文章目录 1. 归并排序简介1.1 归并排序定义1.2 归并排序特点 2. 归并排序步骤过程拆解2.1 分割数组2.2 递归排序2.3 合并有序数组 3. 归并排序的优化3.1 原地归并排序3.2 混合插入排序案例代码和动态图 4. 归并排序的优点5. 归并排序的缺点总结 【 已更新完 TypeScript 设计模式…

nature reviews genetics | 基因调控网络方法总结

–https://doi.org/10.1038/s41576-023-00618-5 Gene regulatory network inference in the era of single-cell multi-omics 留意更多内容,欢迎关注微信公众号:组学之心 研究团队和单位 Julio Saez-Rodriguez—Heidelberg University Ricard Arge…

Let‘s Encrypt 的几个常用命令

Lets Encrypt 是免费的 ssl 证书提供商,在当前纷纷收费的形式下,这是一个良心厂家,虽然使用起来略微繁琐。坚决抵制某 cxxn 站,竟然开始有辣么多收费的东西。这里记录几个常用的命令(使用环境Ubuntu 24)&am…

Proxmox使用tc给虚拟机限速,实现不对等网速——浪浪云

文章目录 前言第一步查看虚拟机的虚拟网卡名字第二部 设置上传速度限制第三部 设置下载速度限制第四部 验证是否成功查看队列调度器查看过滤器 第五步 如何解除网卡限速 前言 由于proxmox虚拟机限速只能限速对等,但是我想让下载和上传速度不对等,例如上传…

录屏软件大比拼:四款必备工具助你轻松录制精彩瞬间!

哎呀,说到电脑录屏这事儿,我这个办公室小文员可是深有体会啊!平时工作里,经常需要录个会议啊、做个教程啊,或者分享个操作技巧给同事们看。市面上的录屏软件多得数不清,但我最常用的几款工具。今天就来跟大…

Vue3 proxy跨域代理

一、跨域问题 假设vue项目的运行地址为:http://localhost:5173,此时我们想要调用后端服务的rest api,而后端接口暴露的地址为:https://192.168.1.1:8080/user。 可以发现前端服务与后端服务的域名是不同的,默认情况下…

C语言 | Leetcode C语言题解之第445题两数相加II

题目: 题解: struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2){int stack1[100];int stack2[100];int top1 0;int top2 0;int carry 0;int sum 0;struct ListNode* temp NULL;struct ListNode* head NULL;while (l1) {…

基于ssm大学生自主学习网站的设计与实现

文未可获取一份本项目的java源码和数据库参考。 1、毕业论文(设计)的背景及意义: (1)研究背景 目前,因特网是世界上最大的计算机互联网络,它通过网络设备将世界各地互相独立的不同规模的局域…

五、Drf权限组件

五、权限组件 权限组件=[权限类,权限类,权限类…] 执行所有权限类的has_permission方法,通过返回True,不通过返回False 默认情况下,所有的权限类都通过,才返回True 5.1简单应用权限组件 #ext.per class MyPermission1(BasePermission):def has_permission(self, requ…

Redis篇(Redis原理 - 网络模型)

目录 一、用户空间和内核态空间 二、阻塞IO 三、非阻塞IO 四、IO多路复用 五、IO多路复用-select方式 六、IO多路复用模型-poll模式 七、IO多路复用模型-epoll函数 八、网络模型-epoll中的ET和LT 九、网络模型-基于epoll的服务器端流程 十、网络模型-信号驱动 异步IO…

Linux安装RabbitMQ安装

1. RabbitMQ介绍 1.1 RabbitMQ关键特性 异步消息传递:允许应用程序在不直接进行网络调用的情况下交换消息。 可靠性:支持消息持久化,确保消息不会在系统故障时丢失。 灵活的路由:支持多种路由选项,包括直接、主题、…

7--苍穹外卖-SpringBoot项目中套餐管理 详解(一)

前言 目录 新增套餐 需求分析和设计 代码开发 根据分类id查询菜品 Controller层 Service层 ServiceImpl层 Mapper层 DishMapper.xml 新增套餐 实体类 mapper层 Service层 ServiceImpl层 Mapper层 SetmealMapper.xml setmealDishMapper.xml 套餐分页查询 需求分…

网络协议详解--IPv6

IPv6产生背景 (1)地址空间的耗尽:因特网呈指数级发展,导致IPv4地址空间几乎耗尽。虽然采用了子网划分、CIDR和NAT地址转换技术,但这没有从根源解决地址耗尽的问题 (2)IP层安全需求的增长&#x…