目标检测系列之YOLOv2——更好、更快、更强 - 实践

news/2026/1/20 22:32:59/文章来源:https://www.cnblogs.com/ljbguanli/p/19508950

目标检测系列之YOLOv2——更好、更快、更强 - 实践

引言:一篇论文同时提出YOLOv2和YOLO9000,前者在VOC 2007上达到78.6%的mAP和40FPS,后者能实时检测超过9000种物体类别。

在目标检测领域,YOLOv2(又称YOLO9000)是一个里程碑式的工作。2017年CVPR上发表的《YOLO9000: Better, Faster, Stronger》不仅提出了改进的YOLOv2模型,还引入了突破性的YOLO9000,可检测超过9000种物体类别。

本文将详细解析YOLOv2的核心改进及其背后的原理。

一、YOLOv1的局限性:YOLOv2改进的出发点

在聊YOLOv2之前,大家先简要回顾下YOLOv1的不足。YOLOv1即使开创了“单阶段检测”的先河,将目标检测任务转化为单一的回归问题,完成了端到端训练,但存在以下几个明显的缺陷:

  • 定位精度不足:YOLOv1直接预测目标的边界框坐标,缺乏对目标位置的精细约束,对于小目标和密集目标的定位误差较大;

  • 召回率较低:每个网格仅预测2个边界框,难以覆盖图像中多个密集分布的目标,导致部分目标漏检;

  • 对小目标检测效果差:由于网络下采样倍数较大,特征图分辨率较低,小目标的特征信息易丢失,检测精度不理想。

针对以上问题,YOLOv2的作者Joseph Redmon提出了“Better, Faster, Stronger”的改进目标,最终形成了YOLOv2模型。下面大家逐一解析这些改进措施。

二、YOLOv2的核心改进点详解

2.1 网络结构优化:Darknet-19与Batch Normalization

YOLOv1采用的是自定义的24层卷积网络(加2层全连接),而YOLOv2为了提升特征提取能力和训练稳定性,设计了全新的Darknet-19:19个卷积层(采用3×3和1×1卷积交替的方式,减少参数数量)+ 5个最大池化层,最终输出1000类的分类结果(用于预训练)。就是作为主干网络。Darknet-19的结构特点的

除此之外,YOLOv2在每个卷积层后都添加了Batch Normalization(BN层)降低过拟合风险,减少对Dropout的依赖(YOLOv2中移除了Dropout)。实验表明,添加BN层后,YOLOv2的mAP(平均精度均值)提升了2%。BN层的主要步骤如下图所示。就是,这是一个非常关键的改进。BN层的作用主要有两点:一是加速训练收敛,避免梯度消失或爆炸,使得模型可能采用更高的学习率;二

2.2 引入Anchor Boxes:提升定位精度与召回率

YOLOv1最大的障碍之一是直接预测边界框坐标,而YOLOv2借鉴了Faster R-CNN中的Anchor机制,通过预定义的Anchor Boxes来辅助边界框预测,具体改进如下:

  • 移除全连接层:YOLOv1的结果两层是全连接层,直接输出边界框坐标和类别概率,而YOLOv2移除了全连接层,采用卷积层直接预测Anchor Boxes的偏移量和类别信息,避免了全连接层带来的参数冗余和过拟合;

  • 预定义Anchor Boxes:YOLOv2不是手动设计Anchor,而是经过k-means聚类算法(在后面将详细介绍这一步骤),对训练集中的目标边界框进行聚类,得到9个最具代表性的Anchor Boxes(比如适合小目标、中目标、大目标的不同尺寸)。这样的Anchor更贴合数据集中的目标分布,能提升边界框的匹配度;

  • 预测偏移量而非绝对坐标:模型预测的是Anchor Boxes的相对偏移量(Δx, Δy, Δw, Δh),而非绝对坐标。这种方式许可将预测值约束在较小的范围内,便于模型训练和收敛,同时提升定位精度。

引入Anchor机制后,YOLOv2的召回率从69.5%提升到了88%,大幅减少了漏检现象。

2.3 细粒度特征融合:Passthrough Layer

