计算机视觉---YOLOv2

YOLOv2讲解

一、YOLOv2 整体架构与核心特性

YOLOv2(You Only Look Once v2)于2016年发布,全称为 YOLO9000(因支持9000类目标检测),在YOLOv1基础上进行了多项关键改进,显著提升了检测精度和速度,同时首次实现了目标检测与分类的联合训练。

二、YOLOv2 网络结构详解
1. 主干网络:Darknet-19
  • 设计目标:相比YOLOv1的Darknet-20,减少计算量并保持精度。
  • 结构特点
    • 由19个卷积层和5个最大池化层组成,最终通过全局平均池化输出特征。
    • 卷积层采用 1×13×3 交替堆叠,降低参数量(YOLOv1为24个卷积层)。
    • 引入 批量归一化(Batch Normalization, BN):所有卷积层后均添加BN,提升收敛速度,减少过拟合。
  • 输出特征:输入图像经Darknet-19后,生成 13×13×1024 的特征图(输入尺寸为416×416时)。
    在这里插入图片描述
2. 检测头与锚框机制(锚框常也被称作先验框)
  • 锚框(Anchor Boxes)的引入

    • YOLOv1问题:直接预测边界框坐标,缺乏先验信息,定位精度低。

    • YOLOv2改进:借鉴Faster R-CNN的锚框机制,通过 K-Means聚类 从训练数据中自动学习锚框尺寸,共生成 5种锚框(YOLOv1无锚框)。

    • 在这里插入图片描述

    • 优势

      • 召回率从YOLOv1的81%提升至88%,允许模型预测更多边界框。
      • 简化网络学习任务(仅需预测锚框的偏移量和尺度,而非绝对坐标)。
        在这里插入图片描述
  • 边界框预测

    • 放弃YOLOv1的直接坐标预测,采用 逻辑斯蒂回归 预测锚框的中心坐标偏移量 ( t x , t y ) (t_x, t_y) (tx,ty)、尺度 ( t w , t h ) (t_w, t_h) (tw,th) 和置信度 t o t_o to

    • 坐标公式:
      在这里插入图片描述
      在这里插入图片描述

    • 优势:通过 σ \sigma σ 函数将中心坐标约束在网格内,避免YOLOv1的坐标预测发散问题。

3. 多尺度训练(Multi-Scale Training)
  • YOLOv1问题:固定输入尺寸为448×448,部署时缺乏灵活性。
  • YOLOv2策略
    • 训练过程中每10 batches随机选择输入尺寸(320×320, 352×352, …, 608×608),步长为32(因下采样5次,32=2^5)。
    • 网络自动适应不同尺寸,小尺寸下速度更快(如320×320时帧率更高),大尺寸下精度更高。
  • 优势:提升模型泛化能力,无需重新训练即可适应不同硬件环境。
4. 细粒度特征(Fine-Grained Features)与Passthrough层
  • YOLOv1问题:仅使用最后一层特征图(13×13),缺乏细粒度信息,小目标检测能力弱。
  • YOLOv2改进
    • 在Darknet-19后添加 Passthrough层(类似特征金字塔网络FPN),将前一层26×26×512的特征图通过 通道叠加(Channel Concatenation)与13×13×1024的特征图融合。
    • 具体操作:将26×26×512的特征图进行 像素重排列(Pixel Shuffle),转化为13×13×2048的特征图,与深层特征结合,增强小目标检测能力。
      在这里插入图片描述
5. 更高分辨率的预训练
  • YOLOv1预训练:在ImageNet上使用224×224分辨率预训练,检测时提升至448×448,分辨率跳跃大,导致训练初期不稳定。
  • YOLOv2预训练
    • 先在ImageNet上用448×448分辨率预训练10 epochs,再微调检测任务。
    • 优势:缩小预训练与检测阶段的分辨率差距,提升特征提取能力。
6. 联合训练(Joint Training)与YOLO9000
  • 目标同时训练检测数据(如VOC)和分类数据(如ImageNet),扩展检测类别至9000类。
  • 技术实现
    • 分类数据仅含标签无边界框,需设计统一输出格式。
    • WordTree结构:将分类标签构建为树状结构(如“狗”包含多个品种),检测时通过树结构合并概率分布。
    • 损失函数中,检测样本计算全部损失,分类样本仅计算分类损失。
  • 效果:成功检测ImageNet中未标注边界框的类别(如“蝴蝶”),验证了联合训练的有效性。
