深入理解 YOLOv8:解析.yaml 配置文件目标检测、实例分割、图像分类、姿态检测
目录
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成为当前最先进的视觉识别系统之一,为未来的技术创新和应用提供了广阔的可能性。如果有哪里写的不够清晰,小伙伴本可以给评论或者留言,我这边会尽快的优化博文内容,另外如有需要,我这边可支持技术答疑与支持。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!