计算机视觉---YOLOv4
YOLOv4(You Only Look Once v4)于2020年由Alexey Bochkovskiy等人提出,是YOLO系列的重要里程碑。它在YOLOv3的基础上整合了当时最先进的计算机视觉技术,实现了检测速度与精度的显著提升。以下从主干网络、颈部网络、头部检测、训练策略、损失函数、正则化方法
一、主干网络(Backbone):从Darknet53到CSPDarknet53
YOLOv3的瓶颈
- Darknet53:采用全卷积结构,包含53个卷积层,结合残差连接(Residual Connection),在精度与速度间取得平衡,但计算量较大,且特征复用效率有待提升。
YOLOv4的改进
-
CSP结构引入(Cross Stage Partial Network)
- 核心思想:将主干网络的每个阶段(Stage)的特征图分为两部分,一部分直接传递(Partial Connection),另一部分进行常规卷积,最后拼接融合。
- 优势:
- 减少计算量:通过跨阶段特征融合,避免重复计算,提升计算效率。
- 增强梯度传播:分离的梯度路径使网络更易训练,缓解梯度消失。
- 轻量化设计:在YOLOv4中,CSPDarknet53相比Darknet53减少约15%的参数量,同时保持精度。
-
激活函数替换:Mish替代LeakyReLU
- Mish公式: Mish = x ⋅ tanh ( ln ( 1 + e x ) ) \text{Mish} = x \cdot \tanh(\ln(1 + e^x)) Mish=x⋅tanh(ln(1+ex))
- 优势:
- 光滑连续的非单调特性,保留负值信息,增强特征表达能力。
- 相比LeakyReLU,在深层网络中精度更高,但计算量略有增加。
- 例外:YOLOv4-tiny仍使用LeakyReLU以降低计算成本。
-
SPP模块集成(Spatial Pyramid Pooling)
- 位置:在CSPDarknet53的末端加入SPP模块(YOLOv3无此结构)。
- 作用:通过多尺度池化(如1×1, 5×5, 9×9, 13×13最大池化)扩大感受野,融合不同尺度特征,提升目标多尺度检测能力。
- 效果:实验表明,SPP模块使YOLOv4的mAP提升2.7%~3.2%。
二、颈部网络(Neck):从FPN到PAN+SPP
YOLOv3的瓶颈
- 单一FPN结构:仅通过自上而下路径融合高层语义特征,底层细节特征(如小目标位置信息)传递不足。
YOLOv4的改进
- FPN+PAN结构(Path Aggregation Network)
- 双向特征融合:
- 自上而下路径(FPN):传递高层语义特征(如“汽车”“人”的类别信息)。
- 自下而上路径(PAN):增强底层细节特征(如边缘、纹理)的传递,尤其提升小目标检测性能。
- 对比YOLOv3:YOLOv3仅使用FPN,而YOLOv4通过PAN补充底层特征流动,形成更强大的特征金字塔。
- 双向特征融合:
YOLOv4中的PAN不是加法,是拼接
- SPP模块的延续作用
- 在颈部网络中,SPP模块进一步扩大感受野,且计算成本低(仅在主干末端和颈部各用一次)。
三、头部检测(Head):多尺度检测与激活函数优化
YOLOv3的设计
- 三尺度检测:输出13×13、26×26、52×52三种尺度特征图,分别检测大、中、小目标。
- 激活函数:分类头使用Softmax(单标签分类),回归头使用Sigmoid预测坐标偏移。
YOLOv4的改进
-
分类头:Logistic激活替代Softmax
- 支持多标签分类:YOLOv3的Softmax强制单标签,而YOLOv4通过Logistic激活(独立二分类)支持目标的多标签预测(如“人”同时属于“运动员”和“行人”)。
-
锚框优化
- 使用K-means聚类重新生成锚框,适配COCO数据集的目标尺寸分布,提升先验框与真实框的匹配度。
-
检测头结构轻量化
- 通过减少卷积层数量或使用深度可分离卷积(如YOLOv4-tiny),降低计算量,适配移动端。
四、训练策略:数据增强与自对抗训练
YOLOv3的数据增强
- 基础增强:随机翻转、裁剪、缩放、颜色抖动等。
YOLOv4的改进
-
Mosaic数据增强
- 原理:将4张图像随机缩放、裁剪、拼接成1张新图像,背景丰富且包含更多小目标。
- 优势:
- 提升小目标检测性能(小目标在拼接后可能成为中/大目标)。
- 减少对Batch Normalization的依赖(单张图像包含4张图的统计特征),可使用更小的Batch Size训练。
-
MixUp增强
- 混合两张图像及其标签,通过线性插值生成新样本,提升模型泛化能力,抑制过拟合。
-
Random Erase:用随机值或训练集的平均像素值替换图像中的区域
-
Hide and Seek:根据概率设置随机隐藏一些补丁
-
自对抗训练(Self-Adversarial Training, SAT)
- 两阶段流程:
- 阶段1:模型反向更新输入图像(而非网络参数),生成对抗样本(使模型误检)。
- 阶段2:用对抗样本正常训练模型,提升鲁棒性。
- 对比传统对抗训练:无需外部攻击算法,仅通过模型自身生成扰动,计算成本更低。
- 两阶段流程:
6.DropBlock
五、损失函数:从Smooth L1到CIoU Loss
YOLOv3的损失函数
- 坐标损失:Smooth L1损失,仅计算预测框与真实框的坐标偏移,未考虑框的重叠面积和形状。
- 分类损失:交叉熵损失。
- 置信度损失:二元交叉熵损失,衡量预测框与真实框的重叠程度(IoU)。
存在的问题:没有相交则IOU=0无法进行梯度计算,相同的IOU却反应不出实际情况是怎么样
YOLOv4的改进
GIOU引入面积
DIOU引入中心点距离
-
CIoU Loss替代Smooth L1
-
公式:
CIoU = 1 − IoU + ρ 2 ( b , b g t ) c 2 + α v \text{CIoU} = 1 - \text{IoU} + \frac{\rho^2(b, b^{gt})}{c^2} + \alpha v CIoU=1−IoU+c2ρ2(b,bgt)+αv
其中:- ρ 2 \rho^2 ρ2:预测框与真实框中心点的欧氏距离。
- c c c:包含两框的最小外接矩形对角线长度。
- α \alpha α:权重参数,(v):衡量预测框与真实框的宽高比一致性。
-
优势:
- 同时优化重叠面积(IoU)、中心点距离、宽高比,收敛更快,定位更精准。
- 解决传统IoU/L1损失在无重叠时梯度消失的问题。
-
-
置信度损失结合CIoU
- 置信度不仅反映IoU,还融入CIoU的惩罚项,使模型更关注框的形状和位置匹配。
六、正则化与优化技术
1. 跨卡批量归一化(CmBN, Cross mini-Batch Normalization)
- 背景:YOLOv3使用普通BN,多卡训练时各卡独立计算统计量,可能导致模型不稳定。
- CmBN改进:在每个Batch内跨GPU收集统计量(而非全量数据),平衡训练稳定性与计算效率,尤其适合小Batch Size场景。
2. 优化器与学习率策略
- 优化器:YOLOv4默认使用SGD(YOLOv3也常用SGD,但YOLOv4调参更精细)。
- 学习率调度:
- 余弦退火(Cosine Annealing):周期性衰减学习率,避免过早收敛到局部最优。
- Warmup策略:训练初期缓慢提升学习率,防止模型在随机初始化阶段崩溃。
3. 标签平滑(Label Smoothing)
- 对真实标签添加微小噪声(如将one-hot标签从[0,1,0]改为[0.05,0.9,0.05]),抑制模型对标签的过度自信,提升泛化能力。
非极大值抑制NMS改进
DIOU-NMS
七、SAM注意力机制模块
Convolutional Block Attention Module(CBAM)是一种轻量级卷积神经网络注意力模块。它通过通道注意力和空间注意力双重机制优化特征表达:先对特征图进行全局平均池化与最大池化,经全连接层生成通道注意力权重,聚焦重要特征通道;再对通道维度做平均与最大池化,通过卷积生成空间注意力权重,定位关键空间区域。两者顺序堆叠,为特征图分配动态权重,增强有效信息、抑制冗余,可无缝嵌入各类CNN架构,在几乎不增加计算量的前提下提升模型表征能力。CBAM注意力机制在NLP,CV等领域广泛应用。
YOLOv4引入了SAM(Spatial Attention Module)
SAM(空间注意力模块)是神经网络中聚焦空间维度的注意力机制模块。其输入特征图后,先在通道维度分别进行平均池化与最大池化,生成两张空间特征图;再将二者拼接,通过卷积操作输出空间注意力权重图,该权重图与原特征图相乘,可增强关键空间区域的特征响应,抑制无关位置信息。SAM能让模型更关注“何处”是重要特征,常与通道注意力结合(如CBAM),轻量级且计算高效,适用于各类CNN架构以提升空间特征表征能力。
八、其他改进与性能对比
1. 测试阶段优化
- 多尺度测试(Multi-Scale Testing, MST):输入图像缩放至不同尺寸进行推理,提升小目标检测精度(牺牲速度)。
- 自适应锚框机制:根据输入图像尺寸动态调整锚框比例,适配不同分辨率。
2. 轻量化变体:YOLOv4-tiny
- 主干网络:使用CSPDarknet53的轻量化版本,减少卷积层和通道数(如仅保留前13层)。
- 颈部网络:移除SPP和PAN,仅用简单FPN。
- 检测头:仅保留两个尺度(13×13和26×26),适合移动端或嵌入式设备。
3. 性能对比(COCO数据集)
模型 | Backbone | mAP@0.5 | FPS (Tesla V100) |
---|---|---|---|
YOLOv3 | Darknet53 | 57.9 | 40 |
YOLOv4 | CSPDarknet53 | 65.7 | 65 |
YOLOv4-tiny | CSPDarknet53-tiny | 40.2 | 448 |
- 结论:YOLOv4相比YOLOv3,mAP提升约7.8%,FPS提升62.5%,实现“精度与速度双突破”。
八、总结:YOLOv4的技术突破点
模块 | YOLOv3 | YOLOv4 | 改进收益 |
---|---|---|---|
主干网络 | Darknet53 | CSPDarknet53 + SPP | 轻量化、更强特征表达 |
颈部网络 | FPN | FPN + PAN | 底层细节与高层语义双向融合 |
数据增强 | 基础增强 | Mosaic + MixUp + SAT | 小目标检测与鲁棒性提升 |
损失函数 | Smooth L1 + BCE | CIoU Loss | 定位更精准,收敛更快 |
正则化 | 普通BN + Dropout | CmBN + 标签平滑 | 训练稳定性与泛化能力提升 |
激活函数 | LeakyReLU | Mish(主干) | 非线性表达增强 |
检测头 | Softmax(单标签) | Logistic(多标签) | 支持多标签分类 |
九、常见误区与注意事项
-
YOLOv4与YOLOv5的关系:
- YOLOv4是官方版本,由原团队开发;YOLOv5由Ultralytics公司基于PyTorch重构,非官方但更易部署,两者技术路线不同(如YOLOv5使用Focus结构和不同的CSP变体)。
-
Mish的适用场景:
- 算力充足时使用Mish可提升精度;嵌入式设备建议用LeakyReLU或Swish优化版。
-
锚框的必要性:
- YOLOv4仍依赖手工设计的锚框,而后续YOLOv5s/YOLOX尝试无锚框(Anchor-Free)设计,需注意技术演进趋势。
朝饮花上露,夜卧松下风。
云英化为水,光采与我同。 —王昌龄
相关文章:

计算机视觉---YOLOv4
YOLOv4(You Only Look Once v4)于2020年由Alexey Bochkovskiy等人提出,是YOLO系列的重要里程碑。它在YOLOv3的基础上整合了当时最先进的计算机视觉技术,实现了检测速度与精度的显著提升。以下从主干网络、颈部网络、头部检测、训练…...

在雄性小鼠自发脑网络中定位记忆巩固的因果中枢
目录 简要总结 摘要 1 引言 2 方法 3 结果 简要总结 这篇文章主要研究了雄性小鼠在自发脑网络中记忆巩固的因果中枢定位。记忆巩固涉及学习后休息和睡眠期间全脑网络的自发重组,但具体机制尚不清楚。目前理论认为海马体在这一过程中至关重要,但其他…...

刷机维修进阶教程-----没有开启usb调试 如何在锁定机型的拨号界面特殊手段来开启ADB
有时候我们会遇到一些机型被屏幕锁 账号锁等锁定。无法进入系统界面。也没有开启usb调试的情况下如何通过一些操作来开启adb调试。然后通过adb指令来禁用对应的app顺利进入系统。以此来操作保数据等操作. 通过博文了解💝💝💝 1💝💝💝----了解一些品牌机型锁定状态…...

Selenium 测试框架 - Kotlin
🚀Selenium Kotlin 实践指南:以百度搜索为例的完整测试示例 随着测试自动化的普及,Selenium 已成为 Web 自动化测试的事实标准,而 Kotlin 凭借其简洁语法和高安全性,越来越受到开发者欢迎。本指南将通过一个完整的实战案例——在百度中执行搜索操作,来展示如何使用 Sele…...
docker运行centos提示Operation not permitted
在使用Docker运行CentOS容器时,遇到"Operation not permitted"错误,通常是由于权限问题或容器安全策略引起的。以下是详细的排查和解决步骤: 步骤一:检查Docker版本和系统更新 首先,确保你的Docker和系统软…...

