当前位置: 首页 > news >正文

YOLOv4:目标检测界的 “集大成者”

从 YOLOv1 的实时突破,到 v2 的精度追赶,v3 的多尺度检测,YOLO 系列一直在 “快” 和 “准” 之间找最优解。

一、先聊整体:YOLOv4 的 “三个关键标签”

YOLOv4 的三个核心优势 :

  1. 单 GPU 友好:之前很多 SOTA 模型需要多 GPU 集群训练,YOLOv4 全部实验用单 GPU 完成,普通开发者也能复现,门槛极低;
  2. 速度与精度双优:看 PPT 里的性能图就知道 —— 在 V100 显卡上,YOLOv4 的 mAP 远超 YOLOv3,甚至比 EfficientDet(以精度见长)还高,同时保持实时速度(FPS≈45),真正做到 “又快又准”;
  3. 细节拉满的 “整合大师”:作者把 2019 年前后的优秀技术(数据增强、损失函数、特征融合)全部做了消融实验,挑出最优组合,相当于 “帮你把近 3 年的检测论文精华过了一遍”。

二、核心方法论:Bag of Freebies(BOF)—— 只加训练成本,不耗推理速度

YOLOv4 的第一个核心是BOF(免费午餐):这些方法只增加训练时的计算量,训练完后完全不影响推理速度,却能大幅提精度。简单说就是 “训练时多花点时间,推理时一点不耽误”。

1. 数据增强:让模型 “见多识广”,不怕小目标和遮挡

数据增强是 BOF 的核心,YOLOv4 用了 4 种关键方法,解决了小目标少、数据多样性不足的问题:

  • Mosaic(马赛克增强):把 4 张不同的图拼接成 1 张(像拼马赛克),再标注合并后的目标。解决的问题:单张图里目标更多,尤其是小目标(比如 4 张图里的小昆虫拼在一起,模型能多学小目标特征);同时场景更复杂,模型泛化能力更强。
  • Random Erase(随机擦除):随机选图像的一块区域,用随机值或数据集平均像素值覆盖。作用:模拟物体被遮挡的场景(比如猫被桌子挡住一半),让模型不依赖完整目标也能识别。
  • Hide and Seek(藏猫猫):按概率随机隐藏图像里的多个小补丁。作用:比 Random Erase 更细粒度,强迫模型关注目标的关键部位(比如识别狗时,即使藏了耳朵,也能通过身体识别)。
  • Self-adversarial Training(SAT,自对抗训练):先让模型对图像加 “对抗噪音”(比如把猫的边缘模糊),再用加噪后的图训练模型 “纠错”。作用:相当于给模型 “出题刁难”,让它在有干扰的情况下也能准确识别,抗噪声能力更强。

2. 网络正则化:防止模型 “自负”,避免过拟合

模型训练时容易 “死记硬背” 训练数据(过拟合),YOLOv4 用两种方法让模型 “谦虚一点”:

  • DropBlock(块 dropout):之前的 Dropout 是随机删单个像素,DropBlock 直接删一整块区域(比如 16×16 的补丁)。为什么更好?目标检测需要 “局部特征关联”(比如识别车需要车轮 + 车身一起看),删单像素影响小,删整块能强迫模型学习更分散的特征,避免依赖某一块区域。
  • Label Smoothing(标签平滑):把绝对的标签(比如 “猫 = 1,狗 = 0”)改成柔和的标签(比如 “猫 = 0.95,狗 = 0.05”)。解决的问题:模型不会对预测结果 “过度自信”(比如预测猫的概率是 0.999,其实可能是过拟合),让类别边界更清晰,泛化能力更强。

3. 损失函数演进:从 “看重叠” 到 “看全局”,解决框不准问题

