一文弄懂 | YOLOv8网络结构解读 、yolov8.yaml配置文件详细解读与说明、模型训练参数详细解析 | 通俗易懂!入门必看系列!

article/2025/8/15 10:34:36

看这一篇就够了。本文内含YOLOv8网络结构图 + yaml配置文件详细解读与说明 + 训练教程 + 训练参数设置+参数解析说明等一些有关YOLOv8的内容!

YOLOv8v10专栏订阅链接:YOLOv10 创新改进高效涨点+持续改进300多篇+永久免费答疑

(订阅的小伙伴,终身免费享有后续YOLOv11或是其他版本的改进专栏)

目录

一、YOLOv8简介

二、yolov8.yaml配置文件进行详细讲解

2.1 参数部分【Parameters】

2.2 主干部分【backbone】

 2.3 头部【head】

三、YOLOv8模型训练参数详细解析 

3.1 YOLOv8模型训练代码

3.2 模型大小选择

3.3 训练参数设置

3.4 训练参数说明

四、本文总结


一、YOLOv8简介

本文详细介绍YOLOv8的网络结构,YOLOv8网络主要包含Backbone、Neck和Head 3个部分。

  • Backbone采用C2f模块,通过Bottleneck Block和SPPF模块提升特征提取能力。

  • Neck颈部网络位于主干网络和头部网络之间,它的作用是进行特征融合和增强。

  • Head头部网络是目标检测模型的决策部分,负责产生最终的检测结果。

YOLOv8整体网络结构图

YOLOv8的网络结构主要由以下三个大部分组成 

Backbone

Backbone部分负责特征提取,采用了一系列卷积和反卷积层,同时使用了残差连接和瓶颈结构来减小网络的大小并提高性能。该部分采用了C2f模块作为基本构成单元,与YOLOv5的C3模块相比,C2f模块具有更少的参数量和更优秀的特征提取能力。具体来说,C2f模块通过更有效的结构设计,减少了冗余参数,提高了计算效率。此外,Backbone部分还包括一些常见的改进技术,如缝合一些卷积模块,注意力模块,替换主干网络等改进,以进一步增强特征提取的能力。后续会更新大量相关部分改进点。

Neck

Neck颈部网络位于主干网络和头部网络之间,它的作用是进行特征融合和增强。后续会更新大量相关部分改进点。

Head

Head头部网络是目标检测模型的决策部分,负责产生最终的检测结果。后续会更新大量相关部分改进点。

二、yolov8.yaml配置文件进行详细讲解

配置文件主要分为三个部分: 参数部分【Parameters】主干部分【backone】头部部分【head】下面分别对这几个部分进行详细说明。

关于YOLOv8网络的配置文件yolov8.yaml的详细内容如下:

# Ultralytics YOLO 🚀, AGPL-3.0 license
# YOLOv8 object detection model with P3-P5 outputs. For Usage examples see https://docs.ultralytics.com/tasks/detect# Parameters
nc: 80  # number of classes
scales: # model compound scaling constants, i.e. 'model=yolov8n.yaml' will call yolov8.yaml with scale 'n'# [depth, width, max_channels]n: [0.33, 0.25, 1024]  # YOLOv8n summary: 225 layers,  3157200 parameters,  3157184 gradients,   8.9 GFLOPss: [0.33, 0.50, 1024]  # YOLOv8s summary: 225 layers, 11166560 parameters, 11166544 gradients,  28.8 GFLOPsm: [0.67, 0.75, 768]   # YOLOv8m summary: 295 layers, 25902640 parameters, 25902624 gradients,  79.3 GFLOPsl: [1.00, 1.00, 512]   # YOLOv8l summary: 365 layers, 43691520 parameters, 43691504 gradients, 165.7 GFLOPsx: [1.00, 1.25, 512]   # YOLOv8x summary: 365 layers, 68229648 parameters, 68229632 gradients, 258.5 GFLOPs# 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, Detect, [nc]]  # Detect(P3, P4, P5)

2.1 参数部分【Parameters】

