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

YOLOv5简介

YOLOv5

一、输入端

1. Mosaic数据增强:

请添加图片描述

CutMix 数据增强:随机生成一个裁剪框Box,裁剪掉A图中的相应位置,然后用B图相应位置的ROI放到A中被裁剪的区域中形成新的样本。采用加权求和的方式计算损失,将A区域中被cut掉的位置随机填充训练集中其他数据的区域像素值,分类结果按一定比例分配。
Mosaic数据增强:对四张图片进行拼接,每一张图片都有其对应的框框,将四张图片拼接之后就获得一张新的图片,同时也获得这张图片对应的锚框,之后将这样这张新的图片传入到神经网络当中学习,相当于一次传入四张图片进行学习。

论文中说这极大丰富了检测物体的背景!且在标准化BN计算的时候一次会计算四张图片的数据!主要用于小目标检测

2. 自适应锚框计算:

在输入图像中采样大量的区域,判断这些区域中是否包含感兴趣的目标,并调整区域边界从而更准确地预测目标的真实边界框(ground-truth bounding box)。 不同的模型使用的区域采样方法可能不同。 锚框:以每个像素为中心,生成多个缩放比和宽高比(aspect ratio)不同的边界框。

3. 自适应图片缩放:

请添加图片描述

1、原理:输入网络的尺寸统一缩放到同一个尺寸时,检测效果会更好(train中放入的图并不经过letterbox,而是检测的时候使用letterbox)。如果是简单的使用resize,很有可能就造成了图片信息的丢失,所以提出了letterbox自适应图片缩放技术。
letterbox的主要思想是尽可能的利用网络感受野的信息特征。比如在YOLOV5中最后一层的Stride=5,即最后一层的特征图中每个点,可以对应原图中32X32的区域信息
2、思想:图片变换比例一致指的是,长宽的收缩比例应该采用相同的比例。有效利用感受野信息则是指,对于收缩后不满足条件的一边,用灰白条填充至可以被感受野整除。

二、backbone

请添加图片描述

1、Focus层(现已弃用):

在获得输入后首先利用focus层将图像的宽高信息转换为通道信息。具体做法是在一张图片中,每隔一个像素获得一个像素,这时获得四个独立的特征层,之后进行特征层的堆叠。目的是减少参数量,增加运行速度。

在YOLOv5最新版本下,Focus层已经改为普通的64×6464 \times 6464×64卷积层。如图:

请添加图片描述

2、Conv2D_BN_SiLU卷积块:

其中,SiLU激活函数是sigmoid和ReLU的改进版,其具有无上界有下界、平滑和单调的特性。

f(x)=x×sigmoid(X)f(x)=x \times sigmoid(X) f(x)=x×sigmoid(X)
请添加图片描述

部分版本也采用LeakyReLU激活函数。

3、bottleneck

请添加图片描述
building block(图左)和bottleneck(图右)都是在Resnet提出的。其中,building block是Resnet34提出的,bottleneck是Resnet50提出的。在bottleneck中,1×1的卷积层的作用是减少参数量。经过实验证明,bottleneck即减少了参数量优化了计算,由保持了原有的精度。如果网络层数少的话,选用building block。而如果网络层数很深,为了减少计算量选用bottleneck。

shortcut处选择的是add而不是concat。作用是使特征图相加,维持通道数不变。

4、 CSPLayer:

请添加图片描述
YOLOv5的CSPNet结构将原输入分成两支(图b),两支分别进行卷积操作使得通道数减半。之后一个分支进行Bottleneck × N操作,然后concat两个分支进行通道数的堆叠。可以抽象的理解为CSPlayer有一个大的“残差边”。 这样的操作使得输入CSPLayer的特征与输出的通道数一致,目的是使模型习得更多的特征。

其中Backbone的CSPLayer结构为:

