位置: IT常识 - 正文

Yolov5算法解读(yolov1算法)

编辑:rootadmin
Yolov5算法解读

推荐整理分享Yolov5算法解读(yolov1算法),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:yolo算法实现具体步骤,yolov算法详解,yolov3算法原理,yolov算法详解,yolov1算法,yolov2算法原理,yolov5算法详解,yolov1算法,内容如对您有帮助,希望把文章链接给更多的朋友!

yolov5于2020年由glenn-jocher首次提出,直至今日yolov5仍然在不断进行升级迭代。

Yolov5有YOLOv5s、YOLOv5m、YOLOv5l、YOLOv5x四个版本。文件中,这几个模型的结构基本一样,不同的是depth_multiple模型深度和width_multiple模型宽度这两个参数。 

yolov5主要分为输入端,backbone,Neck,和head(prediction)。backbone是New CSP-Darknet53。Neck层为SPFF和New CSP-PAN。Head层为Yolov3 head。 yolov5 6.0版本的主要架构如下图所示:

从整体结构图中,我们可以看到Backbone,neck和head由不同的blocks构成,下面是对于这三个部分,逐一介绍各个blocks。

1. 输入端:

YOLOv5在输入端采用了Mosaic数据增强,参考了CutMix数据增强的方法,Mosaic数据增强由原来的两张图像提高到四张图像进行拼接,并对图像进行随机缩放,随机裁剪和随机排列。使用数据增强可以改善数据集中,小、中、大目标数据不均衡的问题。

Mosaic数据增强的主要步骤为:1. Mosaic 2.Copy paste 3.Random affine(Scale, Translation and Shear) 4.Mixup 5.Albumentations 6. Augment HSV(Hue, Saturation, Value) 7. Random horizontal flip.

采用Mosaic数据增强的方式有几个优点:1.丰富数据集:随机使用4张图像,随机缩放后随机拼接,增加很多小目标,大大丰富了数据集,提高了网络的鲁棒性。2.减少GPU占用:随机拼接的方式让一张图像可以计算四张图像的数据,减少每个batch的数量,即使只有一个GPU,也能得到较好的结果。3.同时通过对识别物体的裁剪,使模型根据局部特征识别物体,有助于被遮挡物体的检测,从而提升了模型的检测能力。

2.backbone

在Backbone中,有conv,C3,SPFF是我们需要阐明的。

2.1.Conv模块

Conv卷积层由卷积,batch normalization和SiLu激活层组成。batch normalization具有防止过拟合,加速收敛的作用。SiLu激活函数是Sigmoid 加权线性组合,SiLU 函数也称为 swish 函数。 公式:silu(x)=x∗σ(x),where σ(x) is the logistic sigmoid. Silu函数处处可导,且连续光滑。Silu并非一个单调的函数,最大的缺点是计算量大。

2.2 C3模块

C3其结构作用基本相同均为CSP架构,只是在修正单元的选择上有所不同,其包含了3个标准卷积层,数量由配置文件yaml的n和depth_multiple参数乘积决定。该模块是对残差特征进行学习的主要模块,其结构分为两支,一支使用了上述指定多个Bottleneck堆叠,另一支仅经过一个基本卷积模块,最后将两支进行concat操作。 这个模块相对于之前版本BottleneckCSP模块不同的是,经历过残差输出后的卷积模块被去掉了,concat后的标准卷积模块中的激活函数也为SiLU。

Bottleneck模块借鉴了ResNet的残差结构,其中一路先进行1 ×1卷积将特征图的通道数减小一半,从而减少计算量,再通过3 ×3卷积提取特征,并且将通道数加倍,其输入与输出的通道数是不发生改变的。而另外一路通过shortcut进行残差连接,与第一路的输出特征图相加,从而实现特征融合。 在YOLOv5的Backbone中的Bottleneck都默认使shortcut为True,而在Head中的Bottleneck都不使用shortcut。

2.3. SPPF模块

SPPF由SPP改进而来,SPP先通过一个标准卷积模块将输入通道减半,然后分别做kernel-size为5,9,13的max pooling(对于不同的核大小,padding是自适应的)。对三次最大池化的结果与未进行池化操作的数据进行concat,最终合并后channel数是原来的2倍。

