YOLOv8 是来自 Ultralytics 的最新的基于 YOLO 的对象检测模型系列,提供最先进的性能。
官方开源地址:
https://github.com/ultralytics/ultralyticsgithub.com/ultralytics/ultralytics
MMYOLO 开源地址:
利用以前的 YOLO 版本, YOLOv8 模型更快、更准确
- 物体检测
- 实例分割
- 图像分类
在撰写本文时,许多功能尚未添加到 Ultralytics YOLOv8 存储库中。这包括训练模型的完整导出功能集。此外,Ultralytics 将在 Arxiv 上发布一篇论文,将 YOLOv8 与其他最先进的视觉模型进行比较。
YOLOv8 的新特性
Ultralytics 为 YOLO 模型发布了一个全新的存储库。它被构建为 用于训练对象检测、实例分割和图像分类模型的统一框架。
以下是有关新版本的一些主要功能:
- 用户友好的 API(命令行 + Python)
- 更快更准确
- 支持
- 物体检测
- 实例分割
- 图像分类
- 可扩展到所有以前的版本
- 新骨干网络
- 新的 Anchor-Free head
- 新的损失函数
YOLOv8 还高效灵活地支持多种导出格式,并且该模型可以在 CPU 和 GPU 上运行。
YOLOv8 中可用的模型
YOLOv8 模型的每个类别中有五个模型用于检测、分割和分类。YOLOv8 Nano 是最快和最小的,而 YOLOv8 Extra Large (YOLOv8x) 是其中最准确但最慢的。
YOLOv8n | YOLOv8s | YOLOv8m | YOLOv8l | YOLOv8x |
YOLOv8 捆绑了以下预训练模型:
- 在图像分辨率为 640 的 COCO 检测数据集上训练的对象检测检查点。
- 在图像分辨率为 640 的 COCO 分割数据集上训练的实例分割检查点。
- 在图像分辨率为 224 的 ImageNet 数据集上预训练的图像分类模型。
让我们看一下使用 YOLOv8x 检测和实例分割模型的输出。
如何使用 YOLOv8?
要充分发挥 YOLOv8 的潜力,需要从存储库和ultralytics
包中安装要求。
要安装要求,我们首先需要克隆存储库。
git clone https://github.com/ultralytics/ultralytics.git
接下来,安装requirements
pip install -r requirements.txt
在最新版本中,Ultralytics YOLOv8 提供了完整的命令行界面 (CLI) API 和 Python SDK,用于执行训练、验证和推理。
要使用yolo
CLI,我们需要安装ultralytics
包。
pip install ultralytics
如何使用命令行界面 (CLI) 使用 YOLOv8?
安装必要的包后,我们可以使用命令访问 YOLOv8 CLI yolo
。以下是使用yolo
CLI 运行对象检测推理的示例。
yolo task=detect \
mode=predict \
model=yolov8n.pt \
source='image.jpg'
该task
标志可以接受三个参数:detect
、classify
和segment
。同样,模式可以是train
、val
或之一predict
。我们也可以像export
导出经过训练的模型时一样传递模式。
下图显示了所有可能的yolo
CLI 标志和参数。
如何使用 Python API 使用 YOLOv8?
我们还可以创建一个简单的 Python 文件,导入 YOLO 模块并执行我们选择的任务。
from ultralytics import YOLO
model = YOLO('yolov8n.pt') # 加载预训练的 YOLOv8n 模型
model.train(data='coco128.yaml') # 训练模型model.val() # 在验证集
模型
model.predict(source='https://ultralytics.com/images/bus.jpg') # 对图像进行预测
model.export(format='onnx') # 将模型导出为 ONNX 格式
例如,上述代码首先会在COCO128数据集上训练YOLOv8 Nano模型,在验证集上进行评估,并对样本图像进行预测。
让我们使用yolo
CLI 并使用对象检测、实例分割和图像分类模型进行推理。
物体检测的推理结果
以下命令使用 YOLOv8 Nano 模型对视频运行检测。
yolo task=detect mode=predict model=yolov8n.pt source='input/video_3.mp4' show=True
推理在笔记本电脑 GTX 1060 GPU 上以接近105 FPS 的速度运行。我们得到以下输出。
Clip 1. 使用 YOLOv8 Nano 模型进行检测推理。
YOLOv8 Nano 模型在几帧中将猫混淆为狗。让我们使用 YOLOv8 Extra Large 模型对同一视频运行检测并检查输出。
yolo task=detect mode=predict model=yolov8x.pt source='input/video_3.mp4' show=True
Extra Large 模型在 GTX 1060 GPU 上的平均运行速度为 17 FPS。
Clip 2. 使用 YOLOv8 超大模型进行检测推理。
虽然这次错误分类稍微少一些,但模型仍然在一些帧中错误地检测到长凳。
实例分割的推理结果
使用 YOLOv8 实例分割模型运行推理同样简单。我们只需要更改上面命令中的task
和model
名称。
yolo task=segment mode=predict model=yolov8x-seg.pt source='input/video_3.mp4' show=True
因为实例分割与对象检测相结合,所以这次的平均 FPS 约为 13。
Clip 3. 使用 YOLOv8 超大模型的分割推理。
分割图在输出中看起来非常干净。即使猫在最后几帧中躲在方块下,模型也能够检测并分割它。
图像分类的推理结果
最后,由于 YOLOv8 已经提供了预训练的分类模型,让我们使用该yolov8x-cls
模型对同一视频进行分类推理。这是存储库提供的最大分类模型。
yolo task=classify mode=predict model=yolov8x-cls.pt ource='input/video_3.mp4' show=True
Clip 4. 使用 YOLOv8 超大模型进行分类推理。
默认情况下,视频使用模型预测的前 5 个类进行注释。在没有任何后处理的情况下,注释直接匹配 ImageNet 类名。
YOLOv8 对比 YOLOv7 对比 YOLOv6 对比 YOLOv5
与之前的 YOLO 模型相比,YOLOv8 模型的表现似乎要好得多。不仅是 YOLOv5 模型,YOLOv8 也领先于 YOLOv7 和 YOLOv6 模型。
YOLOv8 与其他 YOLO 模型的对比。
与以 640 图像分辨率训练的其他 YOLO 模型相比,所有 YOLOv8 模型在参数数量相似的情况下都具有更好的吞吐量。
现在,让我们详细了解最新的 YOLOv8 模型与 Ultralytics 的 YOLOv5 模型的性能对比。下表显示了 YOLOv8 和 YOLOv5 之间的综合比较。
整体比较
YOLOv8 模型与 YOLOv5 模型的对比。
物体检测比较
YOLOv8 与 YOLOv5 对象检测模型。
实例分割比较
YOLOv8 与 YOLOv5 实例分割模型。
图像分类比较
YOLOv8 与 YOLOv5 图像分类模型。
很明显,除了其中一个分类模型外,最新的 YOLOv8 模型与 YOLOv5 相比要好得多。
YOLOv8目标检测模型的演进
下图显示了 YOLO 对象检测模型的时间线以及 YOLOv8 的演变过程。
Ultralytics YOLO 对象检测模型
YOLOv3 之前的所有 YOLO 目标检测模型都是使用 C 编程语言编写的,并使用 Darknet 框架。新手发现很难遍历代码库和微调模型。
与 YOLOv3 大约同时,Ultralytics 发布了第一个使用 PyTorch 框架实现的 YOLO (YOLOv3)。对于迁移学习,它也更容易访问和使用。
在发布 YOLOv3 后不久,Joseph Redmon 离开了计算机视觉研究社区。YOLOv4(由 Alexey 等人开发)是最后一个用 Darknet 编写的 YOLO 模型。之后,YOLO object detections 出现了很多次。Scaled YOLOv4、YOLOX、PP-YOLO、YOLOv6 和 YOLOv7 是其中一些突出的。
在 YOLOv3 之后,Ultralytics 还发布了 YOLOv5,它比所有其他 YOLO 模型更好、更快、更易于使用。
截至目前(2023 年 1 月),Ultralytics 在ultralytics存储库下发布了 YOLOv8,这可能是迄今为止最好的 YOLO 模型。
结论
在本文中,我们探讨了最新一期的 YOLO 模型,即 YOLOv8。我们介绍了新模型、它们的性能以及软件包附带的命令行界面。除此之外,我们还对视频进行了推理。