YOLOv8 目标检测模型 原理解析

     YOLOv8代码逐行讲解:一勺AI帅汤投稿视频-一勺AI帅汤视频分享-哔哩哔哩视频

1.YOLOv8在架构和技术上进行了多项创新和改进,以下是对这些改进的详细描述:

1.1  Backbone:

YOLOv8在Backbone中继续沿用CSP(Cross-Stage Partial Network)思想,但将YOLOv5中的C3模块替换成了C2f模块。这种改进带来了进一步的轻量化。C2f模块通过减少计算量和模型参数,从而提高了效率和速度。同时,YOLOv8依然使用了YOLOv5等架构中使用的SPPF(Spatial Pyramid Pooling-Fusion)模块,以增强特征表达能力。

1.2 PAN-FPN:

YOLOv8在特征金字塔网络(PAN-FPN)的设计上做出了优化。与YOLOv5相比,YOLOv8在PAN-FPN的上采样阶段中删除了卷积结构,并将C3模块替换成了C2f模块。这种调整不仅减少了计算量,而且改进了特征融合和上下文捕捉能力。

1.3 Decoupled-Head:

YOLOv8引入了Decoupled-Head(解耦头)的设计,这是一种将分类和回归任务分开的设计方法。Decoupled-Head在YOLOv5的基础上,通过分别处理分类和回归任务,提高了模型的性能和精度。这种设计使得分类和回归可以分别优化,从而提高了检测的准确性。

1.4 Anchor-Free:

YOLOv8放弃了以往的Anchor-Based(基于锚点)方法,转而采用Anchor-Free(无锚点)思想。Anchor-Free方法不再依赖于预定义的锚点框,而是通过直接预测目标的边界框来简化模型的设计和训练过程。这种方法减少了锚点选择和匹配的复杂性,进一步提升了模型的灵活性和准确性。

1.5 损失函数:

YOLOv8在损失函数的设计上也进行了改进。分类损失采用了VFL(Variable Focal Loss),回归损失则结合了DFL(Distribute Focal Loss)和CIOU(Complete IOU)损失。VFL Loss通过自适应调整损失的焦点,DFL Loss提升了边界框回归的精度,而CIOU Loss则增强了目标框的定位精度和重叠度计算。

1.6 样本匹配:

YOLOv8在样本匹配方面引入了Task-Aligned Assigner(任务对齐分配器),替代了以往的IOU匹配或单边比例分配方式。Task-Aligned Assigner通过对齐任务的特定需求来优化样本的分配,提升了样本匹配的准确性和效率。这种方法使得模型在训练过程中能够更好地处理不同任务的要求,从而提高了整体性能。

1.Backbone+Neck+head

1.1backbone的改进

YOLOv8的backbone相比较于前几个版本的主要改进是C2f模块和SPPF模块。

C2f模块在YOLOv5的C3模块和YOLOv7模型的ELAN模块基础上做了进一步改进,核心在于跨层连接和轻量化分支结构

  1. 跨层连接的高效信息传递:C2f模块继承了C3的跨层连接思想,输入特征图中的一部分直接跳过复杂的卷积运算传递到最终输出,另一部分则通过若干卷积层进行更细粒度的特征提取。跨层连接的作用在于有效保留了输入信息,防止特征在深度网络中丢失,同时也缓解了梯度消失问题。这样既保证了浅层特征的快速传递,又保留了深层网络的丰富特征表达。

  2. 多分支结构的高效特征融合:C2f模块借鉴了ELAN模块中的多分支并行卷积设计,在特征提取过程中,C2f通过多条卷积分支并行处理输入特征。这种设计相比于传统的单一路径卷积,可以从不同尺度、不同感受野的角度对特征进行捕捉和处理,进而提升网络的表达能力。而多分支结构的并行设计还可以在保证特征提取能力的前提下,避免过多的参数和计算量,提升网络的效率。

 

1.2解耦头

在传统的耦合头(如 YOLOv5)中,分类和边界框回归任务共享同一套特征,使用一个共同的输出分支来同时进行这两项任务的预测。但是,分类任务和边界框回归任务具有不同的目标和特征需求。分类任务更注重图像中的语义信息,而回归任务则更多依赖几何和位置信息。因此,使用相同的特征来执行这两项任务可能导致模型无法充分学习到每项任务所需的最佳特征,从而影响检测性能。

解耦头最开始实在yolox中使用,yolov8与yolox不一样的是,yolov8中的解耦头没有obj分支判断是前景还是背景,只有解耦的分类和回归分支。

1.3Anchor-Free 

 Anchor-FreeAnchor-Based 是两种不同的目标检测方法,它们的区别主要在于是否依赖预定义的锚框(Anchor Boxes)来进行目标定位和分类。

1.3.1Anchor-Based

Anchor-Based方法是传统的目标检测方法,典型的代表有 Faster R-CNN、YOLOv5 等。这种方法需要先在图像的特征图上生成一系列预定义的锚框(Anchor Boxes),然后通过这些锚框进行目标的定位和分类。以下是 Anchor-Based 方法的关键特点:

  • 预定义锚框:在特征图上生成一组不同尺寸和不同长宽比的锚框。这些锚框会覆盖图像中的所有可能的目标位置,模型需要对每个锚框进行分类和边界框回归。

  • 分类和回归

    • 分类任务用于判断锚框是否包含目标以及目标的类别。
    • 回归任务用于调整锚框的尺寸和位置,使之更好地拟合目标。
  • 复杂的超参数设计:Anchor-Based 方法需要设计不同尺度、长宽比的锚框。比如,YOLO 系列通常为每个尺度设计 9 个锚框,不同特征层上生成的锚框数量和尺寸不一样。这增加了模型的复杂度,并且需要精心调试这些锚框参数以适应不同的数据集。

当输入图像尺寸为 416×416 时,网络输出的三个特征图的尺寸分别为 13×13、26×26 和 52×52。

在示例中,黄色框代表小狗的真实标注框(Ground Truth),即目标物体的真实位置。而蓝色框代表对应小狗中心点的特征图单元格(红色边框)所关联的锚框。每个单元格会有 3 个锚框对应进行预测。

在使用 COCO 数据集的情况下,由于该数据集包含 80 个类别,因此基于每个锚框的预测将包含以下参数:

  • x:目标中心点的 x 坐标
  • y:目标中心点的 y 坐标
  • w:目标框的宽度
  • h:目标框的高度
  • obj:目标是否存在的置信度(前景或背景)
  • class:80 个类别的分类概率

总共每个锚框需要预测 85 个参数(x、y、w、h、obj + 80 个分类概率)。因此,在所有特征图的所有锚框中,产生的预测结果数量为:

                                                3×(13×13+26×26+52×52)×85=904995

如果将输入图像尺寸从 416×416 改为 640×640,网络输出的三个特征图尺寸将变为 20×20、40×40 和 80×80,此时预测结果的数量为:

                                                3×(20×20+40×40+80×80)×85=2142000

1.3.2Anchor-Free

Anchor-Free 方法不依赖于锚框,而是通过直接预测目标框的边界或中心点来进行目标定位和分类。代表方法有 FCOS、YOLOv8、CenterNet 等。Anchor-Free 方法的关键特点如下:

  • 无预定义锚框:Anchor-Free 方法不再依赖于预定义的锚框,而是将特征图上的每个点(或像素)视为一个潜在的目标框中心点或边界点,通过回归任务直接预测目标框的边界或中心坐标。

  • 目标框回归:通过预测每个特征点到目标边界的距离(如 FCOS 预测的是左、上、右、下边界的距离),模型可以直接生成目标框,不需要预定义的锚框。

 

 当下采样后,得到3个特征图,他们的大小分别是20X20,40X40,80X80,网格大小分别是32X32,16X16,8X8。然后将这 8400 个锚框与图片中的目标框进行匹配,挑选出与目标框高度吻合的正样本锚框。一旦确定了正样本锚框,其对应的预测框也可以从 8400 个预测框中挑选出来,用于最终的目标检测和分类。

 

 2 Distribution Focal Loss(DFL)

1. 输入张量的形状

  • 输入张量的维度为 [B,4×reg_max,H,W][,其中 B是批次大小, WH是特征图的高度和宽度,4 表示边界框的 4 个坐标(左、上、右、下),而 reg_max 是离散化的最大值。假设 reg_max = 16,那么每个坐标值都有 16 个离散点进行预测。

2. Softmax 计算

  • 如图所示,不考虑B H W 经过 viewtranspose 操作,输入张量被重新调整为 4个[1,16]的维度的向量,分别命名为a,b,c,d。
  • 然后对离散化的坐标 l,t,r,b 应用 softmax,得到每个离散值的概率分布。例如,对于l,softmax 会输出一个 16 维的向量,每个元素代表该离散值的概率。

3. 加权计算

  • Softmax 得到的概率分布与离散化坐标的权重向量 w 相乘。这个权重向量是 [0,1,2,...,15],对应 16 个离散值。通过这个加权过程,预测的坐标 l,t,r,b最终被计算为连续值。

  • 计算公式为:P(y_{i})\times w_{_{i}}        

其中P(y_{i})是 softmax 输出的概率,w_{_{i}}是离散值的权重。通过这个过程,可以得到 4 个连续的坐标值 l,t,r,b,它们代表目标边界框的四个边。

4. 计算举例

  • 图中的例子展示了 softmax 输出与权重的加权计算过程。假设l的 softmax 输出为 [0,0,0.1,0,0.3,0,0,0.1,0.2,0,0,0.3,0,0,0,0]那么对于这个特征点的坐标l,最终的加权结果是:

                                        0.1×2+0.3×4+0.1×7+0.2×8+0.3×11=7.0

同理, t,r,b坐标值也可以通过类似的方式计算。

3. 标签分配策略

在目标检测任务中,网络会预测大量的候选框(anchors或grids),其中只有少部分候选框与真实目标框(ground truth boxes,GT)高度相关。为了训练模型,必须将预测的候选框(预测框)与真实目标框进行匹配,并确定哪些预测框应该被视为正样本(Foreground),哪些是负样本(Background)。正样本通常是那些与真实目标框具有高重叠度(通常用IoU衡量)的预测框。

传统的YOLO系列模型使用了固定阈值匹配方法,例如直接根据IoU值大于某个阈值来判断正负样本,但这种方法可能导致标签分配不灵活。YOLOv8通过动态K匹配和任务对齐度量策略,使得标签分配更加自适应,能够更好地平衡分类和回归信息。

1. 通过 select_candidates_in_gts 函数来判断哪些锚点的中心点位于真实目标框内,生成一个掩码 mask_in_gts。下面蓝色区域白女士位于真实框中的锚点,不在真实框中的锚点舍去置为0,生成右边的mask。

2.通过 get_box_metrics 函数计算每个锚点与GT框之间的 任务对齐度量IoU重叠度量。得到每一个真实框对应预测框的对其度的值和iou的值,(batch x 真实框 x 8400)

  • 任务对齐度量 (align_metric):衡量锚点与GT框在分类得分和定位精度上的综合匹配程度。该度量结合了分类置信度和IoU值,用于全面衡量锚点的质量。
  • IoU重叠度量 (overlaps):直接衡量预测的边界框与真实GT框之间的IoU值,用于确定空间上锚点的精确性。

                 Task Aligned Metric = Classification Score^{_{ \alpha }} \times IoU ^{\beta }

其中,α和 β是两个权重参数,用于平衡分类和回归的损失。通常,分类得分的权重较小(例如 α=1),而IoU的权重大(例如 β=6),因为在目标检测任务中,定位准确性(IoU)对性能有更大的影响。左边是任务对齐度量,右边是IoU重叠度量。

3.通过 select_topk_candidates 函数从所有候选的锚点中,选择与每个GT框 对齐度量 最高的前K个锚点,并为这些锚点生成相应的掩码 mask_topk

4.将前三步生成的所有掩码进行合并,得到最终的正样本Mask。

5.对已经获得正样本的mask,存在一个预测框对应多个真实框的情况,因此一个点可能对应多个GT,保留iou高的真实框去除低的真实框。如下图所示,左右两个真实框有一个预测框重合,我们保留iou更高的,舍去左边绿色的

4. LOSS

YOLOv8的损失函数由三部分组成:

                        Loss=\alpha L_{cls}+\beta L_{ciou}+\gamma L_{dfl}

  1. 分类损失 L_{cls}:这是交叉熵损失,用于衡量模型对目标类别的分类准确性。该损失仅计算正样本的损失。
  2. 边框回归损失L_{ciou}:这是 CIoU(Complete IoU)损失,用于衡量预测的边框与真实目标框之间的重叠度,主要考虑边框位置、尺寸、纵横比的差异。同样只对正样本进行计算。
  3. 距离损失L_{dfl}:用于对锚点的距离进行精细回归。

其中α、β、γ是平衡系数,分别用于调节分类损失、CIoU损失和距离损失的权重。

该损失函数的设计目标是综合考虑分类与定位的精度,使得 YOLOv8 在目标检测任务中能够同时兼顾这两个方面的优化。

YOLOv3是一种用于目标检测的深度学习模型。它是YOLO(You Only Look Once)系列模型的第三个版本。YOLOv3-SPP是在YOLOv3的基础上加入了空间金字塔池化(SPP)模块。该模块被放置在y1层的前面,用于提取不同尺度的特征信息。 此外,也有关于YOLOv3的其他改进版本,比如YOLOv3-spp123。在这个版本中,SPP模块被加入到y2和y3层的前面,并且删除了一些卷积层。这样做的目的是进一步提升检测性能和减少计算量。 如果你想学习YOLOv3的具体实现和使用方法,你可以从作者的官方网站上下载YOLO代码并进行学习。 你可以在网站https://pjreddie.com/darknet/yolo/上找到YOLO的代码,并按照说明进行安装和使用。 另外,你也可以通过修改darknet_yolo_v3.cmd文件来进行测试,其中包括指定数据集、配置文件、权重文件以及目标检测的阈值等参数。 运行该文件后,预测结果将保存为predictions.png文件。 通过分析代码和实践操作,你可以更好地理解和掌握YOLOv3模型的学习过程。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [YOLOv3修改网络结构后无法训练模型](https://blog.csdn.net/scanfandprintf/article/details/117415223)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [Yolo3 实现目标检测](https://blog.csdn.net/zaibeijixing/article/details/88786619)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值