Yolo v5实现细节(2)

news2024/10/7 6:48:57

Yolo v5代码实现细节

IOU系列损失

在之前的yolo v3中我们使用的定位损失主要使用的是差值平方的形式,通过预测边界框的参数和真实边界框的参数来进行计算求解的。

  • 定位损失

L loc  ( t , g ) = ∑ i ∈  pos  ( σ ( t x i ) − g ^ x i ) 2 + ( σ ( t y i ) − g ^ y i ) 2 + ( t w i − g ^ w i ) 2 + ( t h i − g ^ h i ) 2 N pos  L_{\text {loc }}(t, g)=\frac{\sum_{i \in \text { pos }}\left(\sigma\left(t_{x}^{i}\right)-\hat{g}_{x}^{i}\right)^{2}+\left(\sigma\left(t_{y}^{i}\right)-\hat{g}_{y}^{i}\right)^{2}+\left(t_{w}^{i}-\hat{g}_{w}^{i}\right)^{2}+\left(t_{h}^{i}-\hat{g}_{h}^{i}\right)^{2}}{N_{\text {pos }}} Lloc (t,g)=Npos i pos (σ(txi)g^xi)2+(σ(tyi)g^yi)2+(twig^wi)2+(thig^hi)2

g ^ x i = g x i − c x i g ^ y i = g y i − c y i g ^ w i = ln ⁡ ( g w i / p w i ) g ^ h i = ln ⁡ ( g h i / p h i ) \begin{array}{l} \hat{g}_{x}^{i}=g_{x}^{i}-c_{x}^{i} \\ \hat{g}_{y}^{i}=g_{y}^{i}-c_{y}^{i} \\ \hat{g}_{w}^{i}=\ln \left(g_{w}^{i} / p_{w}^{i}\right) \\ \hat{g}_{h}^{i}=\ln \left(g_{h}^{i} / p_{h}^{i}\right) \end{array} g^xi=gxicxig^yi=gyicyig^wi=ln(gwi/pwi)g^hi=ln(ghi/phi)

IOU损失

首先需要解释的是:L2损失是坐标的欧氏距离—L2损失就是差值平方和损失。

G r o u n d t r u t h : x ~ = ( x ~ t , x ~ b , x ~ l , x ~ r ) Ground truth: \tilde{x}=\left(\tilde{x}_{t}, \tilde{x}_{b}, \tilde{x}_{l}, \tilde{x}_{r}\right) Groundtruth:x~=(x~t,x~b,x~l,x~r)

P r e d i c t i o n : x = ( x t , x b , x l , x r ) Prediction: \quad x=\left(x_{t}, x_{b}, x_{l}, x_{r}\right) Prediction:x=(xt,xb,xl,xr)

ℓ 2  loss  = ∥ p r e d e t i o n − G r o u n d T r u t h ∥ 2 2 \ell_{2} \text { loss }=\|predetion-GroundTruth\|_{2}^{2} 2 loss =predetionGroundTruth22

首先我们给出IOU损失的计算形式:

 IoU loss  = − ln ⁡  Intersection  ( p r e d e t i o n , G r o u n d t r u t h ) Union ⁡ ( p r e d e t i o n , G r o u n d t r u t h ) \text { IoU loss }=-\ln \frac{\text { Intersection }(predetion, Ground truth)}{\operatorname{Union}(predetion, Ground truth)}  IoU loss =lnUnion(predetion,Groundtruth) Intersection (predetion,Groundtruth)

在这里插入图片描述
其中更为常见的IOU损失的计算公式为: 1-IOU

使用iou损失的优点为:

  1. 能够更好的反应重合程度。
  2. 具有尺度不变性。

使用iou损失的缺点为:当两个边界框不相交是loss为0

在这里插入图片描述

GIOU损失

首先先要说明GIOU的概念:

G I o U = I o U − A c − u A c − 1 ≤ G I o U ≤ 1 \begin{aligned} G I o U & =I o U-\frac{A^{c}-u}{A^{c}} \\ -1 & \leq G I o U \leq 1 \end{aligned} GIoU1=IoUAcAcuGIoU1

