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

YOLO-V4经典物体检测算法介绍

在前文我们介绍了YOLO-V1~V3版本都做了哪些事,本文我们继续介绍YOLO-V4版本。

YOLO的作者在发表完V3之后,发现YOLO产品被美国军方应用到了很多军事战争当中,这是他所不希望看见的,因此宣布不再继续研究。

但历史和科技总是随时间不断发展,一个人的力量总是渺小的,后来的学者们“前赴后继”,继往圣之绝学,续写、补全着YOLO这本功法。

一、YOLO-V4

YOLO-V4的贡献:

  • 亲民,单GPU就能训练的非常好,接下来很多小模块都是这个出发点

  • 两大核心方法,从数据层面网络设计层面来进行改善

  • 消融实验,感觉能做的都让他给做了(凝当年百家之长),工作量不轻

  • 全部实验都是单GPU完成,不用太担心设备了

1.1 Bag of freebies(BOF)

  • 只增加训练成本,但是能显著提高精度,并不影响推理速度

  • 数据增强:调整亮度、对比度、色调、随机缩放、剪切、翻转、旋转

  • 网络正则化的方法:Dropout、Dropblock等

  • 类别不平衡,损失函数设计

1.1.1 数据增强

Mosaic data augmentation方法

一种数据增强的方法,参考CutMix然后四张图像拼接成一张进行训练;

所参考的CutMix:

上图展示CutMix中提到的融合、裁剪、裁剪拼接

V4作者参考该方法,将四张图像拼接成一张进行训练

具有以下优点

  • 丰富一张图上的信息

  • 增强后一张图上包含四张图的信息,减少了对大batch_size的依赖

  • 通常小目标的检测效果要比大目标差,将四张图放到一张图中,相当于变相扩充了数据集中小目标的样本数量。

当然在数据增强时还用了一些其它方法,如

  • 用随机值或训练集的平均像素值替换图像的区域

  • 根据概率设置随机隐藏一些补丁

  • 引入噪音点等

1.1.2 DropBlock与标签平滑方法

  • DropBlock

之前的dropout是随机选择点去掉(随机杀死一些神经元),如下图b

现在是直接去掉整个区域,dropblock。

这样做就好比去掉了图片中狗的眼睛/耳朵/鼻子或者是大半个头。

显然相比去掉一些点提升了更大的难度让计算机去好好学。

  • 标签平滑 Label Smoothing

神经网络最大的缺点就是容易过拟合,以猫狗分类0/1标签为例,这里进行平滑处理:

其中0.1为自己指定,2为类别个数

效果:右图,使用后簇内更加紧密,簇间更加分离(过拟合的话就会很近)

1.1.3 CIOU损失函数定义

IOU损失:从之前的学习中我们得知IOU是干嘛的,即真实框和预测框的重叠程度,一般IOU损失计算时直接1-IOU,有时也会使用下图右下角公式

但是使用IOU损失会面临一些问题

  • 如果两框没有相交则IOU=0无法梯度计算,

  • 相同的IOU却反映不出实际情况到底咋样,如以下三图IOU相同,但重叠情况却不同。

GIOU损失

  • 引入了最小封闭形状C(C可以把A、B包含在内,即下图C把两框都框起来了。)

  • 这样在在不重叠情况下能让预测框尽可能朝着真实框前进(以真实框为准,C越接近真实框越好)。

但是重叠的话又完了,以下情况结果是相同的。

DIOU损失

  • 其中分子计算预测框与真实框的中心点欧式距离d

  • 分母是能覆盖预测框与真实框的最小BOX的对角线长度c

  • 直接优化距离,速度更快,并解决GIOU问题

CIOU损失

损失函数必须考虑三个几何因素:重叠面积,中心点距离,长宽比,其中α可以当做权重参数 。

1.1.4 NMS细节改进

(其实这个并不属于BOF,而是属于后面BOS,因为涉及到计算了肯定会影响速度。这里为了知识点的连贯性放在一起说。)

