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=pw⋅etw,
𝑏h=𝑝h⋅𝑒𝑡h𝑏_ℎ=𝑝_ℎ⋅𝑒^{𝑡ℎ}bh=ph⋅eth
(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 结构,分配计算资源智能,对富细节图像可提升精度,简化重复处理