YOLO演变史(一)

在YOLOV1发布后,作者并没有满足于此,而是持续对YOLO进行了改进。

YOLOV2:Better, Faster, Stronger

YOLOv2(又称YOLO9000)发表于2017年CVPR,是YOLO系列的第二代版本。其论文标题“Better, Faster, Stronger”直观体现了其三大改进目标:更高的精度、更快的速度和更强的能力。YOLOv2在mAP(平均精度)上达到了当时最高水平,同时速度远超前代,成为实时目标检测领域的标杆。

Better部分:精度提升的改进

1.引入BN层(Batch Normalization Layer)
作用:
BN层对每一层的输入进行归一化处理,通过规范化每批数据的均值和方差(均值为0,方差为1),加速训练收敛并减少过拟合。
具体操作:
对输入 xxx 计算 x^=x−μσ2+ϵ\hat{x} = \frac{x - \mu}{\sqrt{\sigma^2 + \epsilon}}x^=σ2+ϵxμ,再通过可学习的参数 γ\gammaγβ\betaβ 进行缩放和偏移。

作者在卷积层后加入BN层,使训练过程更稳定,收敛速度更快。同时,BN层减少了对Dropout等正则化技术的依赖,作者甚至在YOLOv2中移除了Dropout层。
BN层的引入降低了对参数初始化的敏感性,允许使用更高的学习率。提供轻微正则化效果,提升模型泛化能力。
简单来说,BN层就像一个“调音师”,让网络各层输出更“和谐”,训练更稳、更快。

2.更高分辨率的分辨器
改进:
YOLOv1使用448×448的输入分辨率,而YOLOv2调整为416×416(适配特征图网格划分),并在训练时使用更高分辨率的图像。更高的分辨率使网络能捕捉更细致的特征,尤其提升了对小目标的检测能力。
“分辨器”在这里指网络的输入分辨率,训练时的高分辨率输入增强了模型的细节感知能力。推理时,图像会被resize到416×416,平衡精度与速度。高分辨率就像“高清相机”,让网络“看得更清楚”,对小物体更加敏感。

3.基于Anchor的目标边界框预测

由于YOLOv1直接回归边界框坐标,学习难度大,尤其当目标形状多样时效果不佳。因此为了改进,YOLOv2引入了Anchor Boxes(锚框),预定义一组固定形状的框,网络只需预测这些框的偏移量(offset)和置信度。这种方式将复杂的边界框预测简化为对预定义框的“微调”,降低了学习难度。
采用Anchor后,召回率(recall)从YOLOv1的81%提升到88%,显著提高了检测能力。就像“模板”,网络只需调整模板形状,预测更准、更快。

4.使用聚类方法选择Anchor
传统方法(如Faster R-CNN)手动设计Anchor Boxes,可能不适配特定数据集的目标形状。YOLOv2使用K-means聚类对训练集中的真实边界框进行分析,自动选择最优的Anchor Boxes形状。
聚类目标:使Anchor与真实框的IOU(交并比)最大化。
距离度量:自定义距离公式:d=1−IOU(box,centroid)d = 1 - \text{IOU}(box, centroid)d=1IOU(box,centroid),IOU越大,距离越小,表示Anchor与真实框越匹配。
K-means聚类就像“量身定制”,根据数据集自动挑选最合适的“模板框”,提升预测精度。
5.细粒度特征与Passthrough层
深层特征图分辨率低,适合检测大目标;浅层特征图分辨率高,适合小目标。YOLOv2引入Passthrough层,将高分辨率的浅层特征图与低分辨率的深层特征图连接,进行特征融合。类似于ResNet中的shortcut连接,Passthrough层以前面高分辨率特征图为输入,连接到后面的低分辨率特征图上。增强了对小目标的检测能力,提升了模型的多尺度适应性。
Passthrough层就像“望远镜 + 显微镜”,融合粗细特征,让网络“大处着眼,小处着手”。