DIOU-NMS

之前使用NMS来决定是否删除一个框,现在改用DIOU-NMS

  • 不仅考虑了IoU的值,还考虑了两个Box中心点之间的距离

  • 其中M表示高置信度候选框,Bi就是遍历各个框跟置信度高的重合情况

SOTF-NMS

"做人留一面日好相见",柔和一点的NMS,更改分数而且直接剔除

意思是之前高度重叠的,就要置信度最大的,别的都剔除。

上图中红色绿色框重叠了,但实际框起来的是两匹马,不应该去掉。

这里选用的方法就是降低置信度,如绿框是0.8,给它降低0.3分,然后通过阈值去筛选。

1.2 Bag of specials(BOS)

  • 增加稍许推断代价,但可以提高模型精度的方法

  • 网络细节部分加入了很多改进,引入了各种能让特征提取更好的方法

  • 注意力机制,网络细节设计,特征金字塔等,你能想到的全有

  • 读这一篇相当于把当年来部分优秀的论文又过了一遍

1.2.1 SPP与CSP网络结构

SPPNet(Spatial Pyramid Pooling)

  • V3中为了更好满足不同输入大小,训练的时候要改变输入数据的大小

  • SPP其实就是用最大池化控制大小,来满足最终输入特征一致即可。

CSPNet(Cross Stage Partial Network)

  • 每一个block按照特征图的channel维度拆分成两部分

  • 一份正常走网络,另一份直接concat到这个block的输出

意思是把输入的特征图切成两份,一份继续按照之前的路走(去卷积、block等),另一份直接拿过去和前面那份走完之后的结果进行concat。

这样算是减少特征图的深度(实际上并没有影响到精度),加快计算速度。

1.2.2 SAM注意力机制模块

注意力机制:

简单来说就是比如这里这句话:“小明今天开心地踢了一个绿色的皮球”,这句话的关键词/重要的部分是 "小明踢球",其他的次要,次次要。我们把注意力放在这些重要的上面,即分配一些权重。

这是语言/NLP中,图片中也是一样的,比如猫狗识别,我记得猫有胡须狗没有,可以把注意力放在胡须上。又或者说图片有前景和背景,我们应该把注意力放在更重要的前景里。

所参考的CBAM介绍

比如我们得到32*32*512的256个特征图,那就给这256个特征图经过操作得到它们的重要程度/分配权重(channel attention),之后再把权重乘到原始特征图中去。

此外除了看哪个特征图重要,还要看特征图里的哪个点/哪部分重要(spatial attention),即给每个特征图每个位置/像素点/grid cell分配权重,乘进去。

  • V4中参考CBAM,不过V4中用的是SAM只有spatial attention也就是空间的注意力机制。

YOLOV4中的Spatial attention module

在原始SAM(a)做了点修改(b),之前是最大池化和平均池化后拼在一起然后后再卷积,这里直接卷积,更快。

1.2.3 PAN模块

  • 下图是FAN,它是一种自顶向下的模式,将高层特征传下来,各层间进行特征融合、3*3卷积得到P2、P3、P4、P5等特征。

  • 但这样好像只有一条路(特征只从高层向底层传递),能不能来个双向的呢?

  • 于是,PAN登场

PAN(Path Aggregation Network)

引入了自底向上的路径,使得底层信息更容易传到顶部

并且还是一个捷径,红色的线没准走个100层(走的Resnet层数),绿色的线几层(橙色那几层,走的P后面延申的路)就到了。

YOLO-V4中在PAN上做了点修改,PAN中融合特征时使用的是加法(矩阵+矩阵),而YOLO-V4中则是拼接。虽然特征多了一些但是会提升一些精度。

1.2.4 激活函数

YOLO-V4中并非使用的是ReLU,而是Mish。

Mish

  • 不一棒子给"打死",给个改过自新的机会。

  • Relu有点太绝对了,Mish更符合实际

  • 虽然计算量确实增加了,效果会提升一点

