【学习笔记】YOLO

部署运行你感兴趣的模型镜像

        YOLO(You Only Look Once)是目标检测领域下的一种著名算法。

一、理解YOLO

        正如YOLO的名字一样,“你只需看一次”,YOLO就可以实时告诉你画面中所有目标的位置和类别。想要理解这种识别的优势,我们先来讨论YOLO之外的目标检测的算法。

TOOL 1:滑动窗口

        把画面分为许多格子,一个一个仔细检查过去。这种方法速度慢、效率低,相信不用解释大家也能理解。

TOOL 2:两阶段检测(如R-CNN系列)

        第一阶段:找出可能包含目标的区域;

        第二阶段:对这些区域进行分类

        这种方法精度高,但依旧速度慢、效率低,无法实时处理

我们可以发现,YOLO前的算法总是无法快速识别、实时处理,而YOLO很好的解决了这些问题。

TOOL 3:YOLO

        YOLO革命性地将目标检测转化为回归问题

        YOLO首先将输入的图片划分为一个网格,对于每个网格单元,YOLO会预测:
1.边界框(Bounding Box):

(x——目标中心点的x坐标,y——目标中心点的y坐标,w——目标的宽度,h——目标的高度)

2.置信度(Confidence):模型有多确定这个框里有目标

3.类别概率(Class Probability):如果框里有目标,那么它是什么类别

二、YOLO工作原理

整体流程

        假设我们要检测一张图片中的猫狗

1.输入处理

①将图片缩放到固定尺寸(如640*640)

②输入到卷积神经网络(CNN)

注:卷积神经网络(CNN)是一种深度学习模型,设计灵感来源于生物的视觉系统,详细解释

2.特征提取

CNN提取图片的特征(轮廓、颜色、纹理等)

3.网格划分与预测

①将特征图划分为网格(如13*13)

②每个网格预测:是否有目标、目标的边界(边界框)、目标的类别(猫、狗等)

4.后处理(NMS)

由于同一个目标可能被多个网格检测到,YOLO使用NMS(非极大值抑制)来去除重复的检测框,只保留最精准的结果

注:NMS非极大值抑制详细解释

边界框预测

YOLO预测的边界框包含四个值:

        x,y:目标中心点相对于网格单元的坐标(0~1)

        w,h:目标宽度和高度相对于整个图片的比例(0~1)

For Example:如果图片是640*640像素的,一个网格预测(x,y,w,h)=(0.5,0.3,0.2,0.15),那么目标中心在(640*0.5,640*0.3)=(320,192),目标宽640*0.2=128像素,高640*0.15=96像素

置信度计算

置信度=P(目标存在)*IOU(预测框与真实框的重叠度),置信度越高说明检测越可靠。

类别预测

对于每个网格,YOLO会预测所有类别的概率:最终类别=置信度*最大类别概率

YOLO的损失函数

YOLO通过最小化损失函数来训练模型

损失函数包含:

1.坐标损失:预测的边界框位置与真实位置的误差

2.置信度损失:有目标的网格预测置信度应该接近1,无目标的网格预测置信度应该接近0

3.类别损失:预测的类别概率与真实类别的误差

三、YOLO详细计算原理

1 前向传播计算

1.1 输入处理

假设输入图片尺寸为416*416*3(宽*高*RGB通道),图片经过卷积神经网络逐层提取特征:

输入:416×416×3
  ↓ Conv + BN + LeakyReLU
  ↓ 多次下采样(stride=2)
  ↓ ...
输出特征图:13×13×1024

卷积操作:输出 = 卷积(输入,权重) + 偏置

批量归一化:BN(x) = γ * (x - μ) / √(σ² + ε) + β

激活函数:LeakyReLU(x) = max(0.1x, x)

1.2 网格预测计算

以YOLOv3为例,使用13*13网格,每个网格预测3个锚框,每个锚框预测:

边界框:4个值(x,y,w,h)

置信度:1个值(confidence)

类别概率:c个值(c为类别数),如COCO数据集c=80

每个网格的输出维度:

输出 = 3 × (4 + 1 + 80) = 3 × 85 = 255

整个特征图的输出:

输出张量形状:13 × 13 × 255

1.3 边界框坐标计算

YOLO预测的是相对坐标,需要转换为绝对坐标

预测值:

tx, ty, tw, th:网络直接输出的原始值

坐标转换公式(YOLOv3):

bx = σ(tx) + cx    # x坐标
by = σ(ty) + cy    # y坐标
bw = pw × e^(tw)   # 宽度
bh = ph × e^(th)   # 高度

σ(x) = 1 / (1 + e^(-x)):Sigmoid函数,将值限制在(0,1)

