前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >从 YOLOv1 到 YOLOv2:目标检测的进化之路

从 YOLOv1 到 YOLOv2:目标检测的进化之路

作者头像
机器学习司猫白
发布2025-03-15 21:24:11
发布2025-03-15 21:24:11
9100
代码可运行
举报
文章被收录于专栏:机器学习实战机器学习实战
运行总次数:0
代码可运行

引言

你有没有想过,当你用手机拍一张照片,里面的人、车、狗是怎么被自动识别出来的?这背后靠的就是目标检测技术。目标检测是计算机视觉中的一个重要领域,它不仅要回答“图片里有什么”,还要告诉你“这些东西在哪里”。今天,我们要聊的是目标检测领域的两个经典模型:YOLOv1YOLOv2。它们的名字听起来很酷——“You Only Look Once”(你只看一次),不仅名字帅,性能也很强。这篇博客将带你走进 YOLO 的世界,聊聊它们的原理、区别,以及那些听起来高大上的概念,比如 mAP、FPS、IoU 等。我们会尽量用大白话解释,并在后面深入讲解数学公式和代码实现,让你轻松看懂!


第一部分:YOLOv1——目标检测的“快男”

YOLOv1 的诞生

YOLOv1 是 2015 年由 Joseph Redmon 等人提出的,它最大的特点就是“快”。在它之前,很多目标检测模型(比如 R-CNN 系列)需要先找“可能有东西”的区域(region proposal),再去分类,这样速度很慢。而 YOLOv1 说:“我不要两步走,我要一步到位!”它把目标检测看成一个回归问题,直接从整张图片预测出物体的位置和类别。

YOLOv1 的原理

想象你在玩一个游戏,面前有一张网格地图,地图被分成 7×7 的小格子。你的任务是:每个格子告诉我,里面有没有东西(比如人、车、猫),如果有,它是什么,在格子里的具体位置是哪儿。YOLOv1 就是这么干的。它把图片分成 S×S 的网格(默认是 7×7),每个格子负责预测:

  1. 有没有物体(用一个概率值表示,叫做“置信度”)。
  2. 物体的边界框(bounding box,用 4 个数字表示:中心点 x、y 坐标,宽度 w,高度 h)。
  3. 物体是什么类别(比如 20 个类别,就预测 20 个概率值)。

每个格子可以预测 B 个边界框(YOLOv1 里 B=2),所以一张图片总共预测 S×S×B 个边界框。最终,模型会输出一个巨大的张量(tensor),比如 7×7×30(后面会解释为什么是 30)。

网络架构

YOLOv1 的网络灵感来自 GoogleNet,用了 24 个卷积层(卷积层就像是图片的“特征提取器”)和 2 个全连接层(全连接层负责把特征整合起来做预测)。输入一张 448×448 的图片,经过层层卷积,最后输出 7×7×30 的张量。为什么是 30 呢?因为每个格子预测 2 个边界框(每个框有 5 个数:x, y, w, h + 置信度),加上 20 个类别的概率,所以是 2×5 + 20 = 30。

损失函数详解

损失函数是模型的“老师”,告诉它预测得好不好。YOLOv1 的损失函数有三部分,我们来详细拆解一下:

别被公式吓到,我们拆解开来看。

通俗解释

简单说,YOLOv1 的损失函数就像一个评分表:框的位置准不准(定位),有没有物体猜得对不对(置信度),类别分得清不清楚(分类)。通过调整权重(𝜆coordλcoord​ 和 𝜆noobjλnoobj​),让模型更关注框的位置,而不是过多惩罚没物体的格子。

优点与缺点
  • 优点:快!因为只看一次图片,FPS(每秒帧数)能达到 45,比 R-CNN 快得多。
  • 缺点:准度不够高。因为每个格子只能预测 2 个框,小物体或密集物体容易漏掉,mAP(平均精度均值)只有 63.4% 左右。

第二部分:YOLOv2——更快更准的升级版

YOLOv2 的诞生

YOLOv1 虽然快,但精度不高,漏检多。于是 2016 年,团队推出了 YOLOv2(也叫 YOLO9000),目标是“更快、更准、能识别更多东西”。YOLOv2 不仅改进了架构,还能识别 9000 种物体,简直是“全能选手”。

YOLOv2 的原理

YOLOv2 保留了“只看一次”的核心思想,但做了很多改进。比如,它不再固定用 7×7 网格,而是引入了锚框(anchor boxes)。锚框是什么?想象你在超市买东西,每个货架上有不同形状的盒子,YOLOv2 会先猜一些“标准盒子”(锚框),然后根据这些盒子微调出真实的边界框。这样,每个格子可以预测更多框(默认 5 个),小物体和密集物体检测效果更好。

