YOLOv11来了 | 自定义目标检测

embedded/2024/10/22 11:20:42/

概述

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.ppmy.cn/embedded/129544.html

相关文章

userspace 和 kernelspace

Kernel Space(内核空间) 定义与功能 内核空间是操作系统核心代码运行的地方,主要包括: 内存管理:管理和分配内存资源,包括物理内存和虚拟内存的映射。 进程管理:管理进程的创建、调度和终止&am…

SQL注入原理、类型、危害与防御

SQL注入的原理概念 SQL注入是一种常见的网络攻击技术,攻击者通过在Web应用程序的输入字段中注入恶意构造的SQL代码,以欺骗后端数据库执行非预期的SQL命令。这种攻击可以导致数据泄露、权限提升、数据篡改甚至系统瘫痪。SQL注入可以分为多种类型&#xf…

Arduino配置ESP32环境

Arduino配置ESP32环境 引言一、IDE下载教程操作取巧方法 二、社区安装包三、官方手动安装 引言 最近入手了一款ESP32-C3的开发板,想继续沿用现有Arduino IDE,网上看了很多方法,大致分了三类:IDE下载、社区安装包、github手动配置…

Task Registration Process

Task Registration Process 活动报名流程: [蓝色隐士] 工具-【集合石】 【创建】 填写活动 标题、类型、报名截止日期、报名截止时间、详情 【确定】 可【。。。】和【分享】微信

AnaTraf | 网络流量分析仪:网络故障排除的利器

http://www.anatraf.com 网络流量分析仪作为一种强有力的工具,能够帮助IT运维人员快速识别和解决网络故障,从而优化网络性能。 什么是网络流量分析仪? 网络流量分析仪是一种监测和分析网络流量的工具,能够实时捕捉数据包并提供…

django5入门【02】创建新的django程序

注意: ⭐前提:已经安装了python以及django所依赖的包1、通过django-admin管理工具在命令行创建Django应用程序,创建命令如下: django-admin startproject ProjectName❓ 疑问:除了使用命令行创建django程序外&#x…

不常用的css合集

不常用的css合集 filter属性值是1-100 呈现效效果都是线性的 Filter描述grayscale(%)将图像转为灰度图像 1是默认值,100是完全转化为灰色图像opacity(%)给图片设置透明度,1是完全不透明,100是默认值saturate(%)给图片添加饱和度&#xff0c…

供电电压和逻辑电压

供电电压和逻辑电压是电子电路中两个重要的电压概念,它们有不同的定义和应用。以下是它们之间的主要区别: 1. 定义 供电电压(Power Supply Voltage): 供电电压是用于给电路或设备提供电能的电压值。它是电源输出的电压…