YOLO V5 和 YOLO V8 对比学习

参考文章:
1、YOLOv5 深度剖析
2、如何看待YOLOv8,YOLOv5作者开源新作,它来了!?
3、anchor的简单理解

完整网络结构

YOLOv5-l-P6

YOLO v8

YOLO v5和YOLO v8的Head部分

在这里插入图片描述
YOLO v8的Head 部分相比 YOLOv5 改动较大,换成了目前主流的解耦头结构,将分类和检测头分离,同时也从 Anchor-Based 换成了 Anchor-Free。anchor-based和anchor-free方法的本质区别,就是如何定义正负样本
Anchor-Based:事先通过手工或聚类方法设定好的具有不同尺寸、宽高比的方框anchor_boxes。这些方框覆盖了整张图像,目的是为了防止漏检。在模型训练过程中,根据anchor_boxes与ground truth的IoU(交并比)损失对anchor_boxes的长宽以及位置进行回归,使其越来越接近ground truth,在回归的同时预测anchor_boxes的类别,最终输出这些回归分类好的anchors。目前主流的目标检测算法多是anchor-based这一类,其中有two-stage也有one-stage。two-stage方法要筛选和优化的anchors数量要远超one-stage方法,筛选步骤较为严谨,所以耗费时间要久一些,但是精度要高一些。在常用的检测基准上,SOTA的方法一般都是anchor-based的。
Anchor-Free:由于FPN和Focal Loss的出现,有效解决了特征语义信息不足和正负样本不均衡的问题,又涌现出了一批anchor-free的算法。anchor-free检测器以两种不同的方式检测物体,一种是首先定位到多个预定义或自学习的关键点,然后约束物体的空间范围,称为Keypoint-based方法;另一种是利用中心点或中心目标区域来定义正样本,然后预测其到目标四个边的距离,称为Center-based方法。anchor-free的方法使得目标检测的流程进一步精简,减少了相关超参数,使得网络搭建训练更简便,泛化能力也更强。

YOLOv5的C3结构 和 YOLOv8的C2f结构

在这里插入图片描述
YOLO v8将 YOLOv5 的 C3 结构换成了梯度流更丰富的 C2f 结构,并对不同尺度模型调整了不同的通道数,不过这个 C2f 模块中存在 Split 等操作对特定硬件部署没有之前那么友好了。

YOLO v5和YOLO v8的loss

1、YOLO v5在类别的损失函数中,使用的是二元交叉熵损失函数,而不是softmax损失函数。因为softmax损失函数对于每个类别的处理是互斥的。而yolo考虑到了类别不互斥的情况,例如,一个类别可以是车,但也可以是汽车或货车,如果用softmax,是车就不可以是汽车,但二元交叉熵既可以是车也可以是汽车。
2、YOLO v8采用了 TaskAlignedAssigner 正样本分配策略,并引入了 Distribution Focal Loss。Loss 计算包括 2 个分支: 分类和回归分支,没有了之前的 objectness 分支。分类分支依然采用 BCE Loss。回归分支需要和 Distribution Focal Loss 中提出的积分形式表示法绑定,因此使用了 Distribution Focal Loss, 同时还使用了 CIoU Loss。3 个 Loss 采用一定权重比例加权即可。
TaskAlignedAssigner 正样本分配策略核心思想是在候选框与真实目标之间建立正确的对应关系,以便在训练过程中能够准确地学习目标检测模型,即根据分类与回归的分数加权的分数选择正样本。在目标检测中,类别不平衡是指不同类别的目标数量差异很大,这可能会导致模型在训练过程中对少数类别的预测效果较差。Focal Loss 通过在损失函数中引入一个可调节的因子,来减小易分类样本的权重,从而集中训练模型在困难样本上。Distribution Focal Loss是 Focal Loss 的一个变体,专门用于应对类别不平衡问题。其主要思想是将 Focal Loss 与样本分布信息相结合,从而更好地处理不平衡的类别。具体而言,分布 Focal 损失会根据每个类别的样本分布情况来调整 Focal Loss 中的因子,以便更有效地关注罕见类别。