网络架构

YOLOv2 抛弃了 GoogleNet,设计了一个新网络叫 Darknet-19。它有 19 个卷积层和 5 个池化层,输入图片大小变成了 416×416(不是 448×448 了),输出是 13×13 的网格。为什么是 13×13?因为 416 除以 32(卷积过程中的步幅)刚好是 13。每个格子预测 5 个锚框,输出张量变成了 13×13×(5×(5+类别数))。

损失函数详解

YOLOv2 的损失函数和 YOLOv1 类似,但优化了细节:

解释一下:

通俗解释

YOLOv2 的损失函数更聪明了。它不再直接预测框的位置,而是预测相对于锚框的偏移量,这样模型更容易学到规律。置信度也更依赖 IoU,让“框得好不好”更科学。

新特性
  1. Batch Normalization:加在卷积层后,加速训练,提升精度。
  2. 高分辨率训练:先用低分辨率训练,再切换到高分辨率。
  3. 多尺度训练:随机调整输入大小(比如 320×320 到 608×608)。
优点与缺点
  • 优点:精度提升到 mAP 78.6%,FPS 还能保持 67,实时性超强。
  • 缺点:对极小物体仍不够敏感,复杂场景下仍有改进空间。

第三部分:YOLOv1 vs YOLOv2——全方位对比

网络架构
  • YOLOv1:24 个卷积层 + 2 个全连接层,输入 448×448,输出 7×7 网格。
  • YOLOv2:Darknet-19(19 个卷积层),输入 416×416,输出 13×13 网格,去掉全连接层。
损失函数
  • YOLOv1:直接预测坐标,权重不平衡。
  • YOLOv2:预测锚框偏移量,用 IoU 优化置信度。
检测能力
  • YOLOv1:2 个框/格子,适合大物体。
  • YOLOv2:5 个锚框/格子,小物体检测更好。
性能指标
  • FPS:YOLOv1 约 45,YOLOv2 高达 67。
  • mAP:YOLOv1 为 63.4%,YOLOv2 提升到 78.6%。

第四部分:概念扫盲——mAP、FPS、IoU 等

mAP(平均精度均值)

mAP 是“总成绩”,先算每个类别的 AP(精度-召回率曲线下面积),再平均。越高越好。

FPS(每秒帧数)

FPS 是速度指标,越高越适合实时应用。

精准率(Precision)和召回率(Recall)
  • 精准率:预测对的占预测总数的比例。
  • 召回率:找到的占真实总数的比例。
IoU(交并比)

IoU = 重叠面积 / 总面积,衡量框的准度。

YOLOv1 和 YOLOv2 是目标检测的里程碑。YOLOv1 用“快”打开新思路,YOLOv2 在速度和精度上找到平衡。

第五部分:代码示例

代码语言:javascript
代码运行次数:0
运行
复制
from ultralytics import YOLO

# 加载预训练的YOLO模型
model = YOLO('yolov8n.pt')  # 使用YOLOv8 nano模型,适合轻量级应用

# 进行目标检测
results = model('image.jpg')  # 输入图像文件路径

# 处理检测结果
for result in results:
    boxes = result.boxes  # 获取检测框
    for box in boxes:
        x, y, w, h = box.xywh[0]  # 获取坐标和宽高
        conf = box.conf.item()    # 获取置信度
        cls = box.cls.item()      # 获取类别
        print(f"检测到目标:类别={cls}, 置信度={conf:.2f}, 坐标=({x:.1f}, {y:.1f}), 宽高=({w:.1f}, {h:.1f})")

# 可视化结果(保存或显示)
results[0].save()  # 保存带检测框的图像

以上是一个简单的Python代码示例,直接调用YOLO库进行目标检测,强调应用场景(如监控或自动驾驶)。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-03-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 引言
    • 第一部分:YOLOv1——目标检测的“快男”
      • YOLOv1 的诞生
      • YOLOv1 的原理
      • 网络架构
      • 损失函数详解
      • 优点与缺点
    • 第二部分:YOLOv2——更快更准的升级版
      • YOLOv2 的诞生
      • YOLOv2 的原理
      • 网络架构
      • 损失函数详解
      • 新特性
      • 优点与缺点
    • 第三部分:YOLOv1 vs YOLOv2——全方位对比
      • 网络架构
      • 损失函数
      • 检测能力
      • 性能指标
    • 第四部分:概念扫盲——mAP、FPS、IoU 等
      • mAP(平均精度均值)
      • FPS(每秒帧数)
      • 精准率(Precision)和召回率(Recall)
      • IoU(交并比)
  • 第五部分:代码示例
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档