YOLOv2 技术详解:目标检测的又一次飞跃

🧠 YOLOv2 技术详解:目标检测的又一次飞跃

一、前言

在 YOLOv1 提出后,虽然实现了“实时性 + 单阶段”的突破,但其在精度和小物体检测方面仍有明显不足。为了弥补这些缺陷,Joseph Redmon 等人在 2017 年提出了 YOLOv2(又名 YOLO9000),并在论文中宣称:

“It’s more accurate than other detection systems and can run at real-time speeds.”

本文将深入解析 YOLOv2 的核心技术亮点,包括:

  • 引入 Anchor Boxes
  • 多尺度预测
  • 更好的主干网络 Darknet-19
  • 联合训练 COCO 和 ImageNet

二、YOLOv2 的主要改进点

改进点描述
✅ 引入 Anchor Boxes借鉴 Faster R-CNN 思想,使用预设宽高比例的边界框提升召回率
✅ 多尺度预测(Multi-Scale Training)输入图像尺寸可变,增强模型对不同大小目标的适应能力
✅ 更强的主干网络使用 Darknet-19,比 VGG 更轻量、更快
✅ 联合训练 COCO + ImageNet同时学习检测与分类任务,实现跨数据集泛化能力

三、YOLOv2 的网络结构详解

🔍 整体架构图(简化版)

Input (416x416x3)
│
├─ Conv Layer (3x3, 32 filters, stride=1) → BatchNorm → LeakyReLU
├─ MaxPool (2x2, stride=2)
├─ Conv Layer (3x3, 64 filters, stride=1) → BatchNorm → LeakyReLU
├─ MaxPool (2x2, stride=2)
├─ Conv Layers ... (共19层)
│
└─ Output: 13x13x(5×B + C) → Bounding Box 预测 + 类别概率

📌 特点说明:

  • 输入图像统一为 416 × 416;
  • 输出为 13 × 13 的网格单元;
  • 每个单元格输出多个 bounding box(默认为 5 个);
  • 每个 bounding box 包含:
    • (tx, ty):中心坐标偏移;
    • (tw, th):宽高相对于 anchor 的缩放;
    • confidence:是否包含物体;
    • class probabilities:类别置信度;

四、YOLOv2 的关键创新点详解

✨ 1. Anchor Boxes 的引入

🔍 什么是 Anchor Boxes?

Anchor Boxes 是一组预设的宽高比(如 1:1、2:1、1:2 等),用于作为边界框回归的参考模板。

💡 YOLOv1 的问题:
  • 每个 grid cell 只能预测两个固定格式的边界框;
  • 缺乏先验知识,导致对形状变化大的目标(如长条形物体)表现不佳;
✅ YOLOv2 的改进:
  • 每个 grid cell 预测多个 bounding box(默认 5 个);
  • 每个 bounding box 的宽高是基于 K-Means 聚类真实框得到的 anchors;
  • 公式如下:

b w = a w ⋅ e t w , b h = a h ⋅ e t h b_w = a_w \cdot e^{t_w},\quad b_h = a_h \cdot e^{t_h} bw=awetw,bh=aheth

其中 a w , a h a_w, a_h aw,ah 是 anchor 的宽高, t w , t h t_w, t_h tw,th 是网络输出的偏移值。

📌 Anchor Boxes 的优势:
  • 提升了小物体检测效果;
  • 增加了模型对不同形状目标的适应能力;
  • 提高了整体召回率。

✨ 2. 多尺度预测(Multi-Scale Training)

🔍 什么是 Multi-Scale Training?

YOLOv2 在训练过程中随机选择输入图像的尺寸,使模型能够适应不同尺度的目标。

💡 实现方式:
  • 输入图像尺寸在 [320, 352, …, 608] 中随机选取(均为 32 的倍数);
  • 模型在推理时也可适配任意尺寸的图像;
  • 通过这种方式增强了模型的尺度鲁棒性。
📌 优势:
  • 对小目标更敏感;
  • 不依赖固定输入尺寸;
  • 推理速度基本不变的情况下提升了精度。

