关注

超详细深入理解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 模型的默认设置和超参数。这个文件作为一个配置文件,为模型的各种操作提供了标准化的参数和设置。

训练模式和任务类型参数

参数名称默认值参数解释调参建议
taskdetectYOLO任务类型,如detect, segment, classify, pose根据项目需求选择合适的任务类型。不同的任务类型适用于不同的应用场景,例如目标检测(detect)、图像分割(segment)、图像分类(classify)或姿态估计(pose)。
modetrainYOLO模式,如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指定训练数据配置文件
epochs100训练的总周期数根据数据集大小和模型复杂度调整
time(空)训练的总小时数,如果提供,会覆盖epochs如果有时间限制,可设置该参数
patience50无显著改善时停止训练的等待周期数可根据训练过程中的收敛情况进行调整
batch16每批图像数量 (-1 为 AutoBatch)根据GPU内存大小调整
imgsz640输入图像尺寸根据实际需求和硬件限制调整
saveTrue是否保存训练检查点和预测结果根据需要开启或关闭
save_period-1每x周期保存一次检查点 (如果 < 1 则禁用)根据训练周期和需求调整
cacheFalse是否使用缓存进行数据加载根据数据集大小和加载速度决定
device(空)运行设备,如cuda device=0 或 device=cpu根据硬件资源分配合适的设备
workers8数据加载的工作线程数根据系统资源和数据集大小调整
project(空)项目名称设置项目名称以组织输出目录
name(空)实验名称,结果保存在 'project/name' 目录为实验分配一个描述性名称
exist_okFalse是否覆盖现有实验根据需要决定是否覆盖
pretrainedTrue是否使用预训练模型或从特定模型加载权重选择合适的预训练模型以加速训练
optimizerauto使用的优化器,选择包括 SGD, Adam 等根据模型和数据选择最优化器
verboseFalse是否打印详细输出依据需要调整输出详细程度
seed0随机种子,用于可重现性设置种子以保证实验可重复性
deterministicTrue是否启用确定性模式在需要确保结果一致性时启用
single_clsFalse是否将多类别数据当作单一类别训练在单类别训练场景中启用
rectFalse矩形训练或验证在适当的应用场景中选择
cos_lrFalse是否使用余弦学习率调度器适用于长周期训练
close_mosaic10最后几个周期禁用mosaic增强 (0 to disable)根据训练进展调整增强策略
resumeFalse是否从最后检查点恢复训练中断后恢复训练时启用
ampTrue是否使用自动混合精度 (AMP) 训练在硬件支持的情况下启用以提高效率
fraction1.0训练集使用的数据比例在有限的资源下可选择使用部分数据
profileFalse训练期间是否分析ONNX和TensorRT速度性能分析时启用
freezeNone冻结的层的数量或层索引列表在迁移学习场景中冻结特定层
overlap_maskTrue训练时掩码是否重叠(仅限分割训练)在分割任务中根据需要调整
mask_ratio4掩码降采样比率(仅限分割训练)根据分割任务和图像分辨率调整
dropout0.0使用dropout正则化(仅限分类训练)在分类任务中根据模型复杂度和过拟合情况调整

        这些参数涵盖了从模型选择和数据配置到训练细节和优化策略的多个方面。

训练期间验证和测试参数

参数名称默认值参数解释调参建议
valTrue训练期间是否进行验证/测试根据需要开启或关闭。在大多数情况下,保持开启以监控模型性能
splitval用于验证的数据集划分,如 'val', 'test' 或 'train'选择合适的数据集划分进行验证
save_jsonFalse是否将结果保存为JSON文件如果需要详细的输出结果,可以开启此选项
save_hybridFalse是否保存混合版本的标签(标签 + 额外预测)在需要综合标签和预测结果的场景中开启
conf(空)用于检测的对象置信度阈值(默认0.25预测,0.001验证)根据应用需求调整置信度阈值
iou0.7非极大值抑制(NMS)的交并比(IoU)阈值调整以平衡检测的准确性和召回率
max_det300每张图像的最大检测数量根据实际应用场景和性能需求调整
halfFalse是否使用半精度(FP16)在支持FP16的硬件上开启以提高性能
dnnFalse是否使用OpenCV DNN进行ONNX推理在不支持PyTorch但支持OpenCV DNN的环境中开启
plotsTrue训练/验证期间是否保存图表和图像根据需要进行可视化分析时开启

         这些参数主要涉及模型在训练期间的验证和测试设置,以及结果的保存和展示方式。正确地配置这些参数对于模型性能评估和优化至关重要。

预测部分相关参数

参数名称默认值参数解释调参建议
source(空)图像或视频的源目录指定用于预测的图像或视频的源目录
vid_stride1视频帧率步长根据需要调整视频处理的帧率
stream_bufferFalse是否缓冲所有流媒体帧(True)或返回最近的帧(False)根据实时处理需求和资源限制调整
visualizeFalse是否可视化模型特征在需要分析模型特征时启用
augmentFalse是否对预测源应用图像增强在需要改善预测性能或鲁棒性时启用
agnostic_nmsFalse是否使用类别不可知的非极大值抑制(NMS)在检测不区分类别的应用场景中启用
classes(空)过滤结果的类别,如classes=0,或classes=[0,2,3]在需要特定类别的检测时设置
retina_masksFalse是否使用高分辨率分割掩码在进行高精度分割任务时启用

         这部分参数主要涉及模型的预测过程,包括输入源的设置、视频处理的配置、结果的可视化和类别过滤等。正确配置这些参数可以帮助更好地利用模型进行图像和视频的预测分析。

