yolov8 浅记

news/2024/10/31 1:22:56/

目录

Pre:

 1. YOLOv8 概述

2. 模型结构设计

3. Loss 计算

4.训练数据增强

5. 训练策略

 6、部署推理

End


Pre:

yolo系列发布时间:

先贴一下yolo各系列的发布时间(说出来很丢人,我以为 yolox是 最新的):

yoloX 2021.07

yolov6 2022.06 美团

yolov7 2022.07  网上的评价不错,但是更新时间停留在几个月前

YOLOv8 是 ultralytics 公司在 2023 年 1月 10 号开源的 YOLOv5 的下一个重大更新版本,目前支持图像分类、物体检测和实例分割任务。

ultralytics 并没有直接将开源库命名为 YOLOv8,而是直接使用 ultralytics 这个词,原因是 ultralytics 将这个库定位为算法框架,而非某一个特定算法,一个主要特点是可扩展性。其希望这个库不仅仅能够用于 YOLO 系列模型,而是能够支持非 YOLO 模型以及分类分割姿态估计等各类任务。

在gihub搜yolov8搜不到哦,项目地址在这里 :GitHub - ultralytics/ultralytics: NEW - YOLOv8 🚀 in PyTorch > ONNX > CoreML > TFLite

性能:

 1. YOLOv8 概述

 YOLOv8 算法,其核心特性和改动可以归结为如下:

  1. 提供了一个全新的 SOTA 模型,包括 P5 640 和 P6 1280 分辨率的目标检测网络和基于 YOLACT 的实例分割模型。和 YOLOv5 一样,基于缩放系数也提供了 N/S/M/L/X 尺度的不同大小模型,用于满足不同场景需求
  2. 骨干网络和 Neck 部分可能参考了 YOLOv7 ELAN 设计思想,将 YOLOv5 的 C3 结构换成了梯度流更丰富的 C2f 结构,并对不同尺度模型调整了不同的通道数,属于对模型结构精心微调,不再是无脑一套参数应用所有模型,大幅提升了模型性能。不过这个 C2f 模块中存在 Split 等操作对特定硬件部署没有之前那么友好了
  3. Head 部分相比 YOLOv5 改动较大,换成了目前主流的解耦头结构,将分类和检测头分离,同时也从 Anchor-Based 换成了 Anchor-Free
  4. Loss 计算方面采用了 TaskAlignedAssigner 正样本分配策略,并引入了 Distribution Focal Loss
  5. 训练的数据增强部分引入了 YOLOX 中的最后 10 epoch 关闭 Mosiac 增强的操作,可以有效地提升精度

从上面可以看出,YOLOv8 主要参考了最近提出的诸如 YOLOX、YOLOv6、YOLOv7 和 PPYOLOE 等算法的相关设计,本身的创新点不多,偏向工程实践,主推的还是 ultralytics 这个框架本身。

2. 模型结构设计

Head 部分变化最大,从原先的耦合头变成了解耦头,并且从 YOLOv5 的 Anchor-Based 变成了 Anchor-Free。其结构如下所示:

3. Loss 计算

Loss 计算过程包括 2 个部分: 正负样本分配策略和 Loss 计算。
现代目标检测器大部分都会在正负样本分配策略上面做文章,
YOLOv5 采用的依然是静态分配策略。考虑到动态分配策略的优异性,YOLOv8 算法中则直接引用了 TOOD 的 TaskAlignedAssigner
TaskAlignedAssigner 的匹配策略简单总结为: 根据分类与回归的分数加权的分数选择正样本。

 s 是标注类别对应的预测分值,u 是预测框和 gt 框的 iou,两者相乘就可以衡量对齐程度。

  1.     对于每一个 GT,对所有的预测框基于 GT 类别对应分类分数,预测框与 GT 的 IoU 的加权得到一个关联分类以及回归的对齐分数 alignment_metrics
  2.     对于每一个 GT,直接基于 alignment_metrics 对齐分数选取 topK 大的作为正样本

Loss 计算包括 2 个分支: 分类和回归分支,没有了之前的 objectness 分支

  •     分类分支依然采用 BCE Loss
  •     回归分支需要和 Distribution Focal Loss 中提出的积分形式表示法绑定,因此使用了 Distribution Focal Loss, 同时还使用了 CIoU Loss
  •     3 个 Loss 采用一定权重比例加权即可。
     