引入下面的一张图片来说明ac的概率:在图片中蓝色的面积即为ac的值绿色代表的是真实的边界框的面接,红色代表的是预测的边界框。

在这里插入图片描述
而u代表的是绿色框和红色框并集的面积。

与IOU类似当我们的GIOU大于某个阈值的时候说明我们的边界框匹配成功了,小于某个阈值的时候说明没有匹配成功。

在特殊的情况下GIOU会退化为IOU的

在这里插入图片描述

DIOU损失

在DIOU提出的原论文中作者说明了IOU损失和DIOU损失存在的两个具体的问题。

  • Slow Convergence(收敛速度慢)
  • Inaccurate Regression(预测的精度不足)

在这里插入图片描述

图中的上面部分黑色的框代表的是锚框,绿色代表的是真实的边界框,蓝色是给出的预测边界框。

经过400迭代之后才可以近似的回归正确。

下面的图即为使用Diou的情况对比,经过120次的迭代就可以完成边界框的收敛。

Distance-loU可以更好的表示边界框之间的回归关系。

首先引入DIOU的计算公式:如下所示

在这里插入图片描述

D I o U = I o U − ρ 2 ( b , b g t ) c 2 = I o U − d 2 c 2 − 1 ≤ D I o U ≤ 1 \begin{array}{c} D I o U=I o U-\frac{\rho^{2}\left(b, b^{g t}\right)}{c^{2}}=I o U-\frac{d^{2}}{c^{2}} \\ -1 \leq D I o U \leq 1 \end{array} DIoU=IoUc2ρ2(b,bgt)=IoUc2d21DIoU1

DloU损失能够直接最小化两个boxes之间的距离,因此收敛速度更快。

其中b是预测边界框中心点的位置坐标,而bgt是真实边界框中心点的位置坐标。求的是两个中心点距离的平方。

而c指的是外接矩阵的最小对角线的长度。

在这里插入图片描述

分析:当两个中心点的位置坐标完整的重合在一起的时候d为0,

L D I o U = 1 − D I o U L_{D I o U}=1-D I o U LDIoU=1DIoU

0 ≤ L D I o U ≤ 2 0 \leq L_{D I o U} \leq 2 0LDIoU2

CIOU损失

一个优秀的回归定位损失应该考虑到3种几何参数:重叠面积、中心点距离、长宽比

首先在DIOU的基础上给出CIOU的计算公式:

C I o U = I o U − ( ρ 2 ( b , b g t ) c 2 + α v ) C I o U=I o U-\left(\frac{\rho^{2}\left(b, b^{g t}\right)}{c^{2}}+\alpha v\right) CIoU=IoU(c2ρ2(b,bgt)+αv)

v = 4 π 2 ( arctan ⁡ w g t h g t − arctan ⁡ w h ) 2 v=\frac{4}{\pi^{2}}\left(\arctan \frac{w^{g t}}{h^{g t}}-\arctan \frac{w}{h}\right)^{2} v=π24(arctanhgtwgtarctanhw)2

α = v ( 1 − I o U ) + v \alpha=\frac{v}{(1-I o U)+v} α=(1IoU)+vv

在这里插入图片描述

目标检测数据增强策略

Mosaic data augmentation

图像增强的常见方式就包括了图像的裁剪,图像的随机水平翻转,图像的对比度改变的一些常见的策略。

在v3-spp v4 和 v5中都使用到了Mosaic图像增强的策略。

本质上是将多张图片拼接在一起进行训练的图像增强方式。

在这里插入图片描述

  • 增加数据的多样性
  • 增加目标个数
  • BN能一次性统计多张图片的参数(输入的batchsize变大的过程)

Random affine

优化策略:进行随机的仿射变换。(Rotation, Scale, Translation and Shear)旋转、缩放、平移、侧切。

在这里插入图片描述
但根据配置文件里的超参数发现只使用了ScaleTranslation即缩放和平移。

MixUp

MixUp,就是将两张图片按照一定的透明度融合在一起

