深入理解 YOLOv8:解析.yaml 配置文件目标检测、实例分割、图像分类、姿态检测

目录

yolov8导航

YOLOv8(附带各种任务详细说明链接)

引言

YOLOv8配置文件概览

yolov8.yaml

1. nc

2. scales

3. backbone

4. head

yolov8-seg.yaml 

1. 参数部分

2. 骨架(Backbone)部分

3. 头部(Head)部分

关键区别

yolov8-cls.yaml 

1. 参数部分

2. 骨架(Backbone)部分

3. 头部(Head)部分

关键区别

yolov8-pose.yaml 

1. 参数部分

2. 骨架(Backbone)部分

3. 头部(Head)部分

关键区别

总结


yolov8导航

        如果大家想要了解关于yolov8的其他任务和相关内容可以点击这个链接,我这边整理了许多其他任务的说明博文,后续也会持续更新,包括yolov8模型优化、sam等等的相关内容。

YOLOv8(附带各种任务详细说明链接)

引言

        近年来,YOLO(You Only Look Once)系列在目标检测领域取得了巨大成功。YOLOv8,作为该系列的最新成员,以其卓越的性能和灵活的配置受到广泛关注。今天,我们将深入探讨YOLOv8的配置文件(.yaml),这对于理解模型的内部工作机制至关重要。

YOLOv8配置文件概览

        YOLOv8的配置文件定义了模型的关键参数和结构,包括类别数、模型尺寸、骨架(backbone)和头部(head)结构。这些配置决定了模型的性能和复杂性。

yolov8.yaml

# Ultralytics YOLO , AGPL-3.0 license
# YOLOv8目标检测模型,具有P3-P5输出。使用示例请参见 https://docs.ultralytics.com/tasks/detect

# Parameters
nc: 80  # 类别数目

scales: # 模型复合缩放常数,例如 'model=yolov8n.yaml' 将调用带有 'n' 缩放的 yolov8.yaml
  # [depth, width, max_channels]
  n: [0.33, 0.25, 1024]  # YOLOv8n概览:225层, 3157200参数, 3157184梯度, 8.9 GFLOPs
  s: [0.33, 0.50, 1024]  # YOLOv8s概览:225层, 11166560参数, 11166544梯度, 28.8 GFLOPs
  m: [0.67, 0.75, 768]   # YOLOv8m概览:295层, 25902640参数, 25902624梯度, 79.3 GFLOPs
  l: [1.00, 1.00, 512]   # YOLOv8l概览:365层, 43691520参数, 43691504梯度, 165.7 GFLOPs
  x: [1.00, 1.25, 512]   # YOLOv8x概览:365层, 68229648参数, 68229632梯度, 258.5 GFLOPs

# YOLOv8.0n骨架
backbone:
  # [from, repeats, module, args]
  - [-1, 1, Conv, [64, 3, 2]]  # 0-P1/2
  - [-1, 1, Conv, [128, 3, 2]]  # 1-P2/4
  - [-1, 3, C2f, [128, True]]
  - [-1, 1, Conv, [256, 3, 2]]  # 3-P3/8
  - [-1, 6, C2f, [256, True]]
  - [-1, 1, Conv, [512, 3, 2]]  # 5-P4/16
  - [-1, 6, C2f, [512, True]]
  - [-1, 1, Conv, [1024, 3, 2]]  # 7-P5/32
  - [-1, 3, C2f, [1024, True]]
  - [-1, 1, SPPF, [1024, 5]]  # 9