(CBL为Conv+BN+leakyReLU,CBS为Conv+BN+SiLU)
请添加图片描述
如图,其将输入先分成两支,一支先经过CBL块(后期改为CBS),再经过多个残差结构(Bottleneck × N),在经过一个卷积调整通道数。另一个分支直接进行卷积调整通道数。之后对这两个分支按通道进行堆叠,最后在经过一个CBL(后期改为CBS)。

Neck的CSPLayer结构为: 请添加图片描述
Neck层的CSPLayer将中间的残差结构换成了2 × X个CBL(后期为CBS)。主要原因是Neck层比较浅。

5、SPPBottleneck:

传统的SPP又称金字塔池化可以将任意大小的特征图转换成固定大小的特征向量。但是在YOLOv5中,SPPBottleneck主要作用是通过不同池化核大小的最大池化进行特征提取,提高网络的感受野。其中,shotcut处为concat,因此应保证每次池化后map大小不变。
请添加图片描述
SPPF,在YOLOv5后期提出了SPPF结构,起将并行的最大层化改为了串行的最大池化层,虽然对结构进行了修改但是目的完全一样。
请添加图片描述
其中,串行的2个5×5和1个9×9是等价的,串行的3个5×5和1个13×13是等价的。并行和串行的效果一样,但串行的效率更高。

三 、Neck层

请添加图片描述
如图,YOLOv5提取三个特征层进行目标检测,分别位于中间层、中下层和底层。三个特征曾的尺寸分别为(80,80,256)(80, 80, 256)(80,80,256)(40,40,512)(40, 40, 512)(40,40,512)(20,20,1024)(20, 20 ,1024)(20,20,1024)

特征金字塔可以将不同shape的特征层进行特征融合,有利于提取更好的特征,具体融合方式如图。其中,上采样采用插值,下采样采用卷积。

FPN(语义信息)+PAN(定位信息)

通常认为,深层的特征层携带有较强的语义特征信息和较弱的定位信息;浅层的特征层有较强的位置信息和较弱的语义信息。FPN就是把深层的语义特征传到浅层,从而增强多个尺度上的语义表达。而PAN则把浅层的定位信息传导到深层,增强多个尺度上的定位能力。

如图,FPN是自底向上,将高层的语义特征传递上去,对整个金字塔进行增强,但是只增强了语义信息而没有增强位置信息;通过在FPN后加上一个自顶向下的PAN对位置信息进行补充,将顶层的位置信息传递下去。

四、 YOLO Head

通过特征金字塔,获得了三个加强特征,分别为(20,20,1024)(20, 20, 1024)(20,20,1024)(40,40,512)(40, 40, 512)(40,40,512)(80,80,256)(80, 80, 256)(80,80,256),之后将这三个加强特征传入YOLO Head获得预测结果。

对于每一个特征层,首先使用一个卷积调整通道数,最终的通道数与数据集的类别数相关。其中,每一个特征层的每一个特征点存在3个锚框。

假设使用的是voc数据集,类别是20种,最后的维度为75=3×(4+1+20)

其中:3代表三个锚框;4代表每一个锚框的回归参数;1代表该特征点是否包含物体(该特征点是否为背景);20用于判断该特征点的种类。

假设使用的是coco数据集(类别为80),则最后的通道数为255=3×(4+1+80)。

五、 预测

1、 解码

假设数据集为coco数据集,获得的特征层预测结果为:(N,20,20,255)(N, 20, 20, 255)(N,20,20,255)(N,40,40,255)(N, 40, 40, 255)(N,40,40,255)(N,80,80,255)(N, 80, 80, 255)(N,80,80,255),之后将255拆分成3个85,对应3个锚框的85个参数。

(N,20,20,255)(N, 20, 20, 255)(N,20,20,255)特征层reshape成(N,20,20,3,85)(N, 20, 20, 3, 85)(N,20,20,3,85),之后对每个特征点对应的三个锚框进行解码操作:

其中:pwp_wpwphp_hph为锚框的长宽,cxc_xcxcyc_ycy为预测锚框对应的单元格离图片左上角的距离。(tx,ty,tw,th)(t_x, t_y, t_w, t_h)(tx,ty,tw,th)是预测偏移量。σ\sigmaσ为sigmoid激活函数。