# Parameters
nc: 80  # number of classes
scales: # model compound scaling constants, i.e. 'model=yolov8n.yaml' will call yolov8.yaml with scale 'n'# [depth, width, max_channels]n: [0.33, 0.25, 1024]  # YOLOv8n summary: 225 layers,  3157200 parameters,  3157184 gradients,   8.9 GFLOPss: [0.33, 0.50, 1024]  # YOLOv8s summary: 225 layers, 11166560 parameters, 11166544 gradients,  28.8 GFLOPsm: [0.67, 0.75, 768]   # YOLOv8m summary: 295 layers, 25902640 parameters, 25902624 gradients,  79.3 GFLOPsl: [1.00, 1.00, 512]   # YOLOv8l summary: 365 layers, 43691520 parameters, 43691504 gradients, 165.7 GFLOPsx: [1.00, 1.25, 512]   # YOLOv8x summary: 365 layers, 68229648 parameters, 68229632 gradients, 258.5 GFLOP
  • nc: 80 指的是数据集中的类别数量。

  • scales: 代表模型尺寸,分了n,s,m,l,x这5个不同大小的尺寸,参数量依次从小到大。

  • [depth, width, max_channels]:分别表示网络模型的深度因子网络模型的宽度因子最大通道数

  • depth深度因子的作用表示模型中重复模块的数量或层数的缩放比例。这里主要用来调整C2f模块中的子模块Bottelneck重复次数。比如主干中第一个C2f模块的number系数是3,我们使用0.33x3并且向上取整就等于1了,这就代表第一个C2f模块中Bottelneck只重复一次;

  • width宽度因子的作用表示模型中通道数(即特征图的深度)的缩放比例,如果某个层原本有64个通道,而width设置为0.5,则该层的通道数变为32。比如使用yolov8n.yaml文件,参数为[0.33, 0.25, 1024]。第一个Conv模块的输出通道数写的是64,但是实际上这个通道数并不是64,而是使用宽度因子 0.25x64得到的最终结果16;同理,C2f模块的输出通道虽然在yaml文件上写的是128,但是在实际使用时依然要乘上宽度因子0.25,那么第一个C2f模块最终的到实际通道数就是0.25x128 = 32。如下图所示,其他的依次类推。

  • max-channels: 表示每层最大通道数。每层的通道数会与这个参数进行一个对比,如果特征图通道数大于这个数,那就取 max_channels的值。

2.2 主干部分【backbone】

# 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

主干部分有四个参数[from, number, module, args] ,解释如下:

  • from这个参数代表从哪一层获得输入,-1就表示从上一层获得输入,[-1, 6]就表示从上一层和第6层这两层获得输入。第一层比较特殊,这里第一层上一层 没有输入,from默认-1就好了。

  • number这个参数表示模块重复的次数,如果为3则表示该模块重复3次,这里并不一定是这个模块的重复次数,也有可能是这个模块中的子模块重复的次数。对于C2f模块来说,这个number就代表C2fBottelneck模块重复的次数。

  • module这个就代表你这层使用的模块的名称,比如你第一层使用了Conv模块,第二层使用了C2f模块。

  • args表示这个模块需要传入的参数,第一个参数均表示该层的输出通道数。对于第一层conv参数【64,3,2】:64代表输出通道数,3代表卷积核大小k,2代表stride步长。每层输入通道数,默认是上一层的输出通道数。

  • 每一层解释如下,见注释:

  • backbone:# [from, repeats, module, args]- [-1, 1, Conv, [64, 3, 2]]  # 0-P1/2 第0层,-1代表将上层的输入作为本层的输入。第0层的输入是640*640*3的图像。Conv代表卷积层,相应的参数:64代表输出通道数,3代表卷积核大小k,2代表stride步长。- [-1, 1, Conv, [128, 3, 2]]  # 1-P2/4 第1层,本层和上一层是一样的操作(128代表输出通道数,3代表卷积核大小k,2代表stride步长)- [-1, 3, C2f, [128, True]] # 第2层,本层是C2f模块,3代表本层重复3次。128代表输出通道数,True表示Bottleneck有shortcut。- [-1, 1, Conv, [256, 3, 2]]  # 3-P3/8 第3层,进行卷积操作(256代表输出通道数,3代表卷积核大小k,2代表stride步长),输出特征图尺寸为80*80*256(卷积的参数都没变,所以都是长宽变成原来的1/2,和之前一样),特征图的长宽已经变成输入图像的1/8。- [-1, 6, C2f, [256, True]] # 第4层,本层是C2f模块,可以参考第2层的讲解。6代表本层重复6次。256代表输出通道数,True表示Bottleneck有shortcut。经过这层之后,特征图尺寸依旧是80*80*256。- [-1, 1, Conv, [512, 3, 2]]  # 5-P4/16 第5层,进行卷积操作(512代表输出通道数,3代表卷积核大小k,2代表stride步长),输出特征图尺寸为40*40*512(卷积的参数都没变,所以都是长宽变成原来的1/2,和之前一样),特征图的长宽已经变成输入图像的1/16。- [-1, 6, C2f, [512, True]] # 第6层,本层是C2f模块,可以参考第2层的讲解。6代表本层重复6次。512代表输出通道数,True表示Bottleneck有shortcut。经过这层之后,特征图尺寸依旧是40*40*512。- [-1, 1, Conv, [1024, 3, 2]]  # 7-P5/32 第7层,进行卷积操作(1024代表输出通道数,3代表卷积核大小k,2代表stride步长),输出特征图尺寸为20*20*1024(卷积的参数都没变,所以都是长宽变成原来的1/2,和之前一样),特征图的长宽已经变成输入图像的1/32。- [-1, 3, C2f, [1024, True]] #第8层,本层是C2f模块,可以参考第2层的讲解。3代表本层重复3次。1024代表输出通道数,True表示Bottleneck有shortcut。经过这层之后,特征图尺寸依旧是20*20*1024。- [-1, 1, SPPF, [1024, 5]]  # 9 第9层,本层是快速空间金字塔池化层(SPPF)。1024代表输出通道数,5代表池化核大小k。结合模块结构图和代码可以看出,最后concat得到的特征图尺寸是20*20*(512*4),经过一次Conv得到20*20*1024。