yolo的SPP借鉴了空间金字塔的思想,通过SPP模块实现了局部特征和全部特征。经过局部特征与全矩特征相融合后,丰富了特征图的表达能力,有利于待检测图像中目标大小差异较大的情况,对yolo这种复杂的多目标检测的精度有很大的提升。  

SPPF(Spatial Pyramid Pooling - Fast )使用3个5×5的最大池化,代替原来的5×5、9×9、13×13最大池化,多个小尺寸池化核级联代替SPP模块中单个大尺寸池化核,从而在保留原有功能,即融合不同感受野的特征图,丰富特征图的表达能力的情况下,进一步提高了运行速度。

3. Neck

在Neck部分,yolov5主要采用了PANet结构。

PANet在FPN(feature pyramid network)上提取网络内特征层次结构,FPN中顶部信息流需要通过骨干网络(Backbone)逐层地往下传递,由于层数相对较多,因此计算量比较大(a)。

PANet在FPN的基础上又引入了一个自底向上(Bottom-up)的路径。经过自顶向下(Top-down)的特征融合后,再进行自底向上(Bottom-up)的特征融合,这样底层的位置信息也能够传递到深层,从而增强多个尺度上的定位能力。

(a) FPN backbone. (b) Bottom-up path augmentation. (c) Adaptive feature pooling. (d) Box branch. (e) Fully-connected fusion.

4.Head

4.1 head

Head部分主要用于检测目标,分别输出20*20,40*40和80*80的特征图大小,对应的是32*32,16*16和8*8像素的目标。

Yolov5算法解读(yolov1算法)

YOLOv5的Head对Neck中得到的不同尺度的特征图分别通过1×1卷积将通道数扩展,扩展后的特征通道数为(类别数量+5)×每个检测层上的anchor数量。其中5分别对应的是预测框的中心点横坐标、纵坐标、宽度、高度和置信度,这里的置信度表示预测框的可信度,取值范围为( 0 , 1 ) ,值越大说明该预测框中越有可能存在目标。 Head中的3个检测层分别对应Neck中得到的3种不同尺寸的特征图。特征图上的每个网格都预设了3个不同宽高比的anchor,可以在特征图的通道维度上保存所有基于anchor先验框的位置信息和分类信息,用来预测和回归目标。 4.2 目标框回归

 YOLOv5的目标框回归计算公式如下所示:

其中(bx,by,bw,bh)表示预测框的中心点坐标、宽度和高度,(Cx, Cy)表示预测框中心点所在网格的左上角坐标,(tx,ty)表示预测框的中心点相对于网格左上角坐标的偏移量,(tw,th)表示预测框的宽高相对于anchor宽高的缩放比例,表示(pw,ph)先验框anchor的宽高。 为了将预测框的中心点约束到当前网格中,使用Sigmoid函数处理偏移量,使预测的偏移值保持在(0,1)范围内。这样一来,根据目标框回归计算公式,预测框中心点坐标的偏移量保持在(−0.5,1.5)范围内,如上图蓝色区域所示。预测框的宽度和高度对于anchor的放缩范围为(0,4)。

4.3 目标的建立

如上面所述,YOLOv5的每个检测层上的每个网格都预设了多个anchor先验框,但并不是每个网格中都存在目标,也并不是每个anchor都适合用来回归当前目标,因此需要对这些anchor先验框进行筛选,将其划分为正样本和负样本。本文的正负样本指的是预测框而不是Ground Truth(人工标注的真实框)。 与YOLOv3/4不同的是,YOLOv5采用的是基于宽高比例的匹配策略,它的大致流程如下:

1. 对于每一个Ground Truth(人工标注的真实框),分别计算它与9种不同anchor的宽与宽的比值(w1/w2, w2/w1)和高与高的比值(h1/h2, h2/h1)。

2. 找到Ground Truth与anchor的宽比(w1/w2, w2/w1)和高比(h1/h2, h2/h1)中的最大值,作为该Ground Truth和anchor的比值。 3. 若Ground Truth和anchor的比值r^max小于设定的比值阈值(超参数中默认为anchor_t = 4.0),那么这个anchor就负责预测这个Ground Truth,这个anchor所回归得到的预测框就被称为正样本,剩余所有的预测框都是负样本。

通过上述方法,YOLOv5不仅筛选了正负样本,同时对于部分Ground Truth在单个尺度上匹配了多个anchor来进行预测,总体上增加了一定的正样本数量。除此以外,YOLOv5还通过以下几种方法增加正样本的个数,从而加快收敛速度。