为了解决小目标检测效果差的问题,YOLOv2设计了Passthrough Layer(直通层),实现细粒度特征与高层特征的融合。具体来说:

Darknet-19的最终一个池化层输出的特征图尺寸为13×13×1024(假设输入图像为416×416),而其前面的一个卷积层输出的特征图尺寸为26×26×512(细粒度特征,包含更多小目标的细节信息)。Passthrough Layer将26×26×512的特征图“拼接”成13×13×2048的特征图(依据将26×26的特征图分成4个13×13的子图,然后在通道维度上堆叠),再与13×13×1024的高层特征图拼接,最终得到13×13×3072的融合特征图。

通过经过这种方式,模型能够同时利用高层特征(负责目标类别判断)和细粒度特征(负责小目标定位),显著提升了小目标的检测精度。

2.4 多尺度训练:提升模型鲁棒性

YOLOv2采用了多尺度训练策略,进一步提升模型对不同尺寸目标的适应能力。具体训练过程如下:

在训练过程中,每10个batch就随机选择一个新的输入图像尺寸(从{320, 352, ..., 608}中选择,步长为32,因为网络下采样倍数为32)。这样一来,模型可以在不同尺度的图像上进行训练,学会适应不同尺寸的目标,从而提升在测试时对各种尺寸目标的检测效果。

通过需要注意的是,当输入图像尺寸减小时,模型的推理速度会更快;当尺寸增大时,精度会更高。因此,YOLOv2能够根据实际应用场景(如实时监控、自动驾驶)的需求,灵活调整输入尺寸,在速度和精度之间做权衡。

2.5 其他改进:高分辨率预训练与联合训练

除了上述核心改进外,YOLOv2还有两个细节改进:

  • 高分辨率预训练:YOLOv1的预训练是在ImageNet上采用224×224的输入尺寸,而YOLOv2在预训练的最后阶段,将输入尺寸提升到448×448,进行10个epoch的微调。这样可以让模型提前适应高分辨率图像的特征,为后续目标检测任务(通常输入尺寸较大)打下基础;

  • 分类与检测联合训练:YOLOv2采用了“分类数据集(ImageNet)+ 检测数据集(VOC/COCO)”联合训练的方式。先在ImageNet上进行分类预训练,再在检测数据集上微调,同时优化分类损失和检测损失。这种方式可以充分利用大量的分类数据,提升模型的特征提取能力。

三、YOLOv2的网络结构

网络结构图如图所示,

分支1:直接输出分支

特征图尺寸:经过Darknet-19后,第一个分支直接输出的特征图尺寸为13×13×1024。

CBL模块:该特征图通过一个CBL(卷积-批归一化-激活函数)模块进行处理。

特征图保持不变:经过CBL模块处理后,特征图尺寸仍然是13×13×1024。

分支2:特征融合分支Passthrough Layer

特征图提取:从Darknet-19网络结构的中间某一层(26×26×512)提取特征图。

CBL模块:该特征图依据一个CBL模块进行处理。

特征图降维:处理后的特征图通过一个1×1卷积层进行降维,尺寸变为26×26×64。

重组(reorg):降维后的特征图通过重组操控变为13×13×256。重组操作实际上是将特征图的空间维度进行压缩,同时增加通道维度,以便与另一个分支的特征图进行融合。

特征图拼接/融合:将重组后的特征图(13×13×256)与上采样的特征图(13×13×1024)进行拼接,得到13×13×1280的特征图。

融合后的处理

CBL模块:拼接后的特征图通过一个CBL模块处理后,特征图尺寸为13×13×1024。

预测层(Pred):最终的特征图通过预测层进行处理,输出最终的检测结果。输出的特征图尺寸为13×13×K(1+C+4),其中:

K:每个网格单元预测的边界框数量。

C:类别数量。

4:边界框的坐标信息(x, y, w, h)。

2、Convolutional - 全卷积网络(FCN)

Reorg层如何工作?

Reorg层核心是空间→通道的特征重组(类似PyTorch PixelUnshuffle),目的是匹配深浅层特征维度以实现融合。浅层特征图尺寸大、细节多但通道少,深层则相反,Reorg层可降低浅层空间尺寸、提升通道数,实现维度适配。