三、YOLOv2 对比 YOLOv1 的核心改进
改进点YOLOv1YOLOv2效果/原因
主干网络Darknet-20(24卷积层)Darknet-19(19卷积层+BN)减少计算量,BN提升收敛速度,降低过拟合。
锚框机制引入5种K-Means聚类锚框召回率从81%→88%,定位精度提升,模型更易优化。
边界框预测直接预测绝对坐标预测锚框偏移量+逻辑斯蒂回归坐标约束在网格内,避免发散,提升稳定性。
多尺度训练固定448×448动态调整输入尺寸(320×320~608×608)提升泛化能力,适应不同硬件,兼顾速度与精度。
细粒度特征融合Passthrough层融合26×26与13×13特征图增强小目标检测能力(小目标在浅层特征中更清晰)。
预训练分辨率224×224→448×448(跳跃大)448×448预训练+微调减少分辨率差距,特征更贴近检测任务。
批量归一化仅部分层使用所有卷积层后添加BN消除Internal Covariate Shift,提升训练稳定性。
损失函数定位损失权重固定(λ_coord=5)可能调整权重或引入锚框置信度损失未明确文档,但锚框机制间接优化了损失函数设计。
数据增强与正则化随机裁剪、翻转等增强数据增强(如HSV颜色扰动)提升模型对颜色、光照变化的鲁棒性。
检测类别与训练策略仅支持VOC等小数据集联合训练检测与分类数据(YOLO9000)扩展至9000类,利用海量分类数据提升泛化能力。
速度与精度平衡mAP@VOC2007约63.4%,FPS≈45(GPU)mAP@VOC2007提升至78.6%,FPS≈67(GPU)精度显著提升,速度因优化结构未下降反升,实现更好的trade-off。
四、YOLOv2 性能总结
  • 精度:在VOC2007数据集上,mAP从YOLOv1的63.4%提升至78.6%,接近当时领先的Faster R-CNN(78.8%)和SSD(77.2%),但速度更快。
  • 速度:在Titan X上,输入416×416时FPS约67,输入608×608时FPS约40,兼顾实时性与高精度。
  • 创新意义
    • 首次将锚框机制与YOLO结合,奠定后续YOLO系列基础。
    • 多尺度训练、特征融合等策略成为目标检测的通用技术。
    • YOLO9000开创“弱监督检测”思路,为大数据场景提供新方向。
五、YOLOv2 的局限性
  • 小目标检测:虽引入Passthrough层,但仅融合一层浅层特征,效果有限(后续YOLOv3通过多尺度特征金字塔进一步优化)。
  • 锚框数量:仅使用5种锚框,对复杂场景覆盖不足(YOLOv3增加至9种)。
  • 正负样本分配:沿用YOLOv1的启发式分配策略,可能导致训练低效(后续版本通过IOU阈值或标签分配算法改进)。

总结

YOLOv2通过锚框机制、多尺度训练、特征融合、BN等一系列改进,在保持实时性的同时显著提升了检测精度,并首次实现了跨数据集的联合训练,为YOLO系列的后续发展(如YOLOv3、v4、v5)奠定了关键基础。其设计思路(如平衡速度与精度、数据增强、特征融合)至今仍被广泛借鉴。


YOLO中的锚框机制(Anchor Boxes)

一、锚框机制的起源与核心思想

锚框(Anchor Boxes) 最早由 Faster R-CNN 提出,用于解决目标检测中边界框预测的多样性问题。YOLO 在 v2版本 中引入锚框机制,显著提升了检测精度(尤其是定位精度)。其核心思想是:

  • 在特征图的每个网格(Grid Cell)中预设多个具有不同尺度和比例的边界框(即锚框),作为目标检测的“先验框”
  • 模型通过学习对这些锚框的位置、尺寸进行调整,从而更灵活地预测不同形状的目标。
二、YOLOv2引入锚框的背景与动机

YOLOv1 中,每个网格直接预测边界框的绝对坐标(x, y, w, h),存在两大缺陷:

  1. 定位精度低:直接预测坐标难度大,尤其是对不同尺度的目标泛化能力不足。
  2. 边界框多样性不足:每个网格仅预测2个边界框,难以覆盖数据集中目标的多种形状(如高瘦、宽扁物体)。

YOLOv2引入锚框的目标

  • 通过预设锚框提供边界框的“先验信息”,降低模型学习难度。
  • 增加边界框的多样性,提升召回率(Recall)和定位精度
三、锚框的生成:K-Means聚类算法