跨网格扩充: 如果某个Ground Truth的中心点落在某个检测层上的某个网格中,除了中心点所在的网格之外,其左、上、右、下4个邻域的网格中,靠近Ground Truth中心点的两个网格中的anchor也会参与预测和回归,即一个目标会由3个网格的anchor进行预测,如下图所示。

跨分支扩充:YOLOv5的检测头包含了3个不同尺度的检测层,每个检测层上预设了3种不同长宽比的anchor,假设一个Ground Truth可以和不同尺度的检测层上的anchor匹配,则这3个检测层上所有符合条件的anchor都可以用来预测该Ground Truth,即一个目标可以由多个检测层的多个anchor进行预测。

NMS non-maximum suppression

当我们得到对目标的预测后,一个目标通常会产生很多冗余的预测框。Non-maximum suppression(NMS)其核心思想在于抑制非极大值的目标,去除冗余,从而搜索出局部极大值的目标,找到最优值。

在我们对目标产生预测框后,往往会产生大量冗余的边界框,因此我们需要去除位置准确率低的边界框,保留位置准确率高的边界框。NMS的主要步骤为: 1.对于每个种类的置信度按照从大到小的顺序排序,选出置信度最高的边框。

2.遍历其余所有剩下的边界框,计算这些边界框与置信度最高的边框的IOU值。如果某一边界框和置信度最高的边框IOU阈值大于我们所设定的IOU阈值,这意味着同一个物体被两个重复的边界框所预测,则去掉这这个边框。

3.从未处理的边框中再选择一个置信度最高的值,重复第二步的过程,直到选出的边框不再有与它超过IOU阈值的边框。

5.损失函数

5.1 总损失

YOLOv5的损失主要由三个部分组成。分类损失,目标损失和定位损失。

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

Objectness loss,置信度损失,采用的依然是BCE loss,指的是网络预测的目标边界框与GT Box的CIoU。这里计算的是所有样本的损失。

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

其中,lambda为平衡系数,分别为0.5,1和0.05。

5.2 定位损失 Location loss

IOU, intersection of Union交并比,它的作用是衡量目标检测中预测框与真实框的重叠程度。假设预测框为A,真实框为B,则IoU的表达式为

但是当预测框与真实框没有相交时,IoU不能反映两者之间的距离,并且此时IoU损失为0,将会影响梯度回传,从而导致无法训练。此外,IoU无法精确的反映预测框与真实框的重合度大小。YOLOv5默认使用CIoU来计算边界框损失。其中DIoU将预测框和真实框之间的距离,重叠率以及尺度等因素都考虑了进去,使得目标框回归变得更加稳定。CIoU是在DIoU的基础上,遵循与IoU相同的定义,进一步考虑了Bounding Box的宽和高的比。即将比较对象的形状属性编码为区域(region)属性;b)维持IoU的尺寸不变性;c) 在重叠对象的情况下确保与IoU的强相关性。

DIoU的损失函数为                                    

其中b和b^gt 分别表示预测框和真实框的中心点,ρ表示两个中心点之间的欧式距离,c表示预测框和真实框的最小闭包区域的对角线距离,gt是ground truth缩写

如下图所示:

CIoU是在DIoU的惩罚项基础上添加了一个影响因子αv,这个因子将预测框的宽高比和真实框的宽高比考虑进去,即CIoU的损失计算公式为

 其中α是权重参数,它的表达式为

 v是用来衡量宽高比的一致性,它的表达式为

5.3 分类损失

YOLOv5默认使用二元交叉熵函数来计算分类损失。二元交叉熵函数的定义为

其中y为输入样本对应的标签(正样本为1,负样本为0),p为模型预测该输入样本为正样本的概率。假设,交叉熵函数的定义可简化为 

YOLOv5使用二元交叉熵损失函数计算类别概率和目标置信度得分的损失,各个标签不是互斥的。YOLOv5使用多个独立的逻辑(logistic)分类器替换softmax函数,以计算输入属于特定标签的可能性。在计算分类损失进行训练时,对每个标签使用二元交叉熵损失。这也避免使用softmax函数而降低了计算复杂度。

5.4 置信度损失