cx, cy:当前网格单元左上角的坐标(如网格(5,3)对应cx=5, cy=3)

pw, ph:锚框的宽度和高度(预定义的先验框尺寸)

bx, by:目标中心点相对于网格的坐标(0-1之间)

bw, bh:目标宽度和高度相对于锚框的比例

转换为图片绝对坐标:

绝对x = (bx + cx) × (图片宽度 / 网格数)
绝对y = (by + cy) × (图片高度 / 网格数)
绝对宽度 = bw × pw × (图片宽度 / 网格数)
绝对高度 = bh × ph × (图片高度 / 网格数)

1.4 置信度计算

置信度表示“这个框里有目标,且预测准确”的置信程度:

confidence = P(目标存在) × IOU(预测框, 真实框)

在推理时,网络直接输出置信度值(经过Sigmoid激活):

confidence = σ(tconf)

其中 tconf 是网络输出的原始值

1.5 类别概率计算

对于每个类别,网络输出一个logit值,然后通过Softmax转换为概率:

类别logits: [t1, t2, ..., tC]  # C个类别的原始输出
类别概率: P(class_i) = e^(ti) / Σ(e^(tj))  # Softmax

最终类别得分:

类别得分 = confidence × P(class_i)

选择得分最高的类别作为预测结果

*1.6 Softmax和Sigmoid

在YOLOv1中,Softmax用于单标签分类的类别概率计算,特点是输出为K维概率分布(K为类别数),每个元素在0~1之间且所有元素之和必为1,单个类别的梯度会受所有类别输出的影响;

Sigmoid用于置信度的计算,特点是输出的每个元素独立且在0~1之间,没有求和约束,每个类别的梯度独立运算,不受其他类别影响,不易因类别数过多而导致梯度稀释(YOLOv3及以后,Sigmoid取代Softmax,用于多标签分类的类别概率计算)

2 损失函数计算(YOLOv1)

YOLO的损失函数由5个部分组成,以YOLOv1的损失函数为例

2.1 损失函数公式

L = λcoord × Lcoord + Lconf_obj + λnoobj × Lconf_noobj + Lclass

λcoord = 5:坐标损失权重(因为坐标预测很重要)

λnoobj = 0.5:无目标置信度损失权重(降低背景的权重)

2.2 坐标损失(Lcoord)

Lcoord = Σ[1(obj) × ((x - x̂)² + (y - ŷ)² + (√w - √ŵ)² + (√h - √ĥ)²)]

1(obj):指示函数,如果网格有目标则为1,否则为0

x, y, w, h:真实边界框坐标

x̂, ŷ, ŵ, ĥ:预测边界框坐标

对w和h取平方根为了让损失函数对不同尺寸目标的误差惩罚更均衡(大目标的w,h数值大,直接计算绝对误差时,小目标的相对误差容易被忽略,取平方根后大目标尺寸被“压缩”,小目标尺寸被“放大”,更符合人眼对误差的敏感度,如小目标差1个像素影响大,大目标差一个像素影响小)

2.3 有目标置信度损失(Lconf_obj)

Lconf_obj = Σ[1(obj) × (C - Ĉ)²]

C:真实置信度

Ĉ:预测置信度(Sigmoid后的值)

2.4 无目标置信度损失(Lconf_noobj)

Lconf_noobj = Σ[1(noobj) × (C - Ĉ)²]

1(noobj):指示函数,如果网格无目标则为1

C = 0:无目标时真实置信度为0

2.5 类别损失(Lclass)

Lclass = Σ[1(obj) × Σ(p(c) - p̂(c))²]

p(c):真实类别概率(one-hot编码,正确类别为1,其他为0)

p̂(c):预测类别概率(Softmax后的值)

举个栗子:假设三个类别——猫,狗,鸟

  • 真实类别:猫(one-hot: [1, 0, 0])
  • 预测概率:[0.7, 0.2, 0.1]

计算:Lclass = (1-0.7)² + (0-0.2)² + (0-0.1)² = 0.09 + 0.04 + 0.01 = 0.14

2.6 总损失计算

假设一个13*13的网格,其中:

  • 有目标的网格:10个
  • 无目标的网格:159个

简化计算(假设每个有目标网络的损失相等)


Lcoord = 10 × 0.001453 = 0.01453
Lconf_obj = 10 × 0.0225 = 0.225
Lconf_noobj = 159 × 0.01 = 1.59
Lclass = 10 × 0.14 = 1.4

总损失:
L = 5 × 0.01453 + 0.225 + 0.5 × 1.59 + 1.4
  = 0.07265 + 0.225 + 0.795 + 1.4
  = 2.49265


3.反向传播计算(YOLOv1)

训练时,通过反向传播更新网络参数

3.1 梯度计算

对于损失函数 L ,我们需要计算每个参数的梯度(本质是损失函数对模型参数的偏导数):

∂L/∂w = ∂L/∂y × ∂y/∂w

上式运用链式法则:

损失函数L对模型参数w的梯度 = 损失函数L对模型输出y的梯度 × 模型输出y对模型参数w的梯度

3.2 坐标损失(Lcoord)的梯度

仅对正样本(1(obj)=1)计算

∂Lcoord/∂x̂ = 2 (x̂ - x)

∂Lcoord/∂ŷ = 2 (ŷ - y)

∂Lcoord/∂ŵ = (√ŵ - √w) / √ŵ

∂Lcoord/∂ĥ = (√ĥ - √h) / √ĥ

3.3 置信度损失(Lconf_obj / Lconf_noobj)的梯度

正样本

∂Lconf_obj/∂Ĉ = 2 (Ĉ - C)

负样本(真实置信度 C = 0)

∂Lconf_noobj/∂Ĉ = 2 (Ĉ - C)

3.4 类别损失(Lclass)的梯度

∂Lclass/∂p̂(c) = 2 (p̂(c) - p(c))

3.5 卷积层参数(权重w,偏置b)的梯度

全连接层:前向运算为 y=w⋅x+b (x 是输入,y 是输出),梯度为 

∂L/∂w = ∂L/∂y · xT

∂L/∂b = ∂L/∂y

卷积层:前向运算为 y=x∗w+b (*为卷积计算),梯度为

∂L/∂w = xT ∗ δ (δ = ∂L/∂y 是上层传递的梯度 )

∂L/∂b = ΣΣδ (在空间维度和批量维度上求和)

3.6 参数更新

使用梯度下降更新参数:

w_new = w_old - α × ∂L/∂w

其中 α 是学习率(如0.001)

四、YOLO版本演进(YOLOv1~YOLO12)

>> YOLOv1(2016)

核心架构:24 层卷积 + 2 层全连接,将图像划分为 S×S 网格,每个网格预测 B 个边界框 + 类别概率

损失函数:采用 MSE 损失,直接回归坐标、置信度和类别概率,无锚框(Anchor-Free)

核心局限

  1. 小目标、密集目标检测效果差(每个网格仅一个框负责检测)
  2. 坐标回归对尺度敏感(仅用√w/√h 优化,未考虑 IoU)
  3. 全连接层导致泛化能力弱,对输入尺寸限制严格(448*448)

>> YOLOv2(2017)

核心改进

  1. 引入锚框(Anchor),放弃全连接层,用卷积层预测锚框偏移量,支持多尺度训练
  2. 添加 Passthrough 层,融合浅层高分辨率特征,提升小目标检测能力
  3. 损失函数优化:用交叉熵损失替代 MSE 计算置信度和类别损失,坐标回归用相对偏移(x/y 相对于网格左上角)
  4. 工程优化:采用 Darknet-19 骨干网络(19 层卷积),比 v1 的 24 层卷积更快;加入批量归一化(BN),提升训练稳定性

>> YOLOv3(2018)

核心改进

  1. 多尺度检测:输出 3 个不同尺度特征图(13×13、26×26、52×52),分别对应大、中、小目标
  2. 骨干网络升级:Darknet-53(53 层卷积),引入残差连接(Residual),解决深层网络梯度消失问题
  3. 用 Sigmoid 替代 Softmax,支持多标签分类,v1/v2 仅支持单标签
  4. 每个尺度预设 3 个锚框(共 9 个),置信度损失仍用交叉熵,坐标损失隐含 IoU 优化

>> YOLOv4(2020)

核心改进

  1. 骨干网络增强:CSPDarknet-53,引入 CSP(Cross Stage Partial)结构,减少计算量同时保留特征信息
  2. 颈部(Neck)优化:添加 SPP(Spatial Pyramid Pooling)层,增强对不同尺度目标的适应性;用 PANet 替代 v3 的 FPN,提升特征融合效率
  3. 训练策略:Mosaic 数据增强(4 张图拼接)、标签平滑、CIoU 损失(替代传统 IoU,优化坐标回归)
  4. 激活函数:用 Mish 激活替代 Leaky ReLU,提升梯度流动

>> YOLOv5(2020)

核心改进

  1. 架构模块化:将网络拆分为 Input、Backbone、Neck、Head,支持灵活调整
  2. 骨干网络:CSPDarknet-53 的轻量化变体(如 C3 模块替代 CSP 模块),提供 n/s/m/l/x5 个尺度模型(从轻量化到高精度)
  3. 训练与推理优化:自适应锚框计算(自动匹配数据集)、自适应图片缩放(减少黑边)、Warmup+Cosine LR 调度器,推理速度极快
  4. 损失函数:CIoU/GIoU/DIoU 可选,类别损失用交叉熵,置信度损失支持 Focal Loss(解决正负样本不平衡)

侧重工程落地,轻量化优化更彻底,推理速度优于v4

>> YOLOv6(2022)

核心改进

  1. 骨干网络:EfficientRep,用 RepVGG 的重参数化技术,训练时多分支提升精度,推理时融合为单分支提速
  2. 颈部:Rep-PAN,延续 PANet 结构,加入重参数化卷积,平衡速度与特征融合效果
  3. 头结构:Decoupled Head(解耦分类和回归头),分别优化类别和坐标预测,提升精度
  4. 损失:SIoU 损失(进一步优化坐标回归的方向一致性),分类损失用 Varifocal Loss

速度大幅提升,工业级部署优化更极致

>> YOLOv7(2022)

核心改进

  1. 骨干网络:ELAN(Enhanced Efficient Layer Aggregation),通过堆叠不同尺度卷积,提升特征提取能力
  2. 头结构:E-ELAN 和 MP-ELAN 模块,增强特征融合和多尺度适应能力;支持耦合 / 解耦头切换
  3. 训练策略:Mosaic-9(9 张图拼接)、ReMix 数据增强,动态标签分配(Task-Aligned Assigner)
  4. 损失:CIoU/DIoU/SIoU 可选,分类损失用 Focal Loss,支持自蒸馏训练(提升小模型精度)

更侧重高精度,学术性能优于v6

>> YOLOv8(2023)

核心改进

  1. 架构统一:支持检测、分割、姿态估计、实例分割等多任务,共享骨干和颈部
  2. 骨干网络:C2f 模块(替代 v5 的 C3),增强特征提取和梯度流动,兼顾速度与精度
  3. 头结构:Decoupled Head+Anchor-Free(可选 Anchor-Based),默认用 Anchor-Free 减少锚框调参成本
  4. 训练与工具链:Ultralytics 框架支持自动训练、可视化、部署,支持 TensorRT/ONNX 等多格式导出,损失用 CIoU+Focal Loss

>> YOLOv9(2024)

核心改进

  1. 提出可编程梯度信息(PGI),自适应建模特征梯度信息
  2. 设计 GELAN 结构,优化网络宽度与深度,提升训练稳定性
  3. 改进路径聚合方式,充分利用多尺度特征
  4. 新增新型损失函数与正则化,强化小目标检测效果

>> YOLOv10(2024)

核心改进

  1. 取消 NMS 后处理,通过一致性双重分配策略实现单目标唯一预测
  2. 分类头采用深度可分离卷积,参数量减少约 60%
  3. 引入空间 - 通道解耦下采样机制,减少计算冗余
  4. 骨干网络加入深度可分离大核卷积,提升感受野

>> YOLOv11(2025)

核心改进

  1. 骨干采用 C3K2 模块 + C2PSA 空间注意力模块,增强特征提取
  2. 用深度可分离卷积优化分类分支,提升效率
  3. 引入可编程梯度信息(PGI)和任务对齐标签分配
  4. 参数量优化,v11m 较 v8m 参数减少 22% 且 mAP 更高

>> YOLOv12(2025)

核心改进

  1. 首次摒弃 CNN,采用纯 Vision Transformer 作为主干
  2. 设计区域注意力模块(A²),计算量减少 41%
  3. 提出 R - ELAN 结构,解决注意力模型梯度消失与训练不稳定问题
  4. 集成 FlashAttention 技术,提升 GPU 显存利用效率

五、结语

        其实使用YOLO完全没有门槛,因为你即使不懂YOLO的框架结构和算法,也能照着教程训练和使用YOLO模型。但是当你真正实打实地开始训练YOLO、使用YOLO时,你会不停地产生各种疑问,我认为使用YOLO的同时去尝试理解YOLO的结构和算法,能够更好的帮助我们处理模型训练中遇到的各种问题。

        学习本身就是一个知行合一的过程,学习YOLO不能只是纸上谈兵,也不能只是照猫画虎。自己尝试着训练一个YOLO模型,会更好地帮你理解本篇文章的内容

从零开始训练自己的YOLO模型https://blog.youkuaiyun.com/weixin_44779079/article/details/145828183?spm=1001.2014.3001.5506

您可能感兴趣的与本文相关的镜像

Yolo-v5

Yolo-v5

Yolo

YOLO(You Only Look Once)是一种流行的物体检测和图像分割模型,由华盛顿大学的Joseph Redmon 和Ali Farhadi 开发。 YOLO 于2015 年推出,因其高速和高精度而广受欢迎

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值