【YOLOv8】

在这里插入图片描述

文章目录

  • 1、yolov8 介绍
  • 2、创新点
  • 3、模型结构设计
    • 3.1、backbone
    • 3.2、head
  • 4、正负样本匹配策略
  • 5、Loss
  • 6、Data Augmentation
  • 7、训练、推理
  • 8、分割 Demo
  • 附录——V1~V8
  • 附录——相关应用
  • 参考

1、yolov8 介绍

YOLOv8 是 ultralytics 公司在 2023 年 1 月 10 号开源的 YOLOv5 的下一个重大更新版本

官方开源地址:

  • https://github.com/ultralytics/ultralytics/tree/v8.2.103

ultralytics-8.2.103 是最后一个版本的 v8,后续升级成了 v11

在这里插入图片描述

MMYOLO 开源地址:

  • https://github.com/open-mmlab/mmyolo/blob/dev/configs/yolov8/

不过 ultralytics 并没有直接将开源库命名为 YOLOv8,而是直接使用 ultralytics 这个词,原因是 ultralytics 将这个库定位为算法框架,而非某一个特定算法,一个主要特点是可扩展性。

在这里插入图片描述

vs yolov5

在这里插入图片描述
在这里插入图片描述

2、创新点

一个新的骨干网络(c2f)

一个新的 Ancher-Free 检测头(解耦分类和回归)

一个新的损失函数(TaskAlignedAssigner 正负样本分配策略 + Distribution Focal Loss)

3、模型结构设计

在这里插入图片描述

3.1、backbone

在这里插入图片描述

更多的跨层连接

3.2、head

在这里插入图片描述
不再有之前的 objectness 分支,只有解耦的分类和回归分支,并且其回归分支使用了 Distribution Focal Loss

4、正负样本匹配策略

YOLOv8 算法中则直接引用了 TOOD 的 TaskAlignedAssigner。

根据分类与回归的分数加权的分数选择正样本。
在这里插入图片描述

s s s 是标注类别对应的预测分值, u u u 是预测框和 g t gt gt 框的 iou

对于每一个 GT,对所有的预测框基于 GT 类别对应分类分数,预测框与 GT 的 IoU 的加权得到一个关联分类以及回归的对齐分数 alignment_metrics

对于每一个 GT,直接基于 alignment_metrics 对齐分数选取 topK 大的作为正样本

5、Loss

分类分支依然采用 BCE Loss

回归分支需要和 Distribution Focal Loss 中提出的积分形式表示法绑定,因此使用了 Distribution Focal Loss, 同时还使用了 CIoU Loss

6、Data Augmentation

数据增强方面和 YOLOv5 差距不大,只不过引入了 YOLOX 中提出的最后 10 个 epoch 关闭 Mosaic 的操作。
在这里插入图片描述

7、训练、推理

YOLOv8 的训练策略和 YOLOv5 没有啥区别,最大区别就是模型的训练总 epoch 数从 300 提升到了 500

在这里插入图片描述

YOLOv8 的推理过程和 YOLOv5 几乎一样,唯一差别在于前面需要对 Distribution Focal Loss 中的积分表示 bbox 形式进行解码,变成常规的 4 维度 bbox,后续计算过程就和 YOLOv5 一样了。

其推理和后处理过程为:

(1) bbox 积分形式转换为 4d bbox 格式

对 Head 输出的 bbox 分支进行转换,利用 Softmax 和 Conv 计算将积分形式转换为 4 维 bbox 格式

(2) 维度变换

YOLOv8 输出特征图尺度为 80x80、40x40 和 20x20 的三个特征图。Head 部分输出分类和回归共 6 个尺度的特征图。

将 3 个不同尺度的类别预测分支、bbox 预测分支进行拼接,并进行维度变换。为了后续方便处理,会将原先的通道维度置换到最后,类别预测分支 和 bbox 预测分支 shape 分别为 (b, 80x80+40x40+20x20, 80)=(b,8400,80),(b,8400,4)。

(3) 解码还原到原图尺度

分类预测分支进行 Sigmoid 计算,而 bbox 预测分支需要进行解码,还原为真实的原图解码后 xyxy 格式。

(4) 阈值过滤

遍历 batch 中的每张图,采用 score_thr 进行阈值过滤。在这过程中还需要考虑 multi_label 和 nms_pre,确保过滤后的检测框数目不会多于 nms_pre。

(5) 还原到原图尺度和 nms

基于前处理过程,将剩下的检测框还原到网络输出前的原图尺度,然后进行 nms 即可。最终输出的检测框不能多于 max_per_img。

