设计网站页面要多少钱,泰安建材网站建设电话,南京移动网站建设哪里强,品牌关键词排名优化怎么做前言#xff1a;Hello大家好#xff0c;我是小哥谈。YOLOV4出现之后不久#xff0c;YOLOv5横空出世。YOLOv5在YOLOv4算法的基础上做了进一步的改进#xff0c;使检测性能得到更进一步的提升。YOLOv5算法作为目前工业界使用的最普遍的检测算法#xff0c;存在着很多可以学习… 前言Hello大家好我是小哥谈。YOLOV4出现之后不久YOLOv5横空出世。YOLOv5在YOLOv4算法的基础上做了进一步的改进使检测性能得到更进一步的提升。YOLOv5算法作为目前工业界使用的最普遍的检测算法存在着很多可以学习的地方。本文将对YOLOv5检测算法的核心基础知识进行详细的解说希望大家可以透彻的理解。 前期回顾
YOLOv5基础知识入门1— YOLO算法的发展历程 目录
1.YOLOv5简介
2.YOLOv5网络结构
3.输入端
3.1 Mosaic数据增强
3.2 自适应锚框计算
3.3 自适应图像缩放
4.主干网络(Backbone)
4.1 Focus结构
4.2 CSP结构 5.Neck网络 6.输出端 7.训练策略 1.YOLOv5简介
YOLOv5是一种单阶段目标检测算法该算法在YOLOv4的基础上添加了一些新的改进思路使其速度与精度都得到了极大的性能提升。主要的改进思路如下所示
输入端在模型训练阶段提出了一些改进思路主要包括Mosaic数据增强、自适应锚框计算、自适应图片缩放。主干网络(Backbone)融合其它检测算法中的一些新思路主要包括Focus结构与CSP结构。Neck网络目标检测网络在BackBone与最后的输出端之间往往会插入一些层Yolov5中添加了FPNPAN结构。输出端输出层的锚框机制与YOLOv4相同主要改进的是训练时的损失函数CIOU_Loss以及预测框筛选的DIOU_nms。 总结 输入端Mosaic数据增强、自适应锚框计算、自适应图片缩放 主干网络(Backbone)Focus结构、CSP结构 Neck网络FPNPAN结构 输出端CIOU_Loss、DIOU_nms YOLOv5目标检测算法是Ultralytics公司于2020年发布的根据模型的大小YOLOv5有5个版本分别为YOLOv5n、YOLOv5s、YOLOv5m、YOLOv5l、YOLOv5x这5个版本的权重、模型的宽度和深度是依次增加的。这些不同的变体使得YOLOv5能很好的在精度和速度中权衡方便用户选择。YOLOv5五个版本的算法性能图和相应的指标如下所示 说明 YOLOv5官方代码 GitHub - ultralytics/yolov5: YOLOv5 in PyTorch ONNX CoreML TFLite 2.YOLOv5网络结构
YOLOv5的网络模型分为4个部分包括输入端、主干网络(Backbone)、Neck网络和输出端本文将使用常用的YOLOv5s检测模型来进行介绍下面即是YOLOv5s的网络结构图。
基本组件
CBL模块由ConvBNLeaky_relu激活函数组成如上图中的模块1所示。Res unit借鉴ResNet网络中的残差结构用来构建深层网络CBM是残差模块中的子模块如上图中的模块2所示。CSP1_X借鉴CSPNet网络结构该模块由CBL模块、Res unint模块以及卷积层、Concat组成而成如上图中的模块3所示。CSP2_X借鉴CSPNet网络结构该模块由卷积层和X个Res unint模块Concat组成而成如上图中的模块4所示。Focus如上图中的模块5所示Focus结构首先将多个slice结果Concat起来然后将其送入CBL模块中。SPP采用1×1、5×5、9×9和13×13的最大池化方式进行多尺度特征融合如上图中的模块6所示。
其他基础操作
Concat张量拼接会扩充两个张量的维度例如26*26*256和26*26*512两个张量拼接结果是26*26*768。add张量相加张量直接相加不会扩充维度例如104*104*128和104*104*128相加结果还是104*104*128。 说明 YOLOv5n网络最小速度最快AP精度也最低。若检测的以大目标为主追求速度是个不错的选择。其他的四种网络在YOLOv5基础上不断加深加宽网络AP精度也不断提升但速度的消耗也在不断增加。 福利 Yolov3Yolov4Yolov5资源相关包括模型权重、网络结构图等 链接https://pan.baidu.com/s/1NdVEtGxntCaAa_wWU0yG-g?pwdzm4q 提取码zm4q 3.输入端
YOLOv5的输入端主要包括Mosaic数据增强、自适应锚框计算和自适应图像缩放三个部分。输入端表示需要输入图片该阶段通常包含一个图像预处理阶段即将输入图像缩放到网络的输入大小并进行归一化等操作。在网络训练阶段YOLOv5使用Mosaic数据增强操作提升模型的训练速度和网络的精度并提出了一种自适应锚框计算与自适应图片缩放方法。
3.1 Mosaic数据增强
Mosaic数据增强是在模型训练阶段使用的将四张图片按照随机缩放、随机裁剪和随机排布的方式进行拼接可以增加数据集中小目标的数量从而提升模型对小目标物体的检测能力。YOLOv5会根据参数启动自适应锚框计算功能自适应的计算不同类别训练集中的最佳锚框值。Mosaic数据增强方法使用随机增减亮度、对比度、饱和度、色调以及随机缩放、裁减、翻转、擦除等基本方法进行数据增强。Mosaic数据增强选取四张经过上述基本方法操作后的图片进行随机编排和拼接一方面变相增大BatchSize降低显存占用率另一方面扩充了原始数据集防止过拟合的发生提高了模型的整体鲁棒性。 说明 使用Mosaic数据增强方法的优点 丰富数据集随机使用4张图片随机缩放再随机分布进行拼接丰富了检测数据集尤其是随机缩放增加了小目标让网络的鲁棒性更好。 减少GPU可能会有人说随机缩放普通的数据增强也可以做但作者考虑到很多人可能只有一个GPU因此Mosaic增强训练时可以直接计算4张图片的数据使得Mini-batch大小并不需要很大一个GPU就可以达到比较好的效果。 3.2 自适应锚框计算
在YOLO算法中针对不同的数据集都会有初始设定长宽的锚框。在网络训练中网络在初始锚框的基础上输出预测框进而和真实框groundtruth进行比对计算两者差距再反向更新迭代网络参数因此初始锚框是比较重要的一部分。在YOLOv3、YOLOv4中训练不同的数据集时计算初始锚框的值是通过单独的程序运行的。但YOLOv5中将此功能嵌入到代码中每次训练将会自适应的计算不同训练集中的最佳锚框值。如果觉得计算的锚框效果不好可以将自动计算锚框功能关闭。 3.3 自适应图像缩放
在常用的目标检测算法中不同的图片长宽都不相同因此常用的方式是将原始图片统一缩放到一个标准尺寸再送入检测网络中。YOLO算法中常用416*416、608*608等尺寸比如对下面800*600的图像进行缩放。
步骤1根据原始图片大小以及输入到网络的图片大小来计算缩放比例 原始缩放尺寸是416*416都除以原始图像的尺寸后可以得到0.52和0.69两个缩放系数选择小的缩放系数。
步骤2根据原始图片大小与缩放比例计算缩放后的图片大小 原始图片的长宽都乘以最小的缩放系数0.52宽变成了416而高变成了312。
步骤3计算黑边填充数值 将416-312104得到原本需要填充的高度。再采用numpy中np.mod取余数的方式得到8个像素再除以2即得到图片高度两端需要填充的数值。 注意 1.Yolov5中填充的是灰色即114,114,114。 2.训练时没有采用缩减黑边的方式还是采用传统填充的方式即缩放到416*416大小。只是在测试使用模型推理时才采用缩减黑边的方式提高目标检测推理的速度。 3.为什么np.mod函数的后面用32因为Yolov5的网络经过5次下采样而2的5次方等于32。所以至少要去掉32的倍数再进行取余。 4.主干网络(Backbone)
模型的Backbone主要由Focus、C3(改进后的BottleneckCSP)等模块组成。
4.1 Focus结构 Focus 模块输入通道扩充了4倍作用是可以使信息不丢失的情况下提高计算力。Focus结构在Yolov3Yolov4中并没有这个结构其中比较关键是切片操作。
比如右图的切片示意图4*4*3的图像切片后变成2*2*12的特征图。以Yolov5s的结构为例原始608*608*3的图像输入Focus结构采用切片操作先变成304*304*12的特征图再经过一次32个卷积核的卷积操作最终变成304*304*32的特征图。
4.2 CSP结构
Yolov5中设计了两种CSP结构以Yolov5s网络为例CSP1_X结构应用于Backbone主干网络另一种CSP2_X结构则应用于Neck网络中。 5.Neck网络
该模块采用特征金字塔结构(FPN)路径聚合网络结构(PAN)的结构可以加强网络对不同缩放尺度对象特征融合的能力。Neck网络通常位于基准网络和头网络的中间位置利用它可以进一步提升特征的多样性及鲁棒性。
Yolov5现在的Neck和Yolov4中一样都采用FPNPAN的结构但在Yolov5刚出来时只使用了FPN结构后面才增加了PAN结构此外网络中其他部分也进行了调整。
结构如下图所示
FPN层自顶向下传达强语义特征而PAN则自底向上传达定位特征。 6.输出端
输出端采用CIOU函数作为边界框的损失函数关于损失函数小哥谈后面会单独进行介绍包括IOU_Loss、GIOU_Loss、DIOU_Loss和CIOU_Loss在目标检测后处理过程中使用NMS(非极大值抑制)来对多目标框进行筛选增强了多目标和遮挡目标的检测能力。 说明 综合的看下各个Loss函数的不同点 IOU_Loss主要考虑检测框和目标框重叠面积。 GIOU_Loss在IOU的基础上解决边界框不重合时的问题。 DIOU_Loss在IOU和GIOU的基础上考虑边界框中心点距离的信息。 CIOU_Loss在DIOU的基础上考虑边界框宽高比的尺度信息。Yolov5中采用了CIOU_Loss的回归方式使得预测框回归的速度和精度更高一些。 NMS算法实现
为了从多个候选边界框中选择一个最佳边界框通常会使用非极大值抑制(NMS)算法这种算法用于“抑制”置信度低的边界框并只保留置信度最高的边界框。
算法的实现过程为
输入 候选边界框集合B(每个候选框都有一个置信度)、IoU阈值N
输出 最终的边界框集合D(初始为空集合)
1. 对集合B根据置信度进行降序排序
2. 从集合B中选择第一个候选框(置信度最高)把它放入集合D中并从集合B中删除
3. 遍历集合B中的每个候选框计算它们与D集合中这个候选框的IoU值。如果IoU值大于阈值N 则把它从集合B中删除
4. 重复步骤2~3直到集合B为空。 说明 关于NMS(非极大值抑制)请参考我的另一篇文章。 目标检测中NMS非极大值抑制原理解析 7.训练策略
多尺度训练 (Multi-scale training)。如果网络的输入是416 x 416那么训练的时候就会从0.5 x416到1.5×416中任意取值但所取的值都是32的整数倍。训练开始前使用 warmup 进行训练。在模型预训练阶段先使用较小的学习率训练一些epochs或者steps再修改为预先设置的学习率进行训练。使用了 cosine 学习率下降策略 (Cosine LR scheduler)采用了 EMA 更新权重(Exponential Moving Average)。相当于训练时给参数赋予一个动量这样更新起来就会更加平滑。使用了 amp 进行混合精度训练 (Mixed precision)。能够减少显存的占用并且加快训练速度但是需要 GPU 支持。