YOLOv2采用 无监督聚类算法 自动确定锚框的尺寸和比例,而非手动设计(如Faster R-CNN),步骤如下:

  1. 数据准备使用训练集中所有真实框(Ground Truth Boxes)的宽高作为输入
  2. 距离度量:定义聚类的距离函数为 1 - IOU(box, centroid),即锚框与真实框的交并比(IOU)越大,距离越近(传统K-Means使用欧氏距离,不适合边界框尺寸聚类)。
  3. 聚类过程
    • 预设聚类中心数量 k(YOLOv2默认 k=5,YOLOv3扩展为 k=9)。
    • 通过迭代更新聚类中心,使所有真实框与最近锚框的IOU均值最大化。
  4. 优势:生成的锚框更贴合数据集的目标分布,提升检测效率。
四、锚框在特征图上的应用

YOLOv2 为例(输入图像尺寸为 416×416,输出特征图尺寸为 13×13):

  1. 网格与锚框的对应关系

    • 每个网格负责预测 k 个锚框(YOLOv2中 k=5)。
    • 每个锚框对应一组预测参数:(t_x, t_y, t_w, t_h, t_o),分别表示:
      • t_x, t_y:锚框中心坐标的偏移量(相对于网格左上角)。
      • t_w, t_h:锚框宽高的缩放因子。
      • t_o:置信度(Confidence),表示锚框内存在目标的概率。
  2. 从预测值到真实坐标的转换
    设某网格的左上角坐标为 (c_x, c_y),锚框的先验宽高为 (p_w, p_h),则预测的边界框坐标计算如下:

    • 中心坐标

      b x = σ ( t x ) + c x , b y = σ ( t y ) + c y b_x = \sigma(t_x) + c_x, \quad b_y = \sigma(t_y) + c_y bx=σ(tx)+cx,by=σ(ty)+cy
      其中,σ 为Sigmoid函数,确保 b_x, b_y 位于当前网格内。

    • 宽高
      b w = p w ⋅ e t w , b h = p h ⋅ e t h b_w = p_w \cdot e^{t_w}, \quad b_h = p_h \cdot e^{t_h} bw=pwetw,bh=pheth

      通过指数函数允许宽高缩放至任意大小。

    • 置信度

      C o n f i d e n c e = σ ( t o ) Confidence = \sigma(t_o) Confidence=σ(to)
      表示预测框与真实框的IOU值(训练时)或目标存在的概率(推理时)。

五、YOLOv2对比YOLOv1:锚框带来的改进
改进点YOLOv1YOLOv2(引入锚框)
边界框预测方式直接预测绝对坐标 (x, y, w, h)基于锚框的偏移量预测 (t_x, t_y, t_w, t_h)
每个网格的边界框数量2个k=5个(通过聚类生成)
召回率(Recall)较低(约81%)显著提升(约88%)
定位精度(IOU)较低更高(锚框先验提供更优初始值)
全连接层存在(用于预测坐标)移除(全卷积结构,支持任意输入尺寸)
输入尺寸固定 448×448调整为 416×416(奇数倍32,确保特征图有单一中心网格,利于检测大目标)
六、YOLOv3中的锚框机制:多尺度预测

YOLOv3进一步扩展锚框机制,引入 多尺度特征图预测,解决不同尺寸目标的检测问题:

  1. 三尺度特征图

    • 输入图像尺寸:608×608,输出特征图尺寸分别为 76×76(小目标)、38×38(中目标)、19×19(大目标)。
    • 每个尺度对应 3个锚框,共9个锚框(通过聚类生成),分配方式:
      • 小目标(76×76):(10×13), (16×30), (33×23)
      • 中目标(38×38):(30×61), (62×45), (59×119)
      • 大目标(19×19):(116×90), (156×198), (373×326)
  2. 多尺度的优势

    • 小尺度特征图(如 19×19)感受野大,适合检测大目标;大尺度特征图(如 76×76)保留更多细节,适合检测小目标。
    • 每个尺度的锚框尺寸与目标尺寸匹配,提升各尺度目标的检测精度。
七、锚框机制的训练与损失函数
  1. 正负样本分配

    • 正样本:与真实框IOU最大的锚框,或IOU超过阈值(如0.5)的锚框(不同实现可能不同)。
    • 负样本:与真实框IOU低于阈值且未被选为正样本的锚框。
    • 忽略样本:部分实现中,对IOU高但非匹配真实框的锚框不计算损失(如YOLOv3)。
  2. 损失函数设计
    YOLOv2/v3的损失函数分为三部分:

    • 坐标损失预测框与真实框的坐标误差,通常对小目标赋予更高权重(如使用平方根或对数变换)。
    • 置信度损失:正样本的置信度接近真实IOU,负样本的置信度接近0,采用二元交叉熵(BCE)损失。
    • 类别损失:仅对正样本计算类别概率损失,同样使用BCE或交叉熵损失。