YOLO v5和YOLO v8训练数据增强

YOLO v8数据增强方面和 YOLOv5 差距不大,只不过引入了 YOLOX 中提出的最后 10 个 epoch 关闭 Mosaic 的操作。假设训练 epoch 是 500,其示意图如下所示:
在这里插入图片描述
Mosaic是YOLOV4中提出的新方法,适用于目标检测,主要思想是将四张图片进行拼接到一张图上作为训练样本。由于Mosaic用于目标检测,进行拼接时目标框的坐标也要做相应的变化。Mosaic的主要操作如下:

  • 对每一张图进行随机裁剪得到A;crop的目标是选择原图的某一块区域,而不是全图进行后续的拼接;
  • 将A进行resize到输出图大小得到B;目标是统一坐标系尺寸,方便后续拼接;坐标框会进行相应的缩放
  • 将B随机裁剪一块指定大小的区域C;
  • 将C粘贴到输出图相应的位置;此时只需要坐标平移就可以调整坐标框

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/97712.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Nexus私有仓库+IDEA配置远程推送

目录 一、docker安装nexus本地私服,Idea通过maven配置deploy本地jar包(简单) 二、docker push镜像到第三方nexus远程私服(shell命令操作) 三、springboot通过maven插件自动生成docker镜像并push到nexus私服&#xf…

(三)行为模式:6、备忘录模式(Memento Pattern)(C++示例)

目录 1、备忘录模式(Memento Pattern)含义 2、备忘录模式的UML图学习 3、备忘录模式的应用场景 4、备忘录模式的优缺点 (1)优点: (2)缺点 5、C实现备忘录模式的实例 1、备忘录模式&#…

7.react useReducer使用与常见问题

useReducer函数 1. useState的替代方案.接收一个(state, action)>newState的reducer, 并返回当前的state以及与其配套的dispatch方法2. 在某些场景下,useReducer会比useState更加适用,例如state逻辑较为复杂, 且**包含多个子值**,或者下一个state依赖于之前的state等清楚us…

部署你自己的导航站-dashy

现在每天要访问的网页都太多了,尽管chrome非常好用,有强大的标签系统。但是总觉的少了点什么。 今天我就来分享一个开源的导航网站系统 dashy。这是一个国外的大佬的开源项目 github地址如下:https://github.com/Lissy93/dashy 来简单说一下…

git操作:将一个仓库的分支提交到另外一个仓库分支

这个操作,一般是同步不同网站的同个仓库,比如说gitee 和github。某个网站更新了,你想同步他的分支过来。然后基于分支开发或者其它。 操作步骤 1.本地先clone 你自己的仓库。也就是要push 分支的仓库。比如A仓库,把B仓库分支&am…

函数(个人学习笔记黑马学习)

1、函数定义 #include <iostream> using namespace std;int add(int num1, int num2) {int sum num1 num2;return sum; }int main() {system("pause");return 0; } 2、函数的调用 #include <iostream> using namespace std;int add(int num1, int num2…

2023-8-31 Dijkstra求最短路(二)

题目链接&#xff1a;Dijkstra求最短路 II #include <iostream> #include <cstring> #include <algorithm> #include <vector> #include <queue>using namespace std;typedef pair<int, int> PII;const int N 150010;int n, m; int h[N…

网络中的问题2

距离-向量算法的具体实现 每个routerY的路由表表项 involve<目的网络N&#xff0c;距离d&#xff0c;下一跳X> 对邻居X发来的报文,先把下一跳改为X,再把距离1,if original route table doesn’t involve N,add this item&#xff1b; else if original table’s relate…

Mysql 索引

索引 索引是一个排序的列表&#xff0c;在这个列表中存储着索引的值和包含这个值的数据所在行的物理地址&#xff08;类似于C语言的链表通过指针指向数据记录的内存地址&#xff09; 使用索引后可以不用扫描全表来定位某行的数据&#xff0c;而是先通过索引表找到该行数据对应…

mongodb 分片集群部署