Reorg层仅重组像素,不做聚合运算,以[256,26,26]输入为例说明流程(特征图格式[Channels, Height, Width]):

步骤1. 输入特征图设定

输入:浅层特征图[256,26,26],细节丰富但通道少,无法直接与深层[1024,13,13]融合。

步骤2. 核心重组操作

采用2×2窗口、步幅2滑动采样,将每个窗口内4个像素沿通道堆叠,维度规律:高/宽=原尺寸/步幅,通道数=原通道数×4。

步骤3. 输出特征图结果

输出:[1024,13,13],与深层特征图维度匹配,可直接拼接融合。

Reorg层作用

1. 维度匹配:解决深浅层特征维度不兼容问题,支撑跨层融合;

2. 信息保留:不丢弃像素,保留浅层细节,提升小目标检测精度;

3. 轻量化:无额外参数,不增加计算量,契合YOLOv2快准需求。

YOLOv2 的完整流程:

输入图像:416×416 → DarkNet-19 提取特征。

浅层特征:第 12 层(26×26×512)→ Passthrough 重组 → 13×13×2048。

深层特征:第 19 层(13×13×1024)→ 与重组特征拼接 → 13×13×3072。

预测层:对融合后的特征进行卷积,输出检测结果。

k-means聚类算法解析:

1. 初始化聚类中心:从所有目标框中随机选取k个框作为初始聚类中心(需避免初始值过于集中,可采用随机抽样多次初始化取最优结果);

2. 分配样本:计算每个目标框与k个聚类中心的IOU距离,将该目标框分配到距离最小(即IOU最大)的聚类中心所在簇;

3. 更新聚类中心:对每个簇内的所有目标框,计算其宽和高的平均值,将该平均值作为新的聚类中心;

4. 终止迭代:重复步骤2-3,直到聚类中心的变化量小于预设阈值(如宽高变化均小于0.001),或达到最大迭代次数(如1000次),此时聚类中心即为最终的先验框尺寸。

四、YOLOv2损失函数

YOLOv2损失函数延续“端到端”优化思路,在初代YOLO基础上优化了定位损失计算,整体为多任务损失加权和,涵盖坐标损失、置信度损失、类别损失三部分,核心目标是同时优化目标定位精度、前景背景区分能力和类别预测准确性。

实在是懒得打字和公式了,这里放个的截图。。。。

4.1 整体结构

4.2 各部分损失

五、YOLO9000——迈向超大规模的实时检测

核心疑问:检测内容集的局限性

  • 像 COCO 这样的检测数据集,只有80 类别,标注成本极高。

  • 像 ImageNet 这样的分类数据集,有上千个类别(最多可达 22000 个),标注成本相对较低,但只有类别标签,没有边界框位置信息。

目标:如何利用海量的分类信息来增强检测模型,使其能识别成千上万的类别?

答案:联合训练

YOLO9000 的巧妙之处在于,它同时检测数据集分类数据集上进行训练。

  1. 训练流程

    • 当输入是 检测图片(如来自 COCO)时,整个损失函数(定位损失 + 置信度损失 + 分类损失)都会进行反向传播,更新全部网络参数。

    • 当输入是 分类图片(如来自 ImageNet)时,只计算和反向传播分类损失。对于定位部分(边界框预测)的损失则忽略不计。

  2. 关键挑战:标签体系融合

    • COCO 的 “狗” 和 ImageNet 的 “哈士奇”、“金毛” 不是同一个概念层级。

    • 解决方案:构建一个 联合词库

      • 将检测内容集和分类数据集的类别标签映射到一个** WordTree**(一种分层树状结构,基于 WordNet)。

      • 例如,“诺福克梗犬” -> “梗犬” -> “猎犬” -> “狗” -> “哺乳动物” -> “物体”。

    • 细粒度的 “哈士奇”,但它们在整个 WordTree 中共享从 “狗” 到 “物体” 的路径。就是这样,一个物理上的 “狗” 在 COCO 里可能是粗粒度的 “狗”,在 ImageNet 里则

  3. 条件概率分类

    • 预测就是在 WordTree 中,模型不是直接预测 9000 多个类别的绝对概率,而条件概率

    • 例如,要预测一张图片是 “诺福克梗犬”,模型需要依次判断:

      • 。就是这是 “物体” 吗? ->

      • 。就是是 “动物” 吗? ->

      • 是 “哺乳动物” 吗? -> 是。

      • 。就是是 “狗” 吗? ->

      • 是 “梗犬” 吗? -> 是。

      • 是 “诺福克梗犬” 吗? -> 是。

    • 最终的预测概率是这条路径上所有条件概率的乘积:P(诺福克梗犬) = P(物体) * P(动物|物体) * P(哺乳动物|动物) * P(狗|哺乳动物) * P(梗犬|狗) * P(诺福克梗犬|梗犬)。

    • ,即使模型在训练时没有见过 “诺福克梗犬” 的检测框,但只要它在分类图片中见过,并且其父类别(如 “狗”)在检测数据集中出现过,它就有机会通过条件概率正确地识别出来。就是这种方法的优点