请添加图片描述
请添加图片描述

图一为YOLOv2/3/4的锚框回归计算公式,图二为YOLOv5的锚框回归计算公式。

  1. 宽高计算:作者认为原始的yolo /darknet框方程式存在严重缺陷,宽度和高度虽然永远>0,但不受限制,因为它们只是out=einout=e^{in}out=ein,这种指数的运算很危险,易导致梯度不稳定,训练难度加大,使用(2σ(tw))2\left(2\sigma\left( t_w \right) \right)^2(2σ(tw))2既能够保证宽高>0,也能对宽高限制,最大值为anchor框宽高的4倍。
  2. 偏移计算:因为YOLOv5的正样本定义与YOLO之前系列的不同,故在此公式的计算也不相同。关于正负样本在”训练“处进行介绍。

2、得分筛选与非极大抑制:

得分筛选与非极大抑制的过程可以概括如下:

  1. 找出该图片中得分大于门限函数的框。在进行重合框筛选前就进行得分的筛选可以大幅度减少框的数量。
  2. 对种类进行循环,非极大抑制的作用是筛选出一定区域内属于同一种类得分最大的框,对种类进行循环可以帮助我们对每一个类分别进行非极大抑制。
  3. 根据得分对该种类进行从大到小排序。
  4. 每次取出得分最大的框,计算其与其它所有预测框的重合程度,重合程度过大的则剔除。

六、训练

1、 LOSS组成

网络的损失与网络的预测组成相同,分为:Reg部分(特征点的回归参数)、Obj部分(该特征点是否包含物体)、Cls部分(特征点物体的种类)。

2、 正样本匹配:

从IOU匹配变成shape匹配,先计算gt与9个锚框的长宽比,如果长宽比小于设定阈值,说明该gt和对应的锚框匹配,一个gt可能与几个锚框均能匹配上,因为同之前YOLO一样,YOLOv5有三层网络,9个锚框, 从小到大,每3个锚框对应一层网络,所以一个gt可能在不同的网络层上做预测训练,大大增加了正样本的数量,当然也会出现gt与所有锚框都匹配不上的情况,这样gt就会被当成背景,不参与训练。

3、 筛选框匹配:

gt框与锚框匹配后,得到锚框对应的网络层的grid,看gt中心点落在哪个grid上,不仅取该grid中和gt匹配的锚框作为正样本,还取相邻的的两个grid中的anchor为正样本。同时gt不仅与一个锚框匹配,如果跟几个锚框都匹配上,而且锚框不在同一个网络层上,所以可能有3-9个正样本,增大正样本数量。

4、 LOSS计算:

1、DIOU Loss: 好的目标框函数应该考虑三个重要几何因素:重叠面积、中心点距离和长宽比如何最小化预测框和目标框之间的归一化距离:DIOU_Loss
请添加图片描述
DIOU_Loss考虑了重叠面积和中心点距离,当目标框包裹预测框的时候,直接度量2个框的距离,因此DIOU Loss收敛的更快。
请添加图片描述

问题:没有考虑长宽比:如1、2、3,目标框包裹预测框,本来DIOU_Loss可以起作用,但是预测框的中心点的位置都是一样的,因此按照DIOU Loss的计算公式,三者的值都是相同的。

2、CIOU Loss:CIOU Loss在DIOU Loss的基础上增加了一个影响因子,将预测框和目标框的长宽比都考虑进去了。
CIOU_Loss=1−CIOU=1−(IOU−Distance_22Distance_C2−v2(1−IOU)+v)CIOU\_Loss = 1-CIOU=1-(IOU -\frac{Distance\_2^2}{Distance\_C^2}- \frac{v^2}{(1-IOU)+v}) CIOU_Loss=1CIOU=1(IOUDistance_C2Distance_22(1IOU)+vv2)
其中,vvv是衡量长宽比一致性的参数,也可以定义为:
v=4π2(arctanwgthgt−arctanwPhP)2v=\frac{4}{\pi^2}(arctan\frac{w^{gt}}{h^{gt}}-arctan\frac{w^P}{h^P})^2 v=π24(arctanhgtwgtarctanhPwP)2
这样,CIOU Loss就将目标框回归函数应该考虑三个重要集合因素:重叠面积、中心点距离、长宽比全都考虑进去了。

