前言

最近因为工作需要用到图像分类,这里就使用YOLO进行相关工作。

YOLO是一款广受好评的实时目标检测与图像分割模型。YOLO基于深度学习和 计算机视觉领域的最新进展构建,具备端到端NMS 推理和优化的边缘部署能力。其精简的设计使其适用于各种应用场景,并能轻松适配从边缘设备到云 API 的不同硬件平台。

YOLO有非常多版本,当前最新版本是YOLO26,本文将以此进行试用。

YOLO简史

YOLO (You Only Look Once)是一款广受欢迎的物体检测与图像分割模型,由华盛顿大学的约瑟夫·雷德蒙(Joseph Redmon)和阿里·法哈迪(Ali Farhadi)开发。YOLO 于2015年推出,因其高速和高精度而YOLO 好评。

  • YOLOv2 于 2016 年发布,通过引入批量归一化、锚框和维度聚类,对原始模型进行了改进。
  • YOLOv3 于 2018 年发布,通过采用更高效的骨干网络、多个锚点以及空间金字塔池化技术,进一步提升了模型的性能。
  • YOLOv4于 2020 年发布,引入了诸如马赛克数据增强、全新的无锚点检测头以及新的损失函数等创新技术。
  • YOLOv5 进一步提升了模型的性能,并新增了超参数优化、集成实验跟踪以及自动导出至常用格式等功能。
  • YOLOv6 YOLOv6 于 2022年由美团开源,并被应用于该公司多款自动配送机器人中。
  • YOLOv7 在COCO 数据集上增加了姿势估计 等额外任务。
  • YOLOv8Ultralytics于2023年发布的YOLOv8,引入了新功能和改进,以提升性能、灵活性和效率,支持全范围的视觉AI任务。
  • YOLOv9 引入了可编程梯度信息(PGI)和通用高效层聚合网络(GELAN)等创新方法。
  • YOLOv10 由清华大学的研究人员利用 UltralyticsPython ,通过引入一个端到端(End-to-End)头部,消除了对非最大抑制(NMS)算法的需求,从而实现了实时目标检测技术的突破。
  • YOLO11:YOLO11 于2024年9月发布,在物体检测、分割、姿势估计 、跟踪和分类等多项任务中YOLO11 优异,可部署于各类AI应用和领域。
  • YOLO26🚀:Ultralytics 的新一代YOLO 专为边缘部署优化,支持端到端NMS 推理。

可以看出YOLO有很多版本,来源于很多团队,YOLOv5开始很多版本由Ultralytics维护。

项目地址:https://github.com/ultralytics/ultralytics
文档首页:https://docs.ultralytics.com/

在这里插入图片描述
在这里插入图片描述

工具安装

当前一些版本的YOLO使用都是基于Python和PyTorch的,这些需要前置安装。

Python

Python:https://www.python.org/

Python安装没什么特别好说的,在后面通过工具安装下面的库的时候可能需要换源或者科学上网。

PyTorch

PyTorch:https://pytorch.org/

PyTorch分为多个版本需要根据自己的实际情况安装,官网提供了工具可用选择合适的下载命令:https://pytorch.org/get-started/locally/

比如我的电脑上有英伟达的显卡,则可以使用 nvidia-smi 命令来查看英伟达的CUDA版本来选择合适的PyTorch版本进行安装:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

PyTorch比较大。安装完成后可以使用下面代码运行查看安装情况:

import torch
print(torch.__version__)
print(torch.version.cuda)
print(torch.cuda.is_available())

在这里插入图片描述

可以使用 pip3 uninstall torch torchvision 来卸载PyTorch。

Ultralytics

使用 pip install -U ultralytics 可以安装相关的包包括依赖的包,其中包括了PyTorch,但是这样安装的话PyTorch默认安装的是不支持GPU的版本,所以还是先手动安装PyTorch再安装Ultralytics比较合适:
在这里插入图片描述

安装完成后可以使用下面代码运行查看安装情况:

import ultralytics
print(ultralytics.__version__)

在这里插入图片描述

功能试用

YOLO各功能都是都是基于模型展开的,比如使用模型进行预测、分类等工作,如果模型不好用,还需要自己训练模块。官方提供了一些预先训练好的模型,可以在官方项目页面下载到(https://github.com/ultralytics/assets)。如果网络没问题,现在直接运行官方示例代码时也会自动下载。

官方提供的预训练模型有 n、s、m、l、x 几个尺寸,越后面的越大,运行时越慢,但是结果精度越高。

预测

预测算是YOLO最基础的功能了,检测图片中有什么东西,位置分别是哪里。使用官方提供的代码和预训练模型可以直接进行预测:

from ultralytics import YOLO

# Load a model
model = YOLO("yolo26x.pt")  # pretrained YOLO26n model

# Run batched inference on a list of images
results = model(["images/R0000457.jpg", "images/R0001258.jpg", "images/R0003438.jpg"])  # return a list of Results objects

# Process results list
for result in results:
    boxes = result.boxes  # Boxes object for bounding box outputs
    masks = result.masks  # Masks object for segmentation masks outputs
    keypoints = result.keypoints  # Keypoints object for pose outputs
    probs = result.probs  # Probs object for classification outputs
    obb = result.obb  # Oriented boxes object for OBB outputs
    result.show()  # display to screen
    # result.save(filename="result.jpg")  # save to disk

在这里插入图片描述

上面对三张图片进行的测试,可以看到预训练模块可以检测出一些常见的被训练过的物件,无法检测出未被训练过的东西。这就留下了很多可以工作的空间,对于一些特定的需求需要进行特定的训练。

当然即使只是使用已有的模型进行检测,使用时也有很多参数可以用来更细化的设置,使结果更加符合需求。

训练模型

前面演示中使用的预训练的模型可能有很多东西检测不出来,也可能检出的准确率不够高,所以很多特定应用场景下都是需要自己准备数据进行的。使用官方示例代码可以直接进行训练的测试:

from ultralytics import YOLO

if __name__ == "__main__":
    # Load a model
    # model = YOLO("yolo26x.yaml")  # build a new model from YAML
    model = YOLO("yolo26x.pt")  # load a pretrained model (recommended for training)
    # model = YOLO("yolo26x.yaml").load("yolo26x.pt")  # build from YAML and transfer weights
    # Train the model
    results = model.train(data="coco8.yaml", epochs=100, imgsz=640)

上面测试中会去下载 coco8 训练数据,就几张图片和图片对应的标注信息,只是做个训练的示范,如果有自己数据需要训练可以参考这个来准备数据集进行训练。

在这里插入图片描述

训练完成后得到的 best.pt 就是训练过程中得到的最佳的模型了,后续就可以拿来使用了。

后记

现在YOLO的入门使用真的是太方便了,但从使用的角度来说几乎不需要深入了解任何东西,直接拿来就能用。

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