【YOLO系列】YOLOv5超详细解读(网络详解)

这篇具有很好参考价值的文章主要介绍了【YOLO系列】YOLOv5超详细解读(网络详解)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

【YOLO系列】YOLOv5超详细解读(网络详解)

【YOLO系列】YOLOv5超详细解读(网络详解)

前言

吼吼!终于来到了YOLOv5啦!

首先,一个热知识:YOLOv5没有发表正式论文哦~

为什么呢?可能YOLOv5项目的作者Glenn Jocher还在吃帽子吧,hh

【YOLO系列】YOLOv5超详细解读(网络详解)


目录

前言

一、YOLOv5的网络结构

 二、输入端

(1)Mosaic数据增强

(2)自适应锚框计算

(3)自适应图片缩放

三、Backbone

(1)Focus结构

(2)CSP结构

四、Neck

五、Head

(1)Bounding box损失函数

(2)NMS非极大值抑制

 六、训练策略

【YOLO系列】YOLOv5超详细解读(网络详解)

【写论文必看】深度学习纯小白如何从零开始写第一篇论文?看完这篇豁然开朗!-CSDN博客

前期回顾:

【YOLO系列】YOLOv4论文超详细解读2(网络详解)
【YOLO系列】YOLOv4论文超详细解读1(翻译 +学习笔记)

​​​​​​【YOLO系列】YOLOv3论文超详细解读(翻译 +学习笔记)

【YOLO系列】YOLOv2论文超详细解读(翻译 +学习笔记)

【YOLO系列】YOLOv1论文超详细解读(翻译 +学习笔记)

【YOLO系列】YOLOv5超详细解读(网络详解)🍀本人YOLOv5源码详解系列:

 YOLOv5源码逐行超详细注释与解读(1)——项目目录结构解析
YOLOv5源码逐行超详细注释与解读(2)——推理部分detect.py

YOLOv5源码逐行超详细注释与解读(3)——训练部分train.py

YOLOv5源码逐行超详细注释与解读(4)——验证部分val(test).py

YOLOv5源码逐行超详细注释与解读(5)——配置文件yolov5s.yaml

YOLOv5源码逐行超详细注释与解读(6)——网络结构(1)yolo.py

YOLOv5源码逐行超详细注释与解读(7)——网络结构(2)common.py

【YOLO系列】YOLOv5超详细解读(网络详解)🌟本人YOLOv5入门实践系列: 

YOLOv5入门实践(1)——手把手带你环境配置搭建

YOLOv5入门实践(2)——手把手教你利用labelimg标注数据集

YOLOv5入门实践(3)——手把手教你划分自己的数据集

YOLOv5入门实践(4)——手把手教你训练自己的数据集

YOLOv5入门实践(5)——从零开始,手把手教你训练自己的目标检测模型(包含pyqt5界面)

  【YOLO系列】YOLOv5超详细解读(网络详解)🌟本人YOLOv5改进系列: 

YOLOv5改进系列(0)——重要性能指标与训练结果评价及分析

YOLOv5改进系列(1)——添加SE注意力机制

YOLOv5改进系列(2)——添加CBAM注意力机制

YOLOv5改进系列(3)——添加CA注意力机制

YOLOv5改进系列(4)——添加ECA注意力机制

YOLOv5改进系列(5)——替换主干网络之 MobileNetV3

YOLOv5改进系列(6)——替换主干网络之 ShuffleNetV2

YOLOv5改进系列(7)——添加SimAM注意力机制

YOLOv5改进系列(8)——添加SOCA注意力机制

YOLOv5改进系列(9)——替换主干网络之EfficientNetv2

​​​​​​YOLOv5改进系列(10)——替换主干网络之GhostNet

YOLOv5改进系列(11)——添加损失函数之EIoU、AlphaIoU、SIoU、WIoU

YOLOv5改进系列(12)——更换Neck之BiFPN

YOLOv5改进系列(13)——更换激活函数之SiLU,ReLU,ELU,Hardswish,Mish,Softplus,AconC系列等

YOLOv5改进系列(14)——更换NMS(非极大抑制)之 DIoU-NMS、CIoU-NMS、EIoU-NMS、GIoU-NMS 、SIoU-NMS、Soft-NMS

YOLOv5改进系列(15)——增加小目标检测层

YOLOv5改进系列(16)——添加EMA注意力机制(ICASSP2023|实测涨点)
 YOLOv5改进系列(17)——更换IoU之MPDIoU(ELSEVIER 2023|超越WIoU、EIoU等|实测涨点)

