1. yolov5网络架构与组件
1.1 网络可视化工具 netron
在线版本:浏览器中输入链接: https://lutzroeder.github.io/netron/
netron官方的Github链接:https://github.com/lutzroeder/netron
1.2 不同模型的配置
1.3 Focus 模块
一个小实验:
Focus()模块是为减少错误和提高速度而设计的,而不是提高精度。
1.4 CSPNet 跨阶段局部网络
1.5 SPP 空间金字塔池化
在CSP上添加SPP块,因为它显着地增加了接收字段,分离出了最重要的内容,几乎没有降低网络的操作速度。
1.6 PANet 路径聚合网络
2. 损失函数
2.1 类别预测
2.2 边界框回归
2.3 回顾IoU
2.4 IoU推广——GIoU loss
C 框是包围A、B的最小的框
2.5 IoU推广——DIoU loss
蓝色为对角线,两框中心点的距离为d
在IoU和GIoU一样的情况下,DIoU还有变化。
2.6 IoU推广——CIoU loss
优化的偏导数
2.7 总结
还有CIoU等等,大家感兴趣可以自己了解。
DIoU波动稳定,对不同值的适应能力比较强;实验比较G&C:CIoU的表现比较好,YOLOv5默认用CIoU计算Loss
3. YOLOv5目标框回归与跨网格预测策略
3.1 回顾:目标框PASCAL VOC标注格式
左上角为坐标原点
3.2 标记文件
图右框住的部分可以看出,框的宽高等做了归一化;两种标记文件是可以转换的
一个例子
3.3 目标框回归
蓝色是预测框,虚线是先验框(anchor)
两个模型的计算方式出现了改变;原始的yolo / darknet框方程式存在严重缺陷。宽度和高度完全不受限制,它可能导致失控的梯度、不稳定、NaN损失并最终完全失去训练。
对于yolov5,确保通过sigmoid所有模型输出来修补此错误,同时还要确保中心点保持不变1=fcn (0) ,因此模型的标称零输出将导致使用标称锚框大小(即预先设置的锚框)。当前的方程式将锚点的倍数从最小0限制为最大4(这个地方的解释:sigmoid函数取值[0,1],因此其平方乘以2 的取值范围就是[0,4]),并且锚框-目标匹配也已更新为基于宽度-高度倍数,标称上限阈值超参数为4.0。
3.4 YOLOv5跨网格匹配策略
4. YOLOv5 训练技巧
4.1 训练预热warmup
刚开始训练时,模型的权重(weights)是随机初始化的,此时若选择一个较大的学习率,可能带来模型的不稳定(振荡)。选择warmup预热学习率的方式,可以使得开始训练的几个epoches或者一些steps内学习率较小,在预热的小学习率下,模型可以慢慢趋于稳定,等模型相对稳定后再选择预先设置的学习率进行训练,使得模型收敛速度变得更快,模型效果更佳。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XNOeFks2-1681870777889)(C:/Users/dell/AppData/Roaming/Typora/typora-user-images/image-20230411134042225.png)]
0-30个epoches的warmup,学习率从很小增加很快,第三张图是不同的预热策略。
例子:余弦退火调整学习率。
4.2 自动计算锚框
Anchor给出了目标宽高的初始值,需要回归的是目标真实宽高与初始宽高的偏移量,而不使用anchor的做法需要回归宽高的绝对量。
Autoanchor only runs when the best possible recall (BPR,最大可能召回率) is under threshold;在yolov5中,BPR小于98%就会自动计算锚框。
也可以自己禁用这一功能,自动计算的锚框信息会保存在模型的权重文件中。
4.3 超参数进化
在yolov5中采用类似GA遗传算法来进行优化,但yolov5无交配这一操作。
4.4 自动混合精度训练
如何使用呢?
4.5 断点续训 !!!
4.6 多GPU训练
推荐的模式:
4.7 并行数据加载
多线程加载数据从而加快速度,最下面的是并行流水线加载
DDP模式
文章来源:https://www.toymoban.com/news/detail-421442.html
可以在github上看详细命令和介绍 点击跳转文章来源地址https://www.toymoban.com/news/detail-421442.html
到了这里,关于计算机视觉——yolov5回归与跨网格预测、训练技巧(下篇)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!