# YOLOv8.0n头部
head:
  - [-1, 1, nn.Upsample, [None, 2, 'nearest']]
  - [[-1, 6], 1, Concat, [1]]  # 合并骨架P4
  - [-1, 3, C2f, [512]]  # 12

  - [-1, 1, nn.Upsample, [None, 2, 'nearest']]
  - [[-1, 4], 1, Concat, [1]]  # 合并骨架P3
  - [-1, 3, C2f, [256]]  # 15 (P3/8-小)

  - [-1, 1, Conv, [256, 3, 2]]
  - [[-1, 12], 1, Concat, [1]]  # 合并头部P4
  - [-1, 3, C2f, [512]]  # 18 (P4/16-中)

  - [-1, 1, Conv, [512, 3, 2]]
  - [[-1, 9], 1, Concat, [1]]  # 合并头部P5
  - [-1, 3, C2f, [1024]]  # 21 (P5/32-大)

  - [[15, 18, 21], 1, Detect, [nc]]  # 检测(P3, P4, P5)

         在这个配置文件中,定义了多个不同尺寸的YOLOv8模型,每个模型具有不同的深度、宽度和通道数,以适应不同的计算能力和性能需求。骨架部分(backbone)定义了模型的基本结构,包括卷积层、自定义C2f模块和空间金字塔池化层。头部(head)则包括上采样、连接和检测层,负责将提取的特征用于最终的目标检测。

        在yolov8.yaml配置文件中,每个关键词都扮演着特定的角色,下面是对这些关键词及其含义的详细解释:

1. nc

  • 含义nc代表"number of classes",即模型用于检测的对象类别总数。
  • 示例中的值80,表示该模型配置用于检测80种不同的对象。

2. scales

  • 含义scales用于定义模型的不同尺寸和复杂度,它包含一系列缩放参数。
  • 子参数
    • n, s, m, l, x表示不同的模型尺寸,每个尺寸都有对应的depth(深度)、width(宽度)和max_channels(最大通道数)。

3. backbone

  • 含义backbone部分定义了模型的基础架构,即用于特征提取的网络结构。
  • 关键组成
    • [from, repeats, module, args]表示层的来源、重复次数、模块类型和参数。
    • Conv表示卷积层,其参数指定了输出通道数、卷积核大小和步长。
    • C2f可能是一个特定于YOLOv8的自定义模块。
    • SPPF是空间金字塔池化层,用于在多个尺度上聚合特征。

4. head

  • 含义head部分定义了模型的检测头,即用于最终目标检测的网络结构。
  • 关键组成
    • nn.Upsample表示上采样层,用于放大特征图。
    • Concat表示连接层,用于合并来自不同层的特征。
    • C2f层再次出现,可能用于进一步处理合并后的特征。
    • Detect层是最终的检测层,负责输出检测结果。

        这部分,我这边会详细的叙述每一个关键词和节点的含义,以这个为标准,后续我这边概述其他.yaml的时候,我会更侧重描述他们跟这个的区别。 

yolov8-seg.yaml 

        在详细说明yolov8-seg.yaml配置文件之前,让我们先了解一下它是用于什么的。这个配置文件专门为YOLOv8-seg模型设计,这是一个用于实例分割的模型。实例分割是计算机视觉中的一项高级任务,不仅需要识别图像中的对象(如目标检测),还要为每个对象的每个像素提供精确的分类。

# Ultralytics YOLO , AGPL-3.0 license
# YOLOv8-seg instance segmentation model. For Usage examples see https://docs.ultralytics.com/tasks/segment

# Parameters
nc: 80  # number of classes
scales: # model compound scaling constants, i.e. 'model=yolov8n-seg.yaml' will call yolov8-seg.yaml with scale 'n'
  # [depth, width, max_channels]
  n: [0.33, 0.25, 1024]
  s: [0.33, 0.50, 1024]
  m: [0.67, 0.75, 768]
  l: [1.00, 1.00, 512]
  x: [1.00, 1.25, 512]

# YOLOv8.0n backbone
backbone:
  # [from, repeats, module, args]
  - [-1, 1, Conv, [64, 3, 2]]  # 0-P1/2
  - [-1, 1, Conv, [128, 3, 2]]  # 1-P2/4
  - [-1, 3, C2f, [128, True]]
  - [-1, 1, Conv, [256, 3, 2]]  # 3-P3/8
  - [-1, 6, C2f, [256, True]]
  - [-1, 1, Conv, [512, 3, 2]]  # 5-P4/16
  - [-1, 6, C2f, [512, True]]
  - [-1, 1, Conv, [1024, 3, 2]]  # 7-P5/32
  - [-1, 3, C2f, [1024, True]]
  - [-1, 1, SPPF, [1024, 5]]  # 9

