目标检测——YOLOv5算法解读

news2024/9/20 16:40:47

作者: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.coloradmin.cn/o/1528000.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Css提高——Css3的新增选择器

目录 1、Css3新增选择器列举 2、属性选择器 2.1、语法 2.2、代码: 2.3、效果图 3、结构伪类选择器 3.1、语法 3.2、代码 3.3、效果图 3.4、nth:child(n)的用法拓展 nth-child(n)与nth-of-type&#x…

【Spring MVC】Spring MVC拦截器(Interceptor)

目录 一、拦截器介绍 二、拦截器 Interceptor 定义 2.1 HandlerInterceptor接口 2.2 Spring MVC中提供的一些HandlerInterceptor接口实现类 1、AsyncHandlerInterceptor 2、WebRequestInterceptor 3、MappedInterceptor 4、ConversionServiceExposingInterceptor 三、拦…

Python之Web开发中级教程----ubuntu安装MySQL

Python之Web开发中级教程----ubuntu安装MySQL 进入/opt目录 cd /opt 更新软件源 sudo apt-get upgrade sudo apt-get update 3、安装Mysql server sudo apt-get install mysql-server 4、启动Mysql service mysql start 5、确认Mysql的状态 service mysql status 6、安装My…

天眼销批量查询功能上线

天眼销是一款提供企业线索的产品,致力于帮助客户获取最新的企业联系方式、工商信息等关键数据。 数据库收录全国 3.3亿及以上企业(含个体)线索,涵盖企业名称、企业状态、注册时间、注册资本、经营范围、法人信息、联系方式等维度,为用户提供…

免费SSL证书哪个更好

当下为了实现网站的https访问,很多的站点都会在自己的网站上部署使用SSL证书。 从2018年7月1日开始,Chrome将显示所有未使用SSL证书的网站标记为“不安全”,SSL证书,用于加密HTTP协议,也就是HTTPS。随着https的普及度…

智能合约 - ERC20介绍

什么是ERC20 ERC20全称为Ethereum Request for Comment 20,是一种智能合约标准,用于以太坊网络上的代币发行 姊妹篇 - 如何部署ERC20 ERC20的应用场景 代币化资产,例如:USDT 是一种以美元为背书的ERC20代币,每个USDT代…

adobe animate 时间轴找不到编辑多个帧按钮

如题,找了半天,在时间轴上找不到编辑多个帧按钮,导致无法批量处理帧 然后搜索发现原来是有些版本被隐藏了,需要再设置一下 勾选上就好了

一款基于 SpringCloud 开发的AI聊天机器人系统,已对接GPT-4.0,非常强大

简介 一个基于SpringCloud的Chatgpt机器人,已对接GPT-3.5、GPT-4.0、百度文心一言、stable diffusion AI绘图、Midjourney绘图。用户可以在界面上与聊天机器人进行对话,聊天机器人会根据用户的输入自动生成回复。同时也支持画图,用户输入文本…

赛昉(starFive)星光2 多媒体框架分析与功能验证

开发板 开发板长这个样子: 串口调试接口如下: 整体支持情况 驱动&firmware&API jh7110/soft_3rdpart/wave511 : H.264&H.265 Decoder (Chips&Media 芯媒)jh7110/soft_3rdpart/wave521 : H.264&H.265 Encoder (Chips&Media 芯媒)jh7110/soft_3rdp…

什么是CPU?CPU的性能指标是什么?

我们在就看一台笔记本电脑配置时,必然要关注CPU的型号与性能,那么你知道什么是CPU吗?CPU的性能指标又是什么呢?如何来衡量这款CPU的性能是不是很强大?我们来一起看一下! 什么是CPU CPU,全称中央…

C++手写链表、反转链表、删除链表节点、遍历、为链表增加迭代器

本篇博客介绍如何使用C实现链表,首先编写一个简单的链表,然后增加模板,再增加迭代器。 简单链表的实现 链表的结构如下: 首先需要定义链表的节点: struct ListNode {int data;ListNode* pNext;ListNode(int value …

[Linux]互斥锁(什么是锁,为什么需要锁,怎么使用锁(接口),演示代码)

目录 一、锁的概念 一些需要了解的概念 什么是锁?为什么需要锁?什么时候使用锁?怎么定义锁? 二、锁的接口 1.初始化锁 2.加锁 3.申请锁 4.解锁 5.销毁锁 三、实践(写代码):黄牛抢票 M…

C#开发中方法使用的问题注意

C#开发中,我们在进行方法内嵌时,需要注意方法回传带值时,我们需要对方法回传的值进行一个赋值传递 如下所示 console.WriteLine("请输入你的爱好:"); string aihao Console.ReadLine(); name ChangeData(name);同时在…

Legacy|电脑Windows系统如何迁移到新安装的硬盘?系统迁移详细教程!

前言 前面讲了很多很多关于安装系统、重装系统的教程。但唯独没有讲到电脑换了新的硬盘之后,怎么把旧系统迁移到新的硬盘上。 今天小白就来跟各位小伙伴详细唠唠: 开始之前需要把系统迁移的条件准备好,意思就是在WinPE系统下,可…

B004-springcloud alibaba 服务容错 Sentinel

目录 高并发带来的问题服务雪崩效应常见容错方案常见的容错思路隔离超时限流熔断降级 常见的容错组件 Sentinel入门什么是Sentinel微服务项目集成Sentinel核心库安装Sentinel控制台实现一个接口的限流 Sentinel的概念和功能基本概念重要功能 Sentinel规则流控规则三种流控模式三…

拒绝云测,热门猫主食冻干对比测评,希喂、SC、VE谁实力更强?

在当今的科学养宠时代,主食冻干已经成为了猫日常饮食不可或缺的一部分。高肉含量的主食冻干不仅易吸收、好消化,更能给猫提供其他猫粮所不能提供的微量物质,更满足猫的全面营养需求。然而,在众多品牌和口味的主食冻干中&#xff0…

抖音找人推广要给多少推广费?CloudNEO:9000+网红资源,助您品牌代言

抖音作为中国最受欢迎的短视频平台之一,吸引了众多用户的关注,也成为了企业推广的热门渠道。然而,很多人对于在抖音上找人推广需要支付多少推广费并不了解。下面让我们来解析一下抖音推广费用的计算方式。 1. 推广形式: 首先&…

ISP技术综述

原文来自技术前沿:ISP芯片终极进化——VP芯片(AI视觉处理器) 目录 1.计算机视觉的定义 2.与计算机视觉密切相关的概念与计算机视觉密切相关的概念有机器视觉,图像处理与分析,图像和视频理解。 3.计算机视觉的应用 …

[自研开源] MyData v0.7.3 更新日志

开源地址:gitee | github 详细介绍:MyData 基于 Web API 的数据集成平台 部署文档:用 Docker 部署 MyData 使用手册:MyData 使用手册 试用体验:https://demo.mydata.work 交流Q群:430089673 介绍 MyData …

git常见使用

1. 概念 分布式,有远程仓库和本地仓库的概念,因此要注意同步问题git是面向对象的,本质是内容寻址系统。.git目录下有个文件夹objects,存储git库中的对象,git就是根据object建立一种树形结构,将文件和通过h…