8、分割 Demo

from ultralytics import YOLO
import random
import cv2
import numpy as np
from tqdm import tqdm
import os
from natsort import natsorted"yolov8 segmentation"
if 1:model = YOLO("yolov8x-seg.pt")yolo_classes = list(model.names.values())# if you want all classesclasses_ids = [yolo_classes.index(clas) for clas in yolo_classes]colors = [random.choices(range(256), k=3) for _ in classes_ids]conf = 0.5pth = "/home/bryant/images/"tgt = "/home/bryant/v8x/"os.makedirs(tgt, exist_ok=True)for image in tqdm(natsorted(os.listdir(pth))):if ".jpg" not in image:continueimg = cv2.imread(os.path.join(pth, image))img_ori = img.copy()results = model.predict(img, conf=conf)# print(results)for result in results:if result:for mask, box in zip(result.masks.xy, result.boxes):if int(box.cls[0]) != 0:  # only segment humancontinuepoints = np.int32([mask])# cv2.polylines(img, points, True, (255, 0, 0), 1)color_number = classes_ids.index(int(box.cls[0]))mask = cv2.fillPoly(img, points, colors[color_number])mask_img = cv2.addWeighted(img_ori, 0.15, mask, 0.85, 0)# mask = cv2.fillPoly(zero, points, colors[color_number])# mask_img = 0.9*mask + 0.1*imgtry:cv2.imwrite(os.path.join(tgt, image), mask_img)except:cv2.imwrite(os.path.join(tgt, image), img_ori)

在这里插入图片描述

附录——V1~V8

在这里插入图片描述

附录——相关应用

  1. 一种基于YOLO-v8的智能城市火灾探测改进方法(2023年09月22日)

参考

参考学习摘抄来自:

  • positive666/yolo_research
  • YOLOv8 深度详解!一文看懂,快速上手(2023年01月12日)
  • 万字长文,彻底搞懂YOLOv8网络结构及代码实战!(2023年06月19日)

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Softing线上研讨会 | 自研还是购买——用于自动化产品的工业以太网

| 线上研讨会时间:2025年1月27日 16:00~16:30 / 23:00~23:30 基于以太网的通信在工业自动化网络中的重要性日益增加。设备制造商正面临着一大挑战——如何快速、有效且经济地将工业以太网协议集成到其产品中。其中的关键问题包括:是否只需集成单一的工…

人工智能基础之数学基础:01高等数学基础

函数 极限 按照一定次数排列的一列数:“,“,…,"…,其中u 叫做通项。 对于数列{Un}如果当n无限增大时,其通项无限接近于一个常数A,则称该数列以A为极限或称数列收敛于A,否则称数列为发散, 极限值 左…

QT数据库(三):QSqlQuery使用

QSqlQuery 简介 QSqlQuery 是能运行任何 SQL 语句的类,如 SELECT、INSERT、UPDATE、DELETE 等 SQL 语句。所以使用 QSqlQuery 几乎能进行任何操作,例如创建数据表、修改数据表的字段定义、进行数据统计等。如果运行的是 SELECT 语句,它查询…

数据结构(考研)

线性表 顺序表 顺序表的静态分配 //线性表的元素类型为 ElemType//顺序表的静态分配 #define MaxSize10 typedef int ElemType; typedef struct{ElemType data[MaxSize];int length; }SqList;顺序表的动态分配 //顺序表的动态分配 #define InitSize 10 typedef struct{El…

Unity DeepSeek API 聊天接入教程(0基础教学)

Unity DeepSeek API 聊天接入教程(0基础教学) 1.DeepSeek 介绍 DeepSeek是杭州深度求索人工智能基础技术研究有限公司推出的一款大语言模型。2025年1月20日,DeepSeek-R1正式上线,和当前市面上的主流AI相比,它在仅有极少标注数据的情况下&am…

PAT乙级真题 — 1090 危险品装箱(java)

集装箱运输货物时,我们必须特别小心,不能把不相容的货物装在一只箱子里。比如氧化剂绝对不能跟易燃液体同箱,否则很容易造成爆炸。 本题给定一张不相容物品的清单,需要你检查每一张集装箱货品清单,判断它们是否能装在…

Navicat16安装教程(附安装包)2025最新版详细图文安装教程

文章目录 前言一、Navicat16安装包下载?二、安装步骤1.运行安装程序2.安装程序3.阅读许可协议4.选择安装位置5.选择附加任务6.准备安装7.完成安装8.使用设置 前言 Navicat 16 是一款好用的数据库管理软件,能让你轻松操作各类数据库。本教程会一步一步教…