010501上传下载_反弹shell-渗透命令-基础入门-网络安全
文章目录 1 上传下载2 反弹shell命令1. 正向连接(Forward Connection)正向连接示例(nc) 2. 反向连接(Reverse Connection)反向连接示例(反弹 Shell) 对比表格实际应用中的选择防御建…...

Flask集成Selenium实现网页截图
先看效果 程序实现的功能为:截取目标网址对应的页面,并将截取后的页面图片返回到用户端,用户可自由保存该截图。 支持的url参数如下: url:目标网址(必填项),字符串类型,…...
机顶盒CM311-5s纯手机免拆刷机,全网通,当贝桌面
需要用到的工具 安卓手机一台 甲壳虫adb助手(安卓app) OTG转换线一个(或者用usb,typec双头的U盘一个,未测试) 8g U盘一个 用到的刷机文件 1.放入手机中的文件 misc recovery 2. 放入U盘根目录 upda…...

知识图谱:AI时代语义认知的底层重构逻辑
在生成式人工智能(GEO)的技术架构中,知识图谱已从辅助性工具演变为驱动机器认知的核心神经中枢。它通过结构化语义网络的重构,正在突破传统数据处理的线性逻辑,建立机器对复杂业务场景的深度理解能力。 一、语义解构&a…...
centos7安装MySQL(保姆级教学)
在 Linux 系统的软件管理中,YUM(Yellowdog Updater, Modified)包管理器是不可或缺的工具,而 YUM 源的选择与配置直接影响着软件安装与更新的效率。本文将深入解析网络 YUM 源的分类,详细介绍如何使用知名平台提供的 YU…...
2025.5.23 【ZR NOI模拟赛 T3】高速公路 题解(容斥,高维前缀和,性质)
非常牛的题,记录一下思路。 传送门 题意 有一张 n n n 个点的无向图,每个点有一个颜色 c i c_i ci,满足 c i ∈ [ 1 , k ] c_i \in [1, k] ci∈[1,k]。 图是由 m m m 条链组成,满足任意一个点恰好只在一条链上。对于一…...

