
1.1 YOLOv8 数据集的格式
YOLOv8 对数据集有明确的格式要求,图像文件通常是 jpg、png 等图像格式,其标准结构可概括为三级目录体系与镜像式文件映射。以下为结构化说明:
数据集根目录/
├── images/ # 图像存储主目录
│ ├── train/ # 训练集图像 (必须存在)
│ │ ├── img1.jpg
│ │ └── img2.jpg
│ └── val/ # 验证集图像 (必须存在)
│ ├── img3.jpg
│ └── img4.jpg
│
├── labels/ # 标注文件主目录
│ ├── train/ # 训练集标注 (与images/train一一对应)
│ │ ├── img1.txt
│ │ └── img2.txt
│ └── val/ # 验证集标注 (与images/val一一对应)
│ ├── img3.txt
│ └── img4.txt
│
└── test_images/ # 测试集图像 (可选)
├── test1.jpg
└── test2.jpg
1.2 标注文件的格式
YOLO格式的标注文件通常是一个文本文件,每一行代表一个目标物体的标注信息。 标注信息通常包含类别编号、目标中心横坐标(相对于图像宽度)、目标中心纵坐标(相对于图像高度)、目标宽度(相对于图像宽度)和目标高度(相对于图像高度),具体格式如下:
<object-class-id> <x> <y> <width> <height>
其中:
例如,一行标注信息为 “0 0.5 0.6 0.3 0.4”,其中“0”表示类别编号,后面的数字表示目标在图像中的位置和大小信息。
但老周这里是YOLO-OBB(Oriented Bounding Box),与上面标准检测任务(水平框)的关键差异在于需要表示旋转框的几何信息:
标注文件仍为文本文件(.txt),每行描述一个旋转目标,格式为:
<class_id> <x1> <y1> <x2> <y2> <x3> <y3> <x4> <y4>
字段 | 含义 | 范围 |
|---|---|---|
class_id | 目标类别索引(整数,从0开始) | 0,1,2,... |
x1, y1 | 旋转框第一个角点的归一化坐标(相对于图像宽度/高度) | [0.0, 1.0] |
x2, y2 | 旋转框第二个角点的归一化坐标 | [0.0, 1.0] |
x3, y3 | 旋转框第三个角点的归一化坐标 | [0.0, 1.0] |
x4, y4 | 旋转框第四个角点的归一化坐标 | [0.0, 1.0] |
坐标归一化计算:
假设图像宽度为 W,高度为 H,实际像素坐标为 (px, py),则归一化坐标为:
x_normalized = px / W
y_normalized = py / H
1.2 下载 YOLOv8 数据集
这里老周说明下,我本来是自定义数据集来训练,要很多时间去做标注,我这里直接用网上提供好的数据集来训练。
下面来介绍下这款工具:
Roboflow Annotate:YOLO数据集构建与管理工具
Roboflow Annotate 是一款专为计算机视觉任务设计的在线协作标注平台,其核心优势包括:
本文选择 水族馆数据集(Aquarium Dataset),该数据集标记了 7 个类别:鱼类(fish)、水母(jellyfish)、企鹅(penguins)、鲨鱼(sharks)、海雀(puffins)、黄貂鱼(stingrays)和海星(starfish)。大多数图像包含多个边界框。
Roboflow 提供了多种下载格式,主要是数据集组织和标注格式的区别。老周这里以YOLOv8-OBB 格式导出,如下图所示。

选择 YOLOv8-OBB 格式,下载水族馆数据集(Aquarium Dataset)。

1.3 整理 YOLOv8 数据集
YOLOv8 模型训练对于格式的要求非常严格:数据集要保存在项目的指定路径 datasets 下,并按照
1.3.1 据集要保存在项目的指定路径 datasets 下,并按下面的格式组织样本图片和标签。
- yolov8
- datasets
- Aquarium
- images
- test
- train
- val
- labels
- test
- train
- val
- dataAquarium.yaml
- ultralytics
- yolov8n.pt
把这数据集放到 YOLO源码里,目录结构如下:

1.3.2 编写数据集配置文件 YAML 文件( .yaml)。
YOLO 模型训练时,要调用数据集配置文件 YAML 文件( .yaml),指定数据集的路径和分类类别。
在 YOLOv8 项目中,提供了多个数据集配置文件,例如“\YOLOv8\ultralytics\cfg\datasets\coco8.yaml” 可供参考。
根据Aquarium Dataset 数据集配置文件 data.yaml ,编写本项目的数据集配置文件 dataAquarium.yaml,保存到数据集的根目录,内容如下。
# Ultralytics YOLO 🚀, AGPL-3.0 license
# Aquarium dataset
# parent
# ├── ultralytics
# └── datasets
# └── Aquarium
# Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..]
path: /Users/Riemann/Code/Workspace/AI/YOLO8/datasets/Aquarium # dataset root dir
train: images/train # train images (relative to 'path')
val: images/val # val images (relative to 'path')
test: # test images (optional)
# Classes
names:
0: fish
1: jellyfish
2: penguin
3: puffin
4: shark
5: starfish
6: stingray
2.1 载 YOLOv8 预训练模型
在 YOLO/GitHub 项目仓,提供了检测(Detection)、分类(Classification)、分割(Segmentation)、姿态估计(Pose)、定向边界框检测(OBB)等任务的预训练模型。YOLOv8 有多个不同规模的模型,从小到大依次是:YOLOv8n、YOLOv8s、YOLOv8m、YOLOv8l、YOLOv8x。这些模型与各种操作模式兼容,包括推理、验证、训练和导出,便于在部署和开发的不同阶段使用。
由于 YOLO 更新频繁,预训练模型的入口不容易找,现将下载地址列表如下。
https://github.com/ultralytics/assets/releases/download/v8.2.0/yolov8n-pose.pt
https://github.com/ultralytics/assets/releases/download/v8.2.0/yolov8s-pose.pt
https://github.com/ultralytics/assets/releases/download/v8.2.0/yolov8m-pose.pt
https://github.com/ultralytics/assets/releases/download/v8.2.0/yolov8l-pose.pt
https://github.com/ultralytics/assets/releases/download/v8.2.0/yolov8x-pose.pt
https://github.com/ultralytics/assets/releases/download/v8.2.0/yolov8n-seg.pt
https://github.com/ultralytics/assets/releases/download/v8.2.0/yolov8s-seg.pt
https://github.com/ultralytics/assets/releases/download/v8.2.0/yolov8m-seg.pt
https://github.com/ultralytics/assets/releases/download/v8.2.0/yolov8l-seg.pt
https://github.com/ultralytics/assets/releases/download/v8.2.0/yolov8x-seg.pt
https://github.com/ultralytics/assets/releases/download/v8.2.0/yolov8n-cls.pt
https://github.com/ultralytics/assets/releases/download/v8.2.0/yolov8s-cls.pt
https://github.com/ultralytics/assets/releases/download/v8.2.0/yolov8m-cls.pt
https://github.com/ultralytics/assets/releases/download/v8.2.0/yolov8l-cls.pt
https://github.com/ultralytics/assets/releases/download/v8.2.0/yolov8x-cls.pt
https://github.com/ultralytics/assets/releases/download/v8.2.0/yolov8n.pt
https://github.com/ultralytics/assets/releases/download/v8.2.0/yolov8s.pt
https://github.com/ultralytics/assets/releases/download/v8.2.0/yolov8m.pt
https://github.com/ultralytics/assets/releases/download/v8.2.0/yolov8l.pt
https://github.com/ultralytics/assets/releases/download/v8.2.0/yolov8x.pt
https://github.com/ultralytics/assets/releases/download/v8.2.0/yolov8n-obb.pt
https://github.com/ultralytics/assets/releases/download/v8.2.0/yolov8s-obb.pt
https://github.com/ultralytics/assets/releases/download/v8.2.0/yolov8m-obb.pt
https://github.com/ultralytics/assets/releases/download/v8.2.0/yolov8l-obb.pt
https://github.com/ultralytics/assets/releases/download/v8.2.0/yolov8x-obb.pt
本文选择 yolov8n-obb.pt,载完成后,将下载的预训练模型文件 yolov8n-obb.pt 放在 YOLO8 项目的根目录路径下,例如 “/Users/Riemann/Code/Workspace/AI/YOLO8”。
2.2 命令行(CLI)接口的模型训练
YOLOv8 支持使用命令行接口(command line interface, CLI)对模型进行训练、验证或运行推断。
YOLOv8 命令行接口(CLI)方便在各种任务和版本上训练、验证或推断模型,不需要定制或代码,可以使用 yolo 命令从终端运行所有任务。
语法:
yolo task=detect mode=train model=yolov8n.yaml args...
classify predict yolov8n-cls.yaml args...
segment val yolov8n-seg.yaml args...
export yolov8n.pt format=onnx args...
使用 Aquarium 数据集进行模型训练的具体操作步骤如下:
yolo task=obb mode=train model=./yolov8n-obb.pt data=/Users/Riemann/Code/Workspace/AI/YOLO8/datasets/Aquarium/dataAquarium.yaml epochs=10 workers=1 batch=16
我刚开始用上面的指令去训练,效果不太行,所以我优化了下:
yolo task=obb mode=train \
model=./yolov8n-obb.pt \
data=/Users/Riemann/Code/Workspace/AI/YOLO8/datasets/Aquarium/dataAquarium.yaml \
epochs=10 \
imgsz=512 \ # 降低分辨率以加速计算
batch=32 \ # 增大批次但需确保不OOM
device=mps \
workers=6 \ # 根据CPU物理核心数调整(建议核心数*0.75)
optimizer=AdamW \ # 替代默认SGD以加速收敛
lr0=0.001 \ # AdamW建议更小的初始学习率
cos_lr=True \ # 余弦学习率调度加速收敛
amp=True \ # 启用混合精度训练(MPS兼容性需验证)
cache=ram \ # 缓存数据集到内存减少IO延迟
patience=3 \ # 早停机制避免无效训练
project=aquarium-obb \
name=train_v2
注意:
运行结果如下:




2.3 3 使用 Python 接口的模型推理
YOLOv8 也提供了 Python 接口的调用方式。它提供了加载和运行模型以及处理模型输出的函数。该界面设计易于使用,以便用户可以在他们的项目中快速实现目标检测。
使用 Aquarium 数据集进行模型训练的 Python 参考例程如下。
from ultralytics import YOLO
if __name__ == '__main__':
# 创建 YOLO 模型对象,加载指定的模型配置
model = YOLO('./ultralytics/cfg/models/v8/yolov8-obb.yaml')
# 加载预训练的权重文件,加速训练并提升模型性能
model.load('yolov8n-obb.pt')
# 用指定数据集训练模型
model.train(data="./datasets/Aquarium/dataAquarium.yaml", # 指定训练数据集的配置文件路径
cache=False, # 是否缓存数据集以加快后续训练速度
imgsz=640, # 指定训练时使用的图像尺寸
epochs=100, # 设置训练的总轮数为100轮
batch=16, # 设置每个训练批次的大小为16
close_mosaic=10, # 设置在训练的最后 10 轮中关闭 Mosaic 数据增强
workers=4, # 设置用于数据加载的线程数为4
device='0', # 指定使用的 GPU 设备
optimizer='SGD'# 设置优化器为SGD(随机梯度下降)
)
2.4 模型训练参数说明
YOLOv8 在默认配置文件 “./ultralytics/cfg/default.yaml” 中给出了模型训练参数的说明。

2.5 训练结果文件说明
训练日志的图表对于评估和理解模型的性能非常重要,可以帮助我们分析模型的优势和弱点。
3.1 模型验证
训练后验证。
yolo task=obb mode=val \
model=/Users/Riemann/Code/Workspace/AI/YOLO8/yolov8nObbAquarium.pt \
data=/Users/Riemann/Code/Workspace/AI/YOLO8/datasets/Aquarium/dataAquarium.yaml \
epochs=10 \
device=mps \
batch=8 \
workers=4



3.2 模型预测
训练后验证。
参数 source 可以是一个或多个图片文件,一个视频文件,也可以是一个文件夹,或视频采集设备。
from ultralytics import YOLO
if __name__ == '__main__':
# 读取模型,传入训练好的模型
model = YOLO('yolov8nObbAquarium.pt')
outputs = model.predict(source="./datasets/Aquarium/images/val", save=True) # treat predict as a Python generator
for output in outputs:
# each output here is a dict.
# for detection
print(output["det"]) # np.ndarray, (N, 6), xyxy, score, cls