目录
yolov8导航
YOLOv8(附带各种任务详细说明链接)
ultralytics/ultralytics/cfg/default.yaml
训练模式和任务类型参数
训练参数
训练期间验证和测试参数
预测部分相关参数
可视化部分相关参数
模型导出部分相关参数
训练超参数相关参数
ultralytics/cfg/datasets/XXXX.yaml
图像分类配置方法
目标检测配置方法
实例分割配置方法
姿态估计配置方法
训练、验证和测试集路径配置
关键点配置
类别字典
总结
yolov8导航
如果大家想要了解关于yolov8的其他任务和相关内容可以点击这个链接,我这边整理了许多其他任务的说明博文,后续也会持续更新,包括yolov8模型优化、sam等等的相关内容。
YOLOv8(附带各种任务详细说明链接)
在YOLOV8进行训练的时候,了解训练相关的配置文件以及参数的含义与说明是很有必要的。当然在不同的任务中这些参数不是通用的。具体什么样的参数更优,还需要实际的去做实验进行比较。
ultralytics/ultralytics/cfg/default.yaml
文件包含了用于训练、评估和部署 YOLO 模型的默认设置和超参数。这个文件作为一个配置文件,为模型的各种操作提供了标准化的参数和设置。
训练模式和任务类型参数
参数名称 | 默认值 | 参数解释 | 调参建议 |
---|---|---|---|
task | detect | YOLO任务类型,如detect, segment, classify, pose | 根据项目需求选择合适的任务类型。不同的任务类型适用于不同的应用场景,例如目标检测(detect)、图像分割(segment)、图像分类(classify)或姿态估计(pose)。 |
mode | train | YOLO模式,如train, val, predict, export, track, benchmark | 选择符合当前需求的模式。例如,train 用于模型训练,val 用于验证,predict 用于预测,export 用于模型导出,track 用于对象跟踪,benchmark 用于性能评估。 |
这些参数主要用于定义模型的基本运行模式和任务类型。在实际应用中,应根据具体需求和场景选择合适的 task
和 mode
。例如,如果目的是在一个新的数据集上训练一个目标检测模型,那么 task
应设置为 detect
,而 mode
应设置为 train
。
训练参数
参数名称 | 默认值 | 参数解释 | 调参建议 |
---|---|---|---|
model | (空) | 模型文件路径,如 yolov8n.pt, yolov8n.yaml | 指定预训练模型或自定义模型配置文件 |
data | (空) | 数据文件路径,如 coco128.yaml | 指定训练数据配置文件 |
epochs | 100 | 训练的总周期数 | 根据数据集大小和模型复杂度调整 |
time | (空) | 训练的总小时数,如果提供,会覆盖epochs | 如果有时间限制,可设置该参数 |
patience | 50 | 无显著改善时停止训练的等待周期数 | 可根据训练过程中的收敛情况进行调整 |
batch | 16 | 每批图像数量 (-1 为 AutoBatch) | 根据GPU内存大小调整 |
imgsz | 640 | 输入图像尺寸 | 根据实际需求和硬件限制调整 |
save | True | 是否保存训练检查点和预测结果 | 根据需要开启或关闭 |
save_period | -1 | 每x周期保存一次检查点 (如果 < 1 则禁用) | 根据训练周期和需求调整 |
cache | False | 是否使用缓存进行数据加载 | 根据数据集大小和加载速度决定 |
device | (空) | 运行设备,如cuda device=0 或 device=cpu | 根据硬件资源分配合适的设备 |
workers | 8 | 数据加载的工作线程数 | 根据系统资源和数据集大小调整 |
project | (空) | 项目名称 | 设置项目名称以组织输出目录 |
name | (空) | 实验名称,结果保存在 'project/name' 目录 | 为实验分配一个描述性名称 |
exist_ok | False | 是否覆盖现有实验 | 根据需要决定是否覆盖 |
pretrained | True | 是否使用预训练模型或从特定模型加载权重 | 选择合适的预训练模型以加速训练 |
optimizer | auto | 使用的优化器,选择包括 SGD, Adam 等 | 根据模型和数据选择最优化器 |
verbose | True | 是否打印详细输出 | 依据需要调整输出详细程度 |
seed | 0 | 随机种子,用于可重现性 | 设置种子以保证实验可重复性 |
deterministic | True | 是否启用确定性模式 | 在需要确保结果一致性时启用 |
single_cls | False | 是否将多类别数据当作单一类别训练 | 在单类别训练场景中启用 |
rect | False | 矩形训练或验证 | 在适当的应用场景中选择 |
cos_lr | False | 是否使用余弦学习率调度器 | 适用于长周期训练 |
close_mosaic | 10 | 最后几个周期禁用mosaic增强 (0 to disable) | 根据训练进展调整增强策略 |
resume | False | 是否从最后检查点恢复训练 | 中断后恢复训练时启用 |
amp | True | 是否使用自动混合精度 (AMP) 训练 | 在硬件支持的情况下启用以提高效率 |
fraction | 1.0 | 训练集使用的数据比例 | 在有限的资源下可选择使用部分数据 |
profile | False | 训练期间是否分析ONNX和TensorRT速度 | 性能分析时启用 |
freeze | None | 冻结的层的数量或层索引列表 | 在迁移学习场景中冻结特定层 |
overlap_mask | True | 训练时掩码是否重叠(仅限分割训练) | 在分割任务中根据需要调整 |
mask_ratio | 4 | 掩码降采样比率(仅限分割训练) | 根据分割任务和图像分辨率调整 |
dropout | 0.0 | 使用dropout正则化(仅限分类训练) | 在分类任务中根据模型复杂度和过拟合情况调整 |
这些参数涵盖了从模型选择和数据配置到训练细节和优化策略的多个方面。
训练期间验证和测试参数
参数名称 | 默认值 | 参数解释 | 调参建议 |
---|---|---|---|
val | True | 训练期间是否进行验证/测试 | 根据需要开启或关闭。在大多数情况下,保持开启以监控模型性能 |
split | val | 用于验证的数据集划分,如 'val', 'test' 或 'train' | 选择合适的数据集划分进行验证 |
save_json | False | 是否将结果保存为JSON文件 | 如果需要详细的输出结果,可以开启此选项 |
save_hybrid | False | 是否保存混合版本的标签(标签 + 额外预测) | 在需要综合标签和预测结果的场景中开启 |
conf | (空) | 用于检测的对象置信度阈值(默认0.25预测,0.001验证) | 根据应用需求调整置信度阈值 |
iou | 0.7 | 非极大值抑制(NMS)的交并比(IoU)阈值 | 调整以平衡检测的准确性和召回率 |
max_det | 300 | 每张图像的最大检测数量 | 根据实际应用场景和性能需求调整 |
half | False | 是否使用半精度(FP16) | 在支持FP16的硬件上开启以提高性能 |
dnn | False | 是否使用OpenCV DNN进行ONNX推理 | 在不支持PyTorch但支持OpenCV DNN的环境中开启 |
plots | True | 训练/验证期间是否保存图表和图像 | 根据需要进行可视化分析时开启 |
这些参数主要涉及模型在训练期间的验证和测试设置,以及结果的保存和展示方式。正确地配置这些参数对于模型性能评估和优化至关重要。
预测部分相关参数
参数名称 | 默认值 | 参数解释 | 调参建议 |
---|---|---|---|
source | (空) | 图像或视频的源目录 | 指定用于预测的图像或视频的源目录 |
vid_stride | 1 | 视频帧率步长 | 根据需要调整视频处理的帧率 |
stream_buffer | False | 是否缓冲所有流媒体帧(True)或返回最近的帧(False) | 根据实时处理需求和资源限制调整 |
visualize | False | 是否可视化模型特征 | 在需要分析模型特征时启用 |
augment | False | 是否对预测源应用图像增强 | 在需要改善预测性能或鲁棒性时启用 |
agnostic_nms | False | 是否使用类别不可知的非极大值抑制(NMS) | 在检测不区分类别的应用场景中启用 |
classes | (空) | 过滤结果的类别,如classes=0,或classes=[0,2,3] | 在需要特定类别的检测时设置 |
retina_masks | False | 是否使用高分辨率分割掩码 | 在进行高精度分割任务时启用 |
这部分参数主要涉及模型的预测过程,包括输入源的设置、视频处理的配置、结果的可视化和类别过滤等。正确配置这些参数可以帮助更好地利用模型进行图像和视频的预测分析。
可视化部分相关参数
参数名称 | 默认值 | 参数解释 | 调参建议 |
---|---|---|---|
show | False | 是否展示预测的图像和视频 | 在需要实时查看结果时启用 |
save_frames | False | 是否保存预测的视频帧 | 在需要分析单独帧时启用 |
save_txt | False | 是否将结果保存为文本文件 | 在需要详细的文本输出时启用 |
save_conf | False | 是否在结果中包含置信度分数 | 在需要评估或展示置信度时启用 |
save_crop | False | 是否保存结果的裁剪图像 | 在需要分析或使用检测到的对象时启用 |
show_labels | True | 是否显示预测标签,如 'person' | 在需要识别和展示检测对象时保持开启 |
show_conf | True | 是否显示预测置信度,如 '0.99' | 在需要展示每个检测对象的置信度时保持开启 |
show_boxes | True | 是否展示预测边界框 | 在需要可视化检测边界时保持开启 |
line_width | (空) | 边界框的线宽,如果为空则根据图像大小缩放 | 根据可视化需求和图像大小调整 |
这部分参数主要用于控制预测结果的可视化和输出方式。适当调整这些参数可以帮助更好地理解和展示模型的预测结果,特别是在开发和调试阶段。根据需求,可以开启或关闭某些功能,以获取最佳的可视化效果。
模型导出部分相关参数
参数名称 | 默认值 | 参数解释 | 调参建议 |
---|---|---|---|
format | torchscript | 导出模型的格式 | 根据需要选择合适的格式,如 TorchScript, ONNX, Keras 等 |
keras | False | 是否使用Keras | 如果需要将模型转换为Keras格式,则启用 |
optimize | False | 是否为移动设备优化TorchScript模型 | 在需要部署到移动设备时启用 |
int8 | False | 是否使用CoreML/TF的INT8量化 | 在需要优化模型大小和推理速度时启用 |
dynamic | False | 是否为ONNX/TF/TensorRT启用动态轴 | 在需要动态输入大小时启用 |
simplify | False | 是否简化ONNX模型 | 在需要简化模型结构以提高兼容性时启用 |
opset | (空) | ONNX的操作集版本 | 根据目标平台和ONNX版本选择合适的opset |
workspace | 4 | TensorRT的工作空间大小(GB) | 根据可用内存资源调整工作空间大小 |
nms | False | 是否在CoreML中添加非极大值抑制(NMS) | 在需要在CoreML模型中内置NMS时启用 |
这些参数主要涉及将训练好的YOLOv8模型导出为不同格式,以便于在不同平台和应用场景中部署。合理选择和配置这些参数对于模型的有效部署和性能优化至关重要。
训练超参数相关参数
参数名称 | 默认值 | 参数解释 | 调参建议 |
---|---|---|---|
lr0 | 0.01 | 初始学习率 | 根据模型和数据集大小调整 |
lrf | 0.01 | 最终学习率 (lr0 * lrf) | 根据训练策略调整 |
momentum | 0.937 | SGD动量/Adam的beta1 | 根据优化器类型和训练过程调整 |
weight_decay | 0.0005 | 优化器的权重衰减 | 防止过拟合时调整 |
warmup_epochs | 3.0 | 热身周期数 | 根据模型和数据集调整热身期 |
warmup_momentum | 0.8 | 热身期初始动量 | 在热身期调整动量以稳定训练 |
warmup_bias_lr | 0.1 | 热身期偏置的学习率 | 在热身期适当提高偏置项的学习率 |
box | 7.5 | 边界框损失增益 | 根据检测任务调整 |
cls | 0.5 | 类别损失增益 | 根据分类任务和类别不平衡调整 |
dfl | 1.5 | dfl损失增益 | 根据任务具体需求调整 |
pose | 12.0 | 姿态损失增益 | 在姿态估计任务中调整 |
kobj | 1.0 | 关键点对象损失增益 | 在关键点检测任务中调整 |
label_smoothing | 0.0 | 标签平滑 | 在多类别分类中使用以提高泛化性 |
nbs | 64 | 名义批量大小 | 根据GPU内存和模型大小调整 |
hsv_h | 0.015 | HSV-色调增强的比例 | 根据数据集特性调整图像增强参数 |
hsv_s | 0.7 | HSV-饱和度增强的比例 | 同上 |
hsv_v | 0.4 | HSV-值增强的比例 | 同上 |
degrees | 0.0 | 图像旋转角度 | 根据需求调整图像增强程度 |
translate | 0.1 | 图像平移比例 | 根据需求调整图像增强程度 |
scale | 0.5 | 图像缩放增益 | 根据需求调整图像增强程度 |
shear | 0.0 | 图像剪切角度 | 根据需求调整图像增强程度 |
perspective | 0.0 | 图像透视变换的比例 | 根据需求调整图像增强程度 |
flipud | 0.0 | 图像上下翻转的概率 | 根据需求调整图像增强程度 |
fliplr | 0.5 | 图像左右翻转的概率 | 根据需求调整图像增强程度 |
mosaic | 1.0 | 图像马赛克增强的概率 | 根据需求调整图像增强程度 |
mixup | 0.0 | 图像混合增强的概率 | 根据需求调整图像增强程度 |
copy_paste | 0.0 | 分割复制粘贴的概率 | 在分割任务中根据需要调整 |
cfg | (空) | 用于覆盖默认配置的自定义配置文件路径 | 指定自定义配置文件以覆盖默认设置 |
tracker | botsort.yaml | 跟踪器类型 | 根据需求选择合适的跟踪器 |
这些超参数涉及学习率调整、优化器配置、损失函数加权、数据增强策略等多个方面。合理地调整这些参数对于训练有效的模型至关重要。
ultralytics/cfg/datasets/XXXX.yaml
进行模型训练时,配置数据集是必不可少的,本文中直接以官方所提供的coco.yaml、coco-pose.yaml等等配置文件进行举例,同时要注意,本文后续进行训练时候,标签文件格式均使用txt格式数据进行演示。如果是voc(xml)格式的数据需要转换成txt,这个转换脚本我会在后续的博客中发布出来。
图像分类配置方法
图像分类的配置方法比较特殊,同时他也是这里面配置方法最简单的,以mnist160数据为例:
from ultralytics import YOLO
# 加载模型
model = YOLO('yolov8n-cls.yaml').load('yolov8n-cls.pt') # 从YAML构建并转移权重
if __name__ == '__main__':
# 训练模型
results = model.train(data='./mnist160', epochs=10, imgsz=64)
在这段代码中,model = YOLO('yolov8n-cls.yaml').load('yolov8n-cls.pt') 是加载指定了模型类型和结构,并且读取预训练权重。results = model.train(data='./mnist160', epochs=10, imgsz=64)这行代码中,data='./mnist160' 是明确的指定了数据所在的文件夹地址。参考结构如下:
mnist160/
│
├── train/ # 训练集
│ ├── 0/ # 类别0的文件夹
│ │ ├── 0001.png
│ │ ├── 0002.png
│ │ └── ...
│ ├── 1/ # 类别1的文件夹
│ │ ├── 0001.png
│ │ ├── 0002.png
│ │ └── ...
│ ├── ...
│ └── 9/ # 类别9的文件夹
│ ├── 0001.png
│ ├── 0002.png
│ └── ...
│
└── val/ # 验证集
├── 0/ # 类别0的文件夹
│ ├── 1001.png
│ ├── 1002.png
│ └── ...
├── 1/ # 类别1的文件夹
│ ├── 1001.png
│ ├── 1002.png
│ └── ...
├── ...
└── 9/ # 类别9的文件夹
├── 1001.png
├── 1002.png
└── ...
如果这个目录结构看的不明显可以参考这个图片:
以这种形式把自己的数据集按类别放到指定目录下,即可执行训练。
目标检测配置方法
目标检测是一项任务,涉及辨识图像或视频流中物体的位置和类别。目标检测器的输出是一组围绕图像中物体的边界框,以及每个框的类别标签和置信度得分。当您需要识别场景中的感兴趣对象,但不需要准确了解物体的位置或其确切形状时,目标检测是一个很好的选择。
这份代码是基于目标检测执行训练的代码,以官方默认的coco128.yaml作为例子进行演示:
from ultralytics import YOLO
# 加载模型
model = YOLO('yolov8n.yaml').load('yolov8n.pt') # 从YAML构建并转移权重
if __name__ == '__main__':
# 训练模型
results = model.train(data='coco128.yaml', epochs=100, imgsz=640)
程序中,data='coco128.yaml' 直接这么填写,ultralytics模型指向的是 ultralytics\cfg\datasets 目录,也可以自定义一个目录,自定义的时候则需要填入绝对路径,或者在data='./coco128.yaml'变为相对路径。
# 示例使用方法: yolo train data=coco128.yaml
# 目录结构
# parent
# ├── ultralytics
# └── datasets
# └── coco128 ← 这里下载 (7 MB)
path: ../datasets/coco128 # 数据集根目录,也可以自行修改指定其他目录,绝对目录,相对目录均可
# C:/Users/admin/Desktop/datasets/coco128/ 比如这样,把下载的数据或者自己的数据指定好
train: images/train2017 # 训练图片 (相对于 'path') 接上面path的路径继续拼接
val: images/train2017 # 验证图片 (相对于 'path') 接上面path的路径继续拼接
test: # 测试图片 (可选)
# 对应的数据类别
names:
0: person
1: bicycle
2: car
3: motorcycle
4: airplane
5: bus
6: train
7: truck
8: boat
9: traffic light
10: fire hydrant
11: stop sign
12: parking meter
13: bench
14: bird
15: cat
16: dog
17: horse
18: sheep
19: cow
20: elephant
21: bear
22: zebra
23: giraffe
24: backpack
25: umbrella
26: handbag
27: tie
28: suitcase
29: frisbee
30: skis
31: snowboard
32: sports ball
33: kite
34: baseball bat
35: baseball glove
36: skateboard
37: surfboard
38: tennis racket
39: bottle
40: wine glass
41: cup
42: fork
43: knife
44: spoon
45: bowl
46: banana
47: apple
48: sandwich
49: orange
50: broccoli
51: carrot
52: hot dog
53: pizza
54: donut
55: cake
56: chair
57: couch
58: potted plant
59: bed
60: dining table
61: toilet
62: tv
63: laptop
64: mouse
65: remote
66: keyboard
67: cell phone
68: microwave
69: oven
70: toaster
71: sink
72: refrigerator
73: book
74: clock
75: vase
76: scissors
77: teddy bear
78: hair drier
79: toothbrush
# 下载脚本/URL (可选) 如果没有指定的数据就是想测试,就打开这个代码,程序会自动把这个数据下载下来
download: https://ultralytics.com/assets/coco128.zip
在这个配置文件中,我们定义了训练、验证和测试图像的路径,列出了数据集中的所有类别,并提供了数据集的下载链接(如果可用)。请确保这些路径和类别与您的实际数据集相符。如果您使用的是自己的数据集,需要相应地调整 path
、train
、val
、test
和 names
部分。
实例分割配置方法
实例分割比物体检测有所深入,它涉及到识别图像中的个别物体并将它们从图像的其余部分中分割出来。
实例分割模型的输出是一组蒙版或轮廓,用于勾画图像中每个物体,以及每个物体的类别标签和置信度分数。实例分割在您需要不仅知道图像中的物体位置,还需要知道它们确切形状时非常有用。
下面这份代码是训练实例分割时的示意代码:
from ultralytics import YOLO
# 读取预训练模型
model = YOLO('yolov8n-seg.pt')
# 执行训练
results = model.train(data='coco128-seg.yaml', epochs=100, imgsz=640)
在 ultralytics 中进行训练实例分割任务的时候和目标检测任务都非常相似,其实主要区别就是读取不同的yaml或pt文件,以及数据集格式区别不同,剩下的数据集配置的路径结构都是一致的。
# 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: ../datasets/coco8-seg # dataset root dir
train: images/train # train images (relative to 'path') 4 images
val: images/val # val images (relative to 'path') 4 images
test: # test images (optional)
# Classes (80 COCO classes)
names:
0: person
1: bicycle
2: car
# ...
77: teddy bear
78: hair drier
79: toothbrush
如果您有自己的数据集,并希望将其用于训练具有 Ultralytics YOLO 格式的分割模型,请确保它遵循上面在“Ultralytics YOLO 格式”下指定的格式。将注释转换为所需的格式,并在 YAML 配置文件中指定路径、类数和类名。
姿态估计配置方法
姿态估计是一项任务,其涉及识别图像中特定点的位置,通常被称为关键点。这些关键点可以代表物体的各种部位,如关节、地标或其他显著特征。关键点的位置通常表示为一组2D [x, y]
或3D [x, y, visible]
坐标。姿态估计模型的输出是一组点集,这些点代表图像中物体上的关键点,通常还包括每个点的置信度得分。当你需要在场景中识别物体的特定部位及其相互之间的位置时,姿态估计是一个不错的选择。
训练示意代码如下:
from ultralytics import YOLO
# Load a model
model = YOLO('yolov8n-pose.pt') # load a pretrained model (recommended for training)
# Train the model
results = model.train(data='coco128-pose.yaml', epochs=100, imgsz=640)
基本训练的代码不同的任务实现的方法都是非常一致的,最大的差异都是数据集,后续我会单独针对每个任务都出一套数据集去详细的说明每种任务是如何复现。姿态估计时任务数据的yaml配置格式如下:
# 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: ../datasets/coco8-pose # dataset root dir
train: images/train # train images (relative to 'path') 4 images
val: images/val # val images (relative to 'path') 4 images
test: # test images (optional)
# Keypoints
kpt_shape: [17, 3] # number of keypoints, number of dims (2 for x,y or 3 for x,y,visible)
flip_idx: [0, 2, 1, 4, 3, 6, 5, 8, 7, 10, 9, 12, 11, 14, 13, 16, 15]
# Classes dictionary
names:
0: person
上面的配置文件同样包含以下信息,这个跟目标前侧以及实例分割略有些区别我会详细解释下:
训练、验证和测试集路径配置
- path: 数据集的根目录路径。这是包含所有图像的顶层文件夹。
- train: 训练图像的相对路径。例如,如果训练图像位于根目录下的
images/train
文件夹内,则这里填写images/train
。 - val: 验证图像的相对路径。类似地,如果验证图像位于
images/val
文件夹内,则填写images/val
。 - test: (可选)测试图像的路径。如果有单独的测试集,则在此处指定路径。
关键点配置
- kpt_shape: 关键点的数量和维度。
[17, 3]
表示有17个关键点,每个关键点有3个维度(通常是x坐标、y坐标和一个可见性标志)。 - flip_idx: 翻转索引,用于处理图像翻转时关键点的对应关系。这对于对称物体(如人脸或人体)特别重要。例如,
[0, 2, 1, 4, 3, 6, 5, 8, 7, 10, 9, 12, 11, 14, 13, 16, 15]
表示每个关键点在翻转时应该映射到的新位置。
类别字典
- names: 列出了数据集中的类别及其对应的索引。例如,
0: person
表示索引0对应于“person”类别。这是模型进行类别识别的基础。
这个配置文件为YOLOv8模型提供了必要的信息,以正确地加载和处理用于姿态估计的数据集。正确设置这些参数对于模型的训练效果至关重要。
总结
本文详细介绍了YOLOv8项目的配置文件结构,特别是训练模型时使用的各种参数及其含义。YOLOv8是一个高级的对象检测框架,支持多种计算机视觉任务,包括图像分类、目标检测、实例分割和姿态估计。通过配置文件,用户可以定制模型的行为,以适应特定的数据集和应用需求。每个任务类型都需要对应的数据集格式和特定的配置文件。这些配置文件中的参数和设置决定了模型的训练和预测行为,以及最终的性能和效果。通过适当调整这些参数,用户可以优化模型以满足特定的性能要求和应用场景。如果有哪里写的不够清晰,小伙伴本可以给评论或者留言,我这边会尽快的优化博文内容,另外如有需要,我这边可支持技术答疑与支持。