当前位置: 首页 > news >正文

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

引言

你有没有想过,当你用手机拍一张照片,里面的人、车、狗是怎么被自动识别出来的?这背后靠的就是目标检测技术。目标检测是计算机视觉中的一个重要领域,它不仅要回答“图片里有什么”,还要告诉你“这些东西在哪里”。今天,我们要聊的是目标检测领域的两个经典模型: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 在速度和精度上找到平衡。

第五部分:代码示例

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库进行目标检测,强调应用场景(如监控或自动驾驶)。

相关文章:

  • 深度学习正则化技术之权重衰减法、暂退法(通俗易懂版)
  • 【RISCV LAB】0x01-安装实验仿真辅助工具
  • iOS OC使用正则表达式去除特殊符号并加粗文本,适用于接入AI大模型的流模式数据的文字处理
  • 深度学习 Deep Learning 第1章 深度学习简介
  • ByteByteGo学习笔记:通知系统设计
  • Redis分布式锁深度剖析:从原理到Redisson实战,破解脑裂与高并发锁难题
  • jupyter无法转换为PDF,HTMLnbconvert failed: Pandoc wasn‘t found.
  • 如何更新 Oh My Zsh
  • k8s中的控制器的使用
  • NetLink内核套接字案例分析
  • 黄金还能再涨吗?
  • 虚拟健身教练小程序:AI动作识别与个性化训练计划生成
  • 3.14周报
  • 联想拯救者 M600 无线游戏鼠标|自定义驱动程序安装说明
  • 研究整除的性质——最大公约数(GCD)和最小公倍数(LCM)
  • JavaScript基础-作用域概述
  • 【品铂科技工业生产应用案例解析】
  • 使用DeepSeek制作可视化图表和流程图
  • vue处理接口返回EventStream数据并进行展示
  • TI的Doppler-Azimuth架构(TI文档)
  • 国家统计局:4月全国规模以上工业增加值同比增长6.1%
  • 央媒:设施老化、应急预案套模板,养老机构消防隐患亟待排查
  • 世卫大会中国代表团:中国深入参与全球卫生治理,为构建人类卫生健康共同体贡献中国力量
  • 山东茌平民企巨头实控人省外再出手:斥资16亿拿下山西一宗探矿权
  • 广西隆林突发山洪,致3人遇难1人失联
  • 下辖各区密集“联手”,南京在下一盘什么样的棋?