# YOLOv8.0n head
head:
  - [-1, 1, nn.Upsample, [None, 2, 'nearest']]
  - [[-1, 6], 1, Concat, [1]]  # cat backbone P4
  - [-1, 3, C2f, [512]]  # 12

  - [-1, 1, nn.Upsample, [None, 2, 'nearest']]
  - [[-1, 4], 1, Concat, [1]]  # cat backbone P3
  - [-1, 3, C2f, [256]]  # 15 (P3/8-small)

  - [-1, 1, Conv, [256, 3, 2]]
  - [[-1, 12], 1, Concat, [1]]  # cat head P4
  - [-1, 3, C2f, [512]]  # 18 (P4/16-medium)

  - [-1, 1, Conv, [512, 3, 2]]
  - [[-1, 9], 1, Concat, [1]]  # cat head P5
  - [-1, 3, C2f, [1024]]  # 21 (P5/32-large)

  - [[15, 18, 21], 1, Segment, [nc, 32, 256]]  # Segment(P3, P4, P5)

1. 参数部分

  • nc: 80:表示模型用于检测的类别数目为80,与目标检测模型相同。
  • scales:定义模型的不同尺寸和复杂度,与目标检测模型相似,提供不同的缩放级别(n, s, m, l, x)。

2. 骨架(Backbone)部分

  • 这部分与yolov8.yaml非常相似,定义了模型的基础架构,包括多个卷积层(Conv)和自定义C2f层,用于特征提取。

3. 头部(Head)部分

  • 在头部结构中,出现了上采样(nn.Upsample)、连接(Concat)和C2f层,这与目标检测模型相似,用于处理和合并不同层次的特征。
  • 最重要的区别在于最后的层:在实例分割模型中,使用的是Segment层而不是Detect层。
    • Segment层的参数为[nc, 32, 256],其中nc代表类别数,其余两个参数可能是特定于实例分割任务的配置,如用于分割的特定通道数和内部特征数量。

关键区别

  • 任务类型yolov8-seg.yaml针对的是实例分割任务,而yolov8.yaml用于目标检测任务。实例分割不仅需要识别对象,还要为每个对象提供像素级的精确分类。
  • 最后一层yolov8-seg.yaml中使用的是Segment层,专门用于实例分割,而yolov8.yaml使用的是Detect层,用于目标检测。

        yolov8-seg.yaml配置文件是YOLOv8-seg实例分割模型的核心,它在基本结构上与标准的YOLOv8目标检测模型相似,但在最后的层面上进行了调整,以适应实例分割的特殊需求。这种灵活性和调整能力展示了YOLOv8模型家族的多功能性和适应不同计算机视觉任务的能力。 

yolov8-cls.yaml 

        yolov8-cls.yaml配置文件专为YOLOv8-cls模型设计,这是一个面向图像分类任务的模型。与目标检测(YOLOv8)和实例分割(YOLOv8-seg)不同,图像分类的目的是为整个图像指定一个类别标签,而不是在图像中定位或分割特定对象。

# Ultralytics YOLO , AGPL-3.0 license
# YOLOv8-cls image classification model. For Usage examples see https://docs.ultralytics.com/tasks/classify

# Parameters
nc: 1000  # number of classes
scales: # model compound scaling constants, i.e. 'model=yolov8n-cls.yaml' will call yolov8-cls.yaml with scale 'n'
  # [depth, width, max_channels]
  n: [0.33, 0.25, 1024]
  s: [0.33, 0.50, 1024]
  m: [0.67, 0.75, 1024]
  l: [1.00, 1.00, 1024]
  x: [1.00, 1.25, 1024]