其他说明:各层注释中的P1/2表示该层特征图缩放为输入图像尺寸的1/2,是第1特征层;P2/4表示该层特征图缩放为输入图像尺寸的1/4,是第2特征层;其他的依次类推。 

 2.3 头部【head


# 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, Detect, [nc]]  # Detect(P3, P4, P5)

头部分有四个参数[from, number, module, args] ,解释如下:

  • from这个参数代表从哪一层获得输入,-1就表示从上一层获得输入,[-1, 6]就表示从上一层和第6层这两层获得输入。第一层比较特殊,这里第一层上一层 没有输入,from默认-1就好了。

  • number这个参数表示模块重复的次数,如果为3则表示该模块重复3次,这里并不一定是这个模块的重复次数,也有可能是这个模块中的子模块重复的次数。对于C2f模块来说,这个number就代表C2fBottelneck模块重复的次数。

  • module这个就代表你这层使用的模块的名称,比如你第一层使用了Conv模块,第二层使用了C2f模块。

  • args表示这个模块需要传入的参数,第一个参数均表示该层的输出通道数每层输入通道数,默认是上一层的输出通道数。

  • 每一层解释如下,见注释:

  • # YOLOv8.0n head 头部层
    head:- [-1, 1, nn.Upsample, [None, 2, 'nearest']] # 第10层,本层是上采样层。-1代表将上层的输出作为本层的输入。None代表上采样的size=None(输出尺寸)不指定。2代表scale_factor=2,表示输出的尺寸是输入尺寸的2倍。mode=nearest代表使用的上采样算法为最近邻插值算法。经过这层之后,特征图的长和宽变成原来的两倍,通道数不变,所以最终尺寸为40*40*1024。- [[-1, 6], 1, Concat, [1]]  # cat backbone P4 第11层,本层是concat层,[-1, 6]代表将上层和第6层的输出作为本层的输入。[1]代表concat拼接的维度是1。从上面的分析可知,上层的输出尺寸是40*40*1024,第6层的输出是40*40*512,最终本层的输出尺寸为40*40*1536。- [-1, 3, C2f, [512]]  # 12 第12层,本层是C2f模块,可以参考第2层的讲解。3代表本层重复3次。512代表输出通道数。与Backbone中C2f不同的是,此处的C2f的bottleneck模块的shortcut=False。- [-1, 1, nn.Upsample, [None, 2, 'nearest']] # 第13层,本层也是上采样层(参考第10层)。经过这层之后,特征图的长和宽变成原来的两倍,通道数不变,所以最终尺寸为80*80*512。- [[-1, 4], 1, Concat, [1]]  # cat backbone P3 第14层,本层是concat层,[-1, 4]代表将上层和第4层的输出作为本层的输入。[1]代表concat拼接的维度是1。从上面的分析可知,上层的输出尺寸是80*80*512,第6层的输出是80*80*256,最终本层的输出尺寸为80*80*768。- [-1, 3, C2f, [256]]  # 15 (P3/8-small) 第15层,本层是C2f模块,可以参考第2层的讲解。3代表本层重复3次。256代表输出通道数。经过这层之后,特征图尺寸变为80*80*256,特征图的长宽已经变成输入图像的1/8。- [-1, 1, Conv, [256, 3, 2]] # 第16层,进行卷积操作(256代表输出通道数,3代表卷积核大小k,2代表stride步长),输出特征图尺寸为40*40*256(卷积的参数都没变,所以都是长宽变成原来的1/2,和之前一样)。- [[-1, 12], 1, Concat, [1]]  # cat head P4 第17层,本层是concat层,[-1, 12]代表将上层和第12层的输出作为本层的输入。[1]代表concat拼接的维度是1。从上面的分析可知,上层的输出尺寸是40*40*256,第12层的输出是40*40*512,最终本层的输出尺寸为40*40*768。- [-1, 3, C2f, [512]]  # 18 (P4/16-medium) 第18层,本层是C2f模块,可以参考第2层的讲解。3代表本层重复3次。512代表输出通道数。经过这层之后,特征图尺寸变为40*40*512,特征图的长宽已经变成输入图像的1/16。- [-1, 1, Conv, [512, 3, 2]] # 第19层,进行卷积操作(512代表输出通道数,3代表卷积核大小k,2代表stride步长),输出特征图尺寸为20*20*512(卷积的参数都没变,所以都是长宽变成原来的1/2,和之前一样)。- [[-1, 9], 1, Concat, [1]]  # cat head P5 第20层,本层是concat层,[-1, 9]代表将上层和第9层的输出作为本层的输入。[1]代表concat拼接的维度是1。从上面的分析可知,上层的输出尺寸是20*20*512,第9层的输出是20*20*1024,最终本层的输出尺寸为20*20*1536。- [-1, 3, C2f, [1024]]  # 21 (P5/32-large) 第21层,本层是C2f模块,可以参考第2层的讲解。3代表本层重复3次。1024代表输出通道数。经过这层之后,特征图尺寸变为20*20*1024,特征图的长宽已经变成输入图像的1/32。- [[15, 18, 21], 1, Detect, [nc]]  # Detect(P3, P4, P5) 第20层,本层是Detect层,[15, 18, 21]代表将第15、18、21层的输出(分别是80*80*256、40*40*512、20*20*1024)作为本层的输入。nc是数据集的类别数。

    这部分主要多出3个操作nn.UpsampleConcatDetect,解释如下:

    nn.Upsample:表示上采样,将特征图大小进行翻倍操作。比如将大小为20X20的特征图,变为40X40的特征图大小。

    Concat代表拼接操作,将相同大小的特征图,通道进行拼接,要求是特征图大小一致,通道数可以不相同。例如[-1, 6]:-1代表上一层,6代表第六层(从第0层开始数),将上一层与第6层进行concat拼接操作。

    Detectfrom有三个数: 151821,这三个就是最终网络的输出特征图,分别对应P3P4P5

 模型训练时打印出的结构参数如下,下图为yolov8n.yaml打印信息:

三、YOLOv8模型训练参数详细解析 

关于yolov8的训练参数该如何设置。接下来对yolov8的相关训练参数和使用方法进行了详细说明。希望对大家有所帮助!

3.1 YOLOv8模型训练代码

YOLOv8目标检测模型训练时使用的代码如下:

from ultralytics import YOLO
# 加载官方预训练模型
model = YOLO("yolov8n.pt",task="detect")  
# 模型训练
results = model.train(data="data.yaml", epochs=100, batch=4)

YOLOv8图像分割模型训练时使用的代码如下:

from ultralytics import YOLO
# 加载官方预训练模型
model = YOLO("yolov8n.pt",task="segment")  
# 模型训练
results = model.train(data="data.yaml", epochs=100, batch=4)

3.2 模型大小选择

model = YOLO("yolov8n.pt") 表示使用的是v8n模型来训练。如果想使用其他大小的模型,只需要把n改为其他大小的对应字母即可。例如:

model = YOLO("yolov8s.pt")
model = YOLO("yolov8m.pt")
model = YOLO("yolov8l.pt")
model = YOLO("yolov8x.pt")

不同模型参数大小如下,v8n是参数量最小的模型。一般情况下,模型越大,最终模型的性能效果也会越好。可根据自己实际需求选择相应的模型大小进行训练。

 