YOLOV3:集大成者

YOLOV3发布于2018年,相比YOLOv2 的基础上进行了多项改进,显著提升了目标检测的准确性和灵活性,同时保持了实时性。

YOLOv3 在 YOLOv2 的基础上引入了以下关键改进:
1.特征提取器升级:Darknet-53
YOLOv2 使用 Darknet-19 作为骨干网络,而 YOLOv3 升级为更强大的 Darknet-53,包含 53 个卷积层,特征提取能力更强。
此外,作者还提供了轻量级版本 Tiny-Darknet,适用于资源受限的设备。
Darknet-53 是 YOLOv3 的骨干网络,由 53 个卷积层组成。其基本构建单元称为 DBL(Darknet Basic Layer),包括:

  • 卷积层:1×1 和 3×3 卷积交替使用,1×1 卷积用于降维,3×3 卷积用于特征提取。
  • 批量归一化(BN)层:在每个卷积层后加入 BN层,规范化特征,防止过拟合。
  • Leaky ReLU 激活函数:缓解梯度消失问题,提升非线性表达能力。
    与darknet-19相比,做出了如下改进:首先,darknet-53摒弃了最大池化层,改用步长为2的卷积层进行下采样,来保留更多空间信息。其次,引入了残差网络的思想,通过跳跃连接加深网络层次,提取更深层特征,同时避免梯度消失或爆炸。
    2.多尺度检测:特征金字塔网络(FPN)
    YOLOv3 借鉴了特征金字塔网络(FPN)的思想,通过多尺度特征融合实现对不同大小目标的检测(通过上采样和张量拼接,将浅层高分辨率特征与深层低分辨率特征融合)。
    网络输出三个不同尺度的特征图(Y1、Y2、Y3),对应三种层的特征图,分别用于检测大、中、小目标。

3.多标签分类:逻辑回归替代 Softmax
YOLOv2 使用 Softmax 假设目标只属于一个类别(单标签分类)。YOLOv3 改用逻辑分类器(Sigmoid),对每个类别独立进行二分类,支持多标签分类。实现方式:每个类别的输出经过 Sigmoid 函数映射到 [0, 1]。如果输出值大于阈值(例如 0.5),则认为目标属于该类别。
在复杂场景中(如交通场景),目标可能同时属于多个类别(例如“汽车”和“卡车”),多标签分类更灵活。

4.损失函数优化
位置损失仍采用平方和误差(Sum-Square Error),而置信度和类别预测改为交叉熵损失(Cross-Entropy Loss),提升分类性能,更适合判断是否有目标的二分类问题。

这些改进使得 YOLOv3 在性能上显著优于前代,成为目标检测领域的里程碑。从 YOLOv1 到 YOLOv3,每一代的性能提升都离不开骨干网络的改进。YOLOv3 在保持实时性的同时兼顾高精度,使其广泛应用于目标检测任务。

YOLOV4:命运多舛

2020年,YOLO系列的作者Redmon在推特上发表声明,出于道德方面的考虑,从此退出CV界。在疫情的原因加持下,本以为YOLO就此完结,然而Alexey Bochkovskiy等人与Redmon取得联系,正式将他们的研究命名为YOLOv4。

YOLOv4 集成了多种深度学习技巧,这些“Tricks”包括网络架构优化、数据增强和损失函数改进等,旨在提升检测速度和精度的平衡。
1.网络架构优化

  • WRC(Weighted-Residual-Connections,重权残差连接):
    研究表明,WRC 通过加权残差连接,强调网络中某些特征的传递,可能提升特征提取能力。
    适用范围广,适合大多数模型和任务。
  • CSP(Cross-Stage-Partial-connections,跨阶段部分连接):
    CSP 是 YOLOv4 骨干网络 CSPDarknet53 的核心设计,通过部分连接不同网络阶段,减少计算量并提升特征流。
    具体实现:将特征图分成两部分,一部分直接传递,另一部分经过卷积处理后融合。
  • CmBN(Cross mini-Batch Normalization,跨小批量归一化):
    CmBN 是一种批量归一化变体,允许在单 GPU 上高效训练,适合资源受限的场景。
    与传统 BN 相比,CmBN 在小批量训练中更稳定。

