YOLOv11来了 | 自定义目标检测

news2024/10/19 22:10:08

概述

YOLO11 在 2024 年 9 月 27 日的 YOLO Vision 2024 活动中宣布:https://www.youtube.com/watch?v=rfI5vOo3-_A。

YOLO11 是 Ultralytics YOLO 系列的最新版本,结合了尖端的准确性、速度和效率,用于目标检测、分割、分类、定向边界框和姿态估计。与 YOLOv8 相比,它具有更少的参数和更好的结果,不难预见,YOLO11 在边缘设备上更高效、更快,将频繁出现在计算机视觉领域的最先进技术(SOTA)中。

主要特点

  • 增强的特征提取:YOLO11 使用改进的主干和颈部架构来增强特征提取,以实现更精确的目标检测和复杂任务的性能。

  • 针对效率和速度优化:精细的架构设计和优化的训练流程在保持准确性和性能之间最佳平衡的同时,提供更快的处理速度。

  • 更少的参数,更高的准确度:YOLO11m 在 COCO 数据集上实现了比 YOLOv8m 更高的 mAP,参数减少了 22%,提高了计算效率,同时不牺牲准确度。

  • 跨环境的适应性:YOLO11 可以无缝部署在边缘设备、云平台和配备 NVIDIA GPU 的系统上,确保最大的灵活性。

  • 支持广泛的任务范围:YOLO11 支持各种计算机视觉任务,如目标检测、实例分割、图像分类、姿态估计和定向目标检测(OBB)。

本教程涵盖的步骤

  • 环境设置

  • 准备数据集

  • 训练模型

  • 验证模型

  • 在测试图像上运行推理

  • 结论

环境设置

你需要一个谷歌账户才能使用 Google Colab。我们使用 Colab 进行需要密集计算的任务,比如深度学习。由于我电脑的 GPU 不足,我需要激活 Colab 的 GPU 支持。

 这样做之后,我们检查 gpu 活动。

 它支持高达 16GB 的内存和 2560 CUDA 核心,以加速广泛的现代应用程序。然后执行此代码以动态确定工作目录并灵活管理文件路径。

import os
HOME = os.getcwd()

 接下来,你需要下载 Ultralytics 包来加载和处理模型,以及用于数据集的 Roboflow 包。

!pip install ultralytics supervision roboflow
from ultralytics import YOLOfrom roboflow import Roboflow

准备数据集

在这个项目中,我使用了 RF100 中包含的寄生虫数据集。我将在这个数据集中训练一个有 8 种不同寄生虫类别的目标检测模型。我将通过 Roboflow 处理标记、分类的图像。我经常在我的个人项目中使用这个开源平台。在处理现成的数据集时,你可以在数据集的健康分析部分快速获取大量关于数据的信息。例如,下面显示的类别平衡部分,我们可以看到 Hymenolepis 类别是代表不足的。

数据集相关链接:

https://universe.roboflow.com/roboflow-100/parasites-1s07h

https://universe.roboflow.com/roboflow-100

https://universe.roboflow.com/roboflow-100/parasites-1s07h/health

 为了提高这个类别的准确性,你需要应用增强、过采样或调整类别权重。我们不会在本文中讨论这些主题,不用担心,但如果你对这些任务感兴趣,请随时联系我。如果有足够需求,我也可以分享我关于这些主题的详细工作。你可以下载并使用 Roboflow 环境中的任何开源项目,按照格式使用。在准备或选择数据集后,我们将在 Colab 环境中工作我们切换到 Colab 的原因是它提供免费的 16GB NVIDIA T4 GPU 使用。我在下面提到了这个问题。我们需要使用 Roboflow API 以 YOLOv8 格式导入我们的数据。让我们获取现成的代码片段和数据格式。

rf = Roboflow(api_key="your-api-key")
project = rf.workspace("roboflow-100").project("parasites-1s07h")
version = project.version(2)
dataset = version.download("yolov8")
!sed -i '$d' {dataset.location}/data.yaml   # Delete the last line
!sed -i '$d' {dataset.location}/data.yaml   # Delete the second-to-last line
!sed -i '$d' {dataset.location}/data.yaml   # Delete the third-to-last line

!echo 'test: ../test/images' >> {dataset.location}/data.yaml
!echo 'train: ../train/images' >> {dataset.location}/data.yaml
!echo 'val: ../valid/images' >> {dataset.location}/data.yaml

我们需要更新 data.yaml 格式,如下所示,以便以 YOLO11 格式进行训练。

