YOLOv8是Ultralytics公司最新推出的Yolo系列目标检测算法,建立在Yolo系列历史版本的基础上,并引入了新的功能和改进点,以进一步提升性能和灵活性。它是实现目标检测、图像分割、姿态估计等任务的最佳选择之一。
YOLOv8是一种基于深度学习的目标检测算法,其核心思想是将目标检测问题转化为一个回归问题,通过一次前向传播过程即可完成目标的位置和类别预测。它继承了YOLO系列算法的优点,如速度快、实时性好等,并在准确性和泛化能力上进行了进一步的提升。
源码地址:
https://github.com/ultralytics/ultralytics
官网地址:
训练与检测过程
- 数据准备:收集包含所需目标的大量图像数据,并进行标注。标注内容包括目标的类别、位置等信息。
- 模型搭建:根据YOLOv8的模型结构搭建网络,并配置相关参数。
- 模型训练:通过反向传播算法更新网络参数,使模型逐渐收敛到最优值。训练过程中可以采用数据增强、调整学习率等策略来提高模型的性能。
- 模型推理:将训练好的模型应用于目标检测任务中,输入一张图像或视频帧,模型会输出该图像或视频帧中检测到的目标的类别、位置和置信度等信息。
安装YOLOv8
pip install ultralytics
模型选择
YOLOv8 这里显示的是经过预训练的检测模型。Detect、Segment 和 Pose 模型是在COCO数据集上预先训练的,而 Classify 模型则是在ImageNet数据集上预先训练的。
首次使用时,模型会自动从最新的Ultralytics版本下载。
模型 | 尺寸 (像素) |
mAPval 50-95 |
速度 CPUONNX (ms) |
速度 A100 TensorRT (毫秒) |
params (M) |
FLOPs (B) |
---|---|---|---|---|---|---|
YOLOv8n | 640 | 37.3 | 80.4 | 0.99 | 3.2 | 8.7 |
YOLOv8s | 640 | 44.9 | 128.4 | 1.20 | 11.2 | 28.6 |
YOLOv8m | 640 | 50.2 | 234.7 | 1.83 | 25.9 | 78.9 |
YOLOv8l | 640 | 52.9 | 375.2 | 2.39 | 43.7 | 165.2 |
YOLOv8x | 640 | 53.9 | 479.1 | 3.53 | 68.2 | 257.8 |
选择模型大小的原则如下:
- 数据集小(几百张图片):使用yolov8n或yolov8s。过大模型会过拟合。
- 数据集中等(几千张图片):yolov8s或yolov8m。能获得较高精度,不易过拟合。
- 数据集大(几万张图片):yolov8l或yolov8x。模型容量大,充分拟合大数据量,能发挥模型效果。
- 超大数据集(几十万张以上):首选yolov8x。超大模型才能处理海量数据并取得最优效果。
此外,数据集复杂度也会影响模型选择。一般对象越多、图像越复杂,需要选择更大的模型以保证效果。
数据集准备
具体步骤:
- 收集图像:收集属于数据集的图像。这些图像可以从各种来源收集,如公共数据库或您自己的收藏。
- 标注图像:根据任务要求,使用边界框、段或关键点对这些图像进行标注。
- 导出标注:将这些标注转换为YOLO支持的*.txt文件格式。
- 整理数据集:将数据集整理为正确的文件夹结构。您应该有train/和val/这两个顶级目录,并且每个目录下都有一个images/和labels/子目录。
- 创建data.yaml文件:在数据集的根目录中,创建一个data.yaml文件,描述数据集、类别和其他必要信息。
- 优化图像(可选):如果您想减小数据集的大小以提高处理效率,可以使用下面的代码优化图像。这不是必需的,但对于较小的数据集大小和更快的下载速度,建议这样做。
- 压缩数据集:将整个数据集文件夹压缩为zip文件。
- 文档和PR:创建一个文档页面,描述您的数据集以及它如何融入现有框架。之后,提交一个Pull Request(PR)。
数据集文件夹结构:
dataset/
├── train/
│ ├── images/
│ └── labels/
└── val/
├── images/
└── labels/
数据集的标记:
1、选择合适的标记工具:
标记工具用于在图像上绘制边界框并为每个边界框分配相应的类别标签。常见的标记工具包括LabelImg、LabelMe、CVAT等。
这些工具通常提供图形用户界面(GUI),使用户能够方便地绘制边界框、分配标签并进行其他必要的标注操作。
2、标记过程:
使用选定的标记工具,对图像中的目标物体进行标记。这通常涉及在目标物体周围绘制矩形边界框,并为每个边界框分配相应的类别标签。
标记过程需要尽量准确和细致,以确保模型能够学习到正确的特征和目标位置。
标记过程中还可能需要处理一些特殊情况,如目标物体被遮挡、重叠或变形等。
3、数据整理与清洗:
标记完成后,需要对标记的数据进行整理和清洗。这包括检查每个标记的准确性和一致性,删除或修正错误的标记。
数据清洗有助于提高数据集的质量,并减少模型训练过程中的噪声和误差。
4、数据格式转换:
将标记后的数据集转换成YOLOv8所需的格式。通常情况下,YOLOv8使用的数据格式是Darknet格式或者COCO数据集格式。
数据格式转换涉及到将标记信息(如边界框坐标、类别标签等)转换为模型训练时能够读取的格式。
优化和压缩数据集:
Python方式:
from pathlib import Path
from ultralytics.data.utils import compress_one_image
from ultralytics.utils.downloads import zip_directory
# Define dataset directory
path = Path("path/to/dataset")
# Optimize images in dataset (optional)
for f in path.rglob("*.jpg"):
compress_one_image(f)
# Zip dataset into 'path/to/dataset.zip'
zip_directory(path)
按照这些步骤,您就可以提供一个能与Ultralytics 现有结构很好整合的新数据集。
训练YOLOv8模型
训练深度学习模型包括向其提供数据并调整其参数,以便其能够做出准确的预测。
Ultralytics YOLOv8中的训练模式旨在充分利用现代硬件功能,对目标检测模型进行有效和高效的训练。
Python方式:
from ultralytics import YOLO
# Load a model
model = YOLO("yolov8n.yaml") # build a new model from YAML
model = YOLO("yolov8n.pt") # load a pretrained model (recommended for training)
model = YOLO("yolov8n.yaml").load("yolov8n.pt") # build from YAML and transfer weights
# Display model information
model.info()