2.训练优化

  • SAT(Self-adversarial-training,自我对抗训练):
    SAT 通过生成对抗样本并在训练中加入,增强模型对噪声和扰动的鲁棒性。
    研究显示,SAT 帮助模型泛化到新特征,提升检测性能。
  • Mish 激活函数:
    Mish 激活函数公式为 Mish(x)=x⋅tanh⁡(softplus(x))\text{Mish}(x) = x \cdot \tanh(\text{softplus}(x))Mish(x)=xtanh(softplus(x)),平滑且无上界。
    相比 ReLU,Mish 可能提升网络深度表达能力,实验表明在 YOLOv4 中表现优于传统激活函数。
  • Mosaic 数据增强:
    Mosaic 数据增强将四张图像随机裁剪并拼接成一张,模拟复杂场景。
    增加训练样本多样性,特别适合检测小目标或密集场景。
  • DropBlock 正则化:
    DropBlock 是 Dropout 的扩展,在特征图上随机丢弃连续区域,强制网络学习更鲁棒的特征。
    例如,隐藏图像部分(如狗的头部),迫使网络依赖其他特征。

3.损失函数改进

  • CIoU 损失(Complete Intersection over Union Loss):
    CIoU 损失公式为 LCIoU=1−IoU+d2C2+αvL_{CIoU} = 1 - \text{IoU} + \frac{d^2}{C^2} + \alpha vLCIoU=1IoU+C2d2+αv,其中:
    ddd 是预测框和真实框中心距离。
    CCC 是最小外接框对角线长度。
    v=4π2(arctan⁡wgthgt−arctan⁡wh)2v = \frac{4}{\pi^2} \left( \arctan \frac{w^{gt}}{h^{gt}} - \arctan \frac{w}{h} \right)^2v=π24(arctanhgtwgtarctanhw)2 考虑长宽比。
    α=v(1−IoU)+v\alpha = \frac{v}{(1 - \text{IoU}) + v}α=(1IoU)+vv 为权衡参数。

相比 IoU 损失,CIoU 考虑了框中心距离和长宽比,加速收敛并提升定位精度。
YOLOV4的其他具体改进:
1.多 Anchor 负责单个 GT
YOLOv3 中,一个 Anchor 只负责一个 Ground Truth(GT),可能导致正负样本不均衡。YOLOv4 允许多个 Anchor 负责同一个 GT,只要 IoU(anchori,GTj)>threshold\text{IoU}(\text{anchor}_i, \text{GT}_j) > \text{threshold}IoU(anchori,GTj)>threshold。Anchor 数量不变,但正样本比例增加,缓解了正负样本不均衡问题,提升召回率。就像多个“模板框”可以同时匹配一个目标,增加训练数据的多样性。

2.边界框预测公式改进
YOLOv2 和 v3 中,bx,byb_x, b_ybx,by 使用 Sigmoid 函数,输出范围为 (0, 1),无法预测到边界。
YOLOv4 修改公式为:
bx=1.1⋅σ(tx)+cxb_x = 1.1 \cdot \sigma(t_x) + c_xbx=1.1σ(tx)+cx
by=1.1⋅σ(ty)+cyb_y = 1.1 \cdot \sigma(t_y) + c_yby=1.1σ(ty)+cy

其中 σ(tx)\sigma(t_x)σ(tx) 是 Sigmoid 函数输出,乘以 1.1 扩展范围,允许预测框覆盖整个网格。这样提升了边界框预测的灵活性,特别适合边界目标。