YOLOv5改进系列(18)——更换Neck之AFPN(全新渐进特征金字塔|超越PAFPN|实测涨点)

YOLOv5改进系列(19)——替换主干网络之Swin TransformerV1(参数量更小的ViT模型)

YOLOv5改进系列(20)——添加BiFormer注意力机制(CVPR2023|小目标涨点神器)

YOLOv5改进系列(21)——替换主干网络之RepViT(清华 ICCV 2023|最新开源移动端ViT)

YOLOv5改进系列(22)——替换主干网络之MobileViTv1(一种轻量级的、通用的移动设备 ViT)

YOLOv5改进系列(23)——替换主干网络之MobileViTv2(移动视觉 Transformer 的高效可分离自注意力机制)

YOLOv5改进系列(24)——替换主干网络之MobileViTv3(移动端轻量化网络的进一步升级)

YOLOv5改进系列(25)——添加LSKNet注意力机制(大选择性卷积核的领域首次探索)

YOLOv5改进系列(26)——添加RFAConv注意力卷积(感受野注意力卷积运算) 

YOLOv5改进系列(27)——添加SCConv注意力卷积(CVPR 2023|即插即用的高效卷积模块) 

持续更新中。。。 

【YOLO系列】YOLOv5超详细解读(网络详解)  

一、YOLOv5的网络结构

YOLOv5特点: 合适于移动端部署,模型小,速度快

YOLOv5有YOLOv5s、YOLOv5m、YOLOv5l、YOLOv5x四个版本。文件中,这几个模型的结构基本一样,不同的是depth_multiple模型深度和width_multiple模型宽度这两个参数。 就和我们买衣服的尺码大小排序一样,YOLOv5s网络是YOLOv5系列中深度最小,特征图的宽度最小的网络。其他的三种都是在此基础上不断加深,不断加宽。

【YOLO系列】YOLOv5超详细解读(网络详解)

YOLOv5s的网络结构如下:

【YOLO系列】YOLOv5超详细解读(网络详解)

(1)输入端 : Mosaic数据增强、自适应锚框计算、自适应图片缩放

(2)Backbone : Focus结构,CSP结构

(3)Neck : FPN+PAN结构

(4)Head : CIOU_Loss

基本组件:

  • Focus:基本上就是YOLO v2的passthrough。
  • CBL:由Conv+Bn+Leaky_relu激活函数三者组成。
  • CSP1_X:借鉴CSPNet网络结构,由三个卷积层和X个Res unint模块Concate组成。
  • CSP2_X:不再用Res unint模块,而是改为CBL。
  • SPP:采用1×1,5×5,9×9,13×13的最大池化的方式,进行多尺度融合。

YOLO5算法性能测试图:

【YOLO系列】YOLOv5超详细解读(网络详解)


 二、输入端

(1)Mosaic数据增强

YOLOv5在输入端采用了Mosaic数据增强Mosaic 数据增强算法将多张图片按照一定比例组合成一张图片,使模型在更小的范围内识别目标。Mosaic 数据增强算法参考 CutMix数据增强算法。CutMix数据增强算法使用两张图片进行拼接,而 Mosaic 数据增强算法一般使用四张进行拼接,但两者的算法原理是非常相似的。

【YOLO系列】YOLOv5超详细解读(网络详解)

Mosaic数据增强的主要步骤为:

(1)随机选取图片拼接基准点坐标(xc,yc),另随机选取四张图片。

(2)四张图片根据基准点,分别经过尺寸调整和比例缩放后,放置在指定尺寸的大图的左上,右上,左下,右下位置。

(3)根据每张图片的尺寸变换方式,将映射关系对应到图片标签上。

(4)依据指定的横纵坐标,对大图进行拼接。处理超过边界的检测框坐标。

采用Mosaic数据增强的方式有几个优点:

(1)丰富数据集: 随机使用4张图像,随机缩放后随机拼接,增加很多小目标,大大增加了数据多样性。

(2)增强模型鲁棒性: 混合四张具有不同语义信息的图片,可以让模型检测超出常规语境的目标。

(3)加强批归一化层(Batch Normalization)的效果: 当模型设置 BN 操作后,训练时会尽可能增大批样本总量(BatchSize),因为 BN 原理为计算每一个特征层的均值和方差,如果批样本总量越大,那么 BN 计算的均值和方差就越接近于整个数据集的均值和方差,效果越好。