# YOLOv8.0n backbone
backbone:
  # [from, repeats, module, args]
  - [-1, 1, Conv, [64, 3, 2]]  # 0-P1/2
  - [-1, 1, Conv, [128, 3, 2]]  # 1-P2/4
  - [-1, 3, C2f, [128, True]]
  - [-1, 1, Conv, [256, 3, 2]]  # 3-P3/8
  - [-1, 6, C2f, [256, True]]
  - [-1, 1, Conv, [512, 3, 2]]  # 5-P4/16
  - [-1, 6, C2f, [512, True]]
  - [-1, 1, Conv, [1024, 3, 2]]  # 7-P5/32
  - [-1, 3, C2f, [1024, True]]

# YOLOv8.0n head
head:
  - [-1, 1, Classify, [nc]]  # Classify

1. 参数部分

  • nc: 1000:表示模型用于分类的类别总数为1000。这比通常的目标检测或实例分割任务有更多的类别。
  • scales:与yolov8-seg.yaml类似,定义了模型的不同尺寸和复杂度,通过提供不同的缩放级别(n, s, m, l, x)来适应不同的计算能力和资源。

2. 骨架(Backbone)部分

  • 这部分与yolov8-seg.yaml的骨架结构相似,包含多个卷积层(Conv)和自定义C2f层,用于提取图像特征。这表明无论是用于分类、检测还是分割,特征提取的基本原理是类似的。

3. 头部(Head)部分

  • 这是与yolov8-seg.yaml最显著的不同之处。在图像分类模型中,头部结构相对简单,只包含一个Classify层。
    • Classify层的参数[nc]指定了类别的数量,这一层负责将提取的特征映射到类别标签上。

关键区别

  • 任务类型yolov8-cls.yaml是为图像分类任务设计的,而非目标检测或实例分割。这意味着模型的输出是整个图像的类别标签,而不是图像中各个对象的位置或分割掩码。
  • 头部结构:与处理更复杂的任务(如实例分割)相比,图像分类模型的头部结构更加简单,只包含一个Classify层,直接对整个图像进行分类。

         yolov8-cls.yaml配置文件针对的是图像分类任务,它在结构上与目标检测和实例分割模型有共通之处,尤其是在特征提取的骨架部分。然而,头部结构的简化体现了图像分类任务的直接性和专注性。这种配置展示了YOLOv8模型家族的多功能性和在不同计算机视觉任务中的应用能力。

yolov8-pose.yaml 

    yolov8-pose.yaml 配置文件是专为 YOLOv8-pose 模型设计的,这是一个用于关键点/姿态估计的模型。关键点估计是计算机视觉中的一项高级任务,它涉及识别和定位图像中人体或其他对象的特定关键点。

# Ultralytics YOLO , AGPL-3.0 license
# YOLOv8-pose keypoints/pose estimation model. For Usage examples see https://docs.ultralytics.com/tasks/pose

# Parameters
nc: 1  # number of classes
kpt_shape: [17, 3]  # number of keypoints, number of dims (2 for x,y or 3 for x,y,visible)
scales: # model compound scaling constants, i.e. 'model=yolov8n-pose.yaml' will call yolov8-pose.yaml with scale 'n'
  # [depth, width, max_channels]
  n: [0.33, 0.25, 1024]
  s: [0.33, 0.50, 1024]
  m: [0.67, 0.75, 768]
  l: [1.00, 1.00, 512]
  x: [1.00, 1.25, 512]

# YOLOv8.0n backbone
backbone:
  # [from, repeats, module, args]
  - [-1, 1, Conv, [64, 3, 2]]  # 0-P1/2
  - [-1, 1, Conv, [128, 3, 2]]  # 1-P2/4
  - [-1, 3, C2f, [128, True]]
  - [-1, 1, Conv, [256, 3, 2]]  # 3-P3/8
  - [-1, 6, C2f, [256, True]]
  - [-1, 1, Conv, [512, 3, 2]]  # 5-P4/16
  - [-1, 6, C2f, [512, True]]
  - [-1, 1, Conv, [1024, 3, 2]]  # 7-P5/32
  - [-1, 3, C2f, [1024, True]]
  - [-1, 1, SPPF, [1024, 5]]  # 9