之前在学习opencv的过程中使用到了猫狗图片的融合操作,mixup这种数据增强的策略与融合操作类似。

在这里插入图片描述

Albumentations,

主要是做些滤波、直方图均衡化以及改变图片质量等等,代码里写的只有安装了albumentations包才会启用,但在项目的requirements.txt文件中albumentations包是被注释掉了的,所以默认不启用。

Augment HSV

Augment HSV(Hue, Saturation, Value),随机调整色度,饱和度以及明度。

在这里插入图片描述

损失计算部分

YOLOv5的损失主要由三个部分组成:

  1. Classes loss,分类损失,采用的是BCE loss,注意只计算正样本的分类损失。

  2. Objectness loss,obj损失,采用的依然是BCEloss,注意这里的obj指的是网络预测的目标边界框与GTBox的CIoU。这里计算的是所有样本的obj损失。

  3. Location loss,定位损失,采用的是CIoU loss,注意只计算正样本的定位损失。

L o s s = λ 1 L c l s + λ 2 L o b j + λ 3 L l o c L o s s=\lambda_{1} L_{c l s}+\lambda_{2} L_{o b j}+\lambda_{3} L_{l o c} Loss=λ1Lcls+λ2Lobj+λ3Lloc

针对三个预测特征层(P3,P4,P5)上的obj损失采用不同的权重。小型目标更难预测因此可以将权重设置的大一些。

L o b j = 4.0 ⋅ L o b j small  + 1.0 ⋅ L o b j medium  + 0.4 ⋅ L o b j large  L_{o b j}={4.0} \cdot L_{o b j}^{\text {small }}+{1.0} \cdot L_{o b j}^{\text {medium }}+0.4 \cdot L_{o b j}^{\text {large }} Lobj=4.0Lobjsmall +1.0Lobjmedium +0.4Lobjlarge 

消除Grid敏感度

在yolo v3中目标边界框的预测方式采用下面的公式来进行计算:

b x = σ ( t x ) + c x b y = σ ( t y ) + c y b w = p w e t w b h = p h e t h \begin{array}{l} b_{x}=\sigma\left(t_{x}\right)+c_{x} \\ b_{y}=\sigma\left(t_{y}\right)+c_{y} \\ b_{w}=p_{w} e^{t_{w}} \\ b_{h}=p_{h} e^{t_{h}} \end{array} bx=σ(tx)+cxby=σ(ty)+cybw=pwetwbh=pheth

在这里插入图片描述

将预测的边界框中心限制在当前cell中,原因是所有生成的先验框的回归参数并不是相对于锚框的而是相对于,当前cell的左上角位置生成的

对于这个图而言,ph和pw代表的是生成锚框的高度和宽度信息。蓝色代表的是网络预测的最终的位置和大小

σ ( x ) = Sigmoid ⁡ ( x ) \sigma(x)=\operatorname{Sigmoid}(x) σ(x)=Sigmoid(x)

改进当中心点的位置在左上角的这种情况引入了缩放因子的概念

b x = ( σ ( t x ) ⋅  scale  x y −  scale  x y − 1 2 ) + c x b y = ( σ ( t y ) ⋅  scale  x y −  scale  x y − 1 2 ) + c y \begin{array}{l} b_{x}=\left(\sigma\left(t_{x}\right) \cdot \text { scale }_{x y}-\frac{\text { scale }_{x y}-1}{2}\right)+c_{x} \\ b_{y}=\left(\sigma\left(t_{y}\right) \cdot \text { scale }_{x y}-\frac{\text { scale }_{x y}-1}{2}\right)+c_{y} \end{array} bx=(σ(tx) scale xy2 scale xy1)+cxby=(σ(ty) scale xy2 scale xy1)+cy

在yolo v5网络中缩放因子一般设置为2带入得到预测边界框位置的回归参数。

b x = ( 2 ⋅ σ ( t x ) − 0.5 ) + c x b y = ( 2 ⋅ σ ( t y ) − 0.5 ) + c y \begin{array}{l} b_{x}=\left(2 \cdot \sigma\left(t_{x}\right)-0.5\right)+c_{x} \\ b_{y}=\left(2 \cdot \sigma\left(t_{y}\right)-0.5\right)+c_{y} \end{array} bx=(2σ(tx)0.5)+cxby=(2σ(ty)0.5)+cy

