YOLO-V2 (学习记录)

article/2025/6/9 11:01:05

目录

一、记录YOLO-v2 的处理流程步骤

二、优势与不足

三、细节分析

1.候选框K-means计算细节

2.网络输出

3.损失函数(Loss Function)


学习之前,需要补充下论文中提到知识点。

1.什么是Batch Normalization

参考博文:Batch Normalization 的原理-CSDN博客

2. 什么是K-means聚类算法

参考博文:K-means聚类算法--原理及代码-CSDN博客

3.Darknet-19模型

参考博文:Darknet-19 模型结构-pytorch代码-CSDN博客

4.Faster RCNN

参考博文:一文读懂Faster RCNN(大白话,超详细解析)-CSDN博客

核心组成部分:

1️⃣ Backbone

  • 通常是卷积神经网络(如 VGG16、ResNet)作为特征提取器。

  • 输出高维度的 feature map。

2️⃣ Region Proposal Network (RPN)

  • 从 backbone 的特征图中生成一系列候选框(Region Proposal,即 ROI)。

  • RPN 是一个小型的全卷积网络,预测每个 anchor box 的 foreground/background 分类(2类)和坐标回归偏移(4维)。

3️⃣ ROI Pooling / ROI Align

  • 将 RPN 提供的候选框映射到特征图中,并通过池化或对齐操作,统一成固定大小的特征表示。

4️⃣ Fast R-CNN Head

  • 对每个 ROI 特征做全连接层分类(多类别)+ 边框回归。

  • 最终输出检测框和类别。

关键创新:

  • RPN 提速:相比原先用 Selective Search 的 RCNN/Fast-RCNN,RPN 通过 end-to-end 训练自动生成 proposal,显著加快检测速度。

  • 共享特征:Backbone 特征在 RPN 和 Fast R-CNN head 之间共享,避免重复计算。

一、记录YOLO-v2 的处理流程步骤

1️⃣ 输入阶段

  • 输入图像:将原图 resize 到网络输入尺寸(例如 416×416)。

  • YOLOv2 支持 多尺度训练,训练时输入尺寸在 320~608 之间随机选择(32 倍数)。

  • 通道数通常是 3(RGB 彩色图像)。

2️⃣ 主干网络特征提取

  • 骨干网络:Darknet-19

    • 包含 19 层卷积层 + 5 层最大池化层。

    • 激活函数:Leaky ReLU(0.1)。

    • 作用:提取语义特征。

  • 特征提取的输出:

    • 输入 416×416 → 输出 13×13×1024

    • 因为下采样了 32 倍(5 层池化,2×2,每次降一半)。

 3️⃣ 细粒度特征融合(passthrough layer)

  • 选取浅层特征图(26×26×512)。

  • 通过 space-to-depth 操作(2×2 块像素重排到通道维度),变换为 13×13×2048。

  • 将这个细粒度特征与深层特征图(13×13×1024)在通道维度拼接,形成 13×13×3072 的特征图。

 细节:

  • 这样做可以保留更多小目标细节,提升小目标检测性能。

4️⃣ 检测头(检测层)

  • 卷积降维:通过一个 3×3 卷积层,将通道数从 3072 降到 1024,再通过一个 1×1 卷积输出 13×13×125。

  • 125 = 5×(4 + 1 + 20),其中:

    • 5:每个 cell 预测 5 个 anchor box

    • 4:框回归参数 (tx, ty, tw, th)

    • 1:置信度(objectness score)

    • 20:PASCAL VOC 20 类的类别概率(C=20)

5️⃣ Anchor Box 机制

  • 论文中引入 anchor box(先验框),类似 Faster R-CNN 中的 anchor。

  • 通过 K-means 聚类 在训练集的 GT box 上生成 5 个 anchor(w, h)。

  • 在检测层,每个 cell 负责预测 5 个 anchor box。


 6️⃣ 输出预测

  • 输出是一个 13×13×125 的特征图:

    • 每个 cell 对应 5 个 anchor box。

    • 每个 anchor box 预测 (tx, ty, tw, th, objectness, 20×class scores)。

7️⃣ 预测框参数解码

在得到预测结果后,需要将它解码成实际的边界框坐标:

其中:

  • (cx,cy):cell 左上角坐标

  • (pw​,ph​):anchor box 的宽高

  • σ(⋅):sigmoid 函数,确保中心偏移在 0~1 之间

  • 预测框坐标再映射回到原图像空间

8️⃣ 后处理(NMS)

  • 生成所有预测框后,应用 非极大值抑制(NMS),过滤掉冗余框,保留最终的检测结果。