3、Obj部分,由第正样本匹配部分可知道每个真实框对应的先验框,所有真实框对应的先验框都是正样本,剩余的先验框均为负样本,根据正负样本和特征点的是否包含物体的预测结果计算交叉熵损失,作为Obj部分的Loss组成。

4、 Cls部分,由第三部分可知道每个真实框对应的先验框,获取到每个框对应的先验框后,取出该先验框的种类预测结果,根据真实框的种类和先验框的种类预测结果计算交叉熵损失,作为Cls部分的Loss组成。

相关文章:

YOLOv5简介

YOLOv5 一、输入端 1. Mosaic数据增强: CutMix 数据增强:随机生成一个裁剪框Box,裁剪掉A图中的相应位置,然后用B图相应位置的ROI放到A中被裁剪的区域中形成新的样本。采用加权求和的方式计算损失,将A区域中被cut掉的…...

【面向对象语言三大特性之 “继承”】

目录 1.继承的概念及定义 1.1继承的概念 1.2 继承定义 1.2.1定义格式 1.2.2继承关系和访问限定符 1.2.3继承基类成员访问方式的变化 2.基类和派生类对象赋值转换 3.继承中的作用域 4.派生类的默认成员函数 5.继承与友元 6. 继承与静态成员 7.复杂的菱形继承及菱形虚拟…...

Ambari2.7.5集群搭建详细流程

0 说明 本文基于本地虚拟机从零开始搭建ambari集群 1 前置条件 1.1 本地虚拟机环境 节点角色ambari-1ambari-server ambari-agentambari-2ambari-agentambari-3ambari-agent 1.2 安装包 1.3 修改主机名并配置hosts文件 hostnamectl set-hostname ambari-1 hostnamectl se…...

房产|1月全国70城房价出炉!疫情放开后你关心的城市房价有何变化

2023年1月份,70个大中城市中新房销售价格环比上涨城市个数增加;一线城市新房销售价格环比同比转涨、二三线城市环比降势趋缓,二三线城市同比下降。 | 新房/二手房12月-1月环比上涨城市数量变化 70个大中城市中,新房环比上涨城市…...

秒验 重新定义“一键登录”

现如今,一般APP在注册登录时,仍然要经历填写用户名、密码、绑定手机号等一系列传统流程,有的人认为可以通过第三方登录避免这些流程,但仍旧要经历手机验证码的环节,而且存在验证码被拦截的风险,短信费用也很…...

ZenBuster:一款功能强大的多线程跨平台URL枚举工具

关于ZenBuster ZenBuster是一款功能强大的多线程跨平台URL枚举工具,该工具基于Python开发,同时还具备暴力破解功能。 该工具适用于安全专业人员,可以在渗透测试或CTF比赛中为广大研究人员提供帮助,并收集和目标相关的各种信息。…...

2023年美赛ICM问题E:光污染 这题很好做啊!