在网络的初期,因为一开始是高斯随机的数,特征值在前面有负的可以理解,ReLU直接就去掉了,而Mish给了点机会,当然只挽留一定范围内的。

1.2.5 eliminate grid sensitivity

最终预测回归值的时候,还不是它真正的坐标,而是相对这个网格的位置,坐标回归值的预测都在0-1之间,但此时在grid边界怎么办?

  • 此时我们想要取到0或1,就需要无穷大的数

  • 为了缓解这种情况可以在激活函数前乘上 一个系数(大于1的),即放大结果。

1.3 整体网络架构

架构图如下:

输入、卷积、BN、Mish;然后SPP进行最大池化控制大小,来满足最终输入特征一致;

右边是PAN,特征图高底层特征双向拼接。

最右边的Yolo Head和V3一样。不同尺度的特征检测器。

相关文章:

YOLO-V4经典物体检测算法介绍

在前文我们介绍了YOLO-V1~V3版本都做了哪些事,本文我们继续介绍YOLO-V4版本。YOLO的作者在发表完V3之后,发现YOLO产品被美国军方应用到了很多军事战争当中,这是他所不希望看见的,因此宣布不再继续研究。但历史和科技总是随时间不断…...

angular相关知识点总结

创建 angualr 组件和传值 angular组件其实就是个xxx.component.ts,本质还是ts文件一个html文件 1.创建组件:在Angular中,可以使用命令行工具ng generate component创建一个新组件。例如: ng generate component my-component这将创建一个名…...

大坝安全监测系统:水库“守坝人”!

一、项目背景 随着社会经济的迅速发展,我国水资源利用率越来越高,各类水利水电工规模进一步扩大。在抗洪救灾、水利发电等方面带来巨大的经济和社会效益。但受多种因素影响,大坝的安全问题日益严重。大量工程实践证明,为保证大坝…...

CentOS7安装配置OpenVNP连接远端服务器

在项目当中需要访问一个三方接口及数据库,但是需要在CentOS7服务器上先配置OpenVPN,然后才能连接,现将整体配置过程记录如下。 安装 yum -y install epel-release yum -y install openvpn 查看版本 openvpn --version 配置客户端证书 打开…...

04- Matplotlib数据可视化详解 (数据库)

Matplotlib的亮点: import matplotlib.pyplot as plt # 导包plt.figure(figsize (9, 6) , 设置图片大小plt. plot(x, y), 画图绘制网格线: 线型, 颜色, 透明度plt.grid(linestyle --, color green, alpha0.75) # linestyle: 样式, color: 颜色, alpha: 透明度plt.axis(…...

高性能MySQL -- 查询性能优化

一般来说一个好的程序:查询优化,索引优化,库表结构要同时进行优化。今天我们来讲一下查询优化。 我们需要对MySQL的架构有基本认知,所以这里贴一张图大家看看: 图片来自于《小林coding》 为什么从查询会慢&#xff1…...

Android Binder机制之一(简介)

目录 前言 一、Android 进程间通信方式 二、Binder架构图 三、Binder涉及角色 3.1 Binder驱动 3.2 Binder实体 3.3 Binder引用 3.4 远程服务 3.5 ServiceManager守护进程 四、涉及源码 前言 这是本人第N次看Binder 相关知识了,其实每次看都有新的收获&…...

《SOC芯片研究框架》深度科普,发展趋势、技术特点、产业链一文看懂

片上系统SoC(System on Chip),即在一块芯片上集成一整个信息处理系统,简单来说 SoC芯片是在中央处理器CPU的基础上扩展音视频功能和专用接口的超大规模集成电路,是智能设备的“大脑”。随着半导体工艺的发展&#xff0…...

WebRTC中的ICE

ICE简介 ICE是用于UDP媒体传输的NAT穿透协议(适当扩展也可以支持TCP),它需要利用STUN和TURN协议来完成工作。 STUN协议提供了获取一个内网地址对应的公网地址映射关系(NAT Binding)的机制,并且提供了它们…...