流程总结图示

输入图像(416×416×3)↓
Darknet-19 特征提取↓
浅层特征 passthrough 融合↓
特征拼接(13×13×3072)↓
卷积降维输出(13×13×125)↓
anchor box 解码 → 得到候选框↓
类别 softmax(或 sigmoid)得到概率↓
NMS → 输出最终检测框

🟩 YOLOv2 主要改进点总结

 anchor box:K-means 生成 5 个 anchor。
 细粒度特征融合:passthrough 层,保留小目标细节。
 多尺度输入训练:每隔 10 个 batch,随机换输入尺寸。
 更深更快的骨干网(Darknet-19):19 层卷积,轻量高效。
 全卷积结构:输入大小可变,推理灵活。

YOLOv2 相比 YOLOv1 改进点总结

改进点YOLOv1YOLOv2 改进
Anchor Boxes无(直接回归)引入 Anchor Boxes
骨干网络GoogLeNetDarknet-19,轻量化+BN
预测方式直接回归坐标预测 anchor 的坐标偏移
多尺度训练
输入分辨率固定动态调整多尺度
召回率和小目标检测能力提升显著

二、优势与不足

优势

  • 速度快:单阶段检测,适合实时应用(如视频监控)。

  • 精度提升:mAP较YOLOv1显著提高(VOC 2007上从63.4%到78.6%)。

  • 多尺度适应性:支持不同分辨率输入。

不足:

  • 对小目标和密集目标的检测仍弱于两阶段方法(如Faster R-CNN)。

  • YOLOv2的联合训练在实际检测任务中泛化能力有限。

三、细节分析

