YOLOv11来了 | 自定义目标检测

概述

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.mzph.cn/diannao/56789.shtml

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

相关文章

esp32-c3 Supermini 驱动ds3121的问题

c3 驱动ds3121 ,始终有问题,但把程序用esp32上,一点问题都没有,难道c3 的i2c库是另外的库, 下图只读取秒显示的 错误数据,更换了scl频率,针脚,还是错,但换成esp32 输出是正确连续秒…

基于STM32单片机设计的矿山环境作业安全监测系统

文章目录 一、前言1.1 项目介绍【1】项目开发背景【2】设计实现的功能【3】项目硬件模块组成【4】需求总结1.2 设计思路1.3 系统功能总结1.4 开发工具的选择【1】设备端开发【2】上位机开发1.5 模块的技术详情介绍【1】BC26-NBIOT模块【2】DHT11温湿度模块【3】PM2.5粉尘模块二…

开机引导项修改 BCDEdit

BCDEdit C:\Users\san>BCDEditWindows 启动管理器 -------------------- 标识符 {bootmgr} device partition\Device\HarddiskVolume1 path \EFI\Microsoft\Boot\bootmgfw.efi description Windows Boo…

字节跳动实习生投毒自家大模型细节曝光 影响到底有多大?

10月19日,字节跳动大模型训练遭实习生攻击一事引发广泛关注。据多位知情人士透露,字节跳动某技术团队在今年6月遭遇了一起内部技术袭击事件,一名实习生因对团队资源分配不满,使用攻击代码破坏了团队的模型训练任务。 据悉&#xf…

鸿蒙开发 四十七 Promise async await

1、Promise是接口 鸿蒙sdk提供的ProPromise版本有点多,是泛型接口,用interface修饰,官网给出的解释是“Represents the completion of an asynchronous operation”,翻译大概意思是:异步操作的完成的处理,总…

全球知名度最高的华人改名大师颜廷利:世界公认的三大哲学家思想家

颜廷利教授,一位享誉全球的思想巨擘与现代国学泰斗,以其卓越的哲学地位和深远的影响力,成为当代思想界的璀璨明星。他的哲学思想深邃而广博,不仅涵盖了人的全面发展、自然社会的深度融合,更在教育理念上独树一帜&#…

2.2机器学习--逻辑回归(分类)

目录 1.算法介绍 2.算法原理 3. API 介绍 4.代码示例 本章节我们来学习线性分类问题,在有监督学习中,最主要的两种学习任务是 回归(regression) 和 分类(classification),而其中线性回归和线…

JR_T0213—2021 金融网络安全 Web应用服务安全测试通用规范.pdf

预览 内容太多,自己下载看吧 https://www.mhtsec.com/667/

CSP-J2023年复赛

P9748 [CSP-J 2023] 小苹果 Code #include<iostream> #include<cmath> using namespace std; int n , ans , sum; int main(){cin >> n;while(n){sum ;if(n % 3 1 && !ans) ans sum;n - ceil(n / 3.0);}cout << sum << " "…

精选20个爆火的Python实战项目(含源码),直接拿走不谢!

今天给大家介绍20个非常实用的Python项目&#xff0c;帮助大家更好的学习Python。 完整版Python项目源码&#xff0c;【点击这里】领取&#xff01; ① 猜字游戏 import random def guess_word_game(): words ["apple", "banana", "cherry&quo…

1. 安装框架

一、安装 Laravel 11 框架 按照官方文档直接下一步安装即可 1. 安装步骤 2. 执行数据库迁移 在.env文件中提前配置好数据库连接信息 php artisan migrate二、安装 Filament3.2 参考 中文文档 进行安装 1. 安装 拓展包 composer require filament/filament:"^3.2" -W…

双十一有啥不能错过的好物清单?真心为你带来2024最值好物分享!

双十一购物狂欢节即将到来&#xff0c;许多朋友们都在期待着这一天&#xff0c;希望能够在这个特别的日子里为自己添置一些日常用品。今天&#xff0c;我特意为大家精心挑选了五款在生活中都会用得到的好物&#xff0c;希望能够帮助大家在双十一期间做出明智的选择。 最值好物…

【java面经thinking】四

目录 悲观锁synchronized synchronized的用法 只能锁引用类型 对象的内存布局&#xff08;引用型&#xff09; JDK1.6之前的锁----重量级锁 1.6之后---偏向锁&#xff0c;轻量级锁(自适应自旋锁) 偏向锁 轻量级锁 区别 某些场景使用重量级锁的原因 synchronized是不公…

电脑基础知识:mfc110.dll丢失的解决方法

1.mfc110.dll 丢失常见原因 mfc110.dll 文件的丢失或损坏是Windows系统中常见的问题&#xff0c;它可能由多种原因引起&#xff0c;以下是一些主要的因素&#xff1a; 不完全的软件卸载 在卸载程序时&#xff0c;如果相关的 DLL 文件没有被正确移除&#xff0c;可能会导致文件…

386. 字典序排数

难度&#xff1a;中等 题目&#xff1a; 给你一个整数 n &#xff0c;按字典序返回范围 [1, n] 内所有整数。 你必须设计一个时间复杂度为 O(n) 且使用 O(1) 额外空间的算法。 示例 1&#xff1a; 输入&#xff1a;n 13 输出&#xff1a;[1,10,11,12,13,2,3,4,5,6,7,8,9]示…

华为ENSP用户权限深度解析:构建安全高效的网络管理

在华为ENSP&#xff08;Enterprise Network Simulation Platform&#xff09;用户界面中&#xff0c;用户权限级别是一个重要的概念&#xff0c;它用于限制不同用户访问设备的权限&#xff0c;从而增加设备管理的安全性。以下是对华为ENSP用户界面用户权限级别的详细解释&#…

AI绘图大模型 Stable Diffusion 使用详解

近年来&#xff0c;生成式 AI 技术&#xff0c;特别是 AI 绘图模型的进展令人瞩目。Stable Diffusion 是其中一款开源的大规模图像生成模型&#xff0c;它能够根据文本描述生成高质量的图像&#xff0c;支持从写实风格到卡通、幻想等各种不同的视觉效果。本文将深入介绍如何使用…

ASP.NET Core8.0学习笔记(二十二)——单向导航属性

一、单向导航属性引入 1.双向导航属性存在的问题&#xff1a;数据库中存在一些“基础表”&#xff0c;这些表会被其他各种表来引用。比如有一张User表&#xff0c;另有请假表&#xff08;请假人、审批人&#xff09;、采购表&#xff08;采购员、审核员&#xff09;等多个表的…

PYTHON使用小结

线程使用 import threadingthread01 Nonedef ThreadFunc(param)xxxxxdef Test()global thread01 thread01 threading.Thread(targetThreadFunc)thread01.daemon True #设置为TRUE,主线程结束后&#xff0c;此线程也会退出&#xff0c; 默认Falsethread01.start()也可以在创…

【VUE】Vue中常用的修饰符

事件修饰符 .stop&#xff1a;阻止事件冒泡。.prevent&#xff1a;阻止默认事件。.capture&#xff1a;使用事件捕获模式。.self&#xff1a;只当事件在该元素本身&#xff08;比如不是子元素&#xff09;触发时触发回调。.once&#xff1a;只触发一次事件。 按键修饰符 .en…