目标检测的核心是 “框准目标”,而损失函数决定了模型 “怎么学框的位置”。YOLOv4 把损失函数从 IOU 一路升级到 CIoU,每一步都在补前一代的坑:

  • 原始 IOU 损失:用 “预测框与真实框的交集 / 并集” 计算损失,缺点很明显 —— 如果框不重叠,IOU=0,模型无法计算梯度,根本不知道往哪调;
  • GIoU 损失:引入 “最小封闭框 C”(能把预测框和真实框都包起来的最小矩形),损失 = 1-IOU + (C - 并集面积)/C。改进点:即使框不重叠,也能通过最小封闭框计算损失,模型知道往 “缩小 C” 的方向调;
  • DIoU 损失:在 GIoU 基础上,加了 “中心点距离”—— 损失 = 1-IOU + (中心点距离 ²)/(C 的对角线 ²)。改进点:GIoU 还会让框绕着真实框转,DIoU 直接优化中心点距离,框调整更快更准;
  • CIoU 损失:最终版!再加 “长宽比”—— 损失 = 1-IOU + 中心点距离项 + α× 长宽比项(α 是权重)。改进点:同时考虑 “重叠面积、中心点距离、长宽比” 三个几何因素,完全贴合真实框的形状,框的定位精度直接拉满。

4. NMS 改进:从 “硬删” 到 “软调”,减少漏检

NMS(非极大值抑制)是用来 “去重重复框” 的,但传统 NMS 太 “暴力”—— 只要 IOU 超过阈值,就直接删掉框,容易漏检重叠目标。YOLOv4 用了两种更柔和的 NMS:

  • DIOU-NMS:不只用 IOU 判断,还看 “中心点距离”—— 即使 IOU 高,只要中心点离得远,也不删框。效果:比如两个并排的人,传统 NMS 可能删一个,DIOU-NMS 能都保留,召回率提升;
  • Soft-NMS:不直接删框,而是降低重叠框的置信度(比如 IOU 越高,置信度降越多)。效果:避免 “误删”,比如被遮挡的小目标,置信度降低但不会被删掉,后续还能被检测到。

三、进阶技巧:Bag of Specials(BOS)—— 加一点推理成本,换大幅精度提升

如果说 BOF 是 “免费午餐”,那 BOS 就是 “性价比很高的加餐”—— 只增加一点点推理时的计算量,却能让精度再上一个台阶。这些方法主要优化 “特征提取” 和 “特征融合”,是 YOLOv4 精度飙升的关键。

1. SPPNet(空间金字塔池化):让小目标 “不丢失特征”

YOLOv3 训练时需要固定输入尺寸,小目标容易被池化 “磨平” 特征。YOLOv4 加入 SPP:

  • 原理:在 backbone 的最后一层,用不同大小的池化核(比如 13×13、9×9、5×5、1×1)对特征图池化,再把结果拼接。
  • 作用:不管输入图像多大,都能提取多尺度特征,尤其是小目标的细节特征,不会被大池化核 “吃掉”。

2. CSPNet(跨阶段部分网络):减计算量,保特征

YOLOv4 的 backbone 用了 CSPDarkNet53,核心是 CSP 结构:

  • 原理:把特征图按通道拆成两部分,一部分走正常的残差块(ResBlock),另一部分直接 “抄近路” 拼到输出端。
  • 作用:既保留了完整特征(抄近路的部分),又减少了计算量(只用一半特征走残差块),速度更快,同时精度不丢。

3. 注意力机制:让模型 “盯紧关键部位”

注意力机制在 CV 里的作用是 “让模型把注意力放在有用的特征上”,YOLOv4 用了两种:

  • SAM(空间注意力):对特征图的 “空间位置” 加权 —— 比如识别猫时,给猫的身体区域高权重,背景区域低权重;
  • CBAM(卷积块注意力):比 SAM 多了 “通道注意力”—— 比如识别车时,给车轮、车窗对应的通道高权重,无关通道低权重。
  • 效果:模型不会 “瞎看”,特征利用率更高,小目标和遮挡目标的识别率提升。

4. PAN(路径聚合网络):双向特征融合,比 FPN 更强

之前的 FPN 是 “自顶向下” 传特征(高层语义特征往下传),但底层细节特征(比如小目标的边缘)传不上去。YOLOv4 用 PAN 做了改进:

  • 原理:不仅 “自顶向下” 传语义特征,还 “自底向上” 传细节特征,双向融合。
  • 作用:高层知道 “这是什么”(比如是猫),底层知道 “在哪”(比如猫的位置),两者结合,框更准,小目标也能认出来。