1.候选框K-means计算细节

         论文中的候选框是通过K-means计算得到的,这个过程用于计算的输入框是什么?距离是怎么表示的?

         YOLOv2 中的 K-means 聚类是对 训练集标注的目标框(ground truth boxes 做的。

         在 YOLOv2 中,作者提出使用 K-means 对真实目标框进行聚类,以找到更合适的 anchor box 尺寸。目的是让 anchor box 更贴近数据集中的实际目标大小和长宽比例,从而提高模型的召回率和检测精度。

🎯 聚类的对象:

  • 对象:所有 训练集中的 ground truth 边界框(ground truth bounding boxes)。

  • 维度:每个框的宽度和高度 (w, h)。

📦 具体流程:

1️⃣ 从训练集提取所有标注的目标框,得到其宽度和高度:

2️⃣ 采用 K-means 聚类对这些 (w, h) 进行分组。

  • 注意:YOLOv2 用的不是欧几里得距离,而是 1 − IOU 作为距离度量。

  • 这样可以避免因为大目标的宽高差异太大而导致聚类效果不好,直接用 IOU 作为相似度,更符合检测目标。

公式推导(距离计算)

对于两个边界框(w1, h1)(w2, h2)

  • 交集面积

  • 并集面积

  • IoU距离

3️⃣ 聚类完成后,得到 K 个聚类中心:

这里和标准的 k-means 思路相同,区别在于距离度量。更新中心点时,仍然是对每个簇内的宽高求平均

其中:

  • n_k​:第 k 个簇中的样本数。

  • (w_i, h_i​):簇中每个样本的宽高。

这些中心就作为最终的 Anchor Box 尺寸

💡 为什么这样做?

  • 如果 anchor box 的形状和真实目标差异太大,网络需要学到很大的回归偏移量,学习难度增大。

  • K-means 聚类后的 anchor box 更贴合实际分布,模型只需学习相对较小的偏移量,效果更好。

例如:

  • 如果你的数据集里主要是长条形物体,直接使用 YOLOv1 中的固定 anchor box 可能不合适。

  • 使用 k-means 后,anchor box 的形状更贴合,模型训练更高效。

📝 具体流程小结:

 1. 从所有 GT 框中收集 (w, h) 数据。
 2. 随机选择 5 个中心点 (w, h)(初始化)。
 3. 对所有框,计算和 5 个中心的 1 - IOU 距离,分配到最近的中心点簇。
 4. 对每个簇,重新计算中心点:对簇内所有样本 (w, h) 均值
 5. 重复 3、4 直到收敛(或者迭代次数达到设定值)

2.网络输出

网络输出:

  • 每个 anchor box 预测:

    • 偏移量 (tx, ty)

    • 尺寸缩放 (tw, th)

    • 置信度

    • 类别概率

最终:

  • 每个 anchor box 尺寸:

预测框中心点:

其中 c_x, c_y 是 cell 在特征图中的位置索引。

需要注意:

➡️ 网络输出13×13 特征图中的 每个单元格 叫做一个 “cell” 或者 “grid cell”。
➡️ 这个 “cell” 其实是一个“感受野区域”的抽象,不是像素

每个 cell 有多个 通道(channel),不是单通道像素:

  • 例如,输出形状是 (13, 13, 125):

    • 125 = 5 × (5 + C),其中 5 是 anchor 数量。

    • 每个 cell 输出 125 个数,不是单个像素值!

每个 cell 预测 5 个 anchor box(因为 anchor 数量是 5)。
每个 anchor box 输出:

  • 4 个回归偏移量(tx, ty, tw, th)

  • 1 个置信度(objectness)

  • C 个类别概率(对 C 分类问题)
    所以每个 anchor box 输出 5 + C 维。

例子:输出特征图形状

假设类别数 C=20(PASCAL VOC):

  • 每个 anchor box 输出 (5 + 20)=25。

  • 5 个 anchor → 25×5=125。

  • 所以最终输出形状是 (13, 13, 125)。

 Loss 计算核心思路

✅ 不是直接把 125 通道卷积成 1 通道。
✅ 而是把 125 通道 reshape 成 13×13×5×(5 + C) 维度。
这样就能:

  • 把 125 通道 → anchor box 维度 + 预测向量维度,分块处理。

  • 每个 cell 有 5 组 (5 + C) 向量。

3.损失函数(Loss Function)

YOLOv2的损失函数包含三部分:

    坐标损失(Coordinate Loss):
仅对正样本(含目标的锚框)计算,使用MSE损失。

      置信度损失(Confidence Loss):
区分正负样本,使用交叉熵损失。

      类别损失(Class Loss):
仅对正样本计算,使用交叉熵损失。


http://www.hkcw.cn/article/OxNyFgUFBY.shtml

相关文章

AI Coding 资讯 2025-06-03

Prompt工程 RAG-MCP:突破大模型工具调用瓶颈,告别Prompt膨胀 大语言模型(LLM)在工具调用时面临Prompt膨胀和决策过载两大核心挑战。RAG-MCP创新性地引入检索增强生成技术,通过外部工具向量索引和动态检索机制,仅将最相关的工具信…

CAMEL-AI开源自动化任务执行助手OWL一键整合包下载

OWL 是由 CAMEL-AI 团队开发的开源多智能体协作框架,旨在通过动态智能体交互实现复杂任务的自动化处理,在 GAIA 基准测试中以 69.09 分位列开源框架榜首,被誉为“Manus 的开源平替”。我基于当前最新版本制作了免安装一键启动整合包。 CAMEL-…

线程池RejectedExecutionException异常

文章目录 1、报错2、定位3、修复4、线程池使用的一点思考 1、报错 检索项目日志时,发现一个异常堆栈信息,核心报错: java.util.concurrent.RejectedExecutionException: Task java.util.concurrent.CompletableFuture$AsyncSupply480a10c7…

视频监控管理平台EasyCVR安防小知识:监控摄像头异响问题排查与处理

在视频监控系统广泛应用于日常生活的当下,监控摄像头出现异响是常见且影响使用体验的问题。为快速定位和解决该问题,特制定本应用解决方案,依据异响来源分为硬盘录像机异响与监控摄像头异响两类进行处理。 一、硬盘录像机发出异响 硬盘录像机…

NX890NX894美光固态闪存NX906NX908

美光NX系列固态闪存深度解析 技术架构与性能突破 美光NX系列固态闪存(如NX890、NX894、NX906、NX908)的技术核心基于G9 NAND技术,通过优化晶体管结构与制程工艺,显著提升存储密度与读写速度。例如,NX895的MT29F8T08G…

RHEL7安装教程

RHEL7安装教程 下载RHEL7镜像 通过网盘分享的文件:RHEL 7.zip 链接: https://pan.baidu.com/s/1ExLhdJigj-tcrHJxIca5XA?pwdjrrj 提取码: jrrj --来自百度网盘超级会员v6的分享安装 1.打开VMware,新建虚拟机,选择自定义然后下一步 2.点击…

无人机智能识别交通目标,AI视觉赋能城市交通治理新高度

在城市化快速发展的当下,如何实现对道路交通的智能化管理、保障出行安全,成为城市治理的重要命题。传统的交通监控往往依赖地面摄像头,受限于固定视角与安装环境。而今,随着人工智能与无人机技术的深度融合,一种更高效…

使用 HTML + JavaScript 实现文章逐句高亮朗读功能

在这个信息爆炸的时代,我们每天都要面对大量的文字阅读。无论是学习、工作还是个人成长,阅读都扮演着至关重要的角色。然而,在快节奏的生活中,我们往往难以找到足够的安静时间专注于阅读。本文用 HTML JavaScript 实现了一个基于…

《TCP/IP 详解 卷1:协议》第5章:Internet协议

IPv4和IPv6头部 IP是TCP/IP协议族中的核心协议。所有TCP、UDP、ICMP和IGMP 数据都通过IP数据报传输。IP提供了一种尽力而为、无连接的数据报交付服务。 IP头部字段 IPv4 头部通常为 20 字节(无选项时),而 IPv6 头部固定为 40 字节。IPv6 不…

WPS word 已有多级列表序号

wps的word中,原来已生成的文档里,已存在序号。比如,存在2、2.1、2.1.1、2.1.1.1、2.1.1.1.1 5层序号,而且已分为5级。但增加内容的时候,并不会自动增加序号,应该如何解决? 原来长这样&#xff…

5 个经典的大模型微调技术

传统微调方法(如下图所示)对于大语言模型而言并不可行,因为这些模型具有数百亿甚至千亿的参数量,而且显存需求高达数百GB,并非所有人都能获得如此规模的计算资源。 但如今,我们拥有多种优化大语言模型的微调…

爱耕云课时管理系统评测

1 核心功能模块与代码实现 1.1 智能排课引擎(Python伪代码示例) 爱耕云的排课系统采用约束满足算法(Constraint Satisfaction Problem)解决教培机构最头疼的资源冲突问题。该系统将教师、教室、课程和时间段抽象为多维资源&…

Go的隐式接口机制

正确使用Interface 不要照使用C/Java等OOP语言中接口的方式去使用interface。 Go的Interface的抽象不仅可以用于dynamic-dispatch 在工程上、它最大的作用是:隔离实现和抽象、实现完全的dependency inversion 以及interface segregation(SOLID principle中的I和D)。…

Linux总结

一、Linux linux系统的构成 1.linux系统内核:提供最核心的功能,如:调度CPU、调度内存、调度文件系统、调度网络通信、调度IO等。 2.系统级应用程序:出厂自带程序,可供用户快速上手操作系统。如:文件管理…

嵌入式复习小练

1.ARM处理器中用作程序计数器PC的通用寄存器是() A.R12 B.R13 C.R14 D.R15 答案:D。在 ARM 处理器中,R15 用作程序计数器(PC) ,用于存放下一条要执行指令的地址 2.以下关于ARM程序状态寄存器C…

Python Day41学习(日志Day8复习)

对信贷数据中的离散特征重新进行独热编码 重写代码时出现的问题: .tolist()是一个方法对象,调用时须加()。刚开始书写时漏掉了(),导致报错。 复习“日志Day8”的内容 今日有点事耽搁了,少复习了些内容,明日继续加油&…

入门AJAX——XMLHttpRequest(Post)

一、前言 在上篇文章中,我们已经介绍了 HMLHttpRequest 的GET 请求的基本用法,并基于我提供的接口练习了两个简单的例子。如果你还没有看过第一篇文章,强烈建议你在学习完上篇文章后再学习本篇文章: 🔗入门AJAX——XM…

网络交换机:构建高效、安全、灵活局域网的基石

在数字化时代,网络交换机作为局域网(LAN)的核心设备,承担着数据转发、通信优化和安全防护的关键任务。其通过独特的MAC地址学习、冲突域隔离、VLAN划分等技术,显著提升了网络性能,成为企业、学校、医院等场景不可或缺的基础设施。…

《深入解析SPI协议及其FPGA高效实现》-- 第三篇:FPGA实现关键技术与优化

第三篇:FPGA实现关键技术与优化 聚焦高速时序、资源复用与信号完整性 1. 时序收敛关键策略 1.1 源同步时序约束 tcl # Vivado XDC约束示例 create_generated_clock -name spi_sck -source [get_pins clk_gen/CLKOUT] \-divide_by 1 [get_ports sck]# 建立时间约…

EtherCAT背板方案:方芯半导体工业自动化领域的高速、高精度的通信解决方案

前言:EtherCAT背板方案是一种插拔式设计方案,ESC(EtherCAT从站控制器)之间通过底板信号线相互连接。底板信号线为所支撑的器件提供电源和数据信号。ESC芯片多级从站之间通过LVDS(低压差分信号)接口相连接&a…