【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

附录——相关应用
- 一种基于YOLO-v8的智能城市火灾探测改进方法(2023年09月22日)
参考
参考学习摘抄来自:
- positive666/yolo_research
- YOLOv8 深度详解!一文看懂,快速上手(2023年01月12日)
- 万字长文,彻底搞懂YOLOv8网络结构及代码实战!(2023年06月19日)
相关文章:
【YOLOv8】
文章目录 1、yolov8 介绍2、创新点3、模型结构设计3.1、backbone3.2、head 4、正负样本匹配策略5、Loss6、Data Augmentation7、训练、推理8、分割 Demo附录——V1~V8附录——相关应用参考 1、yolov8 介绍 YOLOv8 是 ultralytics 公司在 2023 年 1 月 10 号开源的 YOLOv5 的下…...
【保姆级教程】DeepSeek R1+RAG,基于开源三件套10分钟构建本地AI知识库
一、总体方案 目前在使用 DeepSeek 在线环境时,页面经常显示“服务器繁忙,请稍后再试”,以 DeepSeek R1 现在的火爆程度,这个状况可能还会持续一段时间,所以这里给大家提供了 DeepSeek R1 RAG 的本地部署方案。最后实现…...
Oracle视图(基本使用)
视图 视图是通过定制的方式显示一个或者多个表的数据。 视图可以视为“虚拟表”或“存储的查询”。 视图的优点: 提供了另外一种级别的表安全性隐藏了数据的复杂性简化了用户的SQL命令隔离基表结构的改变通过重命名列,从另一个角度提供数据。 视图里…...
梁文锋亲自挂名DeepSeek发布新论文
由 DeepSeek 联合创始人梁文锋亲自挂名的研究团队,在 arXiv 上发表了一篇题为“Native Sparse Attention: Hardware-Aligned and Natively Trainable Sparse Attention”的论文,提出了一种全新的注意力机制架构 NSA(Native Sparse Attention&…...
低代码(Low Code)全解析:从概念到应用,从选择到价值
在数字化浪潮席卷全球的当下,企业对软件开发的效率与灵活性愈发重视,低代码平台应运而生并迅速掀起技术热潮。 本文基于笔者 6 年的低代码实践经验,深入剖析低代码的诸多方面,涵盖其定义、发展历程、国内平台对比、开发流程、与…...
C++--STL库-List
目录 1.list 的基本使用 1.1 创建和初始化 1.2. 插入元素 1.3. 删除元素 1.4. 访问元素 1.5 遍历 1.6 总结 list是C标准库(STL)中的双向链表容器,属于<list>头文件。 它的特点是: 动态大小:可以随时插入…...
尚硅谷 java 学习Day19 抽象类与抽象方法、接口、内部类
6-5 抽象类(abstract)与抽象方法(important) 一、什么叫抽象类: 有时候将一个父类设计的非常抽象,以至于它没有具体的实例,这样的类称为抽象类 abstract关键字的使用: 1、abstract:抽象的 2、abs…...
HomeAssistant 发现MQTT设备(温度,湿度,开关)
要通过 MQTT 将温度、湿度数据以及一个灯的开关状态传输到 Home Assistant 并实现设备自动发现,可以按照以下步骤操作: 1.前期准备工作 安装MQTT服务器(EMQX)配置好(可以在HA加载项中安装,也可以在NAS上Docker安装) HA的集成中安装MQTT,并且连接上(EM…...
本地DeepSeek模型GGUF文件转换为PyTorch格式
接前文,我们在本地Windows系统上,基于GGUF文件部署了DeepSeek模型(DeepSeek-R1-Distill-Qwen-1.5B.gguf版本),但是GGUF是已经量化的版本,我们除了对其进行微调之外,无法对其训练,那么还有没有其他办法对本地的GGUF部署的DeepSeek模型进行训练呢?今天我们就反其道而行之…...
手写数字识别的神经网络 2层神经网络的类 代码详解
源代码和图解来自鱼书 目录 2层神经网络的类 源代码: 详解: 1. 类的初始化 (__init__) 2. 前向传播 (predict) 3. 损失函数 (loss) 4. 准确率计算 (accuracy) 5. 数值梯度计算 (numerical_gradient) 6. 反向传播计算梯度 (gradient) 总结&#…...
【项目】基于STM32F103C8T6的四足爬行机器人设计与实现(源码工程)
👉博__主👈:米码收割机 👉技__能👈:C/Python语言 👉专__注👈:专注主流机器人、人工智能等相关领域的开发、测试技术。 【项目】基于STM32F103C8T6的四足爬行机器人设计与…...
[代码调试]安装Text2Image(stable diffusion)模型环境的踩坑记录
文章目录 一、xFormers版本问题1、先确认下自己torch版本所对应的cuda版本2.安装对应版本(1) 到对应官网下载包本地安装(2)代码安装 二、attn_mask尺寸错误三、diffusers四、Huggingface 配置基于stable diffusion预训练模型的环境,记录踩坑记录 一、xFormers版本问…...
使用DeepSeek+本地知识库,尝试从0到1搭建高度定制化工作流(自动化篇)
7.5. 配图生成 目的:由于小红书发布文章要求图文格式,因此在生成文案的基础上,我们还需要生成图文搭配文案进行发布。 原实现思路: 起初我打算使用deepseek的文生图模型Janus进行本地部署生成,参考博客:De…...
理解三种哈希算法:MD5、CRC、SHA256
0、背景 哈希算法是一类重要的算法,用于将任意长度的数据映射为固定长度的哈希值。哈希算法广泛应用于数据完整性校验、密码学、数字签名等领域。本文将详细介绍三种常见的哈希算法:MD5、CRC 和 SHA256,并探讨它们的原理、特点及应用场景。 …...
机器学习基本篇
文章目录 1 基本概念2 基本流程2.0 数据获取2.1 预处理2.1.0 认识数据认识问题2.1.1 不平衡标签的处理a.随机过采样方法 ROS,random over-samplingb. SMOTE synthetic minority Over-Sampling Technique2.2 缺失值处理2.3 数据清洗2.3.0离散特征编码2.3.1 连续特征处理归一化标…...
#渗透测试#批量漏洞挖掘#Apache Log4j反序列化命令执行漏洞
免责声明 本教程仅为合法的教学目的而准备,严禁用于任何形式的违法犯罪活动及其他商业行为,在使用本教程前,您应确保该行为符合当地的法律法规,继续阅读即表示您需自行承担所有操作的后果,如有异议,请立即停止本文章读。 目录 Apache Log4j反序列化命令执行漏洞 一、…...
python常用库整理
Python常用库众多,涵盖了数据分析、科学计算、机器学习、Web开发、游戏开发、自然语言处理、图像处理、自动化测试等多个领域。以下是一些常用的Python库及其主要用途: 数据分析与科学计算 NumPy:用于科学计算的基础库,支持大型…...
SQL数据处理函数全解析
1. 引言 1.1 SQL简介 SQL(Structured Query Language)是用于管理和操作关系型数据库的标准语言。它允许用户查询、插入、更新和删除数据库中的数据。SQL的强大之处在于其内置的函数库,这些函数可以帮助我们更高效地处理数据。 1.2 数据处理函数的重要性 数据处理函数在S…...
Python解决“反应物浓度”问题
Python解决“反应物浓度”问题 问题描述测试样例解题思路代码 问题描述 在一个神秘的实验室里,科学家小Z正在研究一种特殊的化学反应。她有一个名为 reactant 的初始物质,其起始值为 0。为了推动实验进展,小Z设计了一系列操作,这…...
HTTP FTP SMTP TELNET 应用协议
1. 标准和非标准的应用协议 标准应用协议: 由标准化组织(如 IETF,Internet Engineering Task Force)制定和维护,具有广泛的通用性和互操作性。这些协议遵循严格的规范和标准,不同的实现之间可以很好地进行…...
百度搜索全面接入DeepSeek-R1满血版:AI与搜索的全新融合
不等了,就是现在!百度搜索全量接入DeepSeek-R1满血版 百度搜索已正式全量接入DeepSeek-R1满血版,在宣布“将接入”仅过了24小时后。 就在宣布“将接入”仅24小时后,百度搜索 已正式全量接入 DeepSeek-R1满血版!得益于…...
《DeepSeek技术:开启工业互联网低成本开发新时代》
在工业互联网蓬勃发展的当下,企业数字化转型的需求日益迫切。然而,高昂的应用开发成本却如同拦路虎,阻碍着众多企业的前进步伐。此时,DeepSeek技术的出现,为工业互联网应用开发带来了新曙光,凭借其独特优势…...
深入浅出TypedArray:网络数据处理、WebGPU与加密实战
JavaScript的TypedArray是现代Web开发中处理二进制数据的利器。本文将结合网络数据传输、WebGPU编程和简单加密算法三个实战场景,带你领略TypedArray的强大能力。 一、TypedArray基础认知 TypedArray家族包括Int8Array、Uint16Array、Float32Array等11种视图类型&a…...
nordic(nrf52832、nrf52840)如何使用SES(SEGGER Embedded Studio)编辑编译工程?
nordic官方例程中一般都会给出好几个不同的编译环境供用户选择,一般是 keil工程、armgcc工程、IAR工程、ses工程等。 一、segger embedded studio如何添加工程.h头文件? 1)首先打开options 2)下拉选中common 3)找到common下的Pre…...
LabVIEW利用CANopen的Batch SDO写入
本示例展示了如何通过CANopen协议向设备写入Batch SDO(批量服务数据对象)。Batch SDO允许用户在一次操作中配置多个参数,适用于设备的批量配置和参数设置。此方法能够简化多个参数的写入过程,提高设备管理效率。 主要步骤…...
P11071 「QMSOI R1」 Distorted Fate Solution
Description 给定序列 a ( a 1 , a 2 , ⋯ , a n ) a(a_1,a_2,\cdots,a_n) a(a1,a2,⋯,an),有 m m m 个操作分两种: modify ( l , r , x ) \operatorname{modify}(l,r,x) modify(l,r,x):对每个 i ∈ [ l , r ] i \in [l,r] i∈…...
WebSocket在分布式环境中的局限性及解决方案
WebSocket 在分布式环境中存在一些局限性,特别是当系统需要扩展多个服务实例时,单个 WebSocket 连接的管理和消息推送就变得比较复杂。因此,必须采取一些额外的措施来确保 WebSocket 能在多个服务实例之间正确工作。 WebSocket 在分布式环境…...
Flutter 跳转后不允许返回
如果在 Flutter 中使用 Navigator.pushNamed(context, /),默认情况下它会将新的页面压入栈中,这样用户可以按返回键返回上一页。但如果你不想让用户返回,而是直接跳转到 / 并清除导航栈,可以使用 pushReplacementNamed 或 pushNam…...
spconv 安装测试
pip install spconv 报错: File "/usr/local/lib/python3.10/dist-packages/torch/nn/modules/module.py", line 1736, in _wrapped_call_impl return self._call_impl(*args, **kwargs) File "/usr/local/lib/python3.10/dist-packages/torch/nn/modules/mod…...
关于es6-module的语法
ES6(ECMAScript 2015)引入了模块化的概念,旨在使 JavaScript 更加模块化、可维护和可重用。ES6 模块允许我们在不同的文件中组织和管理代码,使得不同模块之间的依赖关系更加清晰。 1. 导出(Export) 1.1 命…...