论文阅读 DOES END-TO-END AUTONOMOUS DRIVING REALLY NEED PERCEPTION TASKS?

端到端的强势来袭,好久了~~~ 简单翻译:端到端真的需要感知任务嘛? code https://github.com/PeidongLi/SSR. https://arxiv.org/pdf/2409.18341 1. 摘要 端到端自动驾驶(E2EAD)方法通常依赖于监督式感知任务来提取显…

【记忆化搜索】矩阵中的最长递增路径

文章目录 329. 矩阵中的最长递增路径解题思路:暴搜 -> 记忆化搜索 329. 矩阵中的最长递增路径 329. 矩阵中的最长递增路径 ​ 给定一个 m x n 整数矩阵 matrix ,找出其中 最长递增路径 的长度。 ​ 对于每个单元格,你可以往上&#xff…

获取某厂招聘岗位信息

今天方向一个爬虫案例,爬取某厂招聘岗位信息数据,通过程序可以学习pymysql的使用,通过pycharm工具获取数据,并且导入mysql数据库中。 1 导入必要的包 import requests import pymysql2 主体代码 class Baidu(object):def __init…

deepseek R1基本原理解读与系列论文简介

文章目录 前言一、deepseek R1发展史二、deepseek R1简介1、R1简介2、R1成功秘诀3、R1推理模型概念4、R1自我进化与顿悟时刻特点5、不同处理方法比较6、训练流程7、训练阶段8、R1的MLA结构9、R1的MOE结构10、R1的MTP结构11、R1的GRPO结构三、DeepSeek LLM Scaling Open-Source …

数据分析--数据清洗

一、数据清洗的重要性:数据质量决定分析成败 1.1 真实案例警示 电商平台事故:2019年某电商大促期间,因价格数据未清洗导致错误标价,产生3000万元损失医疗数据分析:未清洗的异常血压值(如300mmHg&#xff…

【进阶】微服务

微服务架构 服务架构演变过程 单体应用架构 所有的功能都在一个项目中(现在使用的就是单体架构) 集群架构 把一个单体项目部署多个,使用Nginx进行负载均衡,根据负载均衡策略调用后端服务 不好的地方:有的服务访问…

浏览器开发者工具(F12)查看请求的响应体内容显示”无法加载响应数据: No resource with given identifier found“

背景 复习在 SSM(Spring Spring MVC MyBatis)框架中,点击登录请求后返回 JSON 格式的数据,出现只有登录失败的请求才有响应值,比如: {success: false, message: “没有此用户”, code: 400} 而成功的请求…

Mybatisplus自定义sql

文章目录 引言流程 引言 mybatisplus最擅长的将where里面的语句给简便化,而不用我们自己写标签来实现条件查询 但是很多公司规范我们将sql写在mapper层中,不能写在service中 而且一些语句查询的不同select count(*) xxx from xxx 也难以用mp来实现 如何…

级联选择器多选动态加载

一.级联展示 注:因为级联选择器这里是动态加载,因此如果上来选中一级就需要加载出后面三级的全部数据,依然会很卡,因此,和产品协商把一二级多选框去掉了,这样也避免了你选择一级不能实现子级被全部选中的问…

MySQL-事务隔离级别

事务有四大特性(ACID):原子性,一致性,隔离性和持久性。隔离性一般在事务并发的时候需要保证事务的隔离性,事务并发会出现很多问题,包括脏写,脏读,不可重复读,…

【带你 langchain 双排系列教程】2. langchain 提示词工程应用实践

一、简介 提示词工程在利用 LangChain 与大型语言模型交互中起着关键作用,通过精心设计提示词,可以引导模型生成更准确、更符合预期的输出,从而提升应用的效果和用户体验。 二、基本提示词调用 可以使用 LangChain 提供的 PromptTemplate 来…

git删除本地分支

一、命令方式 1、查看本地分支 git branch 2、切换到一个不删除的分支 git checkout branch_name 3、强制删除分支 git branch -D local_branch_name 二、工具方式 1、选择"Browse references",右键"Delete branch"

[Computer Vision]实验四:相机标定

目录 一、实验内容 二、实验过程及结果 2.1 实验代码 2.2 实验结果及分析 一、实验内容 了解针孔照相机的相关知识,实现相机标定。(可使用提供的棋盘格或自行打印) 可视化棋盘格关键点、匹配点数(可加ransac)输出…