4.训练数据增强

数据增强方面和 YOLOv5 差距不大,只不过引入了 YOLOX 中提出的最后 10 个 epoch 关闭 Mosaic 的操作。假设训练 epoch 是 500,

5. 训练策略

YOLOv8 的训练策略和 YOLOv5 没有啥区别,最大区别就是模型的训练总 epoch 数从 300 提升到了 500,这也导致训练时间急剧增加。以 YOLOv8-S 为例,其训练策略汇总如下:

 6、部署推理

与yolov5不同哦,opencv dnn 部署需要opencv4.7。onnx runtime C++  部署  可以看看我的博客

End

yolo系列 选哪个,可以看看这里,感觉有点道理:YOLOv8来啦!YOLO内卷期模型怎么选?9+款AI硬件如何快速部署?深度解析

说明:

本文很多部分摘自下列参考,仅作笔记,无意冒犯

参考:

YOLOv8 深度详解!一文看懂,快速上手 - 知乎

YOLOv8来啦 | 详细解读YOLOv8的改进模块!YOLOv5官方出品YOLOv8!_AI追随者的博客-CSDN博客


http://www.ppmy.cn/news/62558.html

相关文章

从供应链角度看进销存:区别与联系

供应链和进销存是两个紧密相关的概念,它们都涉及到企业在商品贸易中的运作过程。虽然它们有一些相似之处,但是它们也有一些显著的区别。本文将从几个方面探讨供应链和进销存的区别。 一、概念定义 供应链的定义:供应链是一系列的活动&#…

搭建本地仓库源

一、如何搭建仓库源 之前讲了定制ISO的方法:使用chroot定制系统,但有时候我们想自定义的安装包不在上游的仓库源中,在我们本地应该怎么办呢?如果我们将deb包拷贝到iso目录再安装有点过于麻烦了,而且还可能需要手动处理…

什么是UN38.3/UN38.3/MSDS+货物运输鉴定报告是什么?怎么做?

一:什么是UN38.3? UN38.3是指在联合国针对危险品运输专门制定的《联合国危险物品运输试验和标准手册》的第3部分38.3款,简称UN38.3。 据国际航协《危险物品规则》的相关规定,对适用于包括但不限于单独或与设备一起运输的属可充电型锂电池的手…

SpringBoot Starter 作用及原理,你真的清楚吗?

本文会以 mybatis 为例,通过对比 mybatis-spring 和 mybatis-spring-boot-starter 代码示例,了解 Starter 的作用。并对 mybatis-spring-boot-starter 进行简单剖析,了解 Starter 原理。 什么是 Starter 大家都知道基于 SpringBoot 开发项目…

SpringBoot的yml多环境配置3种方法

目录 方式一:多个yml文件 步骤一、创建多个配置文件 步骤二、applicaiton.yml中指定配置 方式二: 单个yml文件 方式三:在pom.xml中指定环境配置 步骤一、创建多个配置文件 步骤二、在application.yml中添加多环境配置属性 步骤三、在po…

Java的自定义注解

java元注解和自定义注解的区别 Java的自定义注解是一种元数据,可以应用于类、方法、字段等程序元素上,以提供额外的信息或指示。 自定义注解包括注解声明、元注解、运行时处理器三个部分。注解声明指定了注解的名称、作用域、成员等信息;元注…

ElastaicSearch 查询

match_all:匹配所有 match:分词单个匹配 【分词包含query,就可以被检索到,类似contains包含】 multi_match:分词多个匹配 【任何一个分词包含query,就可以被检索到】 term:全词单个匹配 terms&a…

JSP企业电子投票系统(源代码+论文+开题报告+外文翻译+文献综述)

J2EE已经成为开发商创建电子商务应用的事实标准。正是认识到J2EE平台作为一种可扩展的、全功能的平台,可以将关键的企业应用扩展到任何Web浏览器上并可适合多种不同的Internet数据流、可连接到几乎任何一种传统数据库和解决方案、使企业经理根据多家企业所提供的产品…