当前位置: 首页 > news >正文

深度学习——yolo学习

文章目录

  • 一、yolov1
    • 1.1基本概念
    • 1.2原理介绍
    • 1.3网络结构
    • 1.4后处理
  • 二、yolov2
    • 2.1网络结构与改进
    • 2.2总结
  • 三、yolov3
  • 四、yolov4
    • 4.1网络结构
    • 4.2优化策略
    • 4.3IoU Loss
  • 五、Yolov5
  • 六、总结

参考视频:
论文精读https://www.bilibili.com/video/BV1jP4y197JZ?spm_id_from=333.788.player.switch&vd_source=67ba3568cbf6ea1d930339cd0f2092ba&p=5

理论讲解https://www.bilibili.com/video/BV1yi4y1g7ro?spm_id_from=333.788.videopod.episodes&vd_source=67ba3568cbf6ea1d930339cd0f2092ba

一、yolov1

1.1基本概念

yolo(you only look once)是 单阶段目标检测算法,提出于 2016 年,由 Joseph Redmon 等人提出。

与传统方法(如 R-CNN 系列)不同:

  • 不需要生成候选区域(Region Proposals)
  • 传统方法多是重新利用分类器执行检测任务,yolo将目标检测视为回归:【图像像素】——>【边界框坐标和类别概率】
    • 分类(Classification):核心是判断目标属于哪个预定义的类别,输出的是离散的类别标签或属于各类别的概率。例如传统检测方法(如 R-CNN)中,对生成的候选区域使用分类器判断其是否为目标及属于哪一类,输出的是 “猫”“狗” 等类别或对应的概率值。
    • 回归(Regression):则是预测连续的数值,目标是让预测值尽可能接近真实的数值标签。YOLOv1直接预测边界框的坐标(x、y、w、h)等连续数值,以及反映边界框准确性的置信度(连续值),这些预测均通过网络输出连续的数值结果,而非离散的类别判断。
  • 无需复杂的检测流程,整个检测流程是单个网络,可直接针对检测性能进行端到端优化

1.2原理介绍

  • Step1:它把图像划分成S×SS×SS×S的网格,若物体object中心落在某个网格单元内,该网格单元就负责检测这个物体,需要预测该物体的边界框位置、置信度以及所属类别等信息。
    • 在一张没有任何物体的空白图像中,所有网格单元都没有物体中心落入,则它们都不需要检测物品。
    • 在包含少量物体的图像中,只有物体中心所在的少数网格单元需要检测对应的物品,其余网格无需检测。
      假设图像中有 3 个物体,那么理论上只有 3 个网格会主动负责预测这些物体。
      7*7=49个网格最多检测49个物体。
      在这里插入图片描述
  • Step2:这个网格需要预测B个边界框,从不同角度猜测物体可能的位置、大小、可靠性。每个边界框包含:
    • 位置(x,y):边界框中心点相对于【当前网格左上角】的偏移量,取值范围 [0,1]。

    • 大小(w,h):边界框宽度和高度相对于【整张图片】的宽高比例,取值范围 [0,1]。

    • 可靠性confidence:预测框是否包含目标以及框准不准。 confidence=P(object)×IOUpredtruthconfidence = P(object)×\text{IOU}_{\text{pred}}^{\text{truth}}confidence=P(object)×IOUpredtruth

    • Pr(Object)\text{Pr(Object)}Pr(Object):这个边界框里 “有物体的概率”,网格里没物体时值趋近 0;有物体时值接近 1 。

    • IOUpredtruth\text{IOU}_{\text{pred}}^{\text{truth}}IOUpredtruth:预测框和真实物体框的交并比。

如下图所示:假设有检测框的中心在图片中文位置是(200,150),宽度192,高度128。

  • 则对于448*448的图片,被划分成7*7的网格,每个网格的大小是64*64。
  • 中心点所在网格的坐标是(192,128)。由该网格负责检测当前物品。
  • 相对于网格的偏移量:x=(200-192)/64=0.125。y=(150-128)/64=0.344。
  • 相对与整张图片:w=192/448=0.429。h=64/448=0.286
  • 因此(x, y, w, h) = (0.125,0.344,0.429,0.286)
    在这里插入图片描述
  • Step3:上述两步只知道框内有物品,但不知道物品是什么,因此网格还需要预测C个物品的条件类别概率。 网格内有物体的条件下,属于各类别的可能性=Pr(Classi∣Object)网格内有物体的条件下,属于各类别的可能性=\text{Pr(Class}_i | \text{Object})网格内有物体的条件下,属于各类别的可能性=Pr(ClassiObject)
  • CCC 代表数据集中的类别总数,PASCAL VOC 数据集有 20 类,则C = 20。iii 指第 iii 类。
  • 因此这个网格会输出 “属于狗的概率、属于自行车的概率、属于汽车的概率……” 等 20 个值。
  • Step4:把 “边界框(位置、大小)、置信度(有物体且框准 )、类别概率(物体是啥 )” 三者结合,通过公式可得最终的概率为:
    score=Pr(Classi∣Object)×P(Object)×IOUpredtruth=Pr(Classi)×IOUpredtruthscore=\text{Pr(Class}_i |\text{Object})×P(Object)×\text{IOU}_{\text{pred}}^{\text{truth}} =\text{Pr(Class}_i)×\text{IOU}_{\text{pred}}^{\text{truth}}score=Pr(ClassiObject)×P(Object)×IOUpredtruth=Pr(Classi)×IOUpredtruth
  • 就能得到:这个框里有一个物体,它属于【类别概率最大的】一类,概率是【类别概率与边界框置信度的乘积】,还能在图像中准确定位并标记出物体的位置和范围

1.3网络结构

YOLOv1 网络的主要结构如下:
在这里插入图片描述

  • 输入:固定尺寸图像,如 448×448×3
  • 特征提取层(Convolutional Backbone):类似 GoogLeNet 的卷积层组合,提取图像特征并进行空间压缩。
  • 检测层(Detection Layer):全连接层输出 S×S×(B×5+C),将卷积特征映射到边界框坐标 + 类别概率。
  • 输出:图像划分为 S×S 网格,每个网格预测 B 个边界框和对应的置信度(4+1),每个网格预测类别概率 C。输出张量:S×S×(B×5+C)。【S=7,B=2,C=20,最终输出的特征图大小7*7*30】
    在这里插入图片描述
公式含义
S × S网格数
B × 5回归输出(边界框位置、大小、置信度)
C分类输出(类别概率)

YOLO 把回归和分类放在同一输出向量中,并用不同损失函数训练。训练时同时优化回归和分类损失,使网络同时具备 定位能力和识别能力

  • 回归任务:全连接层的部分节点用于输出连续的边界框坐标和置信度,使用 MSE 作为损失函数。
  • 分类任务:同一全连接层的另一部分节点输出类别概率,使用平方误差。
    Loss=坐标回归损失+置信度损失+类别损失Loss=坐标回归损失 + 置信度损失 + 类别损失Loss=坐标回归损失+置信度损失+类别损失

1.4后处理

在 YOLO 得到检测框(bounding box)、置信度和类别概率之后,还需要做一些 后处理操作 来得到最终可用的检测结果。

阈值过滤(Confidence Thresholding):去掉置信度低的预测框,减少误报

  • 设定置信度阈值。只保留 confidence × class probability > threshold 的框
  • 举例说明:如下图有5组数据,如果我们设 阈值 = 0.3,则只保留置信度 ≥ 0.3 的框:
  • 保留下来的框:1、3、5
  • 被删除的框:2、4
框编号类别Score
10.85
20.20
30.60
40.10
50.90

非极大值抑制(NMS, Non-Maximum Suppression):YOLO 每个网格可能预测多个边界框,多个框可能 重叠预测同一个目标,NMS 的作用是 保留置信度最高的框,去掉重复框。

  • 对每个类别的预测框按 score 排序。
  • 从置信度最高的框开始,依次计算该框与其他框的 IoU。IoU 大于阈值(如 0.5)则删除重复框
  • 剩下的框作为最终输出。保留框数量由 IoU 阈值和预测重叠情况决定。

假设现在阈值过滤后剩下了 4 个框预测 同一只猫:

框编号Score坐标
A0.9(100,100,200,200)
B0.85(110,110,210,210)
C0.7(300,300,400,400)
D0.6(320,320,420,420)

NMS 阈值 IoU = 0.5:

  • 排序 → A > B > C > D
  • 遍历 A → 保留 A
    • IoU(A,B)=0.7 > 0.5 → 删除 B
    • IoU(A,C)=0 → 保留 C
    • IoU(A,D)=0 → 保留 D
  • 遍历 C → 保留 C
    • IoU(C,D)=0.6 > 0.5 → 删除 D
  • 最终保留框:A, C

类别选择:对每个预测框,选择 概率最高的类别。也可以根据具体任务只保留感兴趣的类别。
边界框调整:YOLO 输出的 x,y,w,h 是 归一化到网格/图像的相对值,将其转换为 实际图像坐标。
在这里插入图片描述

二、yolov2

2.1网络结构与改进

在这里插入图片描述
1、Batch Normalization(批归一化)
每个卷积层后都加 BN(卷积→BN→激活函数)移除了 dropout,对输入特征进行归一化(均值 0、方差 1),避免某层输出值过大导致梯度消失。


2、High Resolution Classifier(高分辨率分类器)

  • YOLOv1 在 ImageNet 数据集上使用 224×224 分辨率预训练分类网络。
    但在检测任务中直接切换到 448×448 分辨率,这种分辨率的突然提高,使模型需要适应新的输入分布。
  • YOLOv2提出了一个很简单但有效的办法:
    • 低分辨率预训练(224×224):首先在ImageNet 分类数据集上用 224×224 的低分辨率图像训练 。
    • 高分辨率微调(448×448):在低分辨率预训练完成后,保持网络结构不变,改用448×448 的高分辨率图像在 ImageNet 上继续训练 10 个 epoch(少量迭代)。
    • 迁移到检测任务(416×416):完成高分辨率分类器训练后,将网络迁移到检测任务,并将输入尺寸调整为 416×416(32 的倍数,确保下采样后特征图尺寸为整数)

输入分辨率提高(如 416×416,步长 32),S=416/32=13S=416/32=13S=416/32=13(13×13 网格),网格更密集,更利于小目标检测。


3、Convolutional With Anchor Boxes(去全连接 + 引入锚框)

  • 全连接层的参数量由输入尺寸决定(如 448×448 特征图 flatten 后维度固定),导致模型只能处理固定尺寸图像。
  • YOLOv1 每个网格只能预测 2 个边界框,而且只能对应一个物体,限制太死,直接预测边界框的坐标(x, y, w, h)对网络要求高
  • YOLOv2 引入类似 Faster R-CNN 的 anchor boxes,每个网格单元预测多个边界框(通常 5 个)。不再直接预测边界框的绝对坐标,而是预测 相对 anchor 的偏移量。这样模型不需要学从零开始画框,而是微调几个预设框,收敛更快,泛化更好。
    • Anchor Boxes(锚框)是指预先定义一系列不同尺寸和宽高比的 “模板框”,网络只需要学习这些模板框的偏移量,而非直接预测坐标。就像裁缝先准备几种标准尺码的衣服(锚框),再根据顾客体型微调(偏移量)。
    • YOLOv2 的最终输出是一个三维张量,格式为:S×S×(B×(4+1+C)),与YOLOv1不同的是,每个锚框都有对应的偏移量、置信度与目标类别。

4、Dimension Clusters(维度聚类)
使用 k-means 聚类算法在训练集的真实边界框上生成锚框尺寸,而非人工设定。
但是传统 k-means 使用欧氏距离(Euclidean distance),这种方式会倾向于选择大尺寸的框(大框的欧氏距离更大),而目标检测中更关注锚框与真实框的交并比(IOU),因此度量方式发生变化:当锚框与真实框的 IOU 越大,距离越小(越相似)。
距离=1−IOU(锚框,真实框)距离 = 1 - IOU (锚框,真实框)距离=1IOU(锚框,真实框)


5、Direct location prediction(直接位置预测)
Faster R-CNN 通过预测四个偏移量(tx,ty,tw,th)(t _x,t _y, t _w,t _h)(tx,ty,tw,th),来实现从锚框到目标框的修正,其中中心坐标的偏移公式为:
tx=xg−xawa,ty=yg−yaha,tw=log(wgwa),th=log(hgha)t_x = \frac{x_g - x_a}{w_a}, \quad t_y = \frac{y_g - y_a}{h_a}, \quad t_w=log(\frac{w_g}{w_a}),\quad t_h=log(\frac{h_g}{h_a})tx=waxgxa,ty=haygya,tw=log(wawg),th=log(hahg)xp=tx×wa+xa,yp=ty×ha+ya,wp=wa×etw,hp=ha×ethx_p= t_x\times w_a+x_a,\quad y_p= t_y\times h_a+y_a,\quad w_p=w_a\times e^{t_w},\quad h_p=h_a\times e^{t_h}xp=tx×wa+xa,yp=ty×ha+ya,wp=wa×etw,hp=ha×eth

  • 锚框(Anchor Box)A=(xa,ya,wa,ha)A=(x _a,y _a, w _a,h _a)A=(xa,ya,wa,ha)
  • 预测的边界框(Predicted Box)P=(xp,yp,wp,hp)P=(x _p,y _p, w _p,h _p)P=(xp,yp,wp,hp)
  • 真实目标框(Ground Truth Box)G=(xg,yg,wg,hg)G=(x _g,y _g, w _g,h _g)G=(xg,yg,wg,hg)

YOLOv2中预测每个边界框的参数,包括:边界框中心相对于网格的偏移量(tx,ty)(t_x, t_y)(tx,ty)边界框宽高相对于锚框的缩放因子(tw,th)(t_w, t_h)(tw,th)边界框的置信度(confidenceconfidenceconfidence)【偏移量的目标值是 “网格内的相对位置”】:
bx=σ(tx)+cx,by=σ(ty)+cybw=pw×etwbh=ph×ethb_x=σ(t_x)+c_x ,\quad b_y=σ(t_y)+c_y\quad b_w=p_w \times e^{t_w} \quad b_h=p_h \times e^{t_h} bx=σ(tx)+cx,by=σ(ty)+cybw=pw×etwbh=ph×eth
Confidence=σ(tc)Confidence=σ(t_c)Confidence=σ(tc)

  • cx,cyc_x,c_ycx,cy:图像被划分为 S×SS×SS×S 个网格,第 iii 行第 jjj 列的网格左上角坐标为(cx,cy)=(i,j)(c_x,c_y)=(i,j)(cx,cy)=(i,j)
  • pw,php_w, p_hpw,ph:预定义锚框的宽和高(维度聚类从训练数据中得到)
  • bx,by,bw,bhb_x, b_y,b_w, b_hbx,by,bw,bh::预测边界框的中心坐标、实际宽度、实际高度。

6、Fine-Grained Features(细粒度特征)
YOLOv2 通过添加 passthrough 层来获取细粒度特征:

  • 主干网络(Darknet-19)第 13 层输出的特征图大小是 26×26×512(低层特征,空间分辨率高),经过卷积层之后大小变成262664。
  • 最后检测层使用的特征图是 13×13×1024(高层特征,语义强但空间分辨率低)。

Passthrough 操作

  • 先取出 26×26×64 特征图。每 2×2 的邻域像素块拉平成一个向量,相当于把分辨率缩小一半:从 26×26×64 → 13×13×256。
  • 再把这个 13×13×356 特征图与 13×13×1024 高层特征 拼接:得到 13×13×3072 的特征图用于预测。
    这种跨层链接的方式类似于残差网络的思想,通过融合不同层次的特征,让网络能够利用到更多的细节信息。

7、Multi-Scale Training(多尺度训练)
设网络的总下采样步长(stride)为 32(Darknet-19:5 次 2×2 池化 → 2⁵=32)。

  • 候选输入尺寸取自区间 [320,608] 且必须是 32 的倍数:{320,352,384,…,608}。
  • 每隔固定迭代数(10 个 iteration)随机挑一个尺寸作为新的输入大小,对接下来若干个 mini-batch 都用这个尺寸训练。随输入变化:
    • 网格大小S也会跟着变:S=inputsizestrideS=\frac{input_size}{stride}S=strideinputsize。例如:320→10,416→13。直观上网络被反复“拉伸/压缩”去看同一批次分布的图像,让卷积核学会在不同像素密度下都能找对目标。
    • 真实框(GT box)标签通常以归一化形式存储:(x,y,w,h)∈[0,1],当你把图像 resize 到新尺寸时,GT 的归一化坐标不变(因为它永远是“相对比例”)。
    • 输出网格与回归目标:最终预测发生在 S×S 的网格上(训练时会把目标中心映射到对应的网格单元(例如 x*S,y*S),这一步随 S 自动变化,无需你手动改标签,只要用归一化坐标去计算即可。
    • 维度聚类得到的 anchors 通常以像素为单位、相对某个基准输入尺寸(如 416)得到。当训练切换到新输入尺寸 时,要对 anchors 做等比例缩放。

8、Darknet-19 网络

对比项YOLOv1 主干网络YOLOv2 主干网络
网络名称基于 GoogLeNet 的自定义网络Darknet-19
层数24 层卷积层 + 2 层全连接层19 层卷积层(无全连接层)
卷积层仅用 3×3 卷积引入 1×1 卷积降维
池化层5 层最大池化(步长 2,总下采样 32 倍)5 层最大池化(步长 2,总下采样 32 倍)
全连接层包含 2 层全连接层(输出边界框和类别)无全连接层,全卷积设计

2.2总结

类别改进点作用
网络结构改进Darknet-19 网络网络主架构
Batch Normalization提升收敛和准确率
特征提取改进High Resolution Classifier提升小目标感知
Fine-Grained Features融合浅层特征,改善小目标检测
检测机制改进Convolutional With Anchor Boxes引入 anchor,提高 recall(找全)
Dimension Clusters聚类生成 anchor,更合理匹配
Direct Location Prediction预测相对偏移,增强稳定性
训练策略改进Multi-Scale Training提升多尺度泛化能力
锚框输入输出
锚框的确定训练集上,基于原始图片的真实框,执行k-means 聚类得到 5 种锚框尺寸(宽*高)【归一化后】
锚框的使用输入图片经过 Darknet-19 网络提取特征后,得到最终的 13×13 特征图(416×416 输入下)图片被划分为 13×13 个网格。每个网格都要分配 5 个预设的锚框
锚框的稳定直接位置预测不直接预测边界框的绝对坐标,而是预测锚框的偏移量

三、yolov3

参考博文与部分图来源:https://blog.csdn.net/qq_37541097/article/details/81214953链接

YOLOv3的网络结构图如下所示:
在这里插入图片描述

Step1:多尺度特征提取:YOLOv3 使用 Darknet-53 作为 主干网络,借鉴 ResNet 的残差结构(Residual Connections),训练更深的网络(53 层卷积),替代 YOLOv2 的 Darknet-19,提高了特征表达能力。

  • Backbone:Darknet-53:从输入到输出,每次下采样均通过步长为 2 的 3×3 卷积层实现,配合残差块的堆叠,在降低分辨率的同时保留关键特征。网络通过 5 次下采样逐步降低特征图分辨率,每个下采样阶段之间由若干残差块组成(分别为 1、2、8、8、4 个残差块)。【2+(12)+1+(22)+1+(82)+1+(82)+1+(4*2)+(全连接层)】=53。
    在这里插入图片描述
  • Convolutional:Conv2d——BN——LeakyReLu
  • Residual(残差块):ResNet(Residual Network) 的核心组件。
    • 在深度学习中,我们希望通过堆叠更多的卷积层来提升网络的特征提取能力。但是当网络层数过深时,会遇到两个问题:梯度消失/爆炸或能力退化问题。
      在这里插入图片描述
    • 主分支(Main Path):包含 1~2 层卷积【1×1 降维 + 3×3 提特征】,用于提取特征并输出 “残差”(输入与输出的差异)。
    • 捷径分支(Shortcut Path):直接将输入特征图跳过主分支,与主分支的输出相加(元素级加法),形成 “残差连接”。

以输入 416×416 为例,主干(Darknet-53)总下采样 32 倍,得到这三层:

预测层特征图尺寸主要负责
Scale-152×52小目标
Scale-226×26中目标
Scale-313×13大目标

Step2:多尺度特征融合。YOLOv3 借鉴了 FPN(Feature Pyramid Network特征金字塔网络) 的思路(自顶向下 + 横向连接 的特征融合)。

  • 先从最深层得到高语义、低分辨率特征(13×13) → 第一次预测。
  • 将(13×13)上采样成(26×26),与更浅层的(26×26)特征拼接,卷积融合 → 第二次预测。
  • 将(26×26)上采样成(52×52),与更浅层的(52×52)特征拼接、卷积融合 → 第三次预测。
    在这里插入图片描述
    YOLOv3 的损失函数

Step3:多尺度预测输出

  • 训练前对所有 GT 的 (w,h) 做 k-means(IoU 距离) 聚类 得到 9 个 anchors。
  • 把 9 个 anchors划分为 3 组(小/中/大),分别给三层使用(每层 3 个)。
  • 在某个尺度做预测时,会把该层使用的 3 个 anchors 按不同尺度归一到该特征图坐标系。
  • 在每一个尺度,YOLOv3 的输出 shape 都是:S×S×[3×(4+1+C)]。所以最终输出一共有:【13×13×3 个预测框】+【26×26×3 个预测框】+【52×52×3 个预测框】。
特征图大小锚框大小预测框数量
13×13(10,13)、(16,30)、(33,23)(10,13)、(16,30)、(33,23)(10,13)(16,30)(33,23)13×13×3
26×26(30,61)、(62,45)、(59,119)(30,61)、(62,45)、(59,119)(30,61)(62,45)(59,119)26×26×3
52×52(30,61)、(62,45)、(59,119)(30,61)、(62,45)、(59,119)(30,61)(62,45)(59,119)52×52×3

Step4:尺度整合:三个尺度的预测结果会被统一处理:

  • 将预测框坐标从特征图映射回原图,合并三个尺度的候选框。
  • 过滤低置信度框(如置信度 < 0.5)。
  • 对剩余框执行非极大值抑制(NMS),去除重叠冗余框
  • 最终输出跨尺度的检测结果。

类别预测(多标签分类)

  • YOLOv1、YOLOv2 使用 Softmax 分类,即每个预测框属于一个类别。
  • YOLOv3 改进为 多标签分类(multi-label classification):使用 独立的 logistic 回归 来预测每个类别的概率,而不是 Softmax。适用于 多标签场景(例如一张图可能同时属于“狗”和“宠物”)。

四、yolov4

参考博文:https://blog.csdn.net/qq_37541097/article/details/123229946链接

4.1网络结构

YOLOv4 的架构分为 Backbone(主干网络)、Neck(颈部特征融合)、Head(检测头) 三部分。
在这里插入图片描述
Backbone:CSPDarknet53:在YOLOv3的DarkNet的基础上,增加了CSP结构。计算量更低,减少冗余梯度流。特征表达更强,保持网络宽度和深度的平衡。精度更高,尤其在小目标检测上更有优势。

改进1:CSP(Cross Stage Partial Network)结构:

  • Cross Stage(跨阶段)指的是在神经网络的不同阶段之间建立连接,使得特征能够在不同阶段之间进行传递和融合,而不是仅仅在单个阶段内进行处理。
  • Partial(局部)表示将特征图分成多个部分,一部分直接传递到下一个阶段,另一部分经过一些卷积操作后再与前一部分合并,通过这种方式减少重复计算,提高计算效率,同时增强网络的学习能力和泛化性能。
  • CSP 残差块(CSP Residual Block)
    • 输入特征 → 沿通道分割为两部分(Part A 和 Part B):
    • Part A:直接作为捷径分支,不经过任何卷积,直接传递到输出端;
    • Part B:进入卷积分支,经过 1×1 卷积降维 → 多个残差子块 → 1×1 卷积升维;
    • 最终,Part A 与卷积分支输出通道拼接(Concat) → 1×1 卷积整合特征 → 输出。

在这里插入图片描述

改进2:Mish函数:其设计灵感结合了 ReLU、Swish 等函数的优点:
f(x)=x⋅tanh(softplus(x))=x⋅tanh(ln(1+ex))f(x)=x⋅tanh(softplus(x))=x⋅tanh(ln(1+ex))f(x)=xtanh(softplus(x))=xtanh(ln(1+ex))在这里插入图片描述

  • 平滑性:Mish 在全域内是连续可导的(比 ReLU、Leaky ReLU 更平滑),对反向传播更友好。
  • 非单调性:Mish 在 x<0 的时候有轻微的负区间,这让网络在学习时保留了一些负值信息(类似 Swish)。
  • 边界情况:当 x→−∞,softplus(x)→0,所以 f(x)→0。当 x→+∞,softplus(x)→x,tanh(x)→1,所以 f(x)→x。
输出特征大小特点
浅层特征(52×52×256)分辨率高,包含边缘、纹理等细节信息,适合小目标检测
中层特征(26×26×512)平衡细节与语义,适合中目标检测。
深层特征(13×13×1024)分辨率低,语义信息丰富(如目标类别、整体轮廓),适合大目标检测。

Neck:PANet【特征融合与增强】:在 YOLOv3 的、多尺度目标检测FPN(Feature Pyramid Network)的自顶向下(Top-down)+ 横向连接(Lateral connection)基础上,增加PAN(Path Aggregation Network)自底向上的特征聚合路径。不仅有 FPN 的 top-down 信息流,还增加 bottom-up 信息流。
沿用:自顶向下的FPN(特征金字塔网络)

在这里插入图片描述
改进:SPP(Spatial Pyramid Pooling,空间金字塔池化):SPP 通常放在 CSPDarknet53 主干网络的最后一层卷积特征图之后,送入检测头之前。

最大池化操作(stride=1,padding 保持尺寸不变)意义
1×1 池化保留局部细节
5×5 最大池化捕捉稍大的区域上下文
9×9 最大池化更大范围的全局信息
13×13 最大池化全局语义
拼接后的特征融合不同尺度的上下文信息512*4=2048

在这里插入图片描述

改进:自下而上的PAN(路径聚合网络)
传统特征金字塔网络(FPN)的两个局限:

  • 高层特征(语义强但分辨率低)向低层传递时,信息损失较多,不利于小目标检测。
  • 特征融合仅单向(自顶向下),缺乏低层到高层的反馈机制,导致低层细节特征利用不充分。

因此将低层特征经过下采样后与高层特征进行融合。

  • 低层融合后的特征(52×52×128,细节最丰富)通过下采样(如 3×3 卷积 + 步长 2)与中层中间特征(26×26×256)再次融合,得到26×26×256的特征;
  • 该特征继续下采样与高层特征(13×13×512)融合,得到13×13×512的特征;
  • 同时保留低层融合后的特征作为52×52×128的输出。

在这里插入图片描述


Head:检测头结构与 YOLOv3 类似(3 个尺度特征图 + 9 个锚框)。

每个分支输出的特征图中,每个通道对应特定的预测值,可拆解为:

  • 每个网格点上有 3 个锚框(×3);
  • 每个锚框包含:4 个边界框偏移量、1 个置信度、n个类别概率。

4.2优化策略

Bag of Freebies(训练阶段的改进技巧)&& Bag of Specials

  • 骨干网络的BoF:CutMix 和 Mosaic 数据增强、、类别标签平滑
对比维度MosaicCutMix
输入图像数量4 张2 张
拼接方式田字形拼接(无重叠逻辑)裁剪替换(区域覆盖)
核心目标提升小目标样本与背景多样性增强遮挡场景鲁棒性
适用场景目标检测(尤其多尺度模型)图像分类、目标检测
  • 骨干网络的BoS:Mish 激活函数、跨阶段局部连接(CSP)、多输入加权残差连接(MiWRC)
  • 检测器的BoF:CIoU 损失、CmBN、DropBlock 正则化、Mosaic 数据增强、自对抗训练、消除网格敏感性、为单个真实标注使用多个锚框、余弦退火调度器 、优化超参数、随机训练尺寸

DropBlock 正则化:DropBlock 不再像 Dropout 那样随机独立地丢弃单个神经元,而是以一个连续的区域(block)为单位进行丢弃。
在这里插入图片描述

  • 检测器的BoS:Mish 激活函数、SPP 模块、SAM 模块、PAN 路径聚合模块、DIoU - NMS

4.3IoU Loss

Focal Loss
FL(pt)=−αt∗(1−pt)γ∗log(pt)FL(p_t) = -α_t * (1 - p_t)^γ * log(p_t)FL(pt)=αt(1pt)γlog(pt)

  • ptp_tpt 是模型对目标类别的预测概率
    • 当真实标签 y=1 时,pt=pp_t = ppt=p, ;
    • 当真实标签 y=0 时,pt=1−pp_t = 1-ppt=1p,
  • αtα_tαt 是平衡因子(用于解决类别不平衡问题)
    • 当真实标签 y=1 时,αt=αα_t = ααt=α,
    • 当真实标签 y=0 时,αt=1−αα_t = 1-ααt=1α
  • γ(γ≥0)γ(γ ≥ 0)γγ0是聚焦参数(用于降低易分类样本的权重,聚焦于难分类样本)

IoU Loss(交并比损失)
IoU=∣A∩B∣∣A∪B∣IoU = \frac{|A \cap B|}{|A \cup B|}IoU=ABAB
其中,A和B分别表示预测边界框和真实边界框,∣A∩B∣|A \cap B|AB是两个框的交集面积,∣A∪B∣|A \cup B|AB是并集面积。
IoU Loss 可以表示为:LIoU=1−IoUL_{IoU} = 1 - IoULIoU=1IoU

GIoU Loss(global广义交并比)

IoU作为损失函数会出现的问题:

  • 如果两个框没有相交,根据定义,oU=0,不能反映两者的距离大小(重合度)。同时
    因为Ioss=0,没有梯度回传,无法进行学习训练。
  • IoU无法精确的反映两者的重合度大小。如下图所示,三种情况IoU都相等,但看得
    出来他们的重合度是不一样的,左边的图回归的效果最好,右边的最差。
    在这里插入图片描述
    它在 IoU 的基础上,引入了最小包围框(能够同时包含预测框和真实框的最小矩形框):

GIoU Loss 表示为:LGIoU=1−GIoU=1−(IoU−∣C−(A∪B)∣∣C∣)L_{GIoU} = 1 - GIoU=1-( IoU - \frac{|C - (A \cup B)|}{|C|})LGIoU=1GIoU=1(IoUCC(AB))
C表示最小包围框的面积。即上图中虚线的框。

DIoU Loss(distance距离交并比)

LDIoU=1−DIoU=1−(IoU−ρ2(b,bgt)c2)L_{\text{DIoU}} = 1 - \text{DIoU}=1-(\text{IoU} - \frac{\rho^2(b, b^{gt})}{c^2})LDIoU=1DIoU=1(IoUc2ρ2(b,bgt))其中各参数含义:

  • IoU\text{IoU}IoU:预测框 bbb 与真实框 bgtb^{gt}bgt 的交并比,即 IoU=∣A∩B∣∣A∪B∣\text{IoU} = \frac{|A \cap B|}{|A \cup B|}IoU=ABAB
  • ρ2(b,bgt)\rho^2(b, b^{gt})ρ2(b,bgt):预测框中心点与真实框中心点之间的欧氏距离的平方(空间距离度量)。
  • ccc:能够同时包含预测框和真实框的最小包围框的对角线长度(用于归一化距离,确保尺度不变性)。

CIoU Loss(Complete完全交并比)

LCIoU=1−CIoU=1−(IoU−ρ2(b,bgt)c2−αv)L_\text{CIoU}=1−CIoU=1−(\text{IoU} - \frac{\rho^2(b, b^{gt})}{c^2}−αv)LCIoU=1CIoU=1(IoUc2ρ2(b,bgt)αv)

vvv 是宽高比的差异项,α\alphaα 是一个权重因子,用于平衡IoU项和宽高比差异项。

损失函数核心优化目标局限性
IoU重叠区域无重叠时梯度消失;对包含关系不敏感
GIoU重叠区域 + 最小包围框面积包含关系时退化为 IoU;收敛较慢
DIoU重叠区域 + 中心点距离未考虑宽高比差异
CIoU重叠区域 + 中心点距离+宽高比差异考虑因素全面

五、Yolov5

相较于 YOLOv3、YOLOv4,YOLOv5 最大的特点是:

  • 用 PyTorch 框架实现(YOLOv4 主要基于 Darknet 框架),更易于工程应用和二次开发;
  • 提供了从小到大的多个版本(n/s/m/l/x),满足不同的计算资源和精度需求;

改进1:新增 Focus 层
在网络最前端增加 Focus 层,替代传统的初始卷积层,提升特征提取效率。

  • 将输入图像(如 640×640×3)按像素位置进行切片(每隔一个像素取点),得到 4 个 320×320×3 的子图。
  • 拼接后形成 320×320×12 的特征图(通道数翻倍),再通过 1 个 3×3 卷积将通道数调整为 64。

改进2:CSP 模块结构
YOLOv5模块 将 CSPDarknet53 中的 CSP 模块拆分为两种变体,分别用于 Backbone 和 Neck:

  • Backbone中使用 CSP1_X:将输入特征分为两部分,一部分直接传递(保留原始特征),另一部分经过X个残差块(如 CSP1_3 含 3 个残差块)。
  • Neck中使用 CSP2_X 模块:取消残差连接,改用单纯的卷积 + 拼接,更侧重特征融合而非特征深化。

改进3:用 SPPF(Spatial Pyramid Pooling - Fast) 替代 SPP(高效多尺度池化)
通过 3 个连续的 5×5 最大池化(带 padding)实现与 SPP 等价的多尺度感受野(1×1、5×5、9×9)。
输入→5×5 池化→5×5 池化→5×5 池化,将结果与原始输入拼接。

六、总结

版本Backbone 结构核心特点
YOLOv1自定义 CNN(24 层卷积 + 2 层全连接)首次将目标检测视为回归问题,结构简单但特征提取能力有限。
YOLOv2Darknet-19(19 层卷积 + 1 层全连接)引入批量归一化(BN)、锚框(Anchor),用卷积替代全连接,提升特征复用能力。
YOLOv3Darknet-53(53 层卷积)采用残差连接(Residual),加深网络深度,增强语义特征提取,支持多尺度输出。
YOLOv4CSPDarknet53引入 CSP 结构(跨阶段部分连接),减少计算量的同时保留梯度流,配合 Mish 激活函数。
YOLOv5CSPDarknet53(改进版)优化 CSP 结构(CSP1_X 用于主干,CSP2_X 用于 neck),加入 Focus 层(切片操作)提升初始特征提取效率。
版本Neck 结构核心特点
YOLOv1无独立 neck,直接由 backbone 输出特征仅用单尺度特征(448×448→7×7),小目标检测能力弱。
YOLOv2无独立 neck,通过 passthrough 层融合特征将高分辨率特征(13×13)与低分辨率特征(26×26)拼接,初步支持多尺度。
YOLOv3FPN(特征金字塔网络)自顶向下传递高层语义特征,与低层特征融合,输出 3 个尺度(13×13、26×26、52×52)。
YOLOv4SPP + PANet1. SPP 模块:多尺度池化(1×1、5×5 等)增强高层特征;2. PANet:在 FPN 基础上增加自底向上路径,强化低层细节传递。
YOLOv5PANet(改进版)+ 卷积融合沿用 PANet 双向路径,加入 SPPF(简化版 SPP)提升效率。
版本Head结构核心特点
YOLOv1全连接层输出直接预测 7×7 网格的边界框(每个网格 2 个框)、类别和置信度,无锚框。
YOLOv2卷积层输出(锚框预测)用卷积层替代全连接,基于锚框预测偏移量,支持端到端训练。
YOLOv3多尺度卷积预测每个尺度特征图通过 1×1 卷积输出预测(3 个锚框 / 网格),通道数为((4+1+n)×3)。
YOLOv4多尺度卷积预测(优化)沿用 YOLOv3 结构,引入 CIoU 损失、Mish 激活函数,提升边界框回归精度。
YOLOv5检测头与特征图解耦(可选)输出层与 v3/v4 类似,但支持 “解耦头”(分类和回归分支分离),提升预测效率。
版本核心优化策略
YOLOv1端到端回归思想;网格划分预测目标。
YOLOv2锚框机制;维度聚类(k-means)生成锚框;多尺度训练(320~608)。
YOLOv3多尺度检测;残差网络;分类用 softmax,支持多标签预测。
YOLOv4数据增强:Mosaic(4 图拼接)、CutMix、自对抗训练;损失函数:CIoU Loss;正则化:DropBlock;优化器:SGD + 余弦退火。
YOLOv5数据增强:Mosaic、RandomAffine(随机仿射);自适应锚框计算;优化器:Adam;工程化:模型轻量化(n/s/m/l/x 版本),支持动态输入尺寸。
http://www.dtcms.com/a/343333.html

相关文章:

  • AI模型部署 - 大语言模型(LLM)部署技术与框架
  • Android auncher3实现简单的负一屏功能
  • 基于YOLOv8-SEAttention与LLMs融合的农作物害虫智能诊断与防控决策系统
  • 运动数据采集如何帮助克里斯·凯尔飞跃迎面驶来的F1赛车
  • 基于IEEE-754浮点数格式的matlab仿真
  • Day24 目录遍历、双向链表、栈
  • Mac电脑 3D建模工具--犀牛Rhino
  • 【个人网络整理】NOIP / 省选 /NOI 知识点汇总
  • 视频孪生技术在城市政务数字化转型中的应用与价值探索
  • ES_映射
  • Nacos-10--认识Nacos中的Raft协议(Nacos强一致性的实现原理)
  • VirtualBox 安装 Ubuntu Server 系统及 Ubuntu 初始配置
  • 区块链联邦学习思路一
  • 14、软件实现与测试
  • 实践题:智能健康监测系统设计方案
  • centos下安装Nginx(搭建高可用集群)
  • 亚马逊产品排名提升策略:从传统运营到AI驱动的智能化突破
  • 《信任链:幽灵签名》
  • 近端策略优化 (PPO) 算法深度解析
  • 智能求职推荐系统
  • mfc140u.dll文件是什么?解决mfc140u.dll文件丢失的有效解决方法分享
  • 密码管理中明文密码与空密码的危害与预防
  • 民国悬爱网剧《春迟》腾讯独播,石雨晴担纲联合出品人与联合制片人
  • Redis 主从复制(重点理解流程和原理)
  • Windows下服务封装
  • mac电脑使用(windows转Mac用户)
  • Java多线程编程——基础篇
  • STM32输入捕获相位差测量技术详解(基于TIM1复位模式)
  • Nacos 深度指南:从入门到高可用集群部署
  • ES6 面试题及详细答案 80题 (01-05)-- 基础语法与变量声明