QGIS新手教程2:线图层与多边形图层基础操作指南(点线互转、中心点提取与WKT导出)
QGIS新手教程:线图层与多边形图层基础操作指南(点线互转、中心点提取与WKT导出) 目录 QGIS新手教程:线图层与多边形图层基础操作指南(点线互转、中心点提取与WKT导出)📌 引言第一部分࿱…...
nova14 ultra,是如何防住80°C热水和10000KPa水压冲击的?
暴雨突袭,手忙脚乱护住背包,却担心手机被雨水浸湿;泳池里想记录美好时刻,却担心手机掉入水中 ;厨房里充满了高温水汽,近距离拍摄美食瞬间,手机屏幕花屏,让人失去了对美食的兴趣…… …...
Spring Boot项目中实现单点登录(SSO)完整指南
单点登录(Single Sign-On, SSO)是一种身份验证机制,允许用户使用一组凭证(如用户名和密码)登录多个相关但独立的系统。 一、单点登录的核心原理 SSO的核心原理使集中认证、分散授权,主要流程如下: 1.用户访问应用A 2.应用A检查本地会话&a…...

Windows环境下Redis的安装使用与报错解决
最近在做项目的时候需要用到Redis,本来没觉得是什么麻烦,下载安装使用一步到位的事,但紧随而来的问题,让我开始怀疑人生,再加上代码跑不出来,我还专门找人给我看看怎么个是,结果就是单纯的Redis…...

