YOLOv8是由Ultralytics开发的最先进的目标检测模型,其模型架构细节包括骨干网络(Backbone)、颈部网络(Neck)和头部网络(Head)三大部分。
一、骨干网络(Backbone)
Backbone部分负责特征提取,采用了一系列卷积和反卷积层,同时使用了残差连接和瓶颈结构来减小网络的大小并提高性能。
YOLOv8的Backbone参考了CSPDarkNet结构,的增强版本,并结合了其他现代架构的特点,以提高特征提取的效率和表达能力。
使用 CSPPC(Cross Stage Partial with PConv)替换了传统的 c2f 卷积块。PConv(部分卷积)利用特征图的冗余来减少计算和内存访问 ,它只在输入通道的一部分上应用常规卷积进行空间特征提取,而保留剩余通道不变,从而降低了浮点操作(FLOPs)的数量和内存访问量,同时保持了特征信息流.
YOLOv8的Backbone还保留了YOLOv5等架构中使用的SPPF(空间金字塔池化)模块,以增强特征提取能力。同时,该部分还引入了一些常见的改进技术,如深度可分离卷积(Depthwise Separable Convolution)和膨胀卷积(Dilated Convolution),以进一步增强特征提取的能力。
采用 Down_wt 替换 backbone 下采样模块,有助于在减少参数量的同时,更好地提取不同尺度的特征.
骨干网络的主要职责是从输入照片中提取高级信息,为后续的检测任务提供丰富的特征表示
二、颈部网络(Neck)
Neck部分负责多尺度特征融合,通过将来自Backbone不同阶段的特征图进行融合,增强特征表示能力。YOLOv8的Neck部分采用了PAN-FPN(路径聚合网络-特征金字塔网络)的思想,但在结构上进行了优化。它删除了YOLOv5中PAN-FPN上采样阶段中的卷积结构,并将C3模块替换为了C2f模块。
具体来说,YOLOv8在Neck部分采用了PAN-FAN结构,包括两个PAN模块和一个SPPF模块。PAN模块通过自底向上和自顶向下的路径聚合,将底层的细节信息和高层的语义信息进行整合,增强了特征图的表达能力。而SPPF模块则用于不同尺度的池化操作,将不同尺度的特征图拼接在一起,提高对不同尺寸目标的检测能力。
具体融合过程: 首先将骨干网络输出的不同层次的特征图进行融合,然后通过一系列的卷积和上采样操作,将融合后的特征图调整到合适的尺度,以便后续的头部网络进行检测123.
优势与效果:这种多尺度特征融合的方式使得模型能够更好地适应不同尺寸和形状的目标,尤其在处理小目标和遮挡情况时表现更佳,有效提高了模型的检测性能和鲁棒性。
三、头部网络(Head)
Head部分负责最终的目标检测和分类任务,包括一个检测头和一个分类头。头部网络主要由卷积层、上采样层、拼接层和检测头组成。
YOLOv8的检测头采用了Decoupled-Head(解耦头)的思想,将回归分支和预测分支进行分离。这种设计使得网络的训练和推理更加高效。同时,YOLOv8摒弃了Anchor-Based的方案,采用了Anchor-Free的思想,并使用了DFL Loss和CIOU Loss作为回归损失函数,进一步提高了目标检测的精度。
损失函数和 NMS 策略:采用了更高效的损失函数和非极大值抑制(NMS)策略,损失函数的改进使得模型在训练过程中能够更好地收敛,提高了检测结果的准确性。NMS 策略则用于去除重叠的检测框,进一步提高了检测的精度和效率
检测头包含一系列卷积层和反卷积层,用于生成检测结果,包括预测边界框、类别和置信度。分类头则采用全局平均池化对每个特征图进行分类,通过减少特征图的维度,输出每个类别的概率分布。分类头的设计使得YOLOv8能够有效地处理多类别分类任务。
头部网络的主要功能是根据融合后的特征图进行目标的分类和定位预测,为每个网格单元提供边界框和类别概率的预测,并通过后处理操作得到最终的检测结果
总的来说,YOLOv8的模型架构通过优化Backbone、Neck和Head部分,实现了更高的检测精度和更快的推理速度。这使得YOLOv8在实时物体检测领域具有卓越的性能,并广泛应用于自动驾驶、智能监控等领域。
四、骨干网络调优
1,优化器参数调整
-
学习率:学习率是影响模型训练效果的重要因素之一。较小的学习率可能导致训练收敛过慢,而较大的学习率可能使模型无法收敛甚至发散。对于 YOLOv8,可以尝试不同的初始学习率,如 0.001、0.01 等,观察模型的训练情况,找到一个合适的学习率使得模型能够快速收敛且损失函数能够稳定下降.
-
比如先选择一个相对较小的初始学习率 0.001,进行几轮训练并观察模型的损失函数下降情况。如果损失下降过慢,适当增大学习率;若出现震荡或不收敛,则降低学习率。例如,在目标检测任务中,对于 YOLOv8n 模型,当使用 0.001 的初始学习率训练 10 轮后,若发现损失函数下降趋势不明显,可尝试将学习率调整为 0.01 继续训练.
-
学习率衰减 :随着训练的进行,适当降低学习率可以帮助模型更好地收敛到全局最优解。常见的学习率衰减策略有 StepLR、CosineAnnealingLR 等。在 YOLOv8 中,可以设置
lrf
参数来控制最终学习率,例如将lrf
设置为 0.01,表示最终学习率为初始学习率的 0.01 倍. -
动量 :动量参数用于加速模型的收敛,特别是在处理具有噪声或高曲率的损失函数时。对于 SGD 优化器,一般动量值设置在 0.9 左右;对于 Adam 优化器,其对应的参数
beta1
类似于动量,通常设置为 0.937 左右. -
权重衰减 :权重衰减可以防止模型过拟合,通过在损失函数中添加正则化项来惩罚较大的权重值。在 YOLOv8 中,
weight_decay
参数通常设置为一个较小的值,如 0.0005. -
即动量参数一般保持在 0.9 ,权重衰减通常设置 0.0005 。在训练过程中,可以根据模型的过拟合程度适当调整权重衰减的值,若过拟合严重,可适当增大权重衰减以增强正则化效果.
2,数据增强参数调整
-
几何变换 :通过对训练图像进行随机的旋转、平移、缩放、翻转等几何变换,可以增加数据的多样性,提高模型的鲁棒性和泛化能力。例如,可以设置
degrees
参数控制图像的旋转角度范围,translate
参数控制图像的平移比例,scale
参数控制图像的缩放比例,flipud
和fliplr
参数分别控制图像上下翻转和左右翻转的概率. -
根据数据集中目标的特点和分布来调整几何变换参数。例如,对于包含不同方向目标的数据集,可适当增大
degrees
参数,如设置为 30 度,让模型学习到不同角度目标的特征。若数据集中目标大小差异较大,可调整scale
参数,如设置为 0.5 到 1.5 的范围,以增强模型对不同尺度目标的检测能力. -
颜色调整 :对图像的颜色空间进行调整,如改变亮度、对比度、饱和度等,也可以增加数据的多样性。在 YOLOv8 中,可以通过
hsv_h
、hsv_s
、hsv_v
参数分别控制 HSV 颜色空间中色调、饱和度、亮度的增强程度. -
通过调整
hsv_h
、hsv_s
、hsv_v
参数来改变图像的颜色分布。如果数据集中存在光照变化较大的情况,可以适当增大这些参数的值,如hsv_h
设置为 0.1,hsv_s
设置为 0.5,hsv_v
设置为 0.5,使模型对颜色变化具有更强的鲁棒性. -
噪声注入:向图像中添加随机噪声,如高斯噪声,可以使模型对噪声具有更强的鲁棒性,从而提高模型在实际应用中的性能.
-
Mosaic 和 Mixup :Mosaic 数据增强方法将四张图像拼接成一张大图像作为训练数据,Mixup 则是将两张图像按一定比例混合。这两种方法都可以增加数据的复杂性和多样性,有助于提高模型的泛化能力。可以通过调整
mosaic
和mixup
参数的概率来控制是否使用以及使用的频率. -
根据数据集的大小和复杂程度来确定是否使用以及如何使用 Mosaic 和 Mixup 数据增强方法。对于较小的数据集,使用这些方法可以有效增加数据量和多样性,但对于较大且已经具有丰富多样性的数据集,可以适当降低其使用概率。例如,将
mosaic
的概率设置为 0.5,mixup
的概率设置为 0.2.
3,骨干网络结构调整
-
深度和宽度调整:增加骨干网络的深度或宽度可以提高模型的特征提取能力,但同时也会增加模型的计算量和过拟合风险。可以尝试逐渐增加骨干网络的层数或卷积核数量,观察模型性能的变化,找到一个在性能和计算成本之间平衡的合适配置 。
-
从较小的深度和宽度开始逐步增加,观察模型性能的变化。比如,先将骨干网络的层数增加 2 层或卷积核数量增加 16 个,然后在验证集上评估模型的精度、召回率等指标。如果性能有所提升,则继续增加;若出现性能下降或过拟合,则停止增加并回退到上一个较好的配置.
-
模块替换或改进:尝试使用更先进的模块或架构来替换骨干网络中的部分模块,如将传统的卷积层替换为深度可分离卷积层,以减少计算量并提高特征提取效率。或者引入注意力机制,如自注意力机制或通道注意力机制,来增强模型对重要特征的关注能力.
-
将骨干网络中的部分卷积层替换为深度可分离卷积层时,需要注意调整相关的参数,如卷积核大小、步长等,以保证替换后的网络能够正常工作且性能有所提升。在引入注意力机制时,如添加通道注意力机制,可根据具体的注意力模块特点调整其参数,如通道缩减比例等,以增强模型对重要特征的关注能力.
4,损失函数参数调整
-
Box 损失增益 :
box
参数用于调整边界框损失的权重,增加该参数的值会使模型更加关注边界框的定位精度。可以根据具体任务和数据集的特点,适当调整box
参数的值,以平衡分类损失和定位损失. -
如果目标定位的精度对任务更为关键,可适当增大
box
参数的值,如设置为 5.0;若分类任务较难,类别之间的区分度较小,则可增大cls
参数的值,如设置为 2.0,以平衡两种损失的重要性,使模型在两个任务上都能取得较好的性能. -
Classification 损失增益 :
cls
参数用于调整分类损失的权重,同样可以根据数据集的类别分布和任务需求来调整该参数的值,使模型在分类任务上取得更好的性能. -
DFL 损失增益 :
dfl
参数用于控制 Distance-IoU Loss(DFL)的增益,DFL 是一种更精确的边界框回归损失函数。适当调整dfl
参数可以提高模型对边界框的回归精度。 -
对于
dfl
参数,一般根据数据集的目标分布和边界框的回归难度来调整。如果数据集中目标的边界框形状较为复杂,回归难度较大,可以适当增大dfl
参数的值,如设置为 2.0,以提高模型对边界框的回归精度.
附一些学习材料:
-
**1,**YOLOv8 的原始论文及官方文档,如 Ultralytics 发布的关于 YOLOv8 的技术报告和使用说明等。
-
**2,**卷积神经网络(CNN)的基本原理,包括卷积层、池化层、激活函数等的作用和工作方式,这有助于理解骨干网络中各层的功能和意义。
-
3, YOLOv8 的模型结构图,仔细研究骨干网络中各模块的连接方式、卷积核大小、步长、通道数等参数设置,理解不同模块如何协同工作以提取图像特征。