✨ 3. Darknet-19 主干网络

YOLOv2 使用了一个轻量级的卷积神经网络 Darknet-19,它相比 VGG 更快、更轻量。

🧱 Darknet-19 结构简述:
层类型参数说明
Conv + BatchNorm + LeakyReLU19 层卷积网络
MaxPooling下采样操作
Global Average Pooling最终分类输出
📌 优势:
  • 比 VGG 快很多;
  • 准确率接近 VGG;
  • 更适合嵌入式设备部署。

✨ 4. 联合训练 COCO + ImageNet(YOLO9000)

YOLOv2 的最大亮点之一是 YOLO9000 —— 一个可以检测 9000+ 类别的检测器

🧩 实现思路:
  • 使用 WordTree 构建类别层级结构;
  • 图像来源包括 COCO(带位置标签)和 ImageNet(仅分类);
  • 在 COCO 上训练检测头,在 ImageNet 上训练分类头;
  • 利用层次 softmax 进行联合优化。
🎯 应用价值:
  • 实现跨数据集迁移学习;
  • 扩展性强,可用于罕见类别检测;
  • 开启了“开放词汇”检测的新方向。

五、YOLOv2 的损失函数详解

YOLOv2 的损失函数与 YOLOv1 类似,但加入了对 anchor boxes 的支持。

⚙️ 损失函数公式:

L = λ coord ∑ i = 0 S 2 ∑ j = 0 B 1 i j obj [ ( x i − x ^ i ) 2 + ( y i − y ^ i ) 2 + ( w i − w ^ i ) 2 + ( h i − h ^ i ) 2 ] \mathcal{L} = \lambda_{\text{coord}} \sum_{i=0}^{S^2} \sum_{j=0}^{B} \mathbb{1}_{ij}^{\text{obj}} \left[ (x_i - \hat{x}_i)^2 + (y_i - \hat{y}_i)^2 + (\sqrt{w_i} - \sqrt{\hat{w}_i})^2 + (\sqrt{h_i} - \sqrt{\hat{h}_i})^2 \right] L=λcoordi=0S2j=0B1ijobj[(xix^i)2+(yiy^i)2+(wi w^i )2+(hi h^i )2]

− ∑ i = 0 S 2 ∑ j = 0 B 1 i j obj log ⁡ ( C i ) − ∑ i = 0 S 2 ( 1 − 1 i obj ) log ⁡ ( 1 − C i ) -\sum_{i=0}^{S^2} \sum_{j=0}^{B} \mathbb{1}_{ij}^{\text{obj}} \log(C_i) -\sum_{i=0}^{S^2} (1 - \mathbb{1}_{i}^{\text{obj}}) \log(1 - C_i) i=0S2j=0B1ijobjlog(Ci)i=0S2(11iobj)log(1Ci)