3.3 训练参数设置

通过运行model.train(data="data.yaml", epochs=100, batch=4)训练v8模型,其中(data="data.yaml", epochs=100, batch=4)是训练设置的参数,没有添加的训练参数都是使用的默认值。官方其实给出了很多其他相关参数,详细说明见下文。

如果我们需要自己修改其他训练参数,只需要在train后面的括号中加入相应的参数和具体值即可。

例如加上模型训练优化器参数optimizer,其默认值是auto

可设置的值为:SGD, Adam, AdamW, NAdam, RAdam, RMSProp。常用SGD或者AdamW

我们可以直接将其设置为SGD,写法如下:

# 模型训练,添加模型优化器设置
results = model.train(data="data.yaml", epochs=100, batch=4, optimizer='SGD')

3.4 训练参数说明

YOLOv8 模型的训练设置包括训练过程中使用的各种超参数和配置。这些设置会影响模型的性能、速度和准确性。关键的训练设置包括批量大小、学习率、动量和权重衰减。此外,优化器、损失函数和训练数据集组成的选择也会影响训练过程。对这些设置进行仔细的调整和实验对于优化性能至关重要。以下是官方给出了训练可设置参数和说明:

参数默认值说明
modelNone指定用于训练的模型文件。接受指向 .pt 预训练模型或 .yaml 配置文件。对于定义模型结构或初始化权重至关重要。
dataNone数据集配置文件的路径(例如 coco8.yaml).该文件包含特定于数据集的参数,包括训练数据和验证数据的路径、类名和类数。
epochs100训练总轮数。每个epoch代表对整个数据集进行一次完整的训练。调整该值会影响训练时间和模型性能。
timeNone最长训练时间(小时)。如果设置了该值,则会覆盖 epochs 参数,允许训练在指定的持续时间后自动停止。对于时间有限的训练场景非常有用。
patience100在验证指标没有改善的情况下,提前停止训练所需的epoch数。当性能趋于平稳时停止训练,有助于防止过度拟合。
batch16批量大小,有三种模式:设置为整数(例如,' Batch =16 '), 60% GPU内存利用率的自动模式(' Batch =-1 '),或指定利用率分数的自动模式(' Batch =0.70 ')。
imgsz640用于训练的目标图像尺寸。所有图像在输入模型前都会被调整到这一尺寸。影响模型精度和计算复杂度。
saveTrue可保存训练检查点和最终模型权重。这对恢复训练或模型部署非常有用。
save_period-1保存模型检查点的频率,以 epochs 为单位。值为-1 时将禁用此功能。该功能适用于在长时间训练过程中保存临时模型。
cacheFalse在内存中缓存数据集图像 (True/ram)、磁盘 (disk),或禁用它 (False).通过减少磁盘 I/O 提高训练速度,但代价是增加内存使用量。
deviceNone指定用于训练的计算设备:单个 GPU (device=0)、多个 GPU (device=0,1)、CPU (device=cpu),或苹果芯片的 MPS (device=mps).
workers8加载数据的工作线程数(每 RANK 多 GPU 训练)。影响数据预处理和输入模型的速度,尤其适用于多 GPU 设置。
projectNone保存训练结果的项目目录名称。允许有组织地存储不同的实验。
nameNone训练运行的名称。用于在项目文件夹内创建一个子目录,用于存储训练日志和输出结果。
exist_okFalse如果为 True,则允许覆盖现有的项目/名称目录。这对迭代实验非常有用,无需手动清除之前的输出。
pretrainedTrue决定是否从预处理模型开始训练。可以是布尔值,也可以是加载权重的特定模型的字符串路径。提高训练效率和模型性能。
optimizer'auto'为训练模型选择优化器。选项包括 SGDAdamAdamWNAdamRAdamRMSProp 等,或 auto 用于根据模型配置进行自动选择。影响收敛速度和稳定性
verboseFalse在训练过程中启用冗长输出,提供详细日志和进度更新。有助于调试和密切监控培训过程。
seed0为训练设置随机种子,确保在相同配置下运行的结果具有可重复性。
deterministicTrue强制使用确定性算法,确保可重复性,但由于对非确定性算法的限制,可能会影响性能和速度。
single_clsFalse在训练过程中将多类数据集中的所有类别视为单一类别。适用于二元分类任务,或侧重于对象的存在而非分类。
rectFalse可进行矩形训练,优化批次组成以减少填充。这可以提高效率和速度,但可能会影响模型的准确性。
cos_lrFalse利用余弦学习率调度器,根据历时的余弦曲线调整学习率。这有助于管理学习率,实现更好的收敛。
close_mosaic10在训练完成前禁用最后 N 个epoch的马赛克数据增强以稳定训练。设置为 0 则禁用此功能。
resumeFalse从上次保存的检查点恢复训练。自动加载模型权重、优化器状态和历时计数,无缝继续训练。
ampTrue启用自动混合精度 (AMP) 训练,可减少内存使用量并加快训练速度,同时将对精度的影响降至最低。
fraction1.0指定用于训练的数据集的部分。允许在完整数据集的子集上进行训练,这对实验或资源有限的情况非常有用。
profileFalse在训练过程中,可对ONNX 和TensorRT 速度进行剖析,有助于优化模型部署。
freezeNone冻结模型的前 N 层或按索引指定的层,从而减少可训练参数的数量。这对微调或迁移学习非常有用。
lr00.01初始学习率(即 SGD=1E-2Adam=1E-3) .调整这个值对优化过程至关重要,会影响模型权重的更新速度。
lrf0.01最终学习率占初始学习率的百分比 = (lr0 * lrf),与调度程序结合使用,随着时间的推移调整学习率。
momentum0.937用于 SGD 的动量因子,或用于 Adam 优化器的 beta1,用于将过去的梯度纳入当前更新。
weight_decay0.0005L2 正则化项,对大权重进行惩罚,以防止过度拟合。
warmup_epochs3.0学习率预热的历元数,学习率从低值逐渐增加到初始学习率,以在早期稳定训练。
warmup_momentum0.8热身阶段的初始动力,在热身期间逐渐调整到设定动力。
warmup_bias_lr0.1热身阶段的偏置参数学习率,有助于稳定初始历元的模型训练。
box7.5损失函数中边框损失部分的权重,影响对准确预测边框坐标的重视程度。
cls0.5分类损失在总损失函数中的权重,影响正确分类预测相对于其他部分的重要性。
dfl1.5分布焦点损失权重,在某些YOLO 版本中用于精细分类。
pose12.0姿态损失在姿态估计模型中的权重,影响着准确预测姿态关键点的重点。
kobj2.0姿态估计模型中关键点对象性损失的权重,平衡检测可信度与姿态精度。
label_smoothing0.0应用标签平滑,将硬标签软化为目标标签和标签均匀分布的混合标签,可以提高泛化效果。
nbs64用于损耗正常化的标称批量大小。
overlap_maskTrue决定在训练过程中分割掩码是否应该重叠,适用于实例分割任务。
mask_ratio4分割掩码的下采样率,影响训练时使用的掩码分辨率。
dropout0.0分类任务中正则化的丢弃率,通过在训练过程中随机省略单元来防止过拟合。
valTrue可在训练过程中进行验证,以便在单独的数据集上对模型性能进行定期评估。
plotsFalse生成并保存训练和验证指标图以及预测示例图,以便直观地了解模型性能和学习进度。