# YOLOv8.0n head
head:
  - [-1, 1, nn.Upsample, [None, 2, 'nearest']]
  - [[-1, 6], 1, Concat, [1]]  # cat backbone P4
  - [-1, 3, C2f, [512]]  # 12

  - [-1, 1, nn.Upsample, [None, 2, 'nearest']]
  - [[-1, 4], 1, Concat, [1]]  # cat backbone P3
  - [-1, 3, C2f, [256]]  # 15 (P3/8-small)

  - [-1, 1, Conv, [256, 3, 2]]
  - [[-1, 12], 1, Concat, [1]]  # cat head P4
  - [-1, 3, C2f, [512]]  # 18 (P4/16-medium)

  - [-1, 1, Conv, [512, 3, 2]]
  - [[-1, 9], 1, Concat, [1]]  # cat head P5
  - [-1, 3, C2f, [1024]]  # 21 (P5/32-large)

  - [[15, 18, 21], 1, Pose, [nc, kpt_shape]]  # Pose(P3, P4, P5)

1. 参数部分

  • nc: 1:表示模型用于检测的类别数目为1。在关键点估计任务中,通常关注的是单一类别(如人体)。
  • kpt_shape: [17, 3]:定义了关键点的数量和维度。在此例中,有17个关键点,每个关键点有3个维度(x, y坐标和可见性)。
  • scales:定义了模型的不同尺寸和复杂度,这与其他YOLOv8配置相似,提供不同的缩放级别(n, s, m, l, x)。

2. 骨架(Backbone)部分

  • 这部分与其他YOLOv8配置文件相似,包含多个卷积层(Conv)和自定义C2f层,用于提取图像特征。

3. 头部(Head)部分

  • 头部结构与其他YOLOv8模型相似,包含上采样(nn.Upsample)、连接(Concat)和C2f层,用于处理和合并不同层次的特征。
  • 关键的不同之处在于最后的层:Pose层。这是专为关键点估计设计的层,其参数包括类别数(nc)和关键点形状(kpt_shape)。

关键区别

  • 任务类型yolov8-pose.yaml配置文件是为关键点/姿态估计任务设计的,与用于图像分类、目标检测或实例分割的模型有明显不同。关键点估计需要识别和定位图像中的特定点。
  • 头部结构:最大的区别在于Pose层的使用,这是专门为关键点估计任务设计的,用于定位每个关键点的位置和可见性。

         yolov8-pose.yaml配置文件体现了YOLOv8模型在处理不同类型计算机视觉任务时的灵活性。它在基础结构上与其他YOLOv8模型相似,但通过特定于任务的头部结构调整,适应了关键点估计这一复杂的任务。这种配置展示了YOLOv8模型家族的多功能性,以及在不同计算机视觉任务中的应用能力。

总结

        YOLOv8系列模型展示了其在多个计算机视觉任务中的适应性和高效性。通过其多样化的配置文件,YOLOv8不仅在目标检测领域表现出色,还成功扩展到实例分割、图像分类和关键点/姿态估计等领域。每个配置文件针对特定任务优化,从而确保模型在处理不同类型的视觉数据时保持高准确率和效率。这种灵活性和多功能性使得YOLOv8成为当前最先进的视觉识别系统之一,为未来的技术创新和应用提供了广阔的可能性。如果有哪里写的不够清晰,小伙伴本可以给评论或者留言,我这边会尽快的优化博文内容,另外如有需要,我这边可支持技术答疑与支持。

你可能感兴趣的:(计算机视觉,YOLOV8系列,深度学习,YOLO,目标检测,人工智能,yolov8)