新建网站如何推广,旺道seo网站优化大师,地区性中介类网站建设,公主岭网站建设规划前言
吼吼#xff01;终于来到了YOLOv5啦#xff01;
首先#xff0c;一个热知识#xff1a;YOLOv5没有发表正式论文哦~
为什么呢#xff1f;可能YOLOv5项目的作者Glenn Jocher还在吃帽子吧#xff0c;hh 目录
前言
一、YOLOv5的网络结构 二、输入端
#xff08;1…
前言
吼吼终于来到了YOLOv5啦
首先一个热知识YOLOv5没有发表正式论文哦~
为什么呢可能YOLOv5项目的作者Glenn Jocher还在吃帽子吧hh 目录
前言
一、YOLOv5的网络结构 二、输入端
1Mosaic数据增强
2自适应锚框计算
3自适应图片缩放
三、Backbone
1Focus结构
2CSP结构
四、Neck
五、Head
1Bounding box损失函数
2NMS非极大值抑制 六、训练策略 前期回顾
【YOLO系列】YOLOv4论文超详细解读2网络详解 【YOLO系列】YOLOv4论文超详细解读1翻译 学习笔记
【YOLO系列】YOLOv3论文超详细解读翻译 学习笔记 【YOLO系列】YOLOv2论文超详细解读翻译 学习笔记 【YOLO系列】YOLOv1论文超详细解读翻译 学习笔记 一、YOLOv5的网络结构
YOLOv5特点 合适于移动端部署模型小速度快
YOLOv5有YOLOv5s、YOLOv5m、YOLOv5l、YOLOv5x四个版本。文件中这几个模型的结构基本一样不同的是depth_multiple模型深度和width_multiple模型宽度这两个参数。 就和我们买衣服的尺码大小排序一样YOLOv5s网络是YOLOv5系列中深度最小特征图的宽度最小的网络。其他的三种都是在此基础上不断加深不断加宽。 YOLOv5s的网络结构如下 1输入端 Mosaic数据增强、自适应锚框计算、自适应图片缩放
2Backbone Focus结构CSP结构
3Neck FPNPAN结构
4Head GIOU_Loss
基本组件
CBL 由ConvBnLeaky_relu激活函数三者组成。Res unit 借鉴Resnet网络中的残差结构让网络可以构建的更深。CSPX 借鉴CSPNet网络结构由卷积层和X个Res unint模块Concate组成。SPP 采用1×15×59×913×13的最大池化的方式进行多尺度融合。
YOLO5算法性能测试图 二、输入端
1Mosaic数据增强
YOLOv5在输入端采用了Mosaic数据增强Mosaic 数据增强算法将多张图片按照一定比例组合成一张图片使模型在更小的范围内识别目标。Mosaic 数据增强算法参考 CutMix数据增强算法。CutMix数据增强算法使用两张图片进行拼接而 Mosaic 数据增强算法一般使用四张进行拼接但两者的算法原理是非常相似的。 Mosaic数据增强的主要步骤为
1随机选取图片拼接基准点坐标xcyc另随机选取四张图片。
2四张图片根据基准点分别经过尺寸调整和比例缩放后放置在指定尺寸的大图的左上右上左下右下位置。
3根据每张图片的尺寸变换方式将映射关系对应到图片标签上。
4依据指定的横纵坐标对大图进行拼接。处理超过边界的检测框坐标。
采用Mosaic数据增强的方式有几个优点
1丰富数据集 随机使用4张图像随机缩放后随机拼接增加很多小目标大大增加了数据多样性。
2增强模型鲁棒性 混合四张具有不同语义信息的图片可以让模型检测超出常规语境的目标。
3加强批归一化层Batch Normalization的效果 当模型设置 BN 操作后训练时会尽可能增大批样本总量BatchSize因为 BN 原理为计算每一个特征层的均值和方差如果批样本总量越大那么 BN 计算的均值和方差就越接近于整个数据集的均值和方差效果越好。
4Mosaic 数据增强算法有利于提升小目标检测性能 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) 根据原始图片大小以及输入到网络的图片大小计算缩放比例 原始缩放尺寸是416*416都除以原始图像的尺寸后可以得到0.52和0.69两个缩放系数选择小的缩放系数。
(2) 根据原始图片大小与缩放比例计算缩放后的图片大小 原始图片的长宽都乘以最小的缩放系数0.52宽变成了416而高变成了312。
(3) 计算黑边填充数值 将416-312104得到原本需要填充的高度。再采用numpy中np.mod取余数的方式得到8个像素再除以2即得到图片高度两端需要填充的数值。 注意
1Yolov5中填充的是灰色即114,114,114。
2训练时没有采用缩减黑边的方式还是采用传统填充的方式即缩放到416*416大小。只是在测试使用模型推理时才采用缩减黑边的方式提高目标检测推理的速度。
3为什么np.mod函数的后面用32
因为YOLOv5的网络经过5次下采样而2的5次方等于32。所以至少要去掉32的倍数再进行取余。以免产生尺度太小走不完stridefilter在原图上扫描时需要跳跃的格数的问题再进行取余。 三、Backbone
1Focus结构
Focus模块在YOLOv5中是图片进入Backbone前对图片进行切片操作具体操作是在一张图片中每隔一个像素拿到一个值类似于邻近下采样这样就拿到了四张图片四张图片互补长得差不多但是没有信息丢失这样一来将W、H信息就集中到了通道空间输入通道扩充了4倍即拼接起来的图片相对于原先的RGB三通道模式变成了12个通道最后将得到的新图片再经过卷积操作最终得到了没有信息丢失情况下的二倍下采样特征图。
以YOLOv5s为例原始的640 × 640 × 3的图像输入Focus结构采用切片操作先变成320 × 320 × 12的特征图再经过一次卷积操作最终变成320 × 320 × 32的特征图。
切片操作如下 作用 可以使信息不丢失的情况下提高计算力
不足Focus 对某些设备不支持且不友好开销很大另外切片对不齐的话模型就崩了。
后期改进 在新版中YOLOv5 将Focus 模块替换成了一个 6 x 6 的卷积层。两者的计算量是等价的但是对于一些 GPU 设备使用 6 x 6 的卷积会更加高效。 2CSP结构
YOLOv4网络结构中借鉴了CSPNet的设计思路在主干网络中设计了CSP结构。 YOLOv5与YOLOv4不同点在于YOLOv4中只有主干网络使用了CSP结构。 而YOLOv5中设计了两种CSP结构以YOLOv5s网络为例CSP1_ X结构应用于Backbone主干网络另一种CSP2_X结构则应用于Neck中。 四、Neck
YOLOv5现在的Neck和YOLOv4中一样都采用FPNPAN的结构。但是在它的基础上做了一些改进操作YOLOV4的Neck结构中采用的都是普通的卷积操作而YOLOV5的Neck中采用CSPNet设计的CSP2结构从而加强了网络特征融合能力。
结构如下图所示FPN层自顶向下传达强语义特征而PAN塔自底向上传达定位特征 五、Head
1Bounding box损失函数
YOLO v5采用CIOU_LOSS 作为bounding box 的损失函数。关于IOU_ Loss、GIOU_ Loss、DIOU_ Loss以及CIOU_Loss的介绍请看YOLOv4那一篇【YOLO系列】YOLOv4论文超详细解读2网络详解 2NMS非极大值抑制
NMS 的本质是搜索局部极大值抑制非极大值元素。
非极大值抑制主要就是用来抑制检测时冗余的框。因为在目标检测中在同一目标的位置上会产生大量的候选框这些候选框相互之间可能会有重叠所以我们需要利用非极大值抑制找到最佳的目标边界框消除冗余的边界框。
算法流程 1.对所有预测框的置信度降序排序 2.选出置信度最高的预测框确认其为正确预测并计算他与其他预测框的 IOU 3.根据步骤2中计算的 IOU 去除重叠度高的IOU threshold 阈值就直接删除 4.剩下的预测框返回第1步直到没有剩下的为止 SoftNMS
当两个目标靠的非常近时置信度低的会被置信度高的框所抑制那么当两个目标靠的十分近的时候就只会识别出一个 BBox。为了解决这个问题可以使用 softNMS。
它的基本思想是用稍低一点的分数来代替原有的分数而不是像 NMS 一样直接置零。 六、训练策略
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 支持。