(4)Mosaic 数据增强算法有利于提升小目标检测性能: Mosaic 数据增强图像由四张原始图像拼接而成,这样每张图像会有更大概率包含小目标,从而提升了模型的检测能力。


 (2)自适应锚框计算

之前我们学的 YOLOv3、YOLOv4,对于不同的数据集,都会计算先验框 anchor。然后在训练时,网络会在 anchor 的基础上进行预测,输出预测框,再和标签框进行对比,最后就进行梯度的反向传播。

在 YOLOv3、YOLOv4 中,训练不同的数据集时,是使用单独的脚本进行初始锚框的计算在 YOLOv5 中,则是将此功能嵌入到整个训练代码里中。所以在每次训练开始之前,它都会根据不同的数据集来自适应计算 anchor。

but,如果觉得计算的锚框效果并不好,那你也可以在代码中将此功能关闭哈~

自适应的计算具体过程:

    ①获取数据集中所有目标的宽和高。

    ②将每张图片中按照等比例缩放的方式到 resize 指定大小,这里保证宽高中的最大值符合指定大小。

    ③将 bboxes 从相对坐标改成绝对坐标,这里乘以的是缩放后的宽高。

    ④筛选 bboxes,保留宽高都大于等于两个像素的 bboxes。

    ⑤使用 k-means 聚类三方得到n个 anchors,与YOLOv3、YOLOv4 操作一样。

    ⑥使用遗传算法随机对 anchors 的宽高进行变异。倘若变异后的效果好,就将变异后的结果赋值给 anchors;如果变异后效果变差就跳过,默认变异1000次。这里是使用 anchor_fitness 方法计算得到的适应度 fitness,然后再进行评估。 


(3)自适应图片缩放

步骤:

(1) 根据原始图片大小以及输入到网络的图片大小计算缩放比例

【YOLO系列】YOLOv5超详细解读(网络详解)

原始缩放尺寸是416*416,都除以原始图像的尺寸后,可以得到0.52,和0.69两个缩放系数,选择小的缩放系数。

(2) 根据原始图片大小与缩放比例计算缩放后的图片大小

【YOLO系列】YOLOv5超详细解读(网络详解)

原始图片的长宽都乘以最小的缩放系数0.52,宽变成了416,而高变成了312。

(3) 计算黑边填充数值

【YOLO系列】YOLOv5超详细解读(网络详解)

将416-312=104,得到原本需要填充的高度。再采用numpy中np.mod取余数的方式,得到8个像素,再除以2,即得到图片高度两端需要填充的数值。

注意:

(1)Yolov5中填充的是灰色,即(114,114,114)。

(2)训练时没有采用缩减黑边的方式,还是采用传统填充的方式,即缩放到416*416大小。只是在测试,使用模型推理时,才采用缩减黑边的方式,提高目标检测,推理的速度。

(3)为什么np.mod函数的后面用32?

因为YOLOv5的网络经过5次下采样,而2的5次方,等于32。所以至少要去掉32的倍数,再进行取余。以免产生尺度太小走不完stride(filter在原图上扫描时,需要跳跃的格数)的问题,再进行取余。


三、Backbone

(1)Focus结构

Focus模块在YOLOv5中是图片进入Backbone前,对图片进行切片操作,具体操作是在一张图片中每隔一个像素拿到一个值,类似于邻近下采样,这样就拿到了四张图片,四张图片互补,长得差不多,但是没有信息丢失,这样一来,将W、H信息就集中到了通道空间,输入通道扩充了4倍,即拼接起来的图片相对于原先的RGB三通道模式变成了12个通道,最后将得到的新图片再经过卷积操作,最终得到了没有信息丢失情况下的二倍下采样特征图。

以YOLOv5s为例,原始的640 × 640 × 3的图像输入Focus结构,采用切片操作,先变成320 × 320 × 12的特征图,再经过一次卷积操作,最终变成320 × 320 × 32的特征图。

切片操作如下:

【YOLO系列】YOLOv5超详细解读(网络详解)

作用: 可以使信息不丢失的情况下提高计算力

不足:Focus 对某些设备不支持且不友好,开销很大,另外切片对不齐的话模型就崩了。

后期改进: 在新版中,YOLOv5 将Focus 模块替换成了一个 6 x 6 的卷积层。两者的计算量是等价的,但是对于一些 GPU 设备,使用 6 x 6 的卷积会更加高效。