YOLO9000 的成果与局限

  • 成果:通过这种联合训练方法,YOLO9000 在 COCO 检测数据集上保持了竞争力的性能(mAP),同时能够实时检测超过9000 物体类别。

  • 局限

    • 其检测能力受限于分类数据集的覆盖范围。如果某个类别在分类数据集中不存在,模型就无法检测它。

    • 由于分类图片没有位置信息,模型对于这些新增类别的定位精度可能不如在检测数据集上充分训练过的类别。

原文:YOLO9000: Better, Faster, Stronger

原文作者:Joseph Redmon , Ali Farhadi

原文连接:https://arxiv.org/pdf/1612.08242

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

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

相关文章

垃圾处理器真实体验测评:5款热门机型使用体验全解析

垃圾处理器真实体验测评:5款热门机型使用体验全解析作为一个家电测评作者,我测试过超过20款垃圾处理器,而我自己的家庭使用垃圾处理器也已经超过5年。今天,我不谈枯燥的参数,只想和你分享真实的使用体验:垃…

5款AI PPT工具测评:免费好用的AI PPT工具推荐,真

5款AI PPT工具测评:免费好用的AI PPT工具推荐作为一名在职场摸爬滚打多年的打工人,我深知做 PPT 的痛苦。多少次,我都在深夜为了一份 PPT 绞尽脑汁,好不容易做好了,老板却突然提出新的需求,一切又得从头再来…

2026年五大营销全案策划咨询公司,哪家比较靠谱?

摘要:2026 年国内消费市场进入 “存量博弈 需求分层” 阶段,企业核心需求从短期流量增长转向长期品牌与业绩双增长,专业营销策划咨询公司的体系化助力成为刚需。本文以 “解决企业实际增长问题” 为核心,构建 “战略深度、落地效…

大数据毕设项目推荐-基于机器学习的房子价值预测系统的设计与实现python房价预测系统的设计与实现【附源码+文档,调试定制服务】

java毕业设计-基于springboot的(源码LW部署文档全bao远程调试代码讲解等) 博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、…

OIFC 2026省选 0119

*歌 song 大胆容斥。 序列可被看成若干段,每一段元素不重,且除首尾段外,其余长度 \(k\)。考虑枚举首段长度 \(l\),我们想钦定这是第一段长度最小的划分方式,于是考虑把划分点向前平移一定长度,则每一段都被分为两…

【新】基于SSM的毕业生就业管理系统【源码+文档+调试】

💕💕发布人: 星河码客 💕💕个人简介:混迹java圈十余年,精通Java、小程序、数据库等。 💕💕各类成品Java毕设 。javaweb,ssm,springboot等项目&…

教学思考

我今天汇报的这个题目是我在跟一线老师接触过后,零零散散的一些这种思考。其实 一直没有机会把它很系统的进行一个梳理。也感谢我们今天没有在场的闫世刚老师,他要请我来做这个报告。 所以我觉得做报告是个非常好的一…

有没有简单的发版工具

根据您的需求,我为您整理了几款简单好用的发版工具,按由易到难排序:🤖 平台集成型(最推荐新手)1. GitHub Actions难度:★★☆☆☆特点:如果你代码托管在GitHub,这是最简单…