在这里插入图片描述

在yolo v5中bw和bh也同时进行改进操作。

b w = p w ⋅ ( 2 ⋅ σ ( t w ) ) 2 b h = p h ⋅ ( 2 ⋅ σ ( t h ) ) 2 \begin{array}{c} b_{w}=p_{w} \cdot\left(2 \cdot \sigma\left(t_{w}\right)\right)^{2} \\ b_{h}=p_{h} \cdot\left(2 \cdot \sigma\left(t_{h}\right)\right)^{2} \end{array} bw=pw(2σ(tw))2bh=ph(2σ(th))2

匹配正样本

之前在YOLOv4介绍中有讲过该部分内容,其实YOLOv5也差不多。主要的区别在于GT Box与Anchor Templates模板的匹配方式。在YOLOv4中是直接将每个GT Box与对应的Anchor Templates模板计算IoU,只要IoU大于设定的阈值就算匹配成功。但在YOLOv5中,作者先去计算每个GT Box与对应的Anchor Templates模板的高宽比例,即:

r w = w g t / w a t r h = h g t / h a t \begin{array}{l} r_{w}=w_{g t} / w_{a t} \\ r_{h}=h_{g t} / h_{a t} \\ \end{array} rw=wgt/watrh=hgt/hat

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

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

相关文章

高三学生的倒计时 给高考一个倒计时 让学习更有计划的进行

高三学生的压力是很大的,时间也是很紧迫,仅仅一年的时间,许多人都觉得不够用,为了让学子们更有时间紧迫感,更清晰的掌握时间,我们需要一个准确提醒的倒计时效果。 把这个倒计时放到班级电脑上,是…

DataGrip 2024 po for Mac 数据库管理工具解

Mac分享吧 文章目录 效果一、下载软件二、开始安装1、双击运行软件(适合自己的M芯片版或Intel芯片版),将其从左侧拖入右侧文件夹中,等待安装完毕2、应用程序显示软件图标,表示安装成功3、打开访达,点击【文…

LLMs 驱动的数据合成、整理和评估

1. AI 速读 总体概要 本文综述了大型语言模型(LLMs)在合成数据生成、筛选和评估方面的最新进展,旨在为学术和工业界提供深入、系统化的研究方向。文章强调了合成数据在解决真实世界数据局限性中的重要性,特别是在数据量和质量方…

汇聚荣做拼多多运营,是新手怎么做?

作为电商领域的一颗新星,拼多多以其独特的商业模式迅速崛起,吸引了众多商家和消费者的目光。对于新手来说,如何在拼多多平台上开展运营活动,成为了许多初入电商领域的人们关心的问题。本文将围绕如何做好拼多多运营这一核心内容&a…

类与对象(1)

1.c升级了类 C 语言结构体中只能定义变量,在 C 中,结构体内不仅可以定义变量,也可以定义函数。 比如: 之前在数据结构初阶中,用 C 语言方式实现的栈,结构体中只能定义变量 ;现在以 C 方式实现&…

期货交易记录20240626

文章目录 期货交易系统构建第一步、选品第二步、心态历练第三步、开仓纪律第四步、持仓纪律第五步、接下来的计划 2024年6月26号,开始写期货交易的第四篇日记。 交易记录:做了一笔纯碱的多单,在回撤了400个点左右后,看到企稳信号后…

升级外贸ERP保留历史数据,拥抱技术革新赢得未来

一些做了二十多年外贸的老公司,早期就通过使用ERP软件来进行订单的处理,但是随着互联网的发展,用的年岁久了,软件运行速度也变卡了,看到别人家的新功能也眼馋,但是就是不敢升级,担心一升级&…

数据采集Selenium中的弹窗处理

