超详细深入理解YOLOv8配置参数:了解多种任务计算机视觉模型训练

目录

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 用于性能评估。

这些参数主要用于定义模型的基本运行模式和任务类型。在实际应用中,应根据具体需求和场景选择合适的 taskmode。例如,如果目的是在一个新的数据集上训练一个目标检测模型,那么 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数据为例:

python 复制代码
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作为例子进行演示:

python 复制代码
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'变为相对路径。

bash 复制代码
# 示例使用方法: 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

在这个配置文件中,我们定义了训练、验证和测试图像的路径,列出了数据集中的所有类别,并提供了数据集的下载链接(如果可用)。请确保这些路径和类别与您的实际数据集相符。如果您使用的是自己的数据集,需要相应地调整 pathtrainvaltestnames 部分。

实例分割配置方法

实例分割比物体检测有所深入,它涉及到识别图像中的个别物体并将它们从图像的其余部分中分割出来。

实例分割模型的输出是一组蒙版或轮廓,用于勾画图像中每个物体,以及每个物体的类别标签和置信度分数。实例分割在您需要不仅知道图像中的物体位置,还需要知道它们确切形状时非常有用。

下面这份代码是训练实例分割时的示意代码:

python 复制代码
from ultralytics import YOLO


# 读取预训练模型
model = YOLO('yolov8n-seg.pt')

# 执行训练
results = model.train(data='coco128-seg.yaml', epochs=100, imgsz=640)

在 ultralytics 中进行训练实例分割任务的时候和目标检测任务都非常相似,其实主要区别就是读取不同的yaml或pt文件,以及数据集格式区别不同,剩下的数据集配置的路径结构都是一致的。

bash 复制代码
# 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] 坐标。姿态估计模型的输出是一组点集,这些点代表图像中物体上的关键点,通常还包括每个点的置信度得分。当你需要在场景中识别物体的特定部位及其相互之间的位置时,姿态估计是一个不错的选择。

训练示意代码如下:

bash 复制代码
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配置格式如下:

bash 复制代码
# 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是一个高级的对象检测框架,支持多种计算机视觉任务,包括图像分类、目标检测、实例分割和姿态估计。通过配置文件,用户可以定制模型的行为,以适应特定的数据集和应用需求。每个任务类型都需要对应的数据集格式和特定的配置文件。这些配置文件中的参数和设置决定了模型的训练和预测行为,以及最终的性能和效果。通过适当调整这些参数,用户可以优化模型以满足特定的性能要求和应用场景。++如果有哪里写的不够清晰,小伙伴本可以给评论或者留言,我这边会尽快的优化博文内容,另外如有需要,我这边可支持技术答疑与支持。++

相关推荐
千天夜10 分钟前
激活函数解析:神经网络背后的“驱动力”
人工智能·深度学习·神经网络
大数据面试宝典11 分钟前
用AI来写SQL:让ChatGPT成为你的数据库助手
数据库·人工智能·chatgpt
封步宇AIGC16 分钟前
量化交易系统开发-实时行情自动化交易-3.4.1.2.A股交易数据
人工智能·python·机器学习·数据挖掘
何曾参静谧17 分钟前
「Py」Python基础篇 之 Python都可以做哪些自动化?
开发语言·python·自动化
m0_5236742118 分钟前
技术前沿:从强化学习到Prompt Engineering,业务流程管理的创新之路
人工智能·深度学习·目标检测·机器学习·语言模型·自然语言处理·数据挖掘
Prejudices21 分钟前
C++如何调用Python脚本
开发语言·c++·python
HappyAcmen28 分钟前
IDEA部署AI代写插件
java·人工智能·intellij-idea
我狠狠地刷刷刷刷刷33 分钟前
中文分词模拟器
开发语言·python·算法
Jam-Young1 小时前
Python的装饰器
开发语言·python
噜噜噜噜鲁先森1 小时前
看懂本文,入门神经网络Neural Network
人工智能