Ultralytics YOLOv8
模型介绍
Ultralytics YOLOv8,是实时物体检测和图像分割模型的最新版本。YOLOv8 建立在深度学习和计算机视觉的前沿进步之上,在速度和准确性方面提供无与伦比的性能。其流线型设计使其适用于各种应用,并可轻松适应不同的硬件平台,从边缘设备到云 API。
YOLO(You Only Look Once)是一种流行的物体检测和图像分割模型,由华盛顿大学的Joseph Redmon和Ali Farhadi开发。YOLO于2015年推出,因其高速和高精度而迅速流行起来。
2016 年发布的 YOLOv2 通过合并批量归一化、锚框和维度聚类来改进原始模型。
2018 年推出的 YOLOv3 使用更高效的骨干网络、多个锚点和空间金字塔池进一步增强了模型的性能。
YOLOv4 于 2020 年发布,引入了 Mosaic 数据增强、新的无锚检测头和新的损失函数等创新。
YOLOv5 进一步提高了模型的性能,并添加了超参数优化、集成实验跟踪和自动导出为流行导出格式等新功能。
YOLOv6 于 2022 年由美团开源,并被用于该公司的许多自动送货机器人。
YOLOv7 在 COCO 关键点数据集上添加了额外的任务,例如姿态估计。
YOLOv8 是 Ultralytics 的 YOLO 的最新版本。作为最先进的 (SOTA,state-of-the-art) 模型,YOLOv8 建立在以前版本的成功基础上,引入了新功能和改进,以增强性能、灵活性和效率。YOLOv8 支持全方位的视觉 AI 任务,包括检测、分割、姿态估计、跟踪和分类。这种多功能性使用户能够在不同的应用程序和领域中利用 YOLOv8 的功能。
环境
镜像选择:jupyterlab:3.2.9-pytorch1.10.0-centos7.6-dtk22.04.2-py37
步骤
安装
使用Pip在一个Python>=3.8环境中安装ultralytics包,此环境还需包含PyTorch>=1.8。这也会安装所有必要的依赖项。
实验用py3.7的环境同样也可以成功
pip install -t requirement.txt 检查依赖
pip install ultralytics 安装包
由于模型都在github的原因,在训练,预测的时候需要手动下载模型地址:https://github.com/ultralytics/assets/releases/,部分模型已经下载在文档中可以直接使用
实验
from ultralytics import YOLO
# 从头开始创建一个新的YOLO模型
model = YOLO('yolov8n.yaml')
# 加载预训练的YOLO模型(推荐用于训练)
model = YOLO('yolov8n.pt')
# 使用“coco128.yaml”数据集训练模型3个周期
results = model.train(data='coco128.yaml', epochs=3)
# 评估模型在验证集上的性能
results = model.val()
# 使用模型对图片进行目标检测
results = model('https://ultralytics.com/images/bus.jpg')
# 将模型导出为ONNX格式
success = model.export(format='onnx')
训练
from ultralytics import YOLO
# 加载一个模型
model = YOLO('yolov8n.yaml') # 从YAML建立一个新模型
model = YOLO('yolov8n.pt') # 加载预训练模型(推荐用于训练)
model = YOLO('yolov8n.yaml').load('yolov8n.pt') # 从YAML建立并转移权重
# 训练模型
results = model.train(data='coco128.yaml', epochs=100, imgsz=640)
验证
from ultralytics import YOLO
# 加载模型
model = YOLO('yolov8n.pt') # 加载官方模型
model = YOLO('path/to/best.pt') # 加载自定义模型
# 验证模型
metrics = model.val() # 无需参数,数据集和设置记忆
metrics.box.map # map50-95
metrics.box.map50 # map50
metrics.box.map75 # map75
metrics.box.maps # 包含每个类别的map50-95列表
预测
from ultralytics import YOLO
# 加载模型
model = YOLO('yolov8n.pt') # 预训练的 YOLOv8n 模型
# 在图片列表上运行批量推理
results = model(['im1.jpg', 'im2.jpg']) # 返回 Results 对象列表
# 处理结果列表
for result in results:
boxes = result.boxes # 边界框输出的 Boxes 对象
masks = result.masks # 分割掩码输出的 Masks 对象
keypoints = result.keypoints # 姿态输出的 Keypoints 对象
probs = result.probs # 分类输出的 Probs 对象
导出
from ultralytics import YOLO
# 加载模型
model = YOLO('yolov8n.pt') # 加载官方模型
model = YOLO('path/to/best.pt') # 加载自定义训练的模型
# 导出模型
model.export(format='onnx')
跟踪
from ultralytics import YOLO
# 加载官方或自定义模型
model = YOLO('yolov8n.pt') # 加载一个官方的检测模型
model = YOLO('yolov8n-seg.pt') # 加载一个官方的分割模型
model = YOLO('yolov8n-pose.pt') # 加载一个官方的姿态模型
model = YOLO('path/to/best.pt') # 加载一个自定义训练的模型
# 使用模型进行追踪
results = model.track(source="https://youtu.be/LNwODJXcvt4", show=True) # 使用默认追踪器进行追踪
results = model.track(source="https://youtu.be/LNwODJXcvt4", show=True, tracker="bytetrack.yaml") # 使用ByteTrack追踪器进行追踪
基准测试
from ultralytics.utils.benchmarks import benchmark
# 在GPU上进行基准测试
benchmark(model='yolov8n.pt', data='coco8.yaml', imgsz=640, half=False, device=0)
任务
检测
训练:在COCO128数据集上使用图像尺寸640将YOLOv8n训练100个epochs。
from ultralytics import YOLO
# 加载模型
model = YOLO('yolov8n.yaml') # 从YAML构建新模型
model = YOLO('yolov8n.pt') # 加载预训练模型(推荐用于训练)
model = YOLO('yolov8n.yaml').load('yolov8n.pt') # 从YAML构建并转移权重
# 训练模型
results = model.train(data='coco128.yaml', epochs=100, imgsz=640)
验证:在COCO128数据集上验证训练好的YOLOv8n模型准确性。无需传递参数,model 作为模型属性保留其训练的 data 和参数。
from ultralytics import YOLO
# 加载模型
model = YOLO('yolov8n.pt') # 加载官方模型
model = YOLO('path/to/best.pt') # 加载自定义模型
# 验证模型
metrics = model.val() # 无需参数,数据集和设置通过模型属性记住
metrics.box.map # map50-95
metrics.box.map50 # map50
metrics.box.map75 # map75
metrics.box.maps # 包含每个类别map50-95的列表
预测:使用训练好的YOLOv8n模型在图像上进行预测。
from ultralytics import YOLO
# 加载模型
model = YOLO('yolov8n.pt') # 加载官方模型
model = YOLO('path/to/best.pt') # 加载自定义模型
# 使用模型进行预测
results = model('https://ultralytics.com/images/bus.jpg') # 对图像进行预测
导出:将YOLOv8n模型导出为ONNX、CoreML等不同格式。
from ultralytics import YOLO
# 加载模型
model = YOLO('yolov8n.pt') # 加载官方模型
model = YOLO('path/to/best.pt') # 加载自定义训练模型
# 导出模型
model.export(format='onnx')
分割
训练:在COCO128-seg数据集上以640的图像尺寸训练YOLOv8n-seg模型共100个周期。
from ultralytics import YOLO
# 载入一个模型
model = YOLO('yolov8n-seg.yaml') # 从YAML构建一个新模型
model = YOLO('yolov8n-seg.pt') # 载入预训练模型(推荐用于训练)
model = YOLO('yolov8n-seg.yaml').load('yolov8n.pt') # 从YAML构建并传递权重
# 训练模型
results = model.train(data='coco128-seg.yaml', epochs=100, imgsz=640)
验证:在COCO128-seg数据集上验证已训练的YOLOv8n-seg模型的准确性。不需要传递任何参数,因为model保留了其训练的data和作为模型属性的设置。
from ultralytics import YOLO
# 载入一个模型
model = YOLO('yolov8n-seg.pt') # 载入官方模型
model = YOLO('path/to/best.pt') # 载入自定义模型
# 验证模型
metrics = model.val() # 不需要参数,数据集和设置被记住了
metrics.box.map # map50-95(B)
metrics.box.map50 # map50(B)
metrics.box.map75 # map75(B)
metrics.box.maps # 各类别map50-95(B)列表
metrics.seg.map # map50-95(M)
metrics.seg.map50 # map50(M)
metrics.seg.map75 # map75(M)
metrics.seg.maps # 各类别map50-95(M)列表
预测:使用已训练的YOLOv8n-seg模型在图像上进行预测。
from ultralytics import YOLO
# 载入一个模型
model = YOLO('yolov8n-seg.pt') # 载入官方模型
model = YOLO('path/to/best.pt') # 载入自定义模型
# 使用模型进行预测
results = model('https://ultralytics.com/images/bus.jpg') # 对一张图像进行预测
导出:将YOLOv8n-seg模型导出为ONNX、CoreML等不同格式。
from ultralytics import YOLO
# 载入一个模型
model = YOLO('yolov8n-seg.pt') # 载入官方模型
model = YOLO('path/to/best.pt') # 载入自定义训练模型
# 导出模型
model.export(format='onnx')
分类
训练:在MNIST160数据集上训练YOLOv8n-cls模型100个时期,图像尺寸为64。
from ultralytics import YOLO
# 加载模型
model = YOLO('yolov8n-cls.yaml') # 从YAML构建新模型
model = YOLO('yolov8n-cls.pt') # 加载预训练模型(推荐用于训练)
model = YOLO('yolov8n-cls.yaml').load('yolov8n-cls.pt') # 从YAML构建并转移权重
# 训练模型
results = model.train(data='mnist160', epochs=100, imgsz=64)
验证:在MNIST160数据集上验证训练好的YOLOv8n-cls模型准确性。不需要传递任何参数,因为model保留了它的训练data和参数作为模型属性。
from ultralytics import YOLO
# 加载模型
model = YOLO('yolov8n-cls.pt') # 加载官方模型
model = YOLO('path/to/best.pt') # 加载自定义模型
# 验证模型
metrics = model.val() # 无需参数,数据集和设置已记忆
metrics.top1 # top1准确率
metrics.top5 # top5准确率
预测:使用训练过的YOLOv8n-cls模型对图像进行预测。
from ultralytics import YOLO
# 加载模型
model = YOLO('yolov8n-cls.pt') # 加载官方模型
model = YOLO('path/to/best.pt') # 加载自定义模型
# 使用模型进行预测
results = model('https://ultralytics.com/images/bus.jpg') # 对图像进行预测
导出:将YOLOv8n-cls模型导出为其他格式,如ONNX、CoreML等。
from ultralytics import YOLO
# 加载模型
model = YOLO('yolov8n-cls.pt') # 加载官方模型
model = YOLO('path/to/best.pt') # 加载自定义训练模型
# 导出模型
model.export(format='onnx')
姿态
训练:在COCO128姿态数据集上训练一个YOLOv8姿态模型。
from ultralytics import YOLO
# 加载模型
model = YOLO('yolov8n-pose.yaml') # 从YAML构建一个新模型
model = YOLO('yolov8n-pose.pt') # 加载一个预训练模型(推荐用于训练)
model = YOLO('yolov8n-pose.yaml').load('yolov8n-pose.pt') # 从YAML构建并传输权重
# 训练模型
results = model.train(data='coco8-pose.yaml', epochs=100, imgsz=640)
验证:在COCO128姿态数据集上验证训练好的YOLOv8n姿态模型的准确性。没有参数需要传递,因为模型保存了其训练数据和参数作为模型属性。
from ultralytics import YOLO
# 加载模型
model = YOLO('yolov8n-pose.pt') # 加载官方模型
model = YOLO('path/to/best.pt') # 加载自定义模型
# 验证模型
metrics = model.val() # 无需参数,数据集和设置都记住了
metrics.box.map # map50-95
metrics.box.map50 # map50
metrics.box.map75 # map75
metrics.box.maps # 包含每个类别map50-95的列表
预测:使用训练好的YOLOv8n姿态模型在图片上运行预测。
from ultralytics import YOLO
# 加载模型
model = YOLO('yolov8n-pose.pt') # 加载官方模型
model = YOLO('path/to/best.pt') # 加载自定义模型
# 用模型进行预测
results = model('https://ultralytics.com/images/bus.jpg') # 在一张图片上预测
导出:将YOLOv8n姿态模型导出为ONNX、CoreML等不同格式。
from ultralytics import YOLO
# 加载模型
model = YOLO('yolov8n-pose.pt') # 加载官方模型
model = YOLO('path/to/best.pt') # 加载自定义训练好的模型
# 导出模型
model.export(format='onnx')
模型
不同的模型文件:
名称 | 模型文件 | 家族 |
---|---|---|
检测 | yolov8n.pt | 8n、8s、8m、8l、8x |
分割 | yolov8n-seg.pt | 8n、8s、8m、8l、8x |
分类 | yolov8n-cls.pt | 8n、8s、8m、8l、8x |
姿态 | yolov8n-pose.pt | 8n、8s、8m、8l、8x |
不同类型的文件数值:
类型 | 准确度 | 耗时长 | 运算次数/秒 |
---|---|---|---|
YOLOv8n | 37.3 | 80.4 | 8.7 |
YOLOv8s | 44.9 | 128.4 | 28.6 |
YOLOv8m | 50.2 | 234.7 | 78.9 |
YOLOv8l | 52.9 | 375.2 | 165.2 |
YOLOv8x | 53.9 | 479.1 | 257.8 |
使用jupyter文件结构
├── ultralytics
└── runs 模型训练会自动创建的文件
└── detect
└── train 训练数据存放处
└── weights 文件夹里有best.pt 和 last.pt ,best.pt 是效果最好的权重,last.pt 是最后一个权重
└── val 验证数据存放处
└── val 验证数据存放处
└── yolov8n.pt 模型文件,根据需要存放模型文件,用来验证,训练则不需要
└── xxx.ipynb jupyter文件
└── requirement.txt 依赖包
└── 操作文件 选择需要检测、分割、姿态估计、跟踪和分类的文件放置在此处,YOLO 可以处理多种类型的文件
└── dataset COCO 数据集,模型文件夹中的所有.pt模型文件,都是针对 COCO 数据集训练生成的,coco128是示例文件 ├── train/ 参考 coco128.zip 内文件格式 ├── images/ └── labels/ └── val/ ├── images/ └── labels/
└── coco128.yaml 创建一个 data.yaml
文件:在数据集的根目录中,创建一个描述数据集的 data.yaml
文件,包括类别信息等必要内容
└── coco128.zip 压缩数据集
许可证
Ultralytics提供两种许可选项以适应不同的使用场景:
- AGPL-3.0许可证:这种OSI-approved开源许可证非常适合学生和爱好者,促进了开放的合作和知识共享。更多详细信息请参阅LICENSE文件。
- 企业许可证:这种许可证设计用于商业用途,允许将Ultralytics软件和AI模型无缝集成到商业商品和服务中,绕过AGPL-3.0的开源要求。如果您的场景涉及将我们的解决方案嵌入到商业产品中,请通过Ultralytics Licensing联系我们。
参考
https://github.com/ultralytics/ultralytics/tree/main
https://zhuanlan.zhihu.com/p/655889189
https://docs.ultralytics.com/zh/
中国共产党
评论