YOLO系列学习笔记:从YOLOv1到YOLOv3的演进之路

前言

最近花了几天时间系统学习了YOLO(You Only Look Once)系列的三个经典版本:YOLOv1、YOLOv2、YOLOv3。作为目标检测领域里程碑式的工作,YOLO系列以其"端到端、速度快"的特点深受工业界喜爱。这篇博客记录一下我的学习心得,梳理三个版本的核心思想和改进点,希望能帮到同样在学习的同学。

一、YOLOv1:开山之作

1.1 核心思想

YOLOv1最大的创新在于把目标检测当作回归问题来处理。此前的R-CNN系列都是"候选区域+分类"的两阶段方法,而YOLO直接用一个CNN网络,输入整张图片,输出边界框坐标和类别概率。一句话概括:You Only Look Once------看一眼就知道图里有什么、在哪里。

1.2 网络结构

  • 输入:448×448×3
  • 主干:类似GoogLeNet的24层卷积 + 2层全连接
  • 输出:7×7×30 的张量

1.3 输出解读(重点)

把图片划分成 7×7 的网格,每个网格负责预测:

  • 2个边界框,每个框包含5个值:(x, y, w, h, confidence)
  • 20个类别概率(VOC数据集)

所以每个grid cell输出:2×5 + 20 = 30维,整张图输出:7×7×30。

⚠️ 注意:confidence = P(object) × IoU,表示这个框里有没有物体以及框得准不准。

1.4 损失函数

YOLOv1的损失函数是均方误差,由三部分组成:

  • 坐标损失:对负责预测物体的框计算 (x,y,w,h) 误差,w、h开根号是为了缓解大小框的敏感度差异
  • 置信度损失:分有物体和无物体两种情况,无物体时权重较小(λ_noobj=0.5)
  • 分类损失:20类的分类误差

1.5 优缺点

优点:

  • 速度快,base版45 FPS,fast版155 FPS
  • 全局视野,背景误检率低

缺点:

  • 每个格子只能预测一个类别,对小目标和密集目标效果差
  • 定位精度不如两阶段方法
  • 7×7网格比较粗糙

二、YOLOv2:更快更强

YOLOv2(也叫YOLO9000)主要解决v1定位不准、召回率低的问题。

2.1 主要改进

改进点 说明
Batch Normalization 每个卷积层后加BN,去掉Dropout,mAP提升2%
高分辨率分类器 预训练用448×448,适应检测任务
Anchor Boxes 借鉴Faster R-CNN,用先验框代替直接回归
K-means聚类 聚类得到更适合数据集的anchor尺寸
Darknet-19 新的主干网络,19个卷积层
多尺度训练 每10个batch换一次输入尺寸(320~608)
细粒度特征 passthrough层融合浅层特征,提升小目标检测

2.2 Anchor Boxes 与 K-means

YOLOv1直接预测框的坐标,而v2改为预测相对于anchor的偏移量。Anchor的尺寸不是手工设定,而是对训练集所有GT框做K-means聚类(距离用1-IoU),聚出5个最合适的anchor。

2.3 输出解读

  • 输入:416×416
  • 输出:13×13×(5×(5+20)) = 13×13×125
  • 每个grid cell预测5个anchor,每个anchor有5个值+20类概率

2.4 Darknet-19结构

结构类似VGG,但用了大量3×3卷积和1×1卷积降维,19个卷积层+5个maxpool,精度与速度兼顾。

三、YOLOv3:集大成者

YOLOv3是YOLO系列真正"出圈"的版本,工业界应用极广。

3.1 核心改进

  • 新主干网络 Darknet-53:引入残差结构,53个卷积层,比ResNet-152快2倍且精度相当
  • 多尺度预测(FPN思想) :在3个不同尺度上预测
    • 13×13:检测大物体
    • 26×26:检测中等物体
    • 52×52:检测小物体
  • 用Logistic代替Softmax:支持多标签分类(一个物体可能属于多个类别)
  • 9个anchor:每个尺度3个,也是K-means聚出来的

3.2 网络结构

text 复制代码
输入 416×416
    ↓
Darknet-53 提取特征
    ↓
三个分支(类似FPN):
  - 13×13 → 上采样 → 与26×26特征融合 → 预测
  - 26×26 → 上采样 → 与52×52特征融合 → 预测

每个尺度的输出:13×13×3×(5+80)(COCO 80类)。

3.3 损失函数

YOLOv3的损失由三部分组成:

  • 定位损失:还是用MSE(后续版本改成CIoU)
  • 置信度损失:二分类交叉熵
  • 分类损失:二分类交叉熵(多标签)

3.4 性能对比

模型 mAP 速度
YOLOv1 63.4 45 FPS
YOLOv2 76.8 67 FPS
YOLOv3-416 55.3 (COCO) 35 FPS

注:不同数据集指标不可直接比较,仅作参考。

四、三个版本对比总结

维度 YOLOv1 YOLOv2 YOLOv3
主干网络 类GoogLeNet Darknet-19 Darknet-53
预测方式 直接回归 Anchor Anchor + 多尺度
网格划分 7×7 13×13 13/26/52
分类 Softmax Softmax Logistic
小目标 差 一般 好
多尺度 ❌ 训练时 预测时

演进主线:

  • v1:开创"单阶段检测"路线
  • v2:引入Anchor、BN、聚类,全面提升精度
  • v3:多尺度 + 残差主干,成为工业标配

五、学习心得

  • 理解YOLO的关键是理解输出张量的含义。看懂13×13×125或13×13×255代表什么,基本就懂一半了。
  • Anchor机制是v2之后的重点。要理解K-means聚类怎么选anchor,以及为什么用相对偏移而不是绝对坐标。
  • 多尺度预测是v3的精髓。小目标检测能力的大幅提升主要靠这个。
  • 看论文时配合代码(如ultralytics或darknet)一起看,理解会深刻很多。

参考文献

  1. Redmon J, et al. You Only Look Once: Unified, Real-Time Object Detection. CVPR 2016.
  2. Redmon J, Farhadi A. YOLO9000: Better, Faster, Stronger. CVPR 2017.
  3. Redmon J, Farhadi A. YOLOv3: An Incremental Improvement. arXiv 2018.
相关推荐
启观川14 小时前
数据结构与算法-第 3 章 常用算法-贪心算法
数据结构·笔记·python·算法·贪心算法
ab12376815 小时前
Spring WebSocket(STOMP)
笔记·websocket·springboot·stomp
Xudde.16 小时前
PwnLab: init 靶机渗透测试(Vulnhub Writeup)
笔记·学习·安全·web安全
2402_8462957716 小时前
eDNA常用的基因片段
笔记
AI视觉网奇17 小时前
3Dconnexion 按照笔记
笔记
海海不掉头发17 小时前
软件开发方法第七周笔记_CSDN博客
人工智能·笔记·学习·软件工程
Vae_Mars17 小时前
幂等性学习笔记
笔记·学习·wpf
FL162386312917 小时前
塔吊下方站人检测数据集VOC+YOLO格式1049张1类别
人工智能·深度学习·yolo
Xudde.17 小时前
HackMe 靶机渗透测试(Vulnhub Writeup)
笔记·学习·安全·web安全