拆解 TCP 协议:头部结构、序号机制与滑动窗口实战

一、 TCP 协议本质:数据的组织形式 所谓的“协议”,本质上就是通信双方约定好的一种数据组织格式。这就好比写信,信封上哪里写邮编、哪里写地址,必须按规定来,邮局才能识别。 在 C 语言中,TCP 头部其实就是一个结构体。虽然 PC 机内存默认采用小端存储(Little-Endian)…

2020年山东CSP-X复赛真题解析

​欢迎大家订阅我的专栏:算法题解:C与Python实现! 本专栏旨在帮助大家从基础到进阶 ,逐步提升编程能力,助力信息学竞赛备战! 专栏特色 1.经典算法练习:根据信息学竞赛大纲,精心挑选…

云账户开发平台什么功能

根据搜索结果,云账户开发平台(指云账户(天津)有限公司)是专为平台企业和新就业形态劳动者提供灵活就业服务的综合服务平台。其开发平台主要通过 SDK和API接口 形式提供服务,核心功能包括:一、技…

12款项目管理软件对比清单:PingCode、Worktile、Jira、MS Project全覆盖

本文将深入对比12款项目管理工具:PingCode、Worktile、Jira、Microsoft Project、Asana、monday.com、ClickUp、Wrike、Smartsheet、Trello、Basecamp、Teambition。一、项目管理工具选型的目标有哪些很多团队选项目管理工具时,第一反应是“把任务管起来…

大数据计算机毕设之基于机器学习的房子价值预测系统的设计与实现基于python的机器学习房价预测可视化系统(完整前后端代码+说明文档+LW,调试定制等)

java毕业设计-基于springboot的(源码LW部署文档全bao远程调试代码讲解等) 博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、…

C++ 中全局 / 静态对象的生命周期细节

一、全局 / 静态对象的核心分类首先明确范畴,避免概念混淆:类型定义位置 / 特征示例全局对象定义在所有函数(包括 main)之外Test g_obj;(全局作用域)静态对象用static修饰,分两种:1.…

大数据领域分布式计算的面试技巧分享

大数据领域分布式计算的面试技巧分享 关键词:分布式计算、大数据面试、面试技巧、高频考点、项目经验 摘要:本文专为准备大数据岗位面试的求职者设计,深度解析分布式计算领域的面试考察逻辑。通过“知识体系搭建-高频问题拆解-项目经验包装-实…

C++11 针对「全局 / 静态对象」的核心改进

一、C11 针对「全局 / 静态对象」的核心改进1. 函数内静态局部对象的线程安全初始化这是对全局 / 静态对象最核心的改进,直接解决了 C11 前的高频坑点:C11 前的问题:多线程同时首次调用含静态局部对象的函数(比如func()里的static…

大数据毕设项目:基于机器学习的房子价值预测系统的设计与实现(源码+文档,讲解、调试运行,定制等)

java毕业设计-基于springboot的(源码LW部署文档全bao远程调试代码讲解等) 博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、…

全网最全2026本科生AI论文写作软件TOP10:开题报告文献综述神器推荐

全网最全2026本科生AI论文写作软件TOP10:开题报告文献综述神器推荐 2026年本科生AI论文写作工具测评:从功能到体验的全面解析 随着人工智能技术的不断进步,越来越多的本科生开始依赖AI写作工具来提升论文撰写效率。然而,面对市场上…

云原生k8s01 kubeasz搭建k8s, 搭建dashboard, kuboard

1.2:服务器准备: 操作系统都是ubuntu24.04 3个master: master节点4C8G可管理几百个pod; 8C16G可管理上千个pod; 16C24G可管理几千个类型服务器IP备注K8S Master1 10.0.0.101 保证主节点时间同步K8S Master2 10.0.0.…

系统思考:小行动大影响

本期的学习实验室《小行动大影响》,我们把注意力从“我要多做什么”,转向了一个更关键的问题:哪一个一小步,值得我现在就去做? 我们带着三个有力量的洞见开展团队学习:1、小行动之所以大,不在于…