八、锚框机制的优缺点与争议
  • 优点

    1. 提供边界框先验,降低模型学习难度,提升定位精度。
    2. 通过聚类适应不同数据集,增强泛化能力。
    3. 多尺度锚框结合特征金字塔,提升对不同尺寸目标的检测能力。
  • 缺点

    1. 锚框数量和尺寸需手动或自动确定,对小目标检测仍需优化(如增加小锚框数量)。
    2. 计算量随锚框数量增加而上升(但YOLO通过轻量级主干网络缓解)。
  • 争议与后续发展
    部分无锚框(Anchor-Free)检测器(如CenterNet、YOLOv8-NAS)尝试摒弃锚框,直接预测目标中心点和尺寸,避免锚框设计的复杂性,但锚框机制在YOLO系列中仍为核心技术之一。

九、总结:锚框机制的技术价值

锚框机制是YOLO从v1到v2/v3进化的关键创新,其核心贡献包括:

  1. 引入先验知识:通过聚类生成的锚框贴合数据分布,提升边界框初始化质量。
  2. 提升多样性与召回率:每个网格预测多个锚框,覆盖更多目标形状,避免YOLOv1的边界框匮乏问题。
  3. 多尺度扩展基础:为YOLOv3的多尺度检测提供了框架,结合特征金字塔网络(FPN),成为现代目标检测的标配技术。

通过锚框机制,YOLO在保持速度优势的同时,显著提升了检测精度,奠定了其在实时检测领域的地位。


我们大部分时间都在害怕失败与拒绝,但后悔或许才是最该害怕的事。 —特雷弗·诺亚

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

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

相关文章

【深度学习】1. 感知器,MLP, 梯度下降,激活函数,反向传播,链式法则

一、感知机 对于分类问题,我们设定一个映射,将x通过函数f(x)映射到y 1. 感知机的基本结构 感知机(Perceptron)是最早期的神经网络模型,由 Rosenblatt 在 1958 年提出,是现代神经网络和深度学习模型的雏形…

IP、子网掩码、默认网关、DNS

IP、子网掩码、默认网关、DNS 1. 概述1.1 windows配置处 2.IP 地址(Internet Protocol Address)2.1 公网ip2.2 内网ip2.3 🌐 公网 IP 与内网 IP 的关系(NAT) 3. 子网掩码(Subnet Mask)4. 默认网…

Azure 公有云基础架构与核心服务:从基础到实践指南

