Yolo v5实现细节(2)

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

c语言学习记录(十)———函数

文章目录 前言一、函数的基本用法二、函数的参数传递1.基本方式2 数组在函数中的传参 前言 一个学习C语言的小白~ 有问题评论区或私信指出~ 提示:以下是本篇文章正文内容,下面案例可供参考 一、函数的基本用法 函数是一个完成特定功能的代码模块&…

【Linux】锁|死锁|生产者消费者模型

🔥博客主页: 我要成为C领域大神🎥系列专栏:【C核心编程】 【计算机网络】 【Linux编程】 【操作系统】 ❤️感谢大家点赞👍收藏⭐评论✍️ 本博客致力于知识分享,与更多的人进行学习交流 ​ ​ 访问互斥 …

modelsim做后仿真的一点思路

这是以TD_5.6.3_Release_88061生成的网表文件(其他工具生成的网表文件类似),与modelsim联合进行门级仿真的样例,时序仿真与门级仿真的方法类似,只是增加了标准延时文件。 1、建立门级仿真工程 将门级网表和testbench添…

深度学习31-33

1.负采样方案 (1)为0是负样本,负样本是认为构造出来的。正样本是有上下文关系 负采样的target是1,说明output word 在input word之后。 2.简介与安装 (1)caffe:比较经常用于图像识别,有卷积网…

一文详细了解Bootloader

Bootloader是什么 bootloader是一个引导加载程序,它的主要作用是初始化硬件设备、设置硬件参数,并加载操作系统内核。在嵌入式系统中,bootloader是硬件启动后第一个被执行的程序,它位于操作系统和硬件之间,起到桥梁的…

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

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

魔众一物一码溯源防伪系统——守护品牌,守护信任!

在这个充满竞争的市场上,如何确保你的产品不被仿冒,如何赢得消费者的信任?魔众一物一码溯源防伪系统,为你提供一站式解决方案,守护你的品牌,守护消费者的信任! 🔍魔众一物一码溯源防…

Node.js全栈指南:浏览器显示一个网页

上一章,我们了解到,如何通过第二章的极简 Web 的例子来演示如何查看官方文档。为什么要把查阅官方文档放在前面的章节说明呢?因为查看文档是一个很重要的能力,就跟查字典一样。 回想一下,我们读小学,初中的…

防火墙双机热备

防火墙双机热备 随着移动办公、网上购物、即时通讯、互联网金融、互联网教育等业务蓬勃发展,网络承载的业务越来越多,越来越重要。所以如何保证网络的不间断传输成为网络发展过程中急需解决的一个问题。 防火墙部署在企业网络出口处,内外网之…

windows系统修改克隆虚拟机的SID(报错:尝试将此计算机配置为域控制器时出错)

当我们用克隆虚拟机加入域的时候,可能会出现图下所示报错。这时我们可以用微软自带的工具sysprep来修改机器的SID来解决该问题 注意:用sysprep修改SID之后,系统会自动重启,之前配置好的网络、修改过的机器名会重置。所以&#xff…

6.2 通过构建情感分类器训练词向量

在上一节中,我们简要地了解了词向量,但并没有去实现它。在本节中,我们将下载一个名为IMDB的数据集(其中包含了评论),然后构建一个用于计算评论的情感是正面、负面还是未知的情感分类器。在构建过程中,还将为 IMDB 数据…

Windows上PyTorch3D安装踩坑记录

直入正题,打开命令行,直接通过 pip 安装 PyTorch3D : (python11) F:\study\2021-07\python>pip install pytorch3d Looking in indexes: http://mirrors.aliyun.com/pypi/simple/ ERROR: Could not find a version that satisfies the requirement p…

JS(JavaScript)入门指南(DOM、事件处理、BOM、数据校验)

天行健,君子以自强不息;地势坤,君子以厚德载物。 每个人都有惰性,但不断学习是好好生活的根本,共勉! 文章均为学习整理笔记,分享记录为主,如有错误请指正,共同学习进步。 玉阶生白露,夜久侵罗袜。 却下水晶帘,玲珑望秋月。 ——《玉阶怨》 文章目录 一、DOM操作1. D…

从零开始做题:有手就行

1 题目 2 解题 ARPHCR工具破解 得到flag DASCTF{2b3767763885a019b65bbfe9d1136c3b}

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

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

仿Photoshop利用曲线对图像调整亮度与色彩

曲线调整是Photoshop的最常用的重要功能之一。对于一个RGB图像, 可以对R, G, B 通道进行独立的曲线调整,即,对三个通道分别使用三条曲线(Curve)。还可以再增加一条曲线对 三个通道进行整体调整。 因此,对一个图像&a…

C++初学者指南-2.输入和输出---流输入和输出

C初学者指南-2.输入和输出—流输入和输出 文章目录 C初学者指南-2.输入和输出---流输入和输出1.定制输入/输出1.1 示例:点坐标输入/输出1.2 流操作符1.3(一部分)标准库流类型 2. 工具2.1 用getline读取行 2.2 用ignore进行跳转2.3 格式化操作…

武汉星起航:全球化舞台,中国跨境电商品牌力与竞争力双提升

随着全球化步伐的加快和数字技术的迅猛发展,跨境出口电商模式已经成为中国企业海外拓展的重要战略选择。这一模式不仅为中国的中小型企业提供了进军全球市场的机会,更为它们在全球舞台上展示独特的竞争优势提供了强有力的支撑。武汉星起航将从市场拓宽、…

STL迭代器的基础应用

STL迭代器的应用 迭代器的定义方法: 类型作用定义方式正向迭代器正序遍历STL容器容器类名::iterator 迭代器名常量正向迭代器以只读方式正序遍历STL容器容器类名::const_iterator 迭代器名反向迭代器逆序遍历STL容器容器类名::reverse_iterator 迭代器名常量反向迭…

问界M9累计大定破10万,创中国豪车新纪录

ChatGPT狂飙160天,世界已经不是之前的样子。 更多资源欢迎关注 6月26日消息,华为常务董事、终端BG董事长、智能汽车解决方案BU董事长余承东今日宣布,问界M9上市6个月,累计大定突破10万辆。 这一成绩,也创造了中国市场…