了解webpack

文章目录一、webpack是什么?二、为什么要使用webpack三、webpack的五个核心概念四、安装webpack提示:以下是本篇文章正文内容,下面案例可供参考 一、webpack是什么? 本质上,webpack 是一个用于现代 JavaScript 应用程…...

NoSQL数据库详细介绍

一、NoSQL发展历史 NoSQL 一词最早出现于 1998 年,是 Carlo Strozzi 开发的一个轻量、开源、不提供 SQL 功能的关系数据库。 2009 年,Last.fm 的 Johan Oskarsson 发起了一次关于分布式开源数据库的讨论,来自 Rackspace 的 Eric Evans 再次…...

【2023】华为OD机试真题Java-题目0210-优秀学员统计

优秀学员统计 题目描述 公司某部门软件教导团正在组织新员工每日打卡学习活动,他们开展这项学习活动已经一个月了,所以想统计下这个月优秀的打卡员工。 每个员工会对应一个id,每天的打卡记录记录当天打卡员工的id集合,一共30天。 请你实现代码帮助统计出打卡次数top5的员…...

2023备战金三银四,Python自动化软件测试面试宝典合集

马上就又到了程序员们躁动不安,蠢蠢欲动的季节~这不,金三银四已然到了家门口,元宵节一过后台就有不少人问我:现在外边大厂面试都问啥想去大厂又怕面试挂面试应该怎么准备测试开发前景如何面试,一个程序员成长之路永恒绕…...

2023年实体店做什么比较好赚钱?

2023年实体店做什么比较好赚钱?未来实体店真正能赚的模型是什么?#百收#狂潮老师#千行#干货分享#商业思维 2023年实体店做什么比较好赚钱?...

SpringSecurity前后端分离(一篇就够了)

SpringSecurity前后端分离 从上至下操作,直接上手SpringSecurity 文章目录SpringSecurity前后端分离1、项目环境maven依赖数据库表2、自定义UserService接口3、屏蔽Spring Security默认重定向登录页面以实现前后端分离功能1、实现登录成功/失败、登出处理逻辑1、表…...

Allegro如何用Label Tune功能自动调整丝印到器件中心

Allegro如何用Label Tune功能自动调整丝印到器件中心 在做PCB设计的时候,调整丝印是比较费时的工作,如果需要把整板的丝印位号调整到器件的中心做装配图使用,Allegro的Label Tune功能支持快速把丝印位号居中到器件中心。 以下图为例,快速把所有丝印位号居中 调整前 调整后…...

Linux(十)线程安全 上

目录 一、概念 二、互斥锁实现互斥 三、条件变量实现同步 银行家算法 生产者与消费者模型 一、概念 概念:在多线程程序中,如果涉及到了对共享资源的操作,则有可能会导致数据二义性,而线程安全就指的是,就算对共享…...

CRM系统能给企业带来什么? CRM系统推荐

什么是CRM系统? CRM系统(又称客户关系管理系统)是一个以客户为核心的管理软件,能有效改善企业与现有客户的关系,且帮助企业寻找新的潜在客户,并赢回以前老客户。 CRM系统能给企业带来什么? C…...

ESP32设备驱动-LED控制器生成PWM信号

LED控制器生成PWM信号 文章目录 LED控制器生成PWM信号1、LED控制器介绍2、软件准备3、硬件准备4、代码实现PWM 是一种在数字引脚上获取类似模拟信号的方法。PWM实际上是一个在高电平和低电平之间切换的方波信号,在 0V 和 3.3V 之间。 当信号为 HIGH 和 LOW 时,这种连续的 HIG…...

秒杀项目之网关服务限流熔断降级分布式事务