3.损失函数的改进历程
YOLOv1中使用的是 MSE 损失(平方和误差)计算边界框回归,简单但不直接优化 IoU。后来引入 IoU 损失,直接优化重叠度,但当框无重叠时,IoU 为 0,无梯度回传。
GIoU 损失(Generalized IoU)考虑最小外接框,解决无重叠问题。
DIoU 损失(Distance IoU)进一步加入框中心距离,加速收敛。
CIoU 损失在 DIoU 基础上加入长宽比一致性,综合考虑几何因素。
YOLOv4 的选择是采用 CIoU 损失,实验表明其在 COCO 数据集上表现优于 GIoU 和 DIoU。
在解决 IoU 损失的梯度消失问题的同时考虑框中心距离,加速训练收敛。加入长宽比项,提升定位精度。

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

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

相关文章

专题:2025智能体研究报告|附70份报告PDF、原数据表汇总下载

原文链接:https://tecdat.cn/?p43035 智能体正在改写商业规则:某城商行的智能客服用公有云部署,把单笔交互成本从5.7元砍到1.2元,投诉率直降42%(《赛迪智库:2025全球智能体进展报告》P24)&…

Axios 完整功能介绍和完整示例演示

Axios 是一个基于 Promise 的现代化 HTTP 客户端库,用于浏览器和 Node.js 环境。它提供了简洁的 API 和强大的功能,是前端开发中最常用的网络请求工具之一。核心功能 浏览器 & Node.js 双平台支持 浏览器中使用 XMLHttpRequestNode.js 中使用 http 模…

math.h函数

