继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

YOLO11 自定义物体识别(版本11)

拉莫斯之舞
关注TA
已关注
手记 295
粉丝 24
获赞 108

较少的参数,更快地,更精确……

概要

YOLO11在2024年9月27日的YOLO Vision 2024活动中发布。如果你没赶上这次活动,我强烈推荐你看一下,因为活动中有几位在机器学习和计算机视觉领域非常有分量的演讲者。这里有个链接你可以看看。https://www.youtube.com/watch?v=rfI5vOo3-_A

YOLO11 是 Ultralytics YOLO 系列的最新成员,集成了最前沿的精度、速度和效率,适用于目标检测、分割、分类、定向边界框以及姿态估计。

相比于YOLOv8,它拥有更少的参数且效果更佳,可以预见,YOLO11在边缘设备上运行更高效,将成为计算机视觉领域的主流技术。

主要特点
  • 增强的特征提取能力: YOLO11 使用改进的主干和颈部架构来增强特征提取,从而实现更精确的对象检测和复杂任务表现。
  • 优化效率和速度: 优化的架构设计和优化的训练管道实现了更快的处理速度,同时在保证精度的同时,实现了更快的处理速度。
  • 使用更少参数实现更高的精度: YOLO11m 在 COCO 数据集上使用比 YOLOv8m 少 22% 的参数实现了更高的 mAP,提高了计算效率而不牺牲精度。
  • 适应各种环境: YOLO11 可无缝部署于边缘计算设备、云端平台以及 NVIDIA GPU 系统,确保最大的灵活性。
  • 支持的广泛任务: YOLO11 支持各种计算机视觉任务,如对象检测、实例分割、图像分类、姿势估计和定向边界框检测 (OBB)。

在开始项目之前,让我们来看看与其他模型相比,Roboflow Leaderboard上参数数量低但准确性高的情况。

本教程包括的内容
  • 环境搭建
  • 准备数据集
  • 训练模型
  • 验证模型
  • 对测试图像进行推理
  • 总结
环境设置

你需要一个 Google 账户才能使用 Google Colab。
我们用 Colab 进行比如深度学习这样的任务。
我的电脑的 GPU 不给力,所以我得用 Colab 的 GPU 支持。

做完这一步,我们就检查一下GPU的状态。

它支持高达16GB的内存和2560个CUDA内核,以加速各种现代应用程序。

然后执行此代码以动态获取工作目录并灵活处理文件路径。

    import os  
    HOME = os.getcwd()  # 获取当前工作目录并赋值给变量HOME

接下来,你需要下载Ultralytics包来加载和使用模型,同时下载Roboflow包来处理数据集。

    !pip install ultralytics supervision roboflow  

    from ultralytics import YOLO  
    from roboflow import Roboflow

    # 安装和导入相关的库和模块
数据集准备

在这个项目里,我使用了RF100中的parasites数据集。

我将在该数据集中训练一个识别8种不同寄生虫类别的目标检测模型。我将使用Roboflow处理这些带有标签分类的图像。在个人项目中,我经常使用这个开源平台Roboflow。在使用现成的数据集时,您可以在数据集的健康分析部分快速获取大量信息。例如,在类别平衡部分,我们可以看到Hymenolepis类的样本数量较少。

为了提高这一类的准确性,你需要应用数据增强、过采样或调整类别权重。文中不会详细讨论这些问题,不用担心。如果你对这些内容感兴趣,随时可以联系我。如果有足够需求,我也可以分享我在这些方面的详细研究。

你可以下载并使用任何开源项目在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 -e '$d' -e '$d' -e '$d' {dataset.location}/data.yaml  # 删除倒数第三行, 删除倒数第二行, 删除最后一行  
!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   # 删除最后一行,然后再删除倒数第二行和第三行  

    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=识别 mode=训练模式 model=yolo11s.pt data={dataset.location}/data.yaml epochs=40 imgsz=640 plots=True

您也可以为自己的项目使用Python来创建它,从而实现更灵活的应用场景。下面是一个示例Python训练代码:

# 示例Python训练代码位置
    从 ultralytics 导入 YOLO  

    # 加载一个 COCO 预训练的 YOLO11n 模型  
    model = YOLO("yolo11n.pt")  

    # 在 COCO8 示例数据集上训练模型,训练轮数为 40,图片尺寸为 640  
    results = model.train(data="coco8.yaml", epochs=40, imgsz=640)

训练好的模型被保存在 /runs/detect/train/weights 文件夹下的 best.pt。
Google Colab 笔记本具有 90 分钟的空闲超时时间和 12 小时的绝对超时时间。
如果你不想丢失你的数据,请及时备份!

当您的模型训练完成后,您可以利用 YOLO11 生成的图表来评估一下训练的结果。

表现指标值

混淆表

注意: 在训练模型时,查阅Ultralytics文档的训练设置部分中的参数会有很大帮助。这部分对您的训练过程至关重要。

检查模型是否有效

这就是为什么使用 YOLO11 的验证模式更有优势:

  • 精准度:获得准确的度量指标,如 mAP50、mAP75 和 mAP50–95,全面评估模型。
  • 便捷性:利用内置功能记住训练设定,简化验证步骤。
  • 灵活性:使用相同或不同的数据集和图像尺寸进行验证。
  • 超参数调优 : 利用验证指标微调模型,提升性能。
    !yolo task=检测任务 mode=验证模式 model={HOME}/runs/detect/train/weights/best.pt data={dataset.location}/data.yaml

验证结果

总体评价:

  • 精确率、召回率和mAP指标都非常高。
  • 尽管不同类别间有性能差异,整体模型表现还是挺不错的。
  • 从速度上看,这个模型非常有效,推理时间也很短。
在测试数据集上进行推理。

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

    # 测试数据的预测模式  
    # 使用YOLO命令  
    !yolo task=detect mode=predict model={HOME}/runs/detect/train/weights/best.pt conf=0.25 source={dataset.location}/test/images save=True
# 可视化最新预测结果

# 获取最新的预测文件夹
latest_folder = max(glob.glob('/content/runs/detect/predict*/'), key=os.path.getmtime)
# 遍历最新文件夹中的第一个jpg图片
for img in glob.glob(f'{latest_folder}/*.jpg')[:1]:  
    # 显示图片
    display(IPyImage(filename=img, width=600))
    # 打印一个换行符
    print("\n")

结果是

结尾。

希望你能跟上并且顺利完成了训练吧。

我想通过搜集新资源为自己和大家写这篇文章,希望它对大家有帮助。继续关注新趋势,保持跟进!

感谢UltralyticsRoboflow团队的无尽的感谢,他们作为这一领域的先驱,为他们的出色文档和开放源代码贡献表示感谢。

如果您有任何疑问、建议或批评,您可以通过LinkedIn或我的邮件联系我。欢迎随时联系我。

参考文献:
@software{yolo11_ultralytics,  
  author = {Glenn Jocher 及 Jing Qiu,},  
  title = {Ultralytics YOLO11},  
  version = {11.0.0},  
  year = {2024},  
  url = {https://github.com/ultralytics/ultralytics},  
  orcid = {0000-0001-5950-6979, 0000-0002-7603-6750, 0000-0003-3783-7069},  
  license = {AGPL-3.0}  
}
    @misc{  
    parasites-1s07h_dataset,  
    title = { 寄生虫数据集 },  
    type = { 开源数据集 },  
    author = { Roboflow 100 },  
    howpublished = { 访问链接: [https://universe.roboflow.com/roboflow-100/parasites-1s07h](https://universe.roboflow.com/roboflow-100/parasites-1s07h) },  
    url = { https://universe.roboflow.com/roboflow-100/parasites-1s07h },  
    journal = { Roboflow 宇宙 },  
    publisher = { Roboflow },  
    year = { 2023 },  
    month = { 5月 },  
    note = { 访问日期: 2024年10月1日 },  
    }

如果你喜欢我的内容,请为我的文章点赞支持一下。我会非常感激你的点赞支持。

打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP