yolov1-yolov11进化史

发布于:2025-07-29 ⋅ 阅读:(31) ⋅ 点赞:(0)

yolov1

好 ,首先打开我的大脑,看看这一个礼拜听视频课都学了些什么东东

YOLOv1 首次提出将目标检测建模为一个单阶段端到端回归问题,不再依赖候选框生成(如 Selective Search 或 RPN),实现了检测框与类别的统一预测。它将输入图像划分为 S×S 的网格,每个网格预测多个边界框和类别概率。

主干网络是一个受 GoogLeNet 启发、设计简洁的 24 层卷积网络 + 2 层全连接(而不是标准的 VGG),直接提取整图特征。YOLOv1 没有 FPN 或 neck 结构,使用的是单尺度特征图进行预测。每个网格单元输出两个边界框(包含位置和置信度)和一个分类概率分布,实现了统一的检测头设计。

yolov2

  • 主干网络:Darknet-19

Anchor机制与输出结构:
不再直接回归目标坐标(YOLOv1 的方式),而是引入 Anchor(先验框)机制。每个 13×13 网格 cell 预测 5 个 Anchor。

每个 Anchor 输出:
边界框参数(tx, ty, tw, th)
目标置信度(objectness score)
类别概率(通过 softmax)
每个 cell 预测的维度是:
每格输出=5×(4+1+C)=5×(边框+置信度+类别)

边界框预测方式(相对 Anchor 回归):
中心点位置:
𝑏𝑥𝑏_𝑥bx=𝜎(𝑡𝑥𝑡_𝑥tx)+𝑐𝑥𝑐_𝑥cx,𝑏𝑦=𝑏_𝑦=by=𝜎(𝑡𝑦𝑡_𝑦ty)+𝑐𝑦𝑐_𝑦cy
(𝑡𝑥,𝑡𝑦):模型预测偏移
σ:sigmoid 激活,保证坐标落在当前 grid 内
(cx,cy):当前 grid 的位置
尺寸(宽高):
𝑏𝑤=𝑝𝑤⋅𝑒𝑡𝑤𝑏_ 𝑤=𝑝_𝑤⋅𝑒^{𝑡𝑤}bw=pwetw,
𝑏h=𝑝h⋅𝑒𝑡h𝑏_ℎ=𝑝_ℎ⋅𝑒^{𝑡ℎ}bh=pheth
(tw,tht_w, t_htw,th):预测值
(pw,php_w, p_hpw,ph):Anchor box 的宽高

Anchor box 的生成方式:(k-Means 聚类)
在 VOC 数据集上聚类出 5 组典型框形状
聚类目标是最小化每个真实框与最近 Anchor 的 IOU 差异
这样每个 Anchor 都有现实意义(不同尺寸/长宽比)

  • 检测头(Head):检测头由卷积层构成,保持全卷积结构,无需 FC 层。每个 grid cell 预测 5 个 Anchor,各自预测一个完整的检测向量。

  • neck:YOLOv2 没有 FPN,但使用了一个轻量级特征融合模块:将中间层(如 26×26×512)的特征映射通过 reshape(空间压缩 + 通道扩展)连接到最终层(13×13)。
    方式类似于 Inception/ResNet 的 skip connection。
    目标是引入更低层的空间细节信息,增强对小目标的检测能力。

多尺度训练(Multi-scale Training)
每隔 10 次迭代随机调整输入图像尺寸:
输入尺寸∈{320,352,…,608},步长为32
所有尺寸能被 32 整除,保证下采样到 13×13。
增强模型对不同分辨率下物体尺度变化的鲁棒性。

训练与损失函数:
YOLOv2 的 loss function 包括三部分:
边界框坐标误差(MSE)
置信度误差(是否包含目标)
类别误差(softmax 交叉熵)
改进点:
使用 IOU 对 Anchor 匹配,而非中心点重合判断
使用 softmax 分类损失(区别于 YOLOv1 的多标签 sigmoid,但是后面yolov3为了适应复杂多标签、多目标检测场景又改回来了)

yolov3

  • Backbone(特征提取网络):使用改进的 Darknet-53 代替 YOLOv2 中的 Darknet-19

  • 共 53 层卷积 + 残差结构,与 ResNet 相似;

  • 使用 3×3 和 1×1 卷积核交替堆叠;

  • 所有卷积层均后接 BN + LeakyReLU;

  • 整个网络参数量约 62M,计算量高于 YOLOv2,但仍比 ResNet-101 快

  • Neck(多尺度特征融合):引入 **FPN(Feature Pyramid Network)**思想,实现多尺度检测

  • Head(预测模块):在三个尺度(13×13, 26×26, 52×52)分别进行检测,并预测 bounding box、objectness、class 置信度。
    类别预测:独立 sigmoid + 多标签二分类损失

Bounding Box 预测机制
YOLOv3 沿用 YOLOv2 的 anchor-based 机制

yolov4

yolov3之后就不是yolo原作者了,v4没有什么原创的设计,但是做了相当多的对比实验,把很多当时有效果的模块或是创新都用上了

  • Backbone:CSPDarknet53

  • 加入 CSP(Cross Stage Partial Network) 结构:
    将特征图分成两部分,一部分直接传递,一部分进入残差模块,最后融 合;这样减少重复计算,防止梯度信息冗余,加快速度、提升准确率;

  • 在前几层使用 Mish 激活函数(训练更稳定)。

  • Neck:SPP + PANet

  • SPP(Spatial Pyramid Pooling)
    在主干输出后添加一个 SPP 模块(包含 1x1, 5x5, 9x9, 13x13 池化核);
    用于扩大感受野并提升对大物体的识别能力;
    不增加参数量和计算量。

  • PANet(Path Aggregation Network)
    替代 YOLOv3 中的 FPN;
    自底向上的路径增强了低层语义信息的传播;
    更好地融合了不同尺度的特征图。

  • Head:与 YOLOv3 相同
    在 3 个尺度(13x13、26x26、52x52)进行 anchor-based 的边框预测;
    每个尺度分配 3 个 anchors;
    预测的仍然是 4 个 bbox + 1 objectness + 80 类别。

Loss 与正负样本分配
使用 CIOU Loss 代替 YOLOv3 中的 IOU/MSE:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
更好地考虑了中心点距离、重叠面积、宽高一致性。
同时改进了 anchor 匹配机制,使正负样本分配更合理(避免大量负样本主导损失)。

  • 训练技巧与数据增强(Bag of Freebies & Specials)
    YOLOv4 引入了大量实用训练 trick,大致分为两类:

  • Bag of Freebies(训练增强,不增加推理开销)
    Mosaic Augmentation:将 4 张图像拼接,极大提高检测鲁棒性;
    MixUp / CutMix:图像融合策略,改善泛化能力;
    DropBlock 正则化:比 Dropout 更适合 CNN;
    Label Smoothing:平滑 one-hot 标签,避免过拟合;
    Cosine Annealing 学习率调度;
    EMA 模型权重滑动平均;
    Self-adversarial training(SAT):先扰动图像再训练,增强对抗鲁棒性。

  • Bag of Specials(增加一点计算,提升表现)
    CSPNet
    Mish 激活函数
    SPP
    PANet
    CIOU Loss

yolov5

项目 YOLOv4 YOLOv5
实现语言 C/C++ + Darknet Python + PyTorch(工程更友好)
训练配置 手动配置 .cfg 文件 使用 YAML 文件 + Python 配置
ONNX 导出支持 依赖手动转换 原生支持 ONNX / TensorRT 导出
模型尺寸(v5s) 比 YOLOv4-tiny 还要小 轻量化版本(v5s)仅几 MB
模型系列 单一 YOLOv4 模型 v5s, v5m, v5l, v5x 多种轻重模型可选
训练工具 不含完整 pipeline 包含训练脚本、验证、导出、推理一整套工具
模块 YOLOv4 YOLOv5(改进)
Backbone CSPDarknet53 + Mish CSPDarknet + SiLU(效率更高)
Neck FPN + PAN + SAM PAN(轻量)
Head 固定 head + GIoU loss 模块化 head + CIoU loss
工程 Darknet 训练需 C/C++ 编译 全 PyTorch 实现,支持导出/部署/迁移学习
模型管理 .cfg 配置手动 YAML 配置 + CLI 脚本 + 多模型支持
  • Focus模块
    结构如下:
    将 640x640x3 图像切成 4 份:左上、右上、左下、右下
    拼接成 320x320x12
    再做 Conv(3x3) 降维为 32 通道

由于部署容易出问题,这个模块在后面v8 和 v11中直接用步长为2的卷积代替了

  • C3 模块
    CSPBlock 改进 → 多个 Bottleneck + Shortcut + 分支残差结构
    在这里插入图片描述

激活函数:SiLU(x) = x * sigmoid(x)
相比 YOLOv4 的 Mish 激活,数值稳定性更高、收敛更快

Mish 计算复杂,不利于部署
SiLU 是 PyTorch 原生支持,速度快,兼容 ONNX

  • SPPF 模块:YOLOv5 改进了 YOLOv4 中的 SPP 模块
    使用 1 个 5x5 MaxPool 重复堆叠 3 次
    然后 concat 输出,提取不同感受野信息

优化了PANet的实现,PANet + SAM - > PANet + C3,去掉注意力提升速度

yolov8

项目 YOLOv5 YOLOv8
检测类型 Anchor-based Anchor-free(预测中心点 + box)
框架基础 PyTorch,模块化 PyTorch,完全模块化,清晰分层
应用范围 检测、分割 检测、分割、关键点、分类、多标签支持
模型命名 v5s/m/l/x v8n/s/m/l/x(更广泛轻重权衡)

YOLOv8 Backbone 使用了:
C2f 模块(替代 C3)
更标准的 BN + SiLU 顺序
更小的模型参数量,但保留高表达力

项目 YOLOv5 YOLOv8
回归损失 GIoU / DIoU / CIoU Distribution Focal Loss(DFL)
分类损失 BCE BCE + Quality Focal Loss(QFL)
匹配策略 静态匹配(基于 IoU) 动态匹配(基于 cost)

引入 DFL、QFL 后:
提高小目标回归精度
训练更平稳
提高精度(尤其是在大目标和遮挡物上)
在这里插入图片描述

yolov11

引入 Transformer backbone(增强全局上下文建模),对小目标识别尤为有效。

C2PSA 模块(Cross-Stage Partial + Position-sensitive Spatial Attention)载入部分空间注意机制,改善对细节与遮挡物体的识别能力

C3K2 结构替代 C2f / C3
C3K2 block:基于小卷积(3×3)构建的改进 CSP 模块,融合多个 Bottleneck,更轻量且提升表达能力。

SPFF 模块(优化版 SPPF)
沿用并优化 SPPF 模块(Spatial Pyramid Pooling Fast),加强多尺度特征接收野,尤其小目标表现更好。

Dynamic Head(动态头设计)
支持 输入复杂度自适应的动态 head 结构,分配计算资源智能,对富细节图像可提升精度,简化重复处理


网站公告

今日签到

点亮在社区的每一天
去签到