🔥「炎码工坊」技术弹药已装填! 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 一、基础概念 Azure 的基础架构由多个核心组件构成,理解这些概念是掌握其技术框架的第一步: 地理区域(Geographic R…

Ajax01-基础

一、AJAX 1.AJAX概念 使浏览器的XMLHttpRequest对象与服务器通信 浏览器网页中,使用 AJAX技术(XHR对象)发起获取省份列表数据的请求,服务器代码响应准备好的省份列表数据给前端,前端拿到数据数组以后,展…

使用防火墙禁止程序联网(这里禁止vscode)

everything搜一下Code.exe的安装路径:D:\downloadApp1\vscode\Microsoft VS Code\Code.exe 方法:使用系统防火墙(推荐) Windows 通过防火墙阻止 VS Code: 打开 Windows Defender 防火墙(控制面板 > 系统…

微信小程序 隐私协议弹窗授权

开发微信小程序的第一步往往是隐私协议授权,尤其是在涉及用户隐私数据时,必须确保用户明确知晓并同意相关隐私政策。我们才可以开发后续的小程序内容。友友们在按照文档开发时可能会遇到一些问题,我把所有的授权方法和可能遇到的问题都整理出…

JVM规范之栈帧

JVM规范之栈帧 前言正文概述局部变量表操作数栈动态链接 总结参考链接 前言 上一篇文章了解了JVM规范中的运行时数据区: JVM规范之运行时数据区域 其中,栈是JVM线程私有的内存区,栈中存储的单位是帧(frames)&#xff…

SGMD辛几何模态分解

SGMD辛几何模态分解 运行包含频谱图相关系数图 Matlab语言 算法近几年刚提出,知网还没几个人用,你先用,你就是创新! 算法新颖小众,用的人很少,包含分解图、频谱图、相关系数图,效果如图所示&a…

计算机网络总结(物理层,链路层)

目录 第一章 概述 1.基本概念 2.- C/S模式,B/S模式,P2P模式 3.- LAN,WAN,MAN,PAN的划分 4.电路交换与分组交换,数据报交换和虚电路交换 第二章 物理层 1.信号编码:不归零编码,曼切斯特编码 2.几种复用技术的特…

台系厂商SSD主控之争:Phison对决SMI

近日,台系SSD主控厂商Phison和Silicon Motion之间围绕主控性能的争论引发关注,焦点集中在Gen5 SSD的功耗和速度等关键指标上。 Phison的E28 Gen5 SSD控制器已推出一段时间,是市场上一些最快存储设备的“心脏”。其主要竞争对手Silicon Motion…

医学影像科研概述与研究伦理

关键要点 医学影像科研通过开发和优化影像技术(如X射线、CT、MRI等)推动疾病诊断和治疗进步。研究需遵循核心伦理原则:受益(为患者和社会带来益处)、无害(避免伤害)、自主(尊重患者选择权)和公正(公平对待参与者)。医学影像科研的特殊伦理问题包括知情同意、隐私保护…

使用 kafka-console-consumer.sh 指定时间或偏移量消费

1、问题来源 在工作中需要观察上游生产的数据顺序和自己写的任务处理数据的顺序是否一致,尝尝需要将kafka中的指定时间或者偏移量开始的数据导出来分析,如果每次都导数据都是从头开消费导全量,往往少则几个G多则几十G的数据,导出…

构建Harbor私有镜像库

软硬件环境清单 环境搭建 部署Euler22.0系统,连接xshell: 关闭防火墙和selinux,设置主机名: systemctl stop firewalld systemctl disable firewalld vi /etc/selinux/config hostnamectl set-hostname harbor reboot 修改静态…

分布式缓存:缓存设计中的 7 大经典问题_缓存失效、缓存穿透、缓存雪崩

文章目录 缓存全景图Pre缓存设计中的 7 大经典问题一、缓存失效1. 问题描述2. 原因分析3. 业务场景4. 解决方案 二、缓存穿透1. 问题描述2. 原因分析3. 业务场景4. 解决方案缓存空结果BloomFilter 过滤BloomFilter 原理简述 三、缓存雪崩1. 问题描述2. 原因分析3. 业务场景4. 解…

Mysql差异备份与恢复

1.练习差异备份 差异备份:备份完全备份后,新产生的数据。 在192.168.88.50主机完成差异备份 步骤一:练习差异备份//周一完全备份 mysql> select * from test.one; --------------------- | name | age | sex | ------------------…

【Fargo】razor框架调用mediasoup的发送和接收能力

功能进行拆分,创建独立的发送和接收线程,并实现跨线程的数据传递。创建一个简化的主函数,展示如何使用这些新的接口线程隔离是通过包队列实现的,实际上可以用webrtc的post 跨线程机制? 需求 主要有两个需求:启动接收线程接收数据的接口 启动发送线程,但是数据来自于sim_…

C++——volatile

Cvolatile关键字 volatile是C中的一个关键字,用于修饰变量,表示该变量的值可能会在程序的控制之外被改变。它主要告诉编译器不要对这个变量进行优化,确保每次访问变量时都从实际存储位置读取最新值,而不是依赖寄存器中的缓存值。…

搭建自己的语音对话系统:开源 S2S 流水线深度解析与实战

网罗开发 (小红书、快手、视频号同名) 大家好,我是 展菲,目前在上市企业从事人工智能项目研发管理工作,平时热衷于分享各种编程领域的软硬技能知识以及前沿技术,包括iOS、前端、Harmony OS、Java、Python等…

qt浏览文件支持惯性

#include <QApplication> #include <QListWidget> #include <QScroller> #include <QScrollerProperties>int main(int argc, char *argv[]) {QApplication app(argc, argv);// 创建列表控件并添加示例项QListWidget listWidget;for (int i 0; i <…

路径规划算法BFS/Astar/HybridAstar简单实现

借鉴本文所述代码简单实现一下BFS&#xff0c;Astar和HybridAstar路径规划算法&#xff0c;用于辅助理解算法原理。 代码在这里&#xff0c;画图用到了matplotlibcpp库&#xff0c;需要先装一下&#xff0c;然后直接在文件目录下执行如下代码即可运行&#xff1a; mkdir build…