每个预测框的置信度表示这个预测框的可靠程度,值越大表示该预测框越可靠,也表示越接近真实框。对于置信度标签,YOLO之前的版本认为所有存在目标的网格(正样本)对应的标签值均为1,其余网格(负样本)对应的标签值为0。但是这样带来的问题是有些预测框可能只是在目标的周围,而并不能精准预测框的位置。因此YOLOv5的做法是,根据网格对应的预测框与真实框的CIoU作为该预测框的置信度标签。与计算分类损失一样,YOLOv5默认使用二元交叉熵函数来计算置信度损失。

同时,对于目标损失,在不同的预测特征层也给予了不同权重。这些

在源码中,针对预测小目标的预测特征层采用的权重是4.0,针对预测中等目标的预测特征层采用的权重是1.0,针对预测大目标的预测特征层采用的权重是0.4,作者说这是针对COCO数据集设置的超参数。

本文链接地址:https://www.jiuchutong.com/zhishi/296097.html 转载请保留说明!

上一篇:CSS-200个小案例(一)(完整的css代码案例)

下一篇:旋转目标检测【1】如何设计深度学习模型(旋转 目标检测)

  • word文档怎么取消两页并排(word文档怎么取消加密)

    word文档怎么取消两页并排(word文档怎么取消加密)

  • OPPO Ace2有没有双扬声器呢(oppo ace2是双频gps吗)

    OPPO Ace2有没有双扬声器呢(oppo ace2是双频gps吗)

  • 微信聊天记录莫名其妙没了怎么回事(微信聊天记录莫名其妙少了一部分)

    微信聊天记录莫名其妙没了怎么回事(微信聊天记录莫名其妙少了一部分)

  • 蚂蚁森林沙柳要多少能量(蚂蚁森林沙柳上新时间)

    蚂蚁森林沙柳要多少能量(蚂蚁森林沙柳上新时间)

  • 手机ps抠字不留痕迹(手机ps怎么抠字)

    手机ps抠字不留痕迹(手机ps怎么抠字)

  • 华为手机装sd卡没反应(华为手机装sd卡显示低速卡图片看不了)

    华为手机装sd卡没反应(华为手机装sd卡显示低速卡图片看不了)

  • 笔记本mx350显卡什么级别(笔记本mx350显卡可以换吗)

    笔记本mx350显卡什么级别(笔记本mx350显卡可以换吗)

  • 暂停服务是停机了吗(手机暂停服务怎么回事)

    暂停服务是停机了吗(手机暂停服务怎么回事)

  • 微信取消拉黑能看到以前发的信息吗(微信取消拉黑能看见聊天记录吗)

    微信取消拉黑能看到以前发的信息吗(微信取消拉黑能看见聊天记录吗)

  • 快手粉丝团前面的数字是什么意思(快手粉丝团左边的是什么)

    快手粉丝团前面的数字是什么意思(快手粉丝团左边的是什么)

  • etc充值后卡为啥不显示金额(etc充值了怎么不能用)

    etc充值后卡为啥不显示金额(etc充值了怎么不能用)

  • 天猫精灵可以一直开着吗(天猫精灵可以一直插着吗)

    天猫精灵可以一直开着吗(天猫精灵可以一直插着吗)

  • sdk初始化什么意思(sdk初始化什么意思失败)

    sdk初始化什么意思(sdk初始化什么意思失败)

  • 京东评价管理在哪里(京东的评价系统)

    京东评价管理在哪里(京东的评价系统)

  • 苹果xs标配充电多少w(苹果xs标配充电器和苹果6一样吗)

    苹果xs标配充电多少w(苹果xs标配充电器和苹果6一样吗)

  • 苹果备忘录背景怎么换(苹果备忘录背景颜色怎么调)

    苹果备忘录背景怎么换(苹果备忘录背景颜色怎么调)

  • 平板能下载ps吗(平板上可以下载ps吗)

    平板能下载ps吗(平板上可以下载ps吗)

  • 联想笔记本睡眠怎么唤醒屏幕(联想笔记本睡眠唤醒键)

    联想笔记本睡眠怎么唤醒屏幕(联想笔记本睡眠唤醒键)

  • oppo拦截电话在哪里查看(oppo拦截电话在哪里打开)

    oppo拦截电话在哪里查看(oppo拦截电话在哪里打开)

  • vivo怎么删除系统更新包(vivo怎么删除系统安装包)

    vivo怎么删除系统更新包(vivo怎么删除系统安装包)

  • 台式电脑怎样连接网络(台式电脑怎样连接手机的个人热点)

    台式电脑怎样连接网络(台式电脑怎样连接手机的个人热点)

  • 苹果手机可以设置门禁卡吗(苹果手机可以设置自动开关机吗)

    苹果手机可以设置门禁卡吗(苹果手机可以设置自动开关机吗)

  • 8p是什么基带(iphone8p是什么基带)

    8p是什么基带(iphone8p是什么基带)

  • 百香果的功效与作用(图片+文字)(百香果的功效与作用及食用方法果的籽能嚼碎吃吗?)

    百香果的功效与作用(图片+文字)(百香果的功效与作用及食用方法果的籽能嚼碎吃吗?)

  • 3D相机获取点云信息的几种方法(3d点云处理算法)

    3D相机获取点云信息的几种方法(3d点云处理算法)

  • 猿创征文|一文带你了解前端开发者工具(猿创设计科技有限公司)

    猿创征文|一文带你了解前端开发者工具(猿创设计科技有限公司)

  • 一般纳税人开具专票和普票的区别
  • 前一年的未分配利润属于什么科目
  • 购销印花税会计分录
  • 会计分录怎么确认借贷方向
  • 预付账款转入其他非流动资产
  • 融资租赁出租人和承租人的区别
  • 租房的装修费怎么入账
  • 房租发票一下全部开出
  • 一般纳税人简易征收3%
  • 税盘没有抄报各月,有罚款吗
  • 小规模纳税人附加税优惠政策2023
  • 环境保护税法什么时候出台
  • 税控盘年费每年都可以抵扣吗
  • 零余额账户用款额度年末转入什么科目
  • 子公司之间固定资产划转 增值税会计处理
  • 房产免租期间缴纳房产税吗
  • 企业结业后实收资本怎么处理?
  • win11系统优化教程
  • 金蝶kis期初余额设置
  • 公司增资的方式有什么
  • 政府拨款经费会计分录
  • laravel5 使用try catch的实例详解
  • Linux+Nginx+MySQL下配置论坛程序Discuz的基本教程
  • windows10设备如何打开蓝牙
  • 图解在OS X中管理窗口大小的多种方法
  • 支付给其他公司帮代垫的社保款
  • 职工薪酬可能计入什么科目
  • 库存现金盘亏会计分录原因待查
  • uniapp实战视频教程
  • 利用均匀水流导致的水位变化来显示时间
  • 上年度成本费用包括哪些
  • 某建筑公司因施工期紧迫,事先未能与有关
  • 企业清算分配的财产金额怎么算出来
  • 土地增值税清算全流程实战案例
  • servlet工作原理和生命周期
  • 安装工程在工程建设中的主要内容有哪些
  • three.js 教程
  • 建行E信通贴现需要什么资料
  • 人工智能会影响经济发展吗
  • vue中的icon
  • 预付一年的房租并收到了发票会计分录
  • 后浪是什么意思网络用语
  • 提取法定盈余公积的公式
  • 学电脑的好网站
  • 公司借给股东的钱金额较大股东可以在年底现金归还吗
  • 累计折旧怎么做账
  • 客户多付款不要了,多出这部分是哪种收入
  • 专项应付款 会计分录
  • 新准则合同结算的科目编码为
  • 本月未抵扣完的进项税是否转出
  • 长期股权投资损益调整是什么意思
  • 成本核算的意义在于
  • 工程结算属于什么行业
  • 建设工程毛利率如何计算
  • 什么是商业企业和工业企业
  • sqlserver登录日志
  • mysql怎么切换到bin目录
  • sql server中replace()函数用法解析
  • windows如何显示键盘
  • WIN10开始菜单点击鼠标右键没反应的处理方法
  • xp系统删除文件反应很慢
  • 通过修改注册表激活win7
  • mac购买建议
  • ssh用法及命令
  • win7旗舰版完整版下载
  • win7系统怎么修改开机密码
  • 新闻客户端有哪些?
  • node.js 模块
  • unity技术分享
  • 如何给textarea赋值
  • shell中大括号
  • js中的?
  • python的链表
  • Android IntentService解析
  • 有关的拼音
  • 安卓屏幕适配详解
  • 电子税务局怎么申报
  • 免征的增值税税额应计入营业外收入嘛
  • 养猪环保局有什么新政策
  • 普惠性税收优惠政策例子
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设