常用的几个训练参数是: 数据集配置文件data训练轮数epochs训练批次大小batch训练使用的设备device,模型优化器optimizer初始学习率lr0

以上便是关于YOLOv8模型详细说明,看到这里的小伙伴,相信你一定对yolov8模型有了一定的认识啦。

四、本文总结

到此本文的正式分享内容就结束了,在这里给大家推荐我的YOLOv8改进有效涨点专栏,本专栏目后期我会根据各种最新的前沿顶会进行论文复现,也会对一些老的改进机制进行补充,本专栏会持续更新300+创新改进点,大家尽早关注有效涨点专栏,带着大家快速高效发论文!如果大家觉得本文能帮助到你了,订阅本专栏,关注后续更多的更新~

YOLOv8有效创新改进专栏订阅跳转链接


http://www.hkcw.cn/article/CjeFrpcAXt.shtml

相关文章

[C++][第三方库][ODB]详细讲解

目录 1.介绍2.安装1.安装 build22.安装 odb-compiler3.安装 ODB 运行时库4.安装MySQL和客户端开发包5.安装 boost profile 库6.总体操作7.测试样例 3.ODB 常见操作1.ODB 类型映射2.ODB 编程1.指令2.示例 4.类与接口5.使用 1.介绍 ODB框架:数据库ORM框架 --> 对象…