+ λ cls ∑ i = 0 S 2 1 i obj ∑ c ∈ classes ( p i ( c ) − p ^ i ( c ) ) 2 +\lambda_{\text{cls}} \sum_{i=0}^{S^2} \mathbb{1}_{i}^{\text{obj}} \sum_{c \in \text{classes}} (p_i(c) - \hat{p}_i(c))^2 +λclsi=0S21iobjcclasses(pi(c)p^i(c))2
YOLO 将图像划分为 S × S S \times S S×S 的网格,每个网格负责预测 B B B 个边界框(bounding boxes),每个框包括:
• 位置( x , y x, y x,y
• 宽高( w , h w, h w,h
• 置信度( C C C
• 类别概率向量( p 1 , p 2 , … p_1, p_2, \dots p1,p2,

💡 总体公式

L = 位置误差 + 置信度误差 + 分类误差 \mathcal{L} = \text{位置误差} + \text{置信度误差} + \text{分类误差} L=位置误差+置信度误差+分类误差

🧩 各部分含义

  1. 位置损失(bounding box regression)

由左上角位置 ( x i , y i ) (x_i, y_i) (xi,yi) 和宽高 ( w i , h i ) (w_i, h_i) (wi,hi) 构成,使用的是平方差损失,但对 w , h w, h w,h 使用了开方来减小大框对损失的影响:

λ coord ∑ i = 0 S 2 ∑ j = 0 B 1 i j obj [ ( x i − x ^ i ) 2 + ( y i − y ^ i ) 2 + ( w i − w ^ i ) 2 + ( h i − h ^ i ) 2 ] \lambda_{\text{coord}} \sum_{i=0}^{S^2} \sum_{j=0}^{B} \mathbb{1}_{ij}^{\text{obj}} \left[ (x_i - \hat{x}_i)^2 + (y_i - \hat{y}_i)^2 + (\sqrt{w_i} - \sqrt{\hat{w}_i})^2 + (\sqrt{h_i} - \sqrt{\hat{h}_i})^2 \right] λcoordi=0S2j=0B1ijobj[(xix^i)2+(yiy^i)2+(wi w^i )2+(hi h^i )2]

其中 1 i j obj \mathbb{1}_{ij}^{\text{obj}} 1ijobj 是一个指示变量,表示第 i i i 个网格的第 j j j 个预测框是否负责某个目标。

  1. 置信度损失(object confidence prediction)

用于衡量模型对目标存在与否的预测能力,分为两部分:
• 对有目标的框预测 C i C_i Ci,希望接近 1
• 对无目标的框预测 C i C_i Ci,希望接近 0

• ∑ i = 0 S 2 ∑ j = 0 B 1 i j obj log ⁡ ( C i ) • ∑ i = 0 S 2 ( 1 − 1 i obj ) log ⁡ ( 1 − C i ) • \sum_{i=0}^{S^2} \sum_{j=0}^{B} \mathbb{1}_{ij}^{\text{obj}} \log(C_i) • \sum_{i=0}^{S^2} (1 - \mathbb{1}_{i}^{\text{obj}}) \log(1 - C_i) i=0S2j=0B1ijobjlog(Ci)i=0S2(11iobj)log(1Ci)

  1. 分类损失(classification loss)

用于衡量正确类别的概率预测,使用的是每一类的平方差损失(可替换为交叉熵):

λ cls ∑ i = 0 S 2 1 i obj ∑ c ∈ classes ( p i ( c ) − p ^ i ( c ) ) 2 \lambda_{\text{cls}} \sum_{i=0}^{S^2} \mathbb{1}i^{\text{obj}} \sum{c \in \text{classes}} (p_i(c) - \hat{p}_i(c))^2 λclsi=0S21iobjcclasses(pi(c)p^i(c))2

📌 关键区别:

  • 引入了 anchor boxes 的宽高参数 a w , a h a_w, a_h aw,ah
  • 边界框预测不再直接回归绝对值,而是基于 anchor 的偏移;
  • 分类部分使用层次 softmax,支持多数据集联合训练。

六、YOLOv2 的 NMS 优化

YOLOv2 中也使用了 NMS(Non-Maximum Suppression) 来去除重复预测框。

✅ 优化点:

  • 支持 Soft-NMS(软抑制),避免误删相邻目标;
  • 使用 DIoU-NMS 替代传统 IoU;
  • 支持按类别执行 NMS。

七、YOLOv2 的性能对比

模型mAP@COCOFPS
YOLOv1~63.445 fps
YOLOv2~76.867 fps
SSD512~79.822 fps
Faster R-CNN (VGG)~73.27 fps

✅ YOLOv2 在保持高速的同时,显著提升了精度,成为当时最具性价比的目标检测方案之一。


八、YOLOv2 的局限性

尽管 YOLOv2 表现优异,但仍存在一些不足:

局限性说明
小物体检测仍不理想虽有改进,但在密集场景下依然不如两阶段方法
Anchor 设计依赖聚类结果需要重新聚类 anchor 尺寸以适配新任务
无特征融合机制缺少类似 FPN 的多尺度融合模块

九、总结

模块内容
YOLOv2 的贡献引入 Anchor Boxes、支持多尺度训练、使用 Darknet-19、提出 YOLO9000
Anchor Boxes 的作用提升召回率、提高定位精度
多尺度训练的优势增强模型对不同尺寸目标的适应能力
Darknet-19 的特点比 VGG 更快、更适合部署
YOLO9000 的意义开启了大规模检测的新时代


📌 欢迎点赞 + 收藏 + 关注我,我会持续更新更多关于计算机视觉、目标检测、深度学习、YOLO系列等内容!

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

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

相关文章

JAFAR Jack up Any Feature at Any Resolution

GitHub PaPer JAFAR: Jack up Any Feature at Any Resolution 摘要 基础视觉编码器已成为各种密集视觉任务的核心组件。然而,它们的低分辨率空间特征输出需要特征上采样以产生下游任务所需的高分辨率模式。在这项工作中,我们介绍了 JAFAR——一种轻量级…

SamWaf 开源轻量级网站防火墙源码(源码下载)

SamWaf网站防火墙是一款适用于小公司、工作室和个人网站的开源轻量级网站防火墙,完全私有化部署,数据加密且仅保存本地,一键启动,支持Linux,Windows 64位,Arm64。 主要功能: 代码完全开源 支持私有化部署…

79Qt窗口_QDockWidget的基本使用

目录 4.1 浮动窗⼝的创建 4.2 设置停靠的位置 浮动窗⼝ 在 Qt 中,浮动窗⼝也称之为铆接部件。浮动窗⼝是通过 QDockWidget类 来实现浮动的功能。浮动窗 ⼝⼀般是位于核⼼部件的周围,可以有多个。 4.1 浮动窗⼝的创建 浮动窗⼝的创建是通过 QDockWidget…

UE/Unity/Webgl云渲染推流网址,如何与外部网页嵌套和交互?

需求分析:用threejs开发的数字孪生模型, 但是通过webgl技术网页中使用,因为模型数据量大,加载比较慢,且需要和其他的业务系统进行网页嵌套和交互,使用云渲染技术形成的推流网址,如何与外部网页嵌…

在Termux中搭建完整Python环境(Ubuntu+Miniconda)

蹲坑也能写python? 📱 环境准备🛠 详细搭建步骤步骤1:安装Linux容器工具步骤2:查看可用Linux发行版步骤3:安装Ubuntu系统步骤4:登录Ubuntu环境步骤5:下载Miniconda安装包步骤6:安装Miniconda⚡ 环境验证💡 使用技巧⚠️ 注意事项前言:想在吃饭、通勤甚至休息间隙…

EventSourcing.NetCore:基于事件溯源模式的 .NET Core 库

在现代软件架构中,事件溯源(Event Sourcing)已经成为一种非常流行的模式,尤其适用于需要高可用性和数据一致性的场景。EventSourcing.NetCore 是一个基于事件溯源模式的 .NET Core 库,旨在帮助开发者更加高效地实现这一…

Linux下的第一个程序——进度条(命令行版本)

文章目录 编写Linux下的第一个小程序——进度条进度条的样式前置知识回车和换行缓冲区对回车、换行、缓冲区、输出的测试代码简单的测试样例倒计时程序 进度条程序理论版本基本框架代码实现 真实版本基础框架 代码实现 编写Linux下的第一个小程序——进度条 在前面的基础开发工…

【项目】仿muduo库one thread one loop式并发服务器前置知识准备

📚 博主的专栏 🐧 Linux | 🖥️ C | 📊 数据结构 | 💡C 算法 | 🅒 C 语言 | 🌐 计算机网络 |🗃️ mysql 本文介绍了一种基于muduo库实现的主从Reactor模型高并发服务器框架…

steam报网络错误,但电脑是网络连接的

steam报网络错误,但电脑是网络连接的 如: 解决办法: 关闭电脑防火墙和所有杀毒软件,然后重新打开steam开代理,可能国内有时候访问不了 首选1进行尝试 steam安装路径一定要在纯英文路径下 已ok

Vue 组合式 API 与 选项式 API 全面对比教程

一、前言:Vue 的两种 API 风格 Vue 提供了两种编写组件逻辑的方式:组合式 API (Composition API) 和 选项式 API (Options API)。理解这两种方式的区别和适用场景,对于 Vue 开发者至关重要。 为什么会有两种 API? 选项式 API&a…

HarmonyOS 应用模块化设计 - 面试核心知识点

HarmonyOS 应用模块化设计 - 面试核心知识点 在 HarmonyOS 开发面试中,模块化设计是必考知识点。本文从面试官角度深度解析 HarmonyOS 应用模块化设计,涵盖 HAP、HAR、HSP 等核心概念,助你轻松应对技术面试! 🎯 面试高…

Maven高级学习笔记

分模块设计 为什么分模块设计?将项目按照功能拆分成若干个子模块,方便项目的管理维护、扩展,也方便模块间的相互调用,资源共享。 注意事项:分模块开发需要先针对模块功能进行设计,再进行编码。不会先将工程开发完毕&…

[创业之路-423]:经济学 - 大国竞争格局下的多维博弈与科技核心地位

在当今风云变幻的国际舞台上,大国竞争已成为时代的主旋律,其激烈程度与复杂性远超以往。这场全方位的较量,涵盖了制度、思想、文化、经济、科技、军事等诸多关键领域,每一个维度都深刻影响着大国的兴衰成败,而科技在其…

【企业容灾灾备系统规划】

一、企业灾备体系 1.1 灾备体系 灾备切换的困境: 容灾领域的标准化方法和流程、算法体系是确保业务连续性和数据可靠性的核心,以下从标准框架、流程规范、算法体系三个维度进行系统分析: 1.1.1、标准化方法体系​ ​1. 容灾等级标准​ ​国际标准SHARE78​: 将容灾能力划…

Kafka Connect基础入门与核心概念

一、Kafka Connect是什么? Apache Kafka Connect是Kafka生态中用于构建可扩展、可靠的数据集成管道的组件,它允许用户将数据从外部系统(如数据库、文件系统、API等)导入Kafka(Source Connector)&#xff0…

从零手写Java版本的LSM Tree (四):SSTable 磁盘存储

🔥 推荐一个高质量的Java LSM Tree开源项目! https://github.com/brianxiadong/java-lsm-tree java-lsm-tree 是一个从零实现的Log-Structured Merge Tree,专为高并发写入场景设计。 核心亮点: ⚡ 极致性能:写入速度超…

Kotlin的5个主要作用域函数

applay, also,let, run, with 是kotlin标准库提供的5个主要的作用域函数(Scope Functions)​,它们的设计目的是为了在特定作用域内更简洁地操作对象。 如何使用这5个函数,要从它的设计目的来区分: apply : 配置/对象…

原型模式Prototype Pattern

模式定义 用原型实例指定创建对象的种类,并且通过复制这些原型创建新的对象,其允许一个对象再创建 另外一个可定制的对象,无须知道任何创建的细节 对象创建型模式 基本工作原理是通过将一个原型对象传给那个要发动创建的对象,这…

基于深度学习的智能交通流量预测系统:技术与实践

前言 随着城市化进程的加速,交通拥堵问题日益严重,给人们的日常生活和经济发展带来了巨大的挑战。智能交通系统(ITS)作为解决交通问题的重要手段,逐渐成为研究的热点。其中,交通流量预测是智能交通系统中的…

Cilium动手实验室: 精通之旅---23.Advanced Gateway API Use Cases

Cilium动手实验室: 精通之旅---23.Advanced Gateway API Use Cases 1. Lab说明1.1 高级网关 API 使用案例 2. 负载均衡器2.1 部署应用程序2.2 部署 Gateway 和 HTTPRoute 3. HTTP 标头请求修饰符3.1 部署 HTTPRoute3.2 可观测性 4. HTTP 响应标头重写5. HTTP 流量镜像5.1 demo应…