在爬虫技术中,弹窗处理是一个常见但具有挑战性的问题。Selenium作为一个强大的网页自动化工具,可以帮助我们有效地处理网页中的各种弹窗。本文将概述如何使用Selenium处理弹窗,并提供实现代码,代码中将使用代理IP技术。 概述 弹…

前端项目vue3/React使用pako库解压缩后端返回gzip数据

pako仓库地址:https://github.com/nodeca/pako 文档地址:pako 2.1.0 API documentation 外部接口返回一个直播消息或者图片数据是经过zip压缩的,前端需要把这个数据解压缩之后才可以使用,这样可以大大降低网络数据传输的内容&…

茴香豆接入微信个人助手部署

将rag产品接入微信工作群,自动回答问题,香吗?? let‘s go 1、打开openxlab平台,找到茴香豆web产品应用中心-OpenXLab 点击进入,设置知识库名字和密码 2、上传知识库文件和编辑正反例等 3、然后进行测试问答…

Gitlab合并代码并解决冲突演示

天行健,君子以自强不息;地势坤,君子以厚德载物。 每个人都有惰性,但不断学习是好好生活的根本,共勉! 文章均为学习整理笔记,分享记录为主,如有错误请指正,共同学习进步。…

南信大尹志聪教授为一作在顶级综合性期刊《Natl. Sci. Rev.》发文:传统梅雨停摆,江南缘何不再多烟雨?

文章简介 论文名称:Traditional Meiyu–Baiu has been suspended by global warming 第一作者及单位:尹志聪(教授|南京信息工程大学大气科学学院) 通讯作者及单位:王会军(院士|南京信息工程大学大气科学学院) 文章发…

尚品汇-(七)

(1)在网关中实现跨域 全局配置类实现 包名:com.atguigu.gmall.gateway.config 创建CorsConfig类 Configuration public class CorsConfig {Beanpublic CorsWebFilter corsWebFilter(){// cors跨域配置对象CorsConfiguration configuration…

使用单调队列求滑动窗口最大值

单调队列:队列元素之间的关系具有单调性(从队首到队尾单调递增/递减),队首与队尾进行插入与删除操作,使队列保持单调递增/递减,由双端队列deque实现。 通过例题对单调队列进行分析掌握: 使用单…

【UE5.3】笔记4-自定义材质蓝图

正常来说,我们都是拿到什么材质用什么材质,那么我们如何去创建自定义的材质呢? 首先,创建MyMaterials文件夹用来存放我们自制的材质; 然后,右键创建一个材质,起个名字,双击打开&am…

操作符详解(上) (C语言)

操作符详解(上) 一. 进制转换1. 二进制2. 二进制的转换 二. 原码 补码 反码三. 操作符的分类四. 结构成员访问操作符1. 结构体的声明2. 结构体成员访问操作符 一. 进制转换 1. 二进制 在学习操作符之前,我们先了解一些2进制、8进制、10进制…

SK Hynix 3D DRAM良率突破56.1%,开启存储新时代

根据韩国财经媒体Business Korea独家报道:在刚刚结束的VLSI 2024国际研讨会上,韩国半导体巨头SK Hynix公布了一项振奋人心的进展:其五层堆叠3D DRAM的制造良率已达到56.1%。此成果标志着3D DRAM技术在商业化道路上迈出了坚实的一步&#xff0…

Python+Pytest+Yaml+Request+Allure+GitLab+Jenkins接口自动化测试框架概解

PythonPytestYamlAllure整体框架目录(源代码请等下篇) 框架详解 common:公共方法包 –get_path.py:获取文件路径方法 –logger_util.py:输出日志方法 –parameters_until.py:传参方式方法封装 –requests_util.py:请求方式方法封…

从零开始学docker(四)-安装mysql及主从配置(一)

mysql MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS (Relational Database Management System,关…

基于 elementUI / elementUI plus,实现 主要色(主题色)的一件换色(换肤)

一、效果图 二、方法 改变elementUI 的主要色 --el-color-primary 为自己选择的颜色,核心代码如下: // 处理主题样式 export function handleThemeStyle(theme) {document.documentElement.style.setProperty(--el-color-primary, theme) } 三、全部代…