【Python】解决Python报错:ERROR: Could not find a version that satisfies the requirement

成功解决Python报错:ERROR: Could not find a version that satisfies the requirement。ERROR: Could not find a version that satisfies the requirement 是 Python 的包管理工具 pip 在安装包时可能遇到的错误。这通常意味着 pip 没有找到与给定版本要求匹配的包…

C语言 —— 此去经年梦浪荡魂音 - 深入理解指针(卷五)

目录 1. sizeof 和 strlen的区别 1.1 sizeof 1.2 strlen 2. 数组和指针习题解析 2.1 一维数组 2.2 字符数组 代码1: 代码2: 代码3: 代码4: 代码5: 代码6: 2.3 二维数组 3. 指针运算笔试题解析 3.1 3.…

【Python篇】PyQt5 超详细教程——由入门到精通(中篇一)

文章目录 PyQt5入门级超详细教程前言第4部分:事件处理与信号槽机制4.1 什么是信号与槽?4.2 信号与槽的基本用法4.3 信号与槽的基础示例代码详解: 4.4 处理不同的信号代码详解: 4.5 自定义信号与槽代码详解: 4.6 信号槽…

MathType的安装与word嵌入

博主近期在写论文,发现word编辑公式好像只能用MathType,于是就去下载安装,然后遇到了蛮多问题总结一下,希望能帮到有相同问题的大家~ 一.MathType的下载 博主是在官网直接下载的,个人觉得没啥问题,下的也…

matlab:二维绘图篇——plot绘图命令