【YOLO系列】YOLOv5超详细解读(网络详解)


 (2)CSP结构

YOLOv4网络结构中,借鉴了CSPNet的设计思路,在主干网络中设计了CSP结构。

【YOLO系列】YOLOv5超详细解读(网络详解)

YOLOv5与YOLOv4不同点在于,YOLOv4中只有主干网络使用了CSP结构。 而YOLOv5中设计了两种CSP结构,以YOLOv5s网络为例,CSP1_ X结构应用于Backbone主干网络,另一种CSP2_X结构则应用于Neck中。

【YOLO系列】YOLOv5超详细解读(网络详解)


四、Neck

YOLOv5现在的Neck和YOLOv4中一样,都采用FPN+PAN的结构。但是在它的基础上做了一些改进操作:YOLOV4的Neck结构中,采用的都是普通的卷积操作而YOLOV5的Neck中,采用CSPNet设计的CSP2结构,从而加强了网络特征融合能力。

结构如下图所示,FPN层自顶向下传达强语义特征,而PAN塔自底向上传达定位特征:

【YOLO系列】YOLOv5超详细解读(网络详解)


五、Head

(1)Bounding box损失函数

YOLO v5采用CIOU_LOSS 作为bounding box 的损失函数。(关于IOU_ Loss、GIOU_ Loss、DIOU_ Loss以及CIOU_Loss的介绍,请看YOLOv4那一篇:【YOLO系列】YOLOv4论文超详细解读2(网络详解))


(2)NMS非极大值抑制

NMS 的本质是搜索局部极大值,抑制非极大值元素。

非极大值抑制,主要就是用来抑制检测时冗余的框。因为在目标检测中,在同一目标的位置上会产生大量的候选框,这些候选框相互之间可能会有重叠,所以我们需要利用非极大值抑制找到最佳的目标边界框,消除冗余的边界框。

算法流程:

  1.对所有预测框的置信度降序排序

  2.选出置信度最高的预测框,确认其为正确预测,并计算他与其他预测框的 IOU

  3.根据步骤2中计算的 IOU 去除重叠度高的,IOU > threshold 阈值就直接删除

  4.剩下的预测框返回第1步,直到没有剩下的为止


 SoftNMS:

当两个目标靠的非常近时,置信度低的会被置信度高的框所抑制,那么当两个目标靠的十分近的时候就只会识别出一个 BBox。为了解决这个问题,可以使用 softNMS。

它的基本思想是用稍低一点的分数来代替原有的分数,而不是像 NMS 一样直接置零。

【YOLO系列】YOLOv5超详细解读(网络详解)


 六、训练策略

(1)多尺度训练(Multi-scale training)。 如果网络的输入是416 x 416。那么训练的时候就会从 0.5 x 416 到 1.5 x 416 中任意取值,但所取的值都是32的整数倍。

(2)训练开始前使用 warmup 进行训练。 在模型预训练阶段,先使用较小的学习率训练一些epochs或者steps (如4个 epoch 或10000个 step),再修改为预先设置的学习率进行训练。

(3)使用了 cosine 学习率下降策略(Cosine LR scheduler)。

(4)采用了 EMA 更新权重(Exponential Moving Average)。 相当于训练时给参数赋予一个动量,这样更新起来就会更加平滑。

(5)使用了 amp 进行混合精度训练(Mixed precision)。 能够减少显存的占用并且加快训练速度,但是需要 GPU 支持。


总结一下,YOLO v5和前YOLO系列相比的改进:

  • (1) 增加了正样本:方法是邻域的正样本anchor匹配策略。
  • (2) 通过灵活的配置参数,可以得到不同复杂度的模型
  • (3) 通过一些内置的超参优化策略,提升整体性能
  • (4) 和yolov4一样,都用了mosaic增强,提升小物体检测性能

【YOLO系列】YOLOv5超详细解读(网络详解)文章来源地址https://www.toymoban.com/news/detail-405921.html