目录一、网关服务限流熔断降级二、Seata--分布式事务2.1 分布式事务基础2.1.1 事务2.1.2 本地事务2.1.3 分布式事务2.1.4 分布式事务场景2.2 分布式事务解决方案2.2.1 全局事务可靠消息服务2.2.2 最大努力通知2.2.3 TCC事事务三、Seata介绍四、 Seata实现分布式事务控制4.1 案例…...

Springcloud:Eureka 高可用集群搭建实战(服务注册与发现的底层原理与避坑指南)

引言:为什么 Eureka 依然是存量系统的核心? 尽管 Nacos 等新注册中心崛起,但金融、电力等保守行业仍有大量系统运行在 Eureka 上。理解其高可用设计与自我保护机制,是保障分布式系统稳定的必修课。本文将手把手带你搭建生产级 Eur…...

【论文阅读28】-CNN-BiLSTM-Attention-(2024)

本文把滑坡位移序列拆开、筛优质因子,再用 CNN-BiLSTM-Attention 来动态预测每个子序列,最后重构出总位移,预测效果超越传统模型。 文章目录 1 引言2 方法2.1 位移时间序列加性模型2.2 变分模态分解 (VMD) 具体步骤2.3.1 样本熵(S…...

浪潮交换机配置track检测实现高速公路收费网络主备切换NQA

浪潮交换机track配置 项目背景高速网络拓扑网络情况分析通信线路收费网络路由 收费汇聚交换机相应配置收费汇聚track配置 项目背景 在实施省内一条高速公路时遇到的需求,本次涉及的主要是收费汇聚交换机的配置,浪潮网络设备在高速项目很少,通…...

音视频——I2S 协议详解

I2S 协议详解 I2S (Inter-IC Sound) 协议是一种串行总线协议,专门用于在数字音频设备之间传输数字音频数据。它由飞利浦(Philips)公司开发,以其简单、高效和广泛的兼容性而闻名。 1. 信号线 I2S 协议通常使用三根或四根信号线&a…...

怎么让Comfyui导出的图像不包含工作流信息,

为了数据安全,让Comfyui导出的图像不包含工作流信息,导出的图像就不会拖到comfyui中加载出来工作流。 ComfyUI的目录下node.py 直接移除 pnginfo(推荐)​​ 在 save_images 方法中,​​删除或注释掉所有与 metadata …...

实战三:开发网页端界面完成黑白视频转为彩色视频

​一、需求描述 设计一个简单的视频上色应用,用户可以通过网页界面上传黑白视频,系统会自动将其转换为彩色视频。整个过程对用户来说非常简单直观,不需要了解技术细节。 效果图 ​二、实现思路 总体思路: 用户通过Gradio界面上…...

STL 2迭代器

文章目录 1.迭代器2.输入迭代器3.输出迭代器1.插入迭代器 4.前向迭代器5.双向迭代器6.随机访问迭代器7.不同容器返回的迭代器类型1.输入 / 输出迭代器2.前向迭代器3.双向迭代器4.随机访问迭代器5.特殊迭代器适配器6.为什么 unordered_set 只提供前向迭代器? 1.迭代器…...

以太网PHY布局布线指南

1. 简介 对于以太网布局布线遵循以下准则很重要,因为这将有助于减少信号发射,最大程度地减少噪声,确保器件作用,最大程度地减少泄漏并提高信号质量。 2. PHY设计准则 2.1 DRC错误检查 首先检查DRC规则是否设置正确,然…...

typeof运算符 +unll和undefined的区别

typeof运算符 JavaScript 有三种方法,可以确定一个值到底是什么类型。而我们 现在需要接触到的就是typeof 数值返回number 1 typeof 123 // "number" 字符串返回string 1 typeof 123 // "string" 布尔值返回boolean 1 typeof fal…...

408第一季 - 数据结构 - 栈与队列

栈 闲聊 栈是一个线性表 栈的特点是后进先出 然后是一个公式 比如123要入栈,一共有5种排列组合的出栈 栈的数组实现 这里有两种情况,,一个是有下标为-1的,一个没有 代码不用看,真题不会考 栈的链式存储结构 L ->…...