1.将 YOLOv5 的 C3
结构换成了梯度流更丰富的 C2f
结构:
C3
C3 模块的设计灵感来自 CSPNet,其核心思想是将特征图的部分通道进行分割和并行处理,目的是减少冗余梯度信息,同时保持较高的网络表达能力。C3 结构与传统的残差结构类似,但有一些关键改进。
C3 结构的具体组成如下:
输入特征图的分割:
- 将输入特征图分成两部分:一个部分直接传递到后续层,另一个部分通过多个卷积层和 Bottleneck 结构处理。
Bottleneck 结构:
- 其中一部分特征图会经过多个 Bottleneck 结构,这些 Bottleneck 结构本质上是 ResNet 风格的残差块。
- 每个 Bottleneck 块包含两个 3x3 卷积层,之间有一个跳跃连接(skip connection)。
- Bottleneck 模块的数量可以根据需求调整,用来增加网络的深度。
特征图融合:
- 两部分特征图会在末端重新融合。这种设计可以通过减少冗余计算,保留更多的原始特征,同时通过 Bottleneck 提升特征提取的能力。
卷积操作:
- 最后,融合后的特征图会经过一次 1x1 卷积操作,用来进一步压缩通道数量,并输出到下一个网络层。
C2F
C2F 的核心概念
跨阶段连接(Cross-stage Connection):
- 特征图传递:C2F 通过跨阶段连接将特征图从早期阶段传递到后期阶段,允许网络在不同层次之间传递信息。这种连接可以帮助保留来自不同阶段的特征,增强网络的表达能力。
- 改进梯度流动:跨阶段连接有助于改善梯度流动,减少梯度消失问题,特别是在深层网络中。
特征融合(Feature Fusion):
- 信息融合:C2F 将来自不同阶段或不同卷积块的特征图进行融合。这通常通过拼接(concatenation)、加法(addition)或其他融合操作来实现。
- 多尺度特征整合:通过融合不同阶段的特征,C2F 能够整合多尺度信息,提高网络对不同尺度目标的检测能力。
C2F 的实现方式
特征图的分段和连接:
- 输入特征图会被分成多个部分,这些部分分别经过不同的卷积层或网络块处理。然后,将这些处理后的特征图进行融合,以便在后续层中使用。
融合操作:
- 常见的融合操作包括 拼接(concatenation) 和 加法(addition)。拼接会增加特征图的通道数,而加法则会将特征图的通道数保持不变,通过逐元素相加的方式融合特征。
特征图的处理:
- 跨阶段连接的特征图可以经过卷积层、激活函数等处理后再进行融合,以确保融合后的特征图能够有效地表示不同阶段的信息。
2. Head改进
解耦头结构
Anchor-Based 换成了 Anchor-Free
YOLOv8 实现了 anchor-free 目标检测,这种方法不使用传统的 anchor boxes,而是通过其他技术来检测目标。YOLOv8 采用了几种创新的策略来实现 anchor-free 目标检测。以下是 YOLOv8 anchor-free 方法的实现思路和关键技术:
1. Center-based Detection
YOLOv8 采用了基于中心点的检测方法。与传统的 anchor-based 方法不同,YOLOv8 主要关注目标的中心点而不是预定义的 anchor boxes。具体来说,YOLOv8 使用以下方法来实现 center-based 检测:
中心点预测:网络预测每个位置是否包含目标中心点,并回归目标的尺寸和类别。网络的输出包括每个像素点的中心点置信度和目标的相关属性(例如宽度、高度和类别)。
热图(Heatmap):YOLOv8 通过生成目标中心点的热图来定位目标。热图显示了每个像素作为目标中心点的可能性。
2. 边界框回归
YOLOv8 使用回归方法来预测目标的边界框,而不是通过 anchor boxes 的方式。具体包括:
目标尺寸回归:对于每个预测的中心点,网络会回归目标的宽度和高度。这种方法允许网络直接从图像中学习目标的真实尺寸,而不是依赖于预定义的 anchor boxes。
边界框的定义:通过中心点和尺寸预测,可以生成完整的边界框。这种方法通常使用一组回归层来直接预测边界框的四个坐标值(中心坐标、宽度和高度)。
3. 边界框生成
边界框的生成方法与传统的 anchor-based 方法不同,主要包括:
相对位置回归:网络回归目标边界框的相对位置和尺寸,而不是相对于 anchor boxes 的偏移量。
目标中心点匹配:每个预测的边界框通过匹配目标的中心点来生成,这种方法不依赖于预定义的 anchor boxes。
目标检测中的解耦和耦合、anchor-free和anchor-base-CSDN博客https://blog.csdn.net/qq_55794606/article/details/142266086?spm=1001.2014.3001.5502
3. LOSS改进
正负样本分配策略的改进
使用动态分配策略:TOOD
TOOD (Task-aligned One-stage Object Detection)
TOOD 是一种任务对齐的单阶段目标检测方法,最早由腾讯提出。它的核心思想是通过任务对齐机制同时优化分类和回归任务,从而提高检测精度。TOOD 提出了一个新的样本分配方法,称为任务对齐分配策略(Task Alignment Assignment, TAA)。
概念和机制:
任务对齐(Task Alignment):
- 传统的目标检测网络通常将分类任务和边界框回归任务分开进行处理,而 TOOD 通过设计任务对齐的检测头,将分类和回归任务联合优化。
- 在 TOOD 中,样本的分类和回归任务共享权重,避免了任务之间的冲突。
任务对齐样本分配(TAA):
- TOOD 提出了任务对齐样本分配策略,目的是为分类和回归任务分配相同的正样本,而不是将分类和回归任务分离开。
- TAA 首先计算每个 anchor 与 ground truth 之间的分类损失和回归损失,并通过综合这两种损失来动态选择正样本。
- 它将那些同时在分类和回归上表现较好的 anchor 标记为正样本。
正负样本的选择:
- 分类和回归损失融合:TOOD 在样本分配时会同时考虑分类损失和回归损失,综合选择正样本。
- 正样本匹配:基于任务对齐的损失计算,选择那些能够在分类和回归任务上都有较好表现的 anchor 作为正样本。
- 负样本选择:没有满足正样本条件的 anchor 被标记为负样本。
优点:
- 任务对齐:通过联合优化分类和回归任务,解决了传统检测器中任务冲突的问题,提升了检测精度。
- 动态分配:通过综合损失计算正负样本的分配,避免了传统方法中固定阈值导致的分配不合理问题。
- 更高精度:TOOD 在多个数据集上表现出比传统方法更高的检测精度。
Loss计算
在 YOLOv8 的损失函数设计中,传统的 Objectness Loss
被取消,损失函数主要由以下两部分构成:
- 分类损失(Classification Loss):用于评估类别预测的准确性。
- 边界框回归损失(Bounding Box Regression Loss):用于评估预测框的定位准确性(通常使用 CIoU 或 DIoU 损失)+Distribution Focal Loss。
关键原因:
在 YOLOv8 中,目标检测任务采取了anchor-free的设计,并且模型不再单独预测目标置信度(objectness score)。在 YOLOv3 和 YOLOv4 中,
objectness score
是一个用于判断某个预测框是否包含目标的置信度分数。YOLOv5 及之后的版本则逐渐简化了这一设计,而 YOLOv8 完全取消了这个置信度的预测。替代机制:
动态分配样本:YOLOv8 通过动态样本分配机制直接从预测的分类和回归损失中确定正负样本,而不需要像之前那样依赖单独的目标置信度预测。模型通过对正负样本的高效分配,自动平衡正负样本之间的关系,从而不再需要目标置信度损失来辅助训练。
直接预测分类和回归:YOLOv8 不再通过单独的
objectness score
进行目标存在性判断,而是直接通过分类和回归任务的损失来训练模型。正样本的框即代表有目标,而负样本则代表没有目标。更高效的计算:取消
objectness score
还简化了计算流程,使得模型在推理和训练过程中更加高效,减少了不必要的计算负担。
训练数据增强
数据增强方面和 YOLOv5 差距不大,只不过引入了 YOLOX 中提出的最后 10 个 epoch 关闭 Mosaic 的操作。假设训练 epoch 是 500,其示意图如下所示:
1. Mosaic 数据增强简介
Mosaic 数据增强是一种在 YOLOv4 中首次引入的图像增强技术,旨在增强模型的泛化能力。它通过将 4 张不同的图像拼接在一起,形成一张新的训练图像。这个方法的核心优势在于:
- 提供了丰富的场景变化(例如不同的目标尺寸、背景混合等)。
- 增强了模型对小目标和目标分布变化的鲁棒性。
- 增加了每个 mini-batch 中的样本多样性,帮助模型更好地学习不同的场景和目标。
Mosaic 使得模型可以在每次迭代中看到更加多样化的样本,从而提高模型的泛化能力。
2. 为什么最后 10 个 epoch 关闭 Mosaic?
虽然 Mosaic 数据增强有助于提高模型的泛化能力,但在训练的最后阶段关闭 Mosaic 可以帮助模型收敛得更好。这主要基于以下几点原因:
a. 提高收敛稳定性
在训练的早期和中期,数据增强有助于模型学习更广泛的特征,尤其是通过增加数据的多样性和复杂性来防止模型过拟合。然而,Mosaic 增强会带来一些不自然的图像拼接和畸变,特别是在图像边缘或拼接区域,这在训练的最后阶段可能影响模型的精细化学习。
关闭 Mosaic 数据增强后,模型会在最后的训练阶段接触到原始比例和结构的图像,从而帮助模型在更接近真实数据分布的样本上微调。这有助于提高检测精度和模型对真实数据的适应性。
b. 减少训练波动
Mosaic 数据增强会打破图像的原始结构,增加背景的复杂性,这在训练的早期可以帮助模型学习更复杂的特征。然而在训练的后期,模型可能更需要稳定的特征学习和优化。关闭 Mosaic 后,模型在标准样本上训练,可以减少不必要的复杂性和波动,进一步稳定模型的学习过程。
c. 提升小目标的精度
Mosaic 增强有助于提高小目标的检测性能,因为它在图像拼接中会改变目标的尺寸和位置。但在最后阶段,模型更需要在真实分布的图像上专注于精细定位。通过关闭 Mosaic,模型可以更好地处理原始图像中的小目标,避免被非自然的拼接干扰。
3. 实际操作中的影响
在 YOLOX 中,训练的最后 10 个 epoch 关闭 Mosaic 的操作被称为 "warm down" 机制。通过这一策略,模型在最后阶段训练过程中逐步回归到原始图像分布,以便:
- 在标准的非增强图像上优化模型的最终权重。
- 提高模型在真实场景下的检测性能。
- 减少由于过度数据增强带来的不必要的预测偏差。
4. 模型推理过程
YOLOv8 的推理过程和 YOLOv5 几乎一样,唯一差别在于前面需要对 Distribution Focal Loss 中的积分表示 bbox 形式进行解码,变成常规的 4 维度 bbox,后续计算过程就和 YOLOv5 一样了。
其推理和后处理过程为:
(1) bbox 积分形式转换为 4d bbox 格式
对 Head 输出的 bbox 分支进行转换,利用 Softmax 和 Conv 计算将积分形式转换为 4 维 bbox 格式
(2) 维度变换
YOLOv8 输出特征图尺度为 80x80、40x40 和 20x20 的三个特征图。Head 部分输出分类和回归共 6 个尺度的特征图。 将 3 个不同尺度的类别预测分支、bbox 预测分支进行拼接,并进行维度变换。为了后续方便处理,会将原先的通道维度置换到最后,类别预测分支 和 bbox 预测分支 shape 分别为 (b, 80x80+40x40+20x20, 80)=(b,8400,80),(b,8400,4)。
(3) 解码还原到原图尺度
分类预测分支进行 Sigmoid 计算,而 bbox 预测分支需要进行解码,还原为真实的原图解码后 xyxy 格式。
(4) 阈值过滤
遍历 batch 中的每张图,采用 score_thr 进行阈值过滤。在这过程中还需要考虑 multi_label 和 nms_pre,确保过滤后的检测框数目不会多于 nms_pre。
(5) 还原到原图尺度和 nms
基于前处理过程,将剩下的检测框还原到网络输出前的原图尺度,然后进行 nms 即可。最终输出的检测框不能多于 max_per_img。
部分内容转载于:
YOLOv8详解 【网络结构+代码+实操】-CSDN博客https://blog.csdn.net/zyw2002/article/details/128732494?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522F7865695-BD19-4765-8429-CABAFD84E7D1%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=F7865695-BD19-4765-8429-CABAFD84E7D1&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~top_positive~default-2-128732494-null-null.142%5Ev100%5Econtrol&utm_term=yoloV8&spm=1018.2226.3001.4187