目录 1.plot绘图命令 (1)plot(x) 实例——实验数据曲线 实例——窗口分割 实例——随机矩阵 (2).plot(x,y) 实例——摩擦系数变化曲线 (3)plot(x1,y1,x2,y2,...) 实例——正弦图形 实例——正弦余弦图形 (4&#xff09…

Python的包管理工具pip安装

Python的包管理工具pip安装 一、安装步骤1.检查 pip是否已安装2.安装 pip方法一:通过 ​ensurepip​ 模块安装(推荐)方法二:通过 ​get-pip.py​ 脚本安装(经常应为网络域名问题连接不上) 3.验证pip安装4.创建别名5.更新pip 二、常…

【Python篇】PyQt5 超详细教程——由入门到精通(序篇)

文章目录 PyQt5 超详细入门级教程前言序篇:1-3部分:PyQt5基础与常用控件第1部分:初识 PyQt5 和安装1.1 什么是 PyQt5?1.2 在 PyCharm 中安装 PyQt51.3 在 PyCharm 中编写第一个 PyQt5 应用程序1.4 代码详细解释1.5 在 PyCharm 中运…

C++第四十五弹---深入理解包装器:提升代码复用性与安全性的利器

✨个人主页: 熬夜学编程的小林 💗系列专栏: 【C语言详解】 【数据结构详解】【C详解】 目录 1 包装器 1.1、function包装器 1.2、bind 1 包装器 1.1、function包装器 function包装器 也叫作适配器。C中的function本质是一个类模板&…

【Java 学习】详细讲解---包和导包、Scanner类、输入源

1. 包 1.1 什么是包? 举个例子,你和你的同学有不同的家庭,你们都有自己的爸爸妈妈,都有自己的家。在自己的家中你们可以按照自己爱好摆放东西,都互不干扰。但是,假如你们的家都在一起,你们就不…

LEfSe分析:R语言一句代码轻松实现

数据和代码获取:请查看主页个人信息!!! 大家好,今天我将介绍如何使用R语言进行LEfSe(Linear discriminant analysis Effect Size)分析及可视化。LEfSe是一种基于线性判别分析的算法,…

马斯克遭白宫背刺 提名撤销引失望

刚走一天就遭白宫“背刺”,马斯克对此表示失望。2023年10月11日,美国国家航空航天局在休斯敦约翰逊航天中心首次向公众展示了从小行星贝努采集到的样本图片和视频。5月31日,美国白宫宣布撤销对富豪贾里德艾萨克曼出任下一任NASA局长的提名。据报道,艾萨克曼与企业家马斯克关…

双腿戴假肢男子4小时登顶泰山 毅力与自信的见证

5月31日上午,山东泰安泰山景区天气晴朗。一位双腿安装假肢的男士一手拄着拐杖一手抓住扶手向上攀登的场景被游客上传到社交媒体,引发网友热议。6月1日下午,当事人盛先生介绍,这是他第三次登泰山了,从中天门到南天门花费了约4个小时。盛先生说,今年端午假期前,他出差来到…

南京大学通报施工方偷窃学生物品 施工单位被罚违约金

5月29日,南京大学基本建设处发布了一份关于对南京诚善科技有限公司执行合同违约金的通报。通报指出,南京诚善科技有限公司员工于5月13日在学校宿舍楼内偷窃学生物品。根据施工合同相关规定并经处办公会研究确认,南京大学基本建设处决定对该公司执行2000元违约金,从工程款中…

为省30块钱 卡车司机在青海缺氧离世 爱心卡友千里送别

46岁的河南卡车司机常志荣在青藏线因高原缺氧离世。今天上午,多名爱心卡友跨越2400多公里,将他的骨灰及车辆从五道梁地区送回老家安阳林州。5月27日,常志荣在青藏线五道梁地区遭遇严重缺氧不幸去世。车友任先生透露,出发前同行曾建议他至少携带两罐氧气,但他为了节省30元费…

樊振东将改变德国联赛竞争格局 新援加盟引关注

北京时间6月1日,德甲萨尔布吕肯俱乐部宣布中国运动员樊振东加盟该俱乐部,将参与2025-2026赛季德国乒乓球甲级联赛和欧洲冠军联赛。这并不意味着国内赛场上看不到樊振东的身影。目前樊振东仍处在奥运后的调整期,计划通过全国比赛以及国内外俱乐部比赛逐步恢复运动状态。樊振东…

少写一点,发布快一点:2025年的前端极简主义

我们先直白点:你大概并不需要那些 Button.js、PrimaryButton.js、OutlinePrimaryButton.js 甚至 MaybeIfItsFridayButton.js。 在2025年,我们被过度抽象的组件库淹没了——原子设计、过度工程化的 UI 库。 现在,该是我们聊聊「反潮流」的前端…

聊一聊接口测试中耗时请求如何合理安排?

目录 一、异步处理与轮询机制 轮询检查机制 二、 并行化测试执行 三、模拟与桩技术(Mock/Stub) 四、动态超时与重试策略 五、测试架构设计优化 分层测试策略 并行化执行 网络优化 六、测试用例分层管理 金字塔策略 七、 缓存与数据复用 响应…

VMware没有虚拟网卡,VMnet1,VMnet8显示黄色三角警告

VMware安装后没有虚拟网卡,VMnet1,VMnet8显示黄色三角警告 VMware安装后没有虚拟网卡,VMnet1,VMnet8显示黄色三角警告 VMware安装后没有虚拟网卡,VMnet1,VMnet8显示黄色三角警告 问题描述: 主机…

情侣和一家三口在迪士尼打架 因拍照起冲突

5月31日,有网友发布视频称,在上海迪士尼有一对情侣和一家三口发生了冲突,此事引发了广泛关注。视频中可以看到,双方在现场扭打,周围的人纷纷上前劝阻。据权威人士透露,事件发生在5月31日,地点并不是排队区域,而是游客自由打卡拍照的地方。情侣和一家三口因拍照问题产生…