可视化部分相关参数

参数名称默认值参数解释调参建议
showFalse是否展示预测的图像和视频在需要实时查看结果时启用
save_framesFalse是否保存预测的视频帧在需要分析单独帧时启用
save_txtFalse是否将结果保存为文本文件在需要详细的文本输出时启用
save_confFalse是否在结果中包含置信度分数在需要评估或展示置信度时启用
save_cropFalse是否保存结果的裁剪图像在需要分析或使用检测到的对象时启用
show_labelsTrue是否显示预测标签,如 'person'在需要识别和展示检测对象时保持开启
show_confTrue是否显示预测置信度,如 '0.99'在需要展示每个检测对象的置信度时保持开启
show_boxesTrue是否展示预测边界框在需要可视化检测边界时保持开启
line_width(空)边界框的线宽,如果为空则根据图像大小缩放根据可视化需求和图像大小调整

        这部分参数主要用于控制预测结果的可视化和输出方式。适当调整这些参数可以帮助更好地理解和展示模型的预测结果,特别是在开发和调试阶段。根据需求,可以开启或关闭某些功能,以获取最佳的可视化效果。 

模型导出部分相关参数

参数名称默认值参数解释调参建议
formattorchscript导出模型的格式根据需要选择合适的格式,如 TorchScript, ONNX, Keras 等
kerasFalse是否使用Keras如果需要将模型转换为Keras格式,则启用
optimizeFalse是否为移动设备优化TorchScript模型在需要部署到移动设备时启用
int8False是否使用CoreML/TF的INT8量化在需要优化模型大小和推理速度时启用
dynamicFalse是否为ONNX/TF/TensorRT启用动态轴在需要动态输入大小时启用
simplifyFalse是否简化ONNX模型在需要简化模型结构以提高兼容性时启用
opset(空)ONNX的操作集版本根据目标平台和ONNX版本选择合适的opset
workspace4TensorRT的工作空间大小(GB)根据可用内存资源调整工作空间大小
nmsFalse是否在CoreML中添加非极大值抑制(NMS)在需要在CoreML模型中内置NMS时启用

         这些参数主要涉及将训练好的YOLOv8模型导出为不同格式,以便于在不同平台和应用场景中部署。合理选择和配置这些参数对于模型的有效部署和性能优化至关重要。

训练超参数相关参数

参数名称默认值参数解释调参建议
lr00.01初始学习率根据模型和数据集大小调整
lrf0.01最终学习率 (lr0 * lrf)根据训练策略调整
momentum0.937SGD动量/Adam的beta1根据优化器类型和训练过程调整
weight_decay0.0005优化器的权重衰减防止过拟合时调整
warmup_epochs3.0热身周期数根据模型和数据集调整热身期
warmup_momentum0.8热身期初始动量在热身期调整动量以稳定训练
warmup_bias_lr0.1热身期偏置的学习率在热身期适当提高偏置项的学习率
box7.5边界框损失增益根据检测任务调整
cls0.5类别损失增益根据分类任务和类别不平衡调整
dfl1.5dfl损失增益根据任务具体需求调整
pose12.0姿态损失增益在姿态估计任务中调整
kobj1.0关键点对象损失增益在关键点检测任务中调整
label_smoothing0.0标签平滑在多类别分类中使用以提高泛化性
nbs64名义批量大小根据GPU内存和模型大小调整
hsv_h0.015HSV-色调增强的比例根据数据集特性调整图像增强参数
hsv_s0.7HSV-饱和度增强的比例同上
hsv_v0.4HSV-值增强的比例同上
degrees0.0图像旋转角度根据需求调整图像增强程度
translate0.1图像平移比例根据需求调整图像增强程度
scale0.5图像缩放增益根据需求调整图像增强程度
shear0.0图像剪切角度根据需求调整图像增强程度
perspective0.0图像透视变换的比例根据需求调整图像增强程度
flipud0.0图像上下翻转的概率根据需求调整图像增强程度
fliplr0.5图像左右翻转的概率根据需求调整图像增强程度
mosaic1.0图像马赛克增强的概率根据需求调整图像增强程度
mixup0.0图像混合增强的概率根据需求调整图像增强程度
copy_paste0.0分割复制粘贴的概率在分割任务中根据需要调整
cfg(空)用于覆盖默认配置的自定义配置文件路径指定自定义配置文件以覆盖默认设置
trackerbotsort.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

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

实例分割配置方法

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

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

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

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

转载自CSDN-专业IT技术社区

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

原文链接:https://blog.csdn.net/qq_42452134/article/details/135154861

评论

赞0

评论列表

微信小程序
QQ小程序

关于作者

点赞数:0
关注数:0
粉丝:0
文章:0
关注标签:0
加入于:--