到了这里,关于【YOLO系列】YOLOv5超详细解读(网络详解)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【YOLO系列】YOLOv7论文超详细解读(翻译 +学习笔记)

    终于读到传说中的YOLOv7了~≖‿≖✧ 这篇是在美团的v6出来不到一个月就高调登场,作者还是我们熟悉的AB大神(对,就是v4那个),读起来又是“熟悉”的感觉(贯穿了我的整个五一假期(╯-_-)╯╧╧)。 其实关于YOLOv7的网络结构还有很多细节值得深入研究,以及代码

    2024年02月02日
    浏览(33)
  • 【YOLO系列】YOLOv2论文超详细解读(翻译 +学习笔记)

    时隔一年,YOLOv2隆重登场,新的YOLO版本论文叫《YOLO9000: Better, Faster, Stronger》,作者 Joseph Redmon 和 Ali Farhadi 在 YOLOv1 的基础上,进行了大量改进,提出了 YOLOv2 和 YOLO9000,重点解决YOLOv1召回率和定位精度方面的不足。 论文原文:[1612.08242] YOLO9000: Better, Faster, Stronger (arxiv.org) 项

    2023年04月08日
    浏览(27)
  • 【YOLO系列】YOLOv1论文超详细解读(翻译 +学习笔记)

    从这篇开始,我们将进入YOLO的学习。YOLO是目前比较流行的目标检测算法,速度快且结构简单,其他的目标检测算法如RCNN系列,以后有时间的话再介绍。 本文主要介绍的是YOLOV1,这是由以Joseph Redmon为首的大佬们于2015年提出的一种新的目标检测算法。它与之前的目标检测算法

    2024年02月04日
    浏览(32)
  • 改进YOLO系列 | YOLOv5 更换骨干网络之 ConvNeXt

    🍀2023/6/30 更新源代码 ,并追加结构对应的超参数文件 论文地址:https://arxiv.org/pdf/2201.03545.pdf 代码地址:https://github.com/facebookresearch/ConvNeXt 视觉识别的“Roaring 20年代”始于视觉变换器(ViTs)的引入,它很快取代了ConvNets,成为最先进的图像分类模型。另一方面,普通ViTs在应

    2024年02月04日
    浏览(27)
  • 【YOLO系列】YOLOv5、YOLOX、YOOv6、YOLOv7网络模型结构

    【注】: 本文为YOLOv5、YOLOX、YOLOv6、YOLOv7模型结构图,作图软件为drawio。因精力有限暂时不做结构的详细阐述和具体的代码讲解,后续有机会再做补充。如有需要可以查阅其他博主的文章了解学习。 【另】:希望模型结构图可以帮助到有需要的人,如模型中有错误的地方,欢

    2024年02月07日
    浏览(27)
  • YOLOv5 白皮书-第Y5周:yolo.py文件解读

    🍨 本文为🔗365天深度学习训练营 中的学习记录博客 🍖 原作者:K同学啊|接辅导、项目定制 🏡 我的环境: ● 语言环境:Python 3.8 ● 数据集:coco128 ● 深度学习环境:Pytorch 本周任务:将YOLOv5s网络模型中的C3模块按照下图方式修改形成C2模块,并将C2模块插入第2层与第3层之

    2024年02月07日
    浏览(28)
  • YOLOv5源码逐行超详细注释与解读(7)——网络结构(2)common.py

    上一篇我们一起学习了YOLOv5的网络模型之一 yolo.py ,它这是YOLO的特定模块,而今天要学习另一个和网络搭建有关的文件—— common.py ,这个文件存放着YOLOv5网络搭建常见的通用模块。如果我们需要修改某一模块,那么就需要修改这个文件中对应模块的定义。 学这篇的同时,搭

    2023年04月16日
    浏览(30)
  • 深入浅出 Yolo 系列之 Yolov7 基础网络结构详解

    从 2015 年的 YOLOV1 ,2016 年 YOLOV2 , 2018 年的 YOLOV3 ,到 2020 年的 YOLOV4 、 YOLOV5 , 以及最近出现的 YOLOV76 和 YOLOV7 可以说 YOLO 系列见证了深度学习时代目标检测的演化。对于 YOLO 的基础知识以及 YOLOV1 到 YOLOV5 可以去看大白的 YOLO 系列,本文主要对 YOLOV7 的网络结构进行一个梳理

    2024年02月04日
    浏览(29)
  • YOLO系列梳理(三)YOLOv5

    前言   YOLOv5 是在 YOLOv4 出来之后没多久就横空出世了。今天笔者介绍一下 YOLOv5 的相关知识。目前 YOLOv5 发布了新的版本,6.0版本。在这里,YOLOv5 也在5.0基础上集成了更多特性,同时也对模型做了微调,并且优化了模型大小,减少了模型的参数量。那么这样,就更加适合移动

    2024年02月05日
    浏览(28)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包