YOLOv8简易结构流程阐述
YOLOv8简易结构流程阐述
YOLOv8是当前主流的目标检测算法之一,其整体结构可以分为三部分:骨干网络(backbone)、颈部网络(neck)和头部网络(head)。下面将对YOLOv8的结构流程进行简要阐述。
骨干网络(Backbone)
骨干网络的主要作用是提取图像的细节信息。YOLOv8的不同版本(如YOLOv8n、YOLOv8s等)在骨干网络的模块设置上有所不同,例如卷积层数量和特征拼接的数量。这些差异使得不同版本的模型在计算效率和检测精度之间取得不同的平衡。
颈部网络(Neck)
颈部网络的主要作用是融合不同尺度下的信息,提高模型的多尺度检测能力。YOLOv8使用了SPP(Spatial Pyramid Pooling)模块和PAFPN(Path Aggregation Feature Pyramid Network)来实现这一目标。SPP模块通过不同尺度的池化操作来增强模型的尺度不变性,而PAFPN则通过跨层连接来增强特征的传播。
头部网络(Head)
头部网络的主要作用是对预测框坐标和预测类别进行解耦。YOLOv8使用了三个不同尺度的特征图(以640大小输入为例:80x80、40x40、20x20)来进行预测。
预测框坐标
预测框坐标的计算过程如下:
- 首先,将特征图的每个位置映射到一个向量,向量的维度为
c=4*reg_max
,其中reg_max
是默认长度为16的向量。因此,对于8400个预测框(80x80+40x40+20x20),每个预测框的坐标向量维度为8400x64。 - 然后,对这些向量进行积分求和,转换为8400x4的格式。转换后的单个向量的值的范围在[0,15]之间,表示的是以该预测框为中心,上下左右四个方向与中心点的距离。
- 最后,使用回归损失函数来计算预测框坐标的损失。
预测类别
预测类别的计算过程如下:
- 对于每个预测框,模型会输出一个80维的向量(假设总共有80个类别),表示每个预测框对每种类别的预测概率。
- 使用BCE(Binary Cross-Entropy)损失函数来计算分类损失。
正负样本的确定
由于图像中大部分区域并没有事先标注好的检测对象,因此需要确定正负样本以计算损失函数。YOLOv8使用了Task-Aligned Assigner(TAL)来确定正负样本。具体来说,TAL通过计算分类分数s
和预测框与真实框的IoUu
的加权分数来衡量预测框与真实框的对齐程度。对于正样本,使用常规的BCE计算分类损失;对于负样本,则使用纯粹的分类损失。
非极大值抑制(NMS)
在预测阶段,可能会出现多个预测框检测到同一个物体的情况。为了消除冗余的预测框,YOLOv8使用了非极大值抑制(NMS)算法。NMS通过计算预测框之间的CIoU(Complete IoU)来确定哪些预测框应该被保留,哪些应该被丢弃。