YOLOv8是Ultralytics公司最新推出的Yolo系列目标检测算法,建立在Yolo系列历史版本的基础上,并引入了新的功能和改进点,以进一步提升性能和灵活性。它是实现目标检测、图像分割、姿态估计等任务的最佳选择之一。
YOLOv8是一种基于深度学习的目标检测算法,其核心思想是将目标检测问题转化为一个回归问题,通过一次前向传播过程即可完成目标的位置和类别预测。它继承了YOLO系列算法的优点,如速度快、实时性好等,并在准确性和泛化能力上进行了进一步的提升。
源码地址:
https://github.com/ultralytics/ultralytics
官网地址:
https://docs.ultralytics.com
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 |
选择模型大小的原则如下:
此外,数据集复杂度也会影响模型选择。一般对象越多、图像越复杂,需要选择更大的模型以保证效果。
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 现有结构很好整合的新数据集。
训练深度学习模型包括向其提供数据并调整其参数,以便其能够做出准确的预测。
Ultralytics YOLOv8中的训练模式旨在充分利用现代硬件功能,对目标检测模型进行有效和高效的训练。
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()