2023年美赛ICM问题E:光污染 这题很好做啊!![在这里插入图片描述](https://img-blog.csdnimg.cn/e918cc6fc9214b53bf4859063bfe56b0.png#pic_center) 我看到DS数模的分析,看似头头是道,实则GouPi不通,我出一个,用于大家…...

InVEST模型 | 01 InVEST模型安装(Windows10)

除了在Python Anaconda环境中进行安装InVEST模型Python安装,平时最常使用的安装方式是通过.exe直接进行安装,本节介绍的就是直接下载安装的步骤: 打开InVEST模型下载页面 链接为:https://naturalcapitalproject.stanford.edu/…...

spring-web InvocableHandlerMethod 源码分析

说明 本文基于 jdk 8, spring-framework 5.2.x 编写。author JellyfishMIX - github / blog.jellyfishmix.comLICENSE GPL-2.0 类层次 HandlerMethod,处理器的方法的封装对象。HandlerMethod 只提供了处理器的方法的基本信息,不提供调用逻辑。 Invoca…...

一分钟了解微信公众号服务器配置自动回复

1、建一个web服务工程 2、开放任意一个接口, 比如 /aaa/bbb/ccc 把接口路径配置在这里,ip为公网ip或域名,其他的参数默认,对入门选手没啥用 3、该接口允许get和post两种方式访问,接口需要对于访问方式编写两套逻辑…...

打印不同的图形-课后程序(JAVA基础案例教程-黑马程序员编著-第四章-课后作业)

【案例4-1】打印不同的图形 记得 关注,收藏,评论哦,作者将持续更新。。。。 【案例介绍】 案例描述 本案例要求编写一个程序,可以根据用户要求在控制台打印出不同的图形。例如,用户自定义半径的圆形和用户自定义边长的…...

14. QT_OPenGL中引入顶点着色器和片段着色器

1. 说明: 着色器是OPenGL中非常重要的一部分,在有了模型后,如果未给模型添加着色器,那么渲染效果会折扣很多。着色器中使用到的语言是GLSL(OPenGL Shader Language),可以通过这篇文章GLSL基本语法进行了解。 效果展示&#xff1a…...

ecaozzz

2. 图形报表ECharts 2.1 ECharts简介 ECharts缩写来自Enterprise Charts,商业级数据图表,是百度的一个开源的使用JavaScript实现的数据可视化工具,可以流畅的运行在 PC 和移动设备上,兼容当前绝大部分浏览器(IE8/9/10/…...

应用部署初探:6个保障安全的最佳实践

在之前的文章中,我们了解了应用部署的阶段以及常见的部署模式,包括微服务架构的应用应该如何部署等基本内容。本篇文章将介绍如何安全地部署应用程序。 安全是软件开发生命周期(SDLC)中的关键部分,同时也需要成为 S…...

转转测试环境docker化实践

测试环境对于任何一个软件公司来讲,都是核心基础组件之一。转转的测试环境伴随着转转的发展也从单一的几套环境发展成现在的任意的docker动态环境docker稳定环境环境体系。期间环境系统不断的演进,去适应转转集群扩张、新业务的扩展,走了一些…...

linux 之 ps命令介绍

哈喽,大家好,我是有勇气的牛排(全网同名)🐮 有问题的小伙伴欢迎在文末评论,点赞、收藏是对我最大的支持!!!。 前言 如过想实现对进程监控,就需要使用到ps命…...

Server端的Actor,分工非常的明确,但是只将Actor作为一部手机来用,真的合适吗?

这是一篇介绍PowerJob,Server端Actor的文章,如果感兴趣可以请点个关注,大家互相交流一下吧。 server端一共有两个Actor,一个是处理worker传过来的信息,一个是server之间的信息传递。 处理Worker的Actor叫做WorkerRequ…...

2023年美赛C题 预测Wordle结果Predicting Wordle Results这题太简单了吧

2023年美赛C题 预测Wordle结果Predicting Wordle Results 更新时间:2023-2-17 11:30 1 题目 2023年MCM 问题C:预测Wordle结果![在这里插入图片描述](https://img-blog.csdnimg.cn/e059d917333e497e90ca082605869e3c.png#pic_center) Wordle是纽约时报目前每天提…...

UE4 渲染学习笔记(未完)

原文链接:虚幻4渲染管线入门 - 知乎 从原文摘抄一下: 渲染框架 1,一套是传统的以RHICmdList为核心构建RenderPass,从RHICmdList.BeginRenderPass(...)开始,以RHICmdList.EndRenderPass()结束的框架。 2.一套是以新的Gr…...

Ajax?阿贾克斯?

一、Ajax简介 AJAX Asynchronous JavaScript and XML(异步的 JavaScript 和 XML)。 AJAX 不是新的编程语言,而是一种使用现有标准的创新方法。 AJAX 最大的优点是在不重新加载整个页面的情况下,可以与服务器交换数据并更新部分网…...

变量 varablie 声明- Rust 变量 let mut 声明与 C/C++ 变量声明对比分析

一、变量声明设计:let 与 mut 的哲学解析 Rust 采用 let 声明变量并通过 mut 显式标记可变性,这种设计体现了语言的核心哲学。以下是深度解析: 1.1 设计理念剖析 安全优先原则:默认不可变强制开发者明确声明意图 let x 5; …...

智慧工地云平台源码,基于微服务架构+Java+Spring Cloud +UniApp +MySql

智慧工地管理云平台系统,智慧工地全套源码,java版智慧工地源码,支持PC端、大屏端、移动端。 智慧工地聚焦建筑行业的市场需求,提供“平台网络终端”的整体解决方案,提供劳务管理、视频管理、智能监测、绿色施工、安全管…...

GitHub 趋势日报 (2025年06月08日)

📊 由 TrendForge 系统生成 | 🌐 https://trendforge.devlive.org/ 🌐 本日报中的项目描述已自动翻译为中文 📈 今日获星趋势图 今日获星趋势图 884 cognee 566 dify 414 HumanSystemOptimization 414 omni-tools 321 note-gen …...

Redis数据倾斜问题解决

Redis 数据倾斜问题解析与解决方案 什么是 Redis 数据倾斜 Redis 数据倾斜指的是在 Redis 集群中,部分节点存储的数据量或访问量远高于其他节点,导致这些节点负载过高,影响整体性能。 数据倾斜的主要表现 部分节点内存使用率远高于其他节…...

使用Matplotlib创建炫酷的3D散点图:数据可视化的新维度

文章目录 基础实现代码代码解析进阶技巧1. 自定义点的大小和颜色2. 添加图例和样式美化3. 真实数据应用示例实用技巧与注意事项完整示例(带样式)应用场景在数据科学和可视化领域,三维图形能为我们提供更丰富的数据洞察。本文将手把手教你如何使用Python的Matplotlib库创建引…...

在Ubuntu24上采用Wine打开SourceInsight

1. 安装wine sudo apt install wine 2. 安装32位库支持,SourceInsight是32位程序 sudo dpkg --add-architecture i386 sudo apt update sudo apt install wine32:i386 3. 验证安装 wine --version 4. 安装必要的字体和库(解决显示问题) sudo apt install fonts-wqy…...

【Go语言基础【13】】函数、闭包、方法

文章目录 零、概述一、函数基础1、函数基础概念2、参数传递机制3、返回值特性3.1. 多返回值3.2. 命名返回值3.3. 错误处理 二、函数类型与高阶函数1. 函数类型定义2. 高阶函数(函数作为参数、返回值) 三、匿名函数与闭包1. 匿名函数(Lambda函…...

使用Spring AI和MCP协议构建图片搜索服务

目录 使用Spring AI和MCP协议构建图片搜索服务 引言 技术栈概览 项目架构设计 架构图 服务端开发 1. 创建Spring Boot项目 2. 实现图片搜索工具 3. 配置传输模式 Stdio模式(本地调用) SSE模式(远程调用) 4. 注册工具提…...

C/C++ 中附加包含目录、附加库目录与附加依赖项详解

在 C/C 编程的编译和链接过程中,附加包含目录、附加库目录和附加依赖项是三个至关重要的设置,它们相互配合,确保程序能够正确引用外部资源并顺利构建。虽然在学习过程中,这些概念容易让人混淆,但深入理解它们的作用和联…...

【LeetCode】3309. 连接二进制表示可形成的最大数值(递归|回溯|位运算)

LeetCode 3309. 连接二进制表示可形成的最大数值(中等) 题目描述解题思路Java代码 题目描述 题目链接:LeetCode 3309. 连接二进制表示可形成的最大数值(中等) 给你一个长度为 3 的整数数组 nums。 现以某种顺序 连接…...