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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/73325.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据的存储---整型、浮点型

目录 一、整型在内存中的存储 1. 原码、反码、补码 2. 大端与小端 二、浮点数在内存中的存储 1.浮点数的存 2. 浮点数的取 3. 题目解析 一个变量的创建需要在内存中开辟空间,而开辟的空间大小是由数据类型决定的。下面我们就来讨论一下整型、浮点型在内存中的…

Java 大视界 -- Java 大数据在智能教育虚拟实验室建设与实验数据分析中的应用(132)

💖亲爱的朋友们,热烈欢迎来到 青云交的博客!能与诸位在此相逢,我倍感荣幸。在这飞速更迭的时代,我们都渴望一方心灵净土,而 我的博客 正是这样温暖的所在。这里为你呈上趣味与实用兼具的知识,也…

⚡️Jolt -- 通过JSON配置来处理复杂数据转换的工具

简介:一个能够通过JSON配置(特定的语法)来处理复杂数据转换的工具。 比如将API响应转换为内部系统所需的格式,或者处理来自不同来源的数据结构差异。例如,将嵌套的JSON结构扁平化,或者重命名字段&#xff0…

47.全排列 II

47.全排列 II 力扣题目链接 给定一个可包含重复数字的序列 nums ,按任意顺序 返回所有不重复的全排列。 示例 1: 输入:nums [1,1,2] 输出: [[1,1,2],[1,2,1],[2,1,1]]示例 2: 输入:nums [1,2,3] 输出…

centos没有ll

vi /etc/bashrc alias ll‘ls -l’ source /etc/bashrc

04 1个路由器配置一个子网的dhcp服务

前言 这是最近一个朋友的 ensp 相关的问题, 这里来大致了解一下 ensp, 计算机网络拓扑 相关基础知识 这里一系列文章, 主要是参照了这位博主的 ensp 专栏 这里 我只是做了一个记录, 自己实际操作了一遍, 增强了一些 自己的理解 当然 这里仅仅是一个 简单的示例, 实际场景…

网络空间安全(31)安全巡检

一、定义与目的 定义: 安全巡检是指由专业人员或特定部门负责,对各类设施、设备、环境等进行全面或重点检查,及时发现潜在的安全隐患或问题。 目的: 预防事故发生:通过定期的安全巡检,及时发现并解决潜在的…

在IGH ethercat主站中Domain和Entry之间的关系

在 IGH EtherCAT 主站中,“domain”(域)和 “entry”(条目)存在着紧密的关系,具体如下: 数据组织与管理方面:“domain” 是 EtherCAT 主站中用于管理和处理从站配置、数据映射和数据…

信息学奥赛一本通 1449:【例题2】魔板

题目 1449:【例题2】魔板 分析 首先注意:输入是按顺时针给出的,但我们处理时需要按正常顺序排,可以用以下代码读入 string s(8, 0); // 初始化全零字符串 cin>>s[0]>>s[1]>>s[2]>>s[3]; cin>>…

Unity开发的抖音小游戏接入抖音开放平台中的流量主(抖音小游戏接入广告)

前言:作者在进行小游戏审核版本的过程中,碰到了下列问题,所以对这个抖音小游戏接入广告研究了下。 还有就是作者的TTSDK版本号是6.2.6,使用的Unity版本是Unity2022.3.29f1,最好和作者的两个版本号保持一致,因为我发现TTSDK旧版的很多函数在新版中就已经无法正常使用了,必…

【xv6操作系统】系统调用与traps机制解析及实验设计

【xv6操作系统】系统调用与traps机制解析及实验设计 系统调用相关理论系统调用追溯系统调用实验设计Sysinfo🚩系统调用总结(结合trap机制) traptrap机制trap代码流程Backtrace实验alarm实验 系统调用 相关理论 隔离性(isolation)…

Docker文件夹上传秘籍Windows下的高效传输之道

哈喽,大家好,我是木头左! 一、理解Docker容器与Windows文件系统的差异 在深入探讨如何从 Windows 系统将文件夹及递归文件夹和文件上传到 Docker 容器之前,有必要先明晰 Docker 容器与 Windows 文件系统之间存在的本质差异。 (一)Docker 容器的文件系统特性 Docker 容…

08 | 实现版本号打印功能

提示: 所有体系课见专栏:Go 项目开发极速入门实战课;欢迎加入 云原生 AI 实战 星球,12 高质量体系课、20 高质量实战项目助你在 AI 时代建立技术竞争力(聚焦于 Go、云原生、AI Infra);本节课最终…

在微信小程序或前端开发中,picker 和 select 都是用户交互中用于选择的组件,但它们在功能、设计和使用场景上有一定的区别

在微信小程序或前端开发中,picker 和 select 都是用户交互中用于选择的组件,但它们在功能、设计和使用场景上有一定的区别。 1. picker 的特点 描述: picker 是微信小程序中的原生组件,通常用于选择单项或多项值,如时…

PMP 证书的含金量怎么样?

pmp含金量,这是一个很有争议的话题,我根据我以往的面试跟工作经历对 PMP 也有几点看法,想跟大家聊一聊。 一、如果真心想做项目管理,PMP 一定要去考一个 现在的早已不是凭经验做项目的时代了,各大企业都追求专业式的…

Springboot连接neo4j

​一、Spring Data Neo4j 核心知识体系 ​1. 核心概念 ​图数据库特性: 数据以 ​节点(Node)​ 和 ​关系(Relationship)​ 形式存储,支持属性(Property)。查询语言:Cyp…

我与DeepSeek读《大型网站技术架构》- 大型网站架构技术一览与Web开发技术发展历程

文章目录 大型网站架构技术一览1. 前端架构2. 应用层架构3. 服务层架构4. 存储层架构5. 后台架构6. 数据采集与监控7. 安全架构8. 数据中心机房架构 Web开发技术发展历程一、静态HTML阶段二、CGI脚本模式阶段三、服务器页面模式阶段 大型网站架构技术一览 1. 前端架构 浏览器…

Python数据类型进阶——详解

—— 小 峰 编 程 目录 1.整型 1.1 定义 1.2 独有功能 1.3 公共功能 1.4 转换 1.5 其他 1.5.1 长整型 1.5.2 地板除(除法) 2. 布尔类型 2.1 定义 2.2 独有功能 2.3 公共功能 2.4 转换 2.5 其他 做条件自动转换 3.字符串类型 3.1 定义 3.2 独有功能…

GNU Binutils 全工具指南:从编译到逆向的完整生态

1. GNU Binutils 全工具指南:从编译到逆向的完整生态 1. GNU Binutils 全工具指南:从编译到逆向的完整生态 1.1. 引言1.2. 工具分类速查表1.3. 核心工具详解 1.3.1. 编译与汇编工具 1.3.1.1. as(汇编器)1.3.1.2. gcc(…

docker python:latest镜像 允许ssh远程

跳转到家目录 cd创建pythonsshdockerfile mkdir pythonsshdockerfile跳转pythonsshdockerfile cd pythonsshdockerfile创建Dockerfile文件 vim Dockerfile将Dockerfile的指令复制到文件中 # 使用 python:latest 作为基础镜像 # 如果我的镜像列表中没有python:latest镜像&…