鸿蒙完整项目-仿盒马App(一)首页静态页面
跟着鸿蒙小林博主,练习下项目~记录下首页的搭建,后续继续完善和整体项目完成会进行布局修改,先按照博主的跟做,后续在改 1.分为底部整体框架搭建 2.首页布局(顶部搜索、新人专享、金刚区(两个不同集合数据)…...
大模型(4)——Agent(基于大型语言模型的智能代理)
大模型Agent是一种基于大型语言模型(LLM)的智能系统,能够自主感知环境、规划任务、调用工具并完成复杂目标。其核心原理是将大模型的推理能力与外部行动能力结合,实现从“思考”到“行动”的闭环。以下是其原理详解与实现方法&…...

39-居住证管理系统(小程序)
技术栈: springBootVueMysqlUni-app 功能点: 群众端 警方端 管理员端 群众端: 1.首页: 轮播图展示、公告信息列表 2.公告栏: 公告查看及评论 3.我的: 联系我们: 可在线咨询管理员问题 实时回复 居住证登记申请 回执单查看 领证信息查看 4.个人中心: 个人信息查看及修改…...

WPF【11_4】WPF实战-重构与美化(MVVM 架构)
11-9 【理论】MVVM 架构 在 WPF 项目中,我们主要采用的是一种类似 MVC 的架构,叫做 MVVM。 MVVM 继承了 MVC 的理念,是 Model-View-ViewModel 的缩写,中文意思是模型、视图、视图模型。这三个词分开看我们都能看懂,不…...

计算逆时针夹角(有向角度)——CAD c# 实现两条线(向量)的逆时针夹角
效果如下: 附部分代码如下: public void 逆时针夹角Demo(){// 获取当前 CAD 文档和编辑器Document doc Application.DocumentManager.MdiActiveDocument;Editor ed doc.Editor;Database db doc.Database;try{Point3d vec1Start, vec1End;if (!GetTwoP…...
鸿蒙OSUniApp 开发带有通知提示的功能组件#三方框架 #Uniapp
使用 UniApp 开发带有通知提示的功能组件 在移动应用开发中,通知提示(Notification/Toast/Alert)是提升用户体验和交互效率的重要手段。无论是表单校验、操作反馈、系统消息还是营销推送,合理的通知提示都能帮助用户及时获取关键…...
前端EXCEL插件智表ZCELL数据源功能详解
一、数据源功能介绍 前端EXCEL插件智表ZCELL提供了强大的数据源管理功能,使开发者能够灵活地在电子表格中集成和管理结构化数据。数据源功能主要分为两种类型: 卡片式数据源:适合展示和编辑单个数据记录 表格式数据源:适合处理表…...
打卡第31天:模块和库的导入
重复内容 知识点回顾: 1.导入官方库的三种手段 2.导入自定义库/模块的方式 3.导入库/模块的核心逻辑:找到根目录(python解释器的目录和终端的目录不一致) 作业:自己新建几个不同路径文件尝试下如何导入 导入机制的核…...
LLM Coding
AI Coding 深度解析:探索编程新范式与未来趋势 | w3cschool笔记https://www.phodal.com/blog/ai-friendly-architecture/bmadcode/BMAD-METHOD: Breakthrough Method for Agile Ai Driven Development...
Qt 的多线程
Qt 中的多线程主要用于处理耗时操作,避免阻塞主线程(UI 线程),从而提高程序的响应性和运行效率。以下是 Qt 多线程的相关技术总结: 常见的多线程实现方式 继承 QThread 类 :最基础的实现方式,具体步骤为继承 QThread 类,重写其 run() 函数,在 run() 函数中编写线程要…...
【请关注】各类MySQL数据备份还原分享
MySQL数据备份的全部方法 MySQL数据备份是数据库管理中的关键任务,以下是MySQL数据备份的全面方法总结: 一、逻辑备份方法 1. **mysqldump工具** - 最常用的备份工具 - 命令示例: >bash mysqldump -u [username] -p[password] [database_name] > backup.sql > -…...
Go语言方法与接收者 -《Go语言实战指南》
在 Go 中,方法是绑定到某个类型上的函数。与普通函数不同,方法具有一个“接收者(receiver)”,用于指定它是哪个类型的“方法”。 一、方法的定义语法 func (接收者名 接收者类型) 方法名(参数列表) 返回值列表 {// 方…...
基于 STM32 的农村污水处理控制系统设计与实现
摘要 针对农村污水处理自动化程度低、运维成本高的问题,本文设计了一种基于 STM32 单片机的污水处理控制系统。系统通过多传感器实时监测水质参数,结合 PID 控制算法实现污水处理全流程自动化,并集成远程监控功能,满足农村地区低成本、易维护的需求。 一、硬件系统设计 …...

【Linux】进程 信号的产生
🌻个人主页:路飞雪吖~ 🌠专栏:Linux 目录 一、掌握Linux信号的基本概念 🌠前台进程 VS 后台进程 🌠 小贴士: 🪄⼀个系统函数 --- signal() 🪄查看信号 --- man 7 sign…...
实时操作系统革命:实时Linux驱动的智能时代底层重构
一、智能时代对实时性的终极挑战 在万物互联的智能时代,人类对机器响应速度的期待已突破物理极限。当工业机器人以亚毫米级精度执行微米级加工任务,当自动驾驶系统在130公里时速下需在10毫秒内完成决策切换,当医疗机器人需在5毫秒内响应神经…...