文章目录 mongodb 分片部署二进制安装三台config 配置shard 分片安装shard1 安装shard2 安装shard3 安装mongos 安装数据库、集合启用分片创建集群认证文件创建集群用户部署常见问题 mongodb 分片部署 二进制安装 mkdir -p /data/mongodb tar xvf mongodb-linux-x86_64-rhel7…

Python编程——深入了解不可变的元组

作者&#xff1a;Insist-- 个人主页&#xff1a;insist--个人主页 本文专栏&#xff1a;Python专栏 专栏介绍&#xff1a;本专栏为免费专栏&#xff0c;并且会持续更新python基础知识&#xff0c;欢迎各位订阅关注。 目录 一、元组是什么 二、元组的定义 1、相同类型组成元组…

[C++]构造与毁灭:深入探讨C++中四种构造函数与析构函数

个人主页&#xff1a;北海 &#x1f390;CSDN新晋作者 &#x1f389;欢迎 &#x1f44d;点赞✍评论⭐收藏✨收录专栏&#xff1a;C/C&#x1f91d;希望作者的文章能对你有所帮助&#xff0c;有不足的地方请在评论区留言指正&#xff0c;大家一起学习交流&#xff01;&#x1f9…

05架构管理之持续集成-DevOps的理解与实现

专栏说明&#xff1a;针对于企业的架构管理岗位&#xff0c;分享架构管理岗位的职责&#xff0c;工作内容&#xff0c;指导架构师如何完成架构管理工作&#xff0c;完成架构师到架构管理者的转变。计划以10篇博客阐述清楚架构管理工作&#xff0c;专栏名称&#xff1a;架构管理…

分享一个vue-slot插槽使用场景

需求再现 <el-table-column align"center" label"状态" prop"mitStatus" show-overflow-tooltip />在这里&#xff0c;我想对于状态进行一个三目判断&#xff0c;如果为0那就是进行中&#xff0c;否则就是已完成&#xff0c;期初我是这样写…

项目-IM

zk 启动类实现CommandLineRunner接口&#xff0c;重写run()方法 单聊 群聊 离线消息

Android OTA 相关工具(六) 使用 lpmake 打包生成 super.img

我在 《Android 动态分区详解(二) 核心模块和相关工具介绍》 介绍过 lpmake 工具&#xff0c;这款工具用于将多个分区镜像打包生成一个 Android 专用的动态分区镜像&#xff0c;一般称为 super.img。Android 编译时&#xff0c;系统会自动调用 lpmake 并传入相关参数来生成 sup…

uniapp实现:点击拨打电话,弹出电话号码列表,可以选择其中一个进行拨打

一、实现效果&#xff1a; 二、代码实现&#xff1a; 在uni-app中&#xff0c;使用uni.showActionSheet方法实现点击拨打电话的功能&#xff0c;并弹出相关的电话列表供用户选择。 当用户选择了其中一个电话后&#xff0c;会触发success回调函数&#xff0c;并通过res.tapInde…

ELK日志收集系统

目录 一、概述 二、组件 一、logstash 一、工作过程 二、INPUT 三、FILETER 四、OUTPUTS 二、elasticsearch 三、kibana 三、架构类型 一、ELK 二、ELKK 三、ELFK 四、ELFKK 五、EFK 四、配置ELK日志收集系统集群实验的步骤文档 五、配置ELK日志收集系统集群 …

0201hdfs集群部署-hadoop-大数据学习

文章目录 1 前言2 集群规划3 hadoop安装包上传与安装3.1 上传解压 4 hadoop配置5 从节点同步和环境变量配置6 创建用户7 集群启动8 问题集8.1 Invalid URI for NameNode address (check fs.defaultFS): file:/// has no authority. 结语 1 前言 下面我们配置下单namenode节点h…

地下管线三维自动建模软件MagicPipe3D V3.0发布

2023年9月1日经纬管网建模系统MagicPipe3D V3.0正式发布&#xff0c;该版本经过众多用户应用和反馈&#xff0c;在三维地下管网建模效果、效率、适配性方面均有显著提升&#xff01;MagicPipe3D本地离线参数化构建地下管网模型&#xff08;包括管道、接头、附属设施等&#xff…