math.c函数作用 1. 基本三角函数(参数为弧度) sin(double x):计算正弦值。cos(double x):计算余弦值。tan(double x):计算正切值。asin(double x):反正弦(返回值范围:[-π/2, π/2]&…

在Next.js里玩转pdf预览

1.背景在项目开发中,pdf预览是一个很常见的业务。各大公司为了保护自己的知识产权,也会对pdf预览进行限制,比如:不允许下载、打印,不允许提取文字等等。要想在实现预览功能的基础上还要附加这些限制,有很多…

算法竞赛备赛——【图论】求最短路径——Floyd算法

floyd算法 基于动态规划 应用:求多源最短路 时间复杂度:n^3 dijkstra:不能解决负边权 floyd:能解决负边权 不能解决负边权回路问题 求最短路径:dijkstra bfs floyd 思路 1.让任意两点之间的距离变短:引入…

双指针(滑动窗口)相关算法题

双指针算法有时候也叫尺取法或者滑动窗口,是⼀种优化暴力枚举策略的手段:当我们发现在两层 for 循环的暴力枚举过程中,两个指针是可以不回退的,此时我们就可以利用两个指针不回退的性质来优化时间复杂度。因为双指针算法中&#x…

ScratchCard刮刮卡交互元素的实现

效果展示 刮刮卡是⼀种常见的网页交互元素,通过模拟物理世界的刮涂层来揭示下方的内容。这种效果主要依赖于HTML5的 元素来实现。以下是⼀个基于TypeScript的刮刮卡实现示例,包括配置项、初始化方法和核心的刮开逻辑。下面是展示的效果部分刮开效果&…

【Python LeetCode 专题】热题 100,重在思路

哈希1. 两数之和49. 字母异位词分组128. 最长连续序列双指针283. 移动零11. 盛最多水的容器15. 三数之和42. 接雨水滑动窗口3. 无重复字符的最长子串438. 找到字符串中所有字母异位词子串560. 和为 K 的子数组239. 滑动窗口最大值普通数组53. 最大子数组和56. 合并区间189. 轮转…

openEuler 22.03 LTS Rootless Docker 安装指南

openEuler 22.03 LTS Rootless Docker 安装指南 1.创建普通用户(用于无根模式) sudo useradd -m docker-user sudo passwd docker-user # 设置密码 sudo usermod --add-subuids 100000-165535 docker-user sudo usermod --add-subgids 100000-165535 do…

CMake指令:常见内置命令行工具( CMake -E )

目录 1.简介 2.核心作用 3.常用命令介绍 3.1.文件操作命令 3.2.系统命令执行 3.3.校验与哈希 3.4.流程控制与等待 3.5.路径与文件处理 3.6.归档与压缩 3.7.网络与下载 3.8.实用工具 4.使用示例 5.与 shell 命令的对比 6.在 CMake 脚本中使用 7.总结 相关链接 1…

YOLO融合CAF-YOLO中的ACFM模块

YOLOv11v10v8使用教程: YOLOv11入门到入土使用教程 YOLOv11改进汇总贴:YOLOv11及自研模型更新汇总 《CAF-YOLO: A Robust Framework for Multi-Scale Lesion Detection in Biomedical Imagery》 一、 模块介绍 论文链接:https://arxiv.org…

Webpack 项目构建优化详解

1. 相关面试题 1.1. 做过哪些Webpack打包构建优化? 代码分割:使用 Webpack 的 SplitChunksPlugin 进行代码分割,将第三方库、公共代码与业务代码分离,提高缓存利用率和加载速度。 Tree Shaking:通过配置 mode: production 或使用 TerserPlugin,移除未引用的代码,减少…

【深度学习基础】张量与Tensor的区别?从标量到深度学习的多维世界

目录引言一、张量(Tensor)的定义与特性1. 数学中的张量2. 深度学习中的Tensor二、标量(Scalar)是什么?三、深度学习中的其他核心量1. 向量(Vector)2. 矩阵(Matrix)3. 高阶…

设计模式一: 模板方法模式 (Template Method Pattern)

模板方法模式是一种行为设计模式,它通过定义一个算法的骨架,而将一些步骤延迟到子类中实现。Template Method 使得子类可以不改变(复用)一个算法结构 即可重定义(override 重写)该算法的某些特定步骤。基本…

Linux驱动学习day24(UART子系统)

一、UART硬件理论1.1 作用及功能UART:通用异步收发传输器,简称串口。功能:移植u-boot、内核时,主要使用串口查看打印信息。外接各种模块,比如蓝牙GPS模块。使用UART的时候,要注意1. 波特率 2. 格式&#xf…

NFS共享服务器

目录 任务要求 思路总结 1.NFS共享服务 服务端 (ip 192.168.48.128) 客户端 (ip 192.168.48.130) 2.配置autofs自动挂载 任务要求 1.NFS服务器,可以让PC将网络中的NFS服务器共享的目录挂载到本地端的文件系统中,而在本地端的系统中看来,那个远程主机的目…

FreeRTOS学习笔记之队列

小编正在学习嵌入式软件,目前建立了一个交流群,可以留下你的评论,我拉你进群一、简介队列是为了任务与任务、任务与中断之间的通信而准备的,可以在任务与任务、任务与中断之间消息传递,队列中可以存储有限的、大小固定…

垃圾收集器-ZGC

前言在Java开发中,垃圾收集器的选择对系统性能有着致命的影响。Java 8后,虽然G1 GC成为默认,但是它在延迟性控制上仍有限。ZGC作为最新一代高性能低延迟垃圾收集器,解决了CMS和G1在延迟、垃圾堆容量和吞吐量方面的重大突破。本文将…

计算机“十万个为什么”之跨域

计算机“十万个为什么”之跨域 本文是计算机“十万个为什么”系列的第五篇,主要是介绍跨域的相关知识。 作者:无限大 推荐阅读时间:10 分钟 一、引言:为什么会有跨域这个“拦路虎”? 想象你正在参观一座戒备森严的城堡…

C语言:20250719笔记

字符数组在C语言中,支持字符串常量,不支持字符串变量。如果想要实现类似的字符串变量,C语言提供了两种实现方式:字符数组:char name[] “哪吒”;字符指针:char *name "娜吒"&#x…