!sed -i '$d' {dataset.location}/data.yaml   # Delete the last line
!sed -i '$d' {dataset.location}/data.yaml   # Delete the second-to-last line
!sed -i '$d' {dataset.location}/data.yaml   # Delete the third-to-last line

!echo 'test: ../test/images' >> {dataset.location}/data.yaml
!echo 'train: ../train/images' >> {dataset.location}/data.yaml
!echo 'val: ../valid/images' >> {dataset.location}/data.yaml

训练模型

让我们在我们的数据集上训练模型 40 个周期。作为这个项目的一部分,我通过 CLI 命令展示了训练。在如下所示的简单命令下定义后,训练开始。

!yolo task=detect mode=train model=yolo11s.pt data={dataset.location}/data.yaml epochs=40 imgsz=640 plots=True

你也可以使用 Python 创建它,以实现更灵活的场景。下面展示了示例 Python 训练代码:

from ultralytics import YOLO
# Load a COCO-pretrained YOLO11n modelmodel = YOLO("yolo11n.pt")
# Train the model on the COCO8 example dataset for 40 epochsresults = model.train(data="coco8.yaml", epochs=40, imgsz=640)

训练好的模型保存在 /runs/detect/train/weights 文件下的 best.pt。

一旦你的模型完成训练,你可以使用 YOLO11 生成的图表评估训练结果。

注意:在训练模型时,回顾 Ultralytics 文档中“训练设置”部分的参数是有益的。这部分对您的训练过程至关重要。

验证模型

以下是使用 YOLO11 的 Val 模式的优势:

  • 精度:获取准确的指标,如 mAP50、mAP75 和 mAP50–95,全面评估你的模型。

  • 便利性:利用内置功能记住训练设置,简化验证过程。

  • 灵活性:使用相同或不同的数据集和图像大小验证你的模型。

  • 超参数调整:使用验证指标微调你的模型以获得更好的性能。

!yolo task=detect mode=val model={HOME}/runs/detect/train/weights/best.pt data={dataset.location}/data.yaml

一般评估:

  • 精确度、召回率和 mAP 指标相当高。

  • 尽管不同类别之间存在性能差异,但整体模型性能令人满意。

  • 在速度方面,这是一个有效的模型,推理时间很低。

在测试数据集上运行推理

让我们评估模型的泛化能力,看看它在之前未见过的测试数据集上的预测。

# predict mode for test data
!yolo task=detect mode=predict model={HOME}/runs/detect/train/weights/best.pt conf=0.25 source={dataset.location}/test/images save=True
# for visualization
latest_folder = max(glob.glob('/content/runs/detect/predict*/'), key=os.path.getmtime)
for img in glob.glob(f'{latest_folder}/*.jpg')[:1]:    
    display(IPyImage(filename=img, width=600))    
    print("\n")

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

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

相关文章

问题清除指南|alimama-creative/FLUX-Controlnet-Inpainting 运行注意事项

前言:近日验证想法需要用到inpainting技术,选择了https://github.com/alimama-creative/FLUX-Controlnet-Inpainting进行测试,在实现过程中遇到几个小问题,在此分享一下解决经验。 1. 下载预训练模型到本地 由于在huggingface官网…

React Agent 自定义实现

目录 背景 langchin 中的 agent langchin 中 agent 的问题 langchain 的 agent 案例 自定义 React Agent 大模型 工具定义 问题设定 问题改写,挖掘潜在意图 React Prompt 下一步规划 问题总结 代码 背景 之前使用过 langchian 中的 agent 去实现过一些…

WordPress监控用户行为回放插件

在数字营销的世界里,了解用户行为是提升用户体验和转化率的关键。nicen-replay 插件,它能够让您轻松回放用户在网站上的每一步操作,从点击到滚动,再到表单填写,每一个细节都清晰可见 nicen-replay,是一款可…

C#从零开始学习(类型和引用)(4)

类型 本章所有的代码都放在 https://github.com/hikinazimi/head-first-Csharp 整型 byte: 0~255sbyte: -128~127short: -32768~32767int: -2147483648~2147483647long: -9223372036854775808~9223372036854775807 以u开头的无符号整数 ushort,uint,ulong 浮点 float: (6~9…

RHCE【远程连接服务器】