5. Mish 激活函数:比 ReLU 更 “温柔” 的非线性

YOLOv3 用 ReLU 激活函数,它在负区间直接输出 0,会 “切断” 梯度。YOLOv4 用 Mish:

  • 公式:Mish (x) = x × tanh (ln (1+e^x))
  • 特点:在负区间不是 0,而是平滑下降,梯度更连续,模型能学到更细的特征。
  • 效果:mAP 比 ReLU 提升 1% 左右,虽然计算量稍增,但性价比极高。

6. 消除网格敏感性:让框 “能贴紧边界”

YOLO 系列一直有个问题:如果目标中心在两个网格边界,模型很难预测准确位置(需要很大的偏移量)。YOLOv4 的解决方法:

  • 在坐标预测的激活函数前,加一个大于 1 的系数(比如 1.05),让偏移量范围从 0-1 稍微扩大,覆盖网格边界区域。
  • 效果:目标在边界时,框也能准确对齐,不会 “偏出” 或 “缩进去”。

四、整体架构:YOLOv4 的 “三层结构”

把上面的模块拼起来,YOLOv4 的整体架构其实很清晰,分三层:

  1. Backbone( backbone):CSPDarkNet53负责提取图像特征,用 CSP 结构减少计算,Mish 激活函数提升特征质量;
  2. Neck(颈部):SPP + PANSPP 做多尺度池化,PAN 做双向特征融合,把高低层特征捏合在一起;
  3. Head(头部):YOLO 检测头还是经典的网格预测,用 CIoU 损失和 DIOU-NMS 优化框的精度,输出类别和位置。

五、总结:YOLOv4 的 “遗产” 与启示

YOLOv4 不是 “颠覆者”,却是 “完美的整合者”—— 它证明了 “把现有技术做透、做优” 也能达到 SOTA。它的贡献不止是一个好模型,更是一套 “目标检测优化方法论”:

  • 对开发者:单 GPU 训练降低门槛,让普通人也能玩得起高精度检测;
  • 对技术:BOF 和 BOS 的分类,为后续模型(比如 YOLOv5、v7)提供了优化框架;
  • 对实践:数据增强、损失函数、特征融合的组合,至今仍是目标检测的 “标配操作”。
http://www.dtcms.com/a/511697.html

相关文章:

  • 从零开始的C++学习生活 11:二叉搜索树全面解析
  • 【QT常用技术讲解】控件随窗口自适应变化大小或者移动位置
  • Kafka面试精讲 Day 30:Kafka面试真题解析与答题技巧
  • 江苏建设准考证打印在哪个网站医疗网站 seo怎么做
  • 数据结构9:队列
  • 逆向分析星星充电APP:从签名生成到数据深度解析
  • Vue + WebApi 实现上传下载功能
  • 建设门户网站预算做旅游网站多少钱
  • 【Rust创作】Rust 错误处理:从 panic 到优雅控制
  • 常见激活函数的Lipschitz连续证明
  • 专做皮具的网站网站建设公司排行榜
  • 第三次面试:C++实习开发
  • 公司网站内容更新该怎么做wordpress显示目录
  • 边界扫描测试原理 2 -- 边界扫描测试设备的构成
  • 如何入侵网站后台晴天影视
  • Linux top 命令使用说明
  • 研发图文档管理的革新:从无序到智能协同
  • springboot点餐系统的设计与实现(代码+数据库+LW)
  • ArcoDesignVue Select组件分离问题
  • Python开发:接口场景设计
  • 汽车网站flash模板定制高端网站建设
  • 【Ubuntu18.04 D435i RGB相机与IMU标定详细版(三)】
  • 单肩包自定义页面设计模板seo关键词优化软件app
  • 朊病毒检测市场:技术突破与公共卫生需求驱动下的全球增长
  • 思维清晰的基石:概念和命题解析
  • ubuntu中替换python版本
  • mybatis请求重试工具
  • 高速运放输入引脚并联电阻太小会怎样?
  • vue前端面试题——记录一次面试当中遇到的题(10)
  • 有没有做高仿手表的网站php网站地图