当前位置: 首页 > article >正文

目标检测——YOLOv5算法解读

作者:UltralyticsLLC公司
代码:https://github.com/ultralytics/yolov5


YOLO系列算法解读:

  • YOLOv1通俗易懂版解读
  • SSD算法解读
  • YOLOv2算法解读
  • YOLOv3算法解读
  • YOLOv4算法解读
  • YOLOv5算法解读

PP-YOLO系列算法解读:

  • PP-YOLO算法解读
  • PP-YOLOv2算法解读
  • PP-PicoDet算法解读
  • PP-YOLOE算法解读

文章目录

  • 1、算法概述
  • 2、YOLOv5细节
    • 2.1 YOLOv5损失函数
    • 2.2 YOLOv5边框回归
    • 2.3 用YOLOv5训练自己的数据
    • 2.4 训练技巧
    • 2.5 YOLOv5训练流程
    • 2.6 YOLOv5测试流程


1、算法概述

YOLOv5和YOLOv4都是在2020年发布,不同的是YOLOv5没有论文,是以工程的方式发布的,至今在工业界都还有很多应用,且模型泛化性能非常不错,代码中的很多细节处理值得我们学习。且作者也有在持续改进优化代码,现在已经更新到7.0版本了。先看代码结构:
在这里插入图片描述
代码结构非常清晰,且文件命名一目了然,通过文件名就知道该文件大致起什么作用。从代码来看,模型结构以YAML文件定义,结构清晰明了。
在这里插入图片描述
通过yolo.py里的parse_model解析yaml文件加载模型结构:
在这里插入图片描述
分析完整代码,作者使用了mosaic,图片缩放,focus,CSP,GIoU,FPN+PAN,放缩的网络结构,放缩的网络结构让模型更加灵活,一共有四个版本,s,m,l,x,遗传算法搜超参,自适应的anchor,ema。非常建议大家去深度研读yolov5的代码。


2、YOLOv5细节

先看我自己画的网络结构图
在这里插入图片描述
涉及到的子模块结构如下:
在这里插入图片描述

2.1 YOLOv5损失函数

yoloV5损失函数包括:

  1. Classification loss,分类损失
  2. Localization loss,定位损失(预测边界框与GroundTruth之间的误差)
  3. Confidence loss,目标置信度损失(框的目标性,objectness of the box)

总的损失函数:classification loss + localization loss + confidence loss
yoloV5使用二元交叉熵损失函数计算类别概率和目标置信度得分的损失。
yoloV5使用CIOU Loss作为bounding box回归的损失。

2.2 YOLOv5边框回归

Yolo格式的txt标记文件格式是归一化后的中心点坐标(x,y)及矩形宽高:
在这里插入图片描述
在这里插入图片描述
Anchor给出了目标宽高的初始值,需要回归的是目标真实宽高与初始宽高的偏移量;预测边界框中心点相对于对应cell左上角位置的相对偏移量,为了将边界框中心点约束在当前cell中,使用sigmoid函数处理偏移值,使得预测值在(0,1)范围内,根据边界框预测的4个offset tx,ty,tw,th,可以按照公式计算出边界框的真实预测值。
在这里插入图片描述
YOLOv2/v3/v4采用相同的方式:
在这里插入图片描述
YOLOv5采用跨领域网格匹配策略,一个gt框可以同时在多个尺度特征图上匹配anchor,从而得到更多的正样本anchor,它改进了回归方式:
在这里插入图片描述

这么改进的原因:
原始的yolo框方程式存在严重缺陷。宽度和高度完全不受限制,因为它们只是out=exp(in),这很危险,因为它可能导致梯度失控、不稳定、NaN损失并最终完全失去训练。
对于yolov5,确保通过sigmoid所有模型输出来修补此错误,同时还要确保中心点保持不变1 = fcn(0),因此模型的标称零输出将导致使用标称锚框大小。当前的方程式将锚点的倍数从最小0限制为最大4,并且锚点-目标匹配也已更新为基于宽度-高度倍数,标称上限阈值超参数为4.0。
在这里插入图片描述
有些groundtruth由于和anchor的匹配度不高,不会参与训练,代码中在数据增强部分有异常标签过滤设置。

2.3 用YOLOv5训练自己的数据

步骤:

  1. 创建自己的dataset.yaml。
  2. 创建自己的labels,用labelImg工具,选择yolo格式标注,一张图片保存一个txt文件。背景图片,没有txt文件。
  3. 改变图片和对应label存放方式;yoloV5是将图片路径中/images/替换成/labels/,自动找图片对应的txt文件的。
  4. 选择模型,移动端建议选择yoloV5s,yoloV5m;服务器端建议选择yoloV5l,yoloV5x。
  5. 训练,可以通过指定weights参数加载预训练模型微调。
  6. 可视化,wandb,Tensorboard,本地训练日志。

2.4 训练技巧

数据库:

  1. 每个类别的图片数大于1.5K
  2. 每个类别的标注实例大于10K
  3. 图片多样性,必须和实际部署环境一致
  4. 标注一致并准确,图片中有的类别必须标注
  5. 加入背景图片,可减少FP,建议加入0~10%的背景图片

训练参数设置:

  1. 第一次训练,建议都采样默认参数,建立一个基准,后面再尝试调整参数对比效果
  2. Epochs,默认参数300,如果出现过拟合,就减小该值,如果没有出现,可以增大大600甚至更大
  3. Image size,如果数据库中有更多的小目标,建议使用较大的分辨率训练
  4. Batch size,尽可能设大一点
  5. 超参数,建议使用默认值;更大的图像增强参数,会减少过拟合,但会增加训练难度,往往也会得到更好的mAP,减少损失分量权重参数,可以减少该损失分量过拟合机率

参考自:https://docs.ultralytics.com/tutorials/training-tips-best-results/

2.5 YOLOv5训练流程

在这里插入图片描述

2.6 YOLOv5测试流程

在这里插入图片描述


http://www.kler.cn/a/273729.html

相关文章:

  • 新兴的开源 AI Agent 智能体全景技术栈
  • 【C++】揭开C++类与对象的神秘面纱(首卷)(类的基础操作详解、实例化艺术及this指针的深究)
  • 初学者关于对机器学习的理解
  • 【测试】——Cucumber入门
  • 基于单片机的数字气压计设计
  • VSCode Live Server 插件安装和使用
  • 高架学习笔记之信息系统分类概览
  • 比较两个数组对象,找出属性id相同的项并删除
  • P8711 [蓝桥杯 2020 省 B1] 整除序列 存疑解决篇 Python
  • 爬虫技术实战案例解析
  • Java基础知识总结(6)
  • 超分之SwinIR
  • 【NLP学习记录】One-Hot编码
  • 电商api数据接口技术开发来赞达lazada通过商品ID抓取商品详情信息item_get请求key接入演示
  • 代码随想录--排序算法
  • LeetCode 面试经典150题 27.移除元素
  • 如何搭建“Docker Registry私有仓库,在CentOS7”?
  • Linux-MDK can电机带导轨 C++封装
  • 【Python循环4/5】跳出循环的办法
  • Ubuntu Desktop 设置 gedit
  • HarmonyOS NEXT应用开发—图片压缩方案
  • threejs 实现鼠标大面积选取场景内3d模型,SelectionBox API 案例使用
  • 基于Spring Boot的宿舍管理系统
  • 【Linux】进程---概念---进程---优先级
  • 【Python】进阶学习:一文解决如何从指定的源目录中,挑选出符合条件的文件,并将这些文件复制到目标目录中
  • linux 日志排查