目录 一、远程连接服务器简介 二、加密技术简介 SSH工作过程: (1)版本协商阶段 (2)密钥和算法协商阶段 (3)认证阶段 (4)会话请求阶段 (5&#xff0…

KUKA外部自动配置(上)

通过外部PLC对机器人自动运行进程进行控制,其控制原理是:外部PLC通过外部自动运行接口向机器人控制系统发出机器人进程的相关信号(如:运行许可、故障确认、程序启动等),机器人控制系统向外部PLC系统发送有关…

STM32 I2C通信协议详解

文章目录 STM32 I2C通信协议详解一、I2C协议概述二、物理层特性总线结构:引脚定义:电平特性:地址机制: 三、协议层机制起始信号:停止信号:数据有效性:应答信号(ACK)&…

机器学习|Pytorch实现天气预测

机器学习|Pytorch实现天气预测 🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍖 原作者:K同学啊 电脑系统:Windows11 显卡型号:NVIDIA Quadro P620 语言环境:python 3.9.7 编译器&#x…

【Python】selenium遇到“InvalidArgumentException”的解决方法

在使用try……except 的时候捕获到这个错误: InvalidArgumentException: invalid argument (Session info: chrome112.0.5614.0) 这个错误代表的是,当传入的参数不符合期望时,就会抛出这个异常: InvalidArgumentException: invali…

常见TCP/IP协议基础——计算机网络

目录 前言常见协议基础常见协议-基于TCP的应用层协议常见协议-基于UDP的应用层协议常见协议-网络层协议习题自测1.邮件发送协议2.接收邮件协议端口3.建立连接4.层次对应关系5.FTP服务器端口 前言 本笔记为备考软件设计师时的重点知识点笔记,关于常见TCP/IP协议基础…

Java【多线程】wait和notify

目录 wait / notify 由于线程之间是抢占式执⾏的, 因此线程之间执⾏的先后顺序难以预知. 但是实际开发中有时候我们希望合理的协调多个线程之间的执⾏先后顺序. wait / notify 等待/通知 协调线程之间的执行逻辑的顺序的 可以让后执行的逻辑等待先执行的逻辑 虽然无法直接…

缓存框架JetCache源码解析-缓存定时刷新

作为一个缓存框架,JetCache支持多级缓存,也就是本地缓存和远程缓存,但是不管是使用着两者中的哪一个或者两者都进行使用,缓存的实时性一直都是我们需要考虑的问题,通常我们为了尽可能地保证缓存的实时性,都…

word取消自动单词首字母大写

情况说明:在word输入单词后首字母会自动变成大写 (1)点击菜单栏文件 (2)点击“更多”——>“选项” (3)点击“校对”——>“自动更正选项” (4)取消“句首字母大写…

WPF样式详解:行内样式、模板样式和页面样式的全方位分析

Windows Presentation Foundation (WPF) 是微软推出的一种用于构建桌面应用程序的UI框架。WPF 提供了强大的样式和模板机制,允许开发人员以声明的方式定义和复用UI元素的视觉外观。本文将深入探讨WPF的行内样式、模板样式和页面样式,帮助您在实际开发中更…

大数据linux操作系统

第一关:Linux的初体验 答案: cd / ls -a / (里面有空格要注意) 第二关:Linux的常用命令 答案: touch newfile mkdir newdir cp newfile newdir/newfileCpy 第三关:Linux查询命令帮助语句…

我在自动化测试方面犯过的3个大错误

每个人都会犯错误,但不管错误看起来有多糟糕,你都可以恢复过来,更重要的是,从错误中学习。 在软件开发过程的任何领域,从编码到测试,我们都会时不时地犯一些错误。通常,这些错误都很小&#xf…

Linux kernel 堆溢出利用方法

前言 本文还是用一道例题来讲解几种内核堆利用方法,内核堆利用手段比较多,可能会分三期左右写。进行内核堆利用前,可以先了解一下内核堆的基本概念,当然更好去找一些详细的内核堆的基础知识。 概述 Linux kernel 将内存分为 页…

Leetcode 字符串解码

该代码的算法思想可以分为以下几个步骤: 1. 使用栈来处理嵌套结构: 我们需要处理像 k[encoded_string] 这种格式,其中的 encoded_string 可能是嵌套的,即像 3[a2[c]] 这样的输入。因此,我们可以借助 栈(S…

音视频基础知识分享

音视频基础知识分享 RKMedia的各个组件及其交互 首先上图: 考虑到公司业务主要是相机,所以,主要去关注图像数据流,对于音频数据流直接忽略。 图像数据流向: Camera Sensor将光信号转换成电信号(Raw数据&…

【大模型】AI视频课程制作工具开发

1. 需求信息 1.1 需求背景 讲师们在制作视频的过程中,发现录制课程比较麻烦,要保证环境安静,保证录制过程不出错,很容易反复重复录制,为了解决重复录制的工作量,想通过 ai 课程制作工具,来解决…