YOLOv8代码上线,官方宣布将发布论文,附精度速度初探和对比总结

news2024/12/29 1:06:30

【YOLOv8 注意事项】

1. YOLOv8 的官方仓库和代码已上线,文档教程网址也刚刚更新。

2. YOLOv8 代码集成在 ultralytics 项目中,目前看不会再单独创建叫做 YOLOv8 的项目。

3. YOLOv8 即将有论文了!要知道 YOLOv5 自从 2020 年发布以来,一直是没有论文的。而 YOLOv8(YOLOv5团队)这次首次承认将先发布 arXiv 版本的论文(目前还在火速撰写中)。

YOLOv8 代码链接:

GitHub - ultralytics/ultralytics: YOLOv8 🚀 in PyTorch > ONNX > CoreML > TFLite

权重链接:

Releases · ultralytics/assets · GitHub
YOLOv8 文档教程链接:

Ultralytics YOLOv8 Docs

YOLOv8 官方放出了 YOLOv8 与 YOLOv7、YOLOv6 和 YOLOv5 的性能比较折线图,如下所示:

 

第三方(github作者:RangeKing )绘制的 YOLOv8 网络结构示意图,内容非常详细,还获得了 YOLOv8 官方的点赞认可,如下图所示:

 

这里分享一篇关于【YOLOv8精度速度初探和对比总结】的知乎文章,内容写的也非常好,有一些独特的见解,希望对大家有所帮助。

作者:迪迦奥特曼

YOLOv8精度速度初探和对比总结 - 知乎

 前几天已经传开了 YOLOv8 即将发布,昨天 ultralytics 终于宣布开源了YOLOv8。

GitHub - ultralytics/ultralytics: YOLOv8 🚀 in PyTorch > ONNX > CoreML > TFLite

 repo没有起名为YOLOv8,也没有合并在YOLOv5里,有网友问作者回复说要搞自己的大框架集合,不只是YOLO不只是检测。此外作者还说在写arxiv论文了,最大的那个表格估计现在一页也放不下了。YOLOv8 代码风格完善了很多,精度更是高出一大截直奔SOTA,那么是否宣告 YOLOv5 即将像YOLOv1 v2一样慢慢成为历史?YOLOv5又 是如何一步步改到YOLOv8的(仅指ultralytics的YOLOv5到YOLOv8)?

差异点总结:

 前几天已经有很多解读了,这里再简单总结下YOLOv8相比YOLOv5的改动:

(1). Backbone:CSP是不变的思想,但是 v8 中选用了 C2f 模块替换 v5 的 C3 模块,每个stage的blocks数也改为了[3,6,6,3]而不是[3,6,9,3],此外x版本的depth因子仍然为1.0和L版本一样而不是常规的1.33,明显是为了轻量化。stem卷积在v8里是k=3的卷积而不是k=6的了,而最后的SPPF模块v8还是照搬沿用v5的;

(2). Neck:除了同样是 C2f 模块替换 C3 模块外,v8还将v5中 PAN-FPN 的top down上采样阶段中的卷积直接删除了;

(3). Head:Decoupled-Head,和yolov6 ppyoloe的head类似,除了cls reg两个branch外还有一个projection conv,是为 DFL 用的,不同于v6 ppyoloe的是reg_max没有加1;

(4). Label Assign:v8终于还是使用了Anchor-Free,TaskAlignedAssigner(TAL)动态匹配的方式也是和v6 ppyoloe很相似的,但topk alpha参数略有不同,v8也没有ATSS静态匹配阶段;

(5). Loss:v8的分类loss还是使用的BCE,虽然也写了VFL(varifocal_loss)但是注释了没用上,回归loss是DFL Loss+CIoU Loss,loss_weight的设置也和v6 ppyoloe略有区别;

总的来看,最大的改动就是Anchor Base换成Anchor Free了,主要就是TOOD的思想,也参考了一些v6 ppyoloe的代码。

关于精度:

首先还是直接看下YOLOv5和YOLOv8的精度对比,可以看出同级别模型YOLOv8至少高出3个多点,nano版本更是高出9.3。参数量FLOPs上YOLOv8不可避免的增加了些,然后l x版本参数量少了点。

Modelsize
(pixels)
mAPval
50-95
mAPval
50
Speed
CPU b1
(ms)
Speed
V100 b1
(ms)
Speed
V100 b32
(ms)
params
(M)
FLOPs
@640 (B)
YOLOv5n64028.045.7456.30.61.94.5
YOLOv5s64037.456.8986.40.97.216.5
YOLOv5m64045.464.12248.21.721.249.0
YOLOv5l64049.067.343010.12.746.5109.1
YOLOv5x64050.768.976612.14.886.7205.7

                                                                YOLOv5基本模型

Modelsize
(pixels)
mAPval
50-95
Speed
CPU ONNX
(ms)
Speed
A100 TensorRT
(ms)
params
(M)
FLOPs
(B)
YOLOv8n64037.380.40.993.28.7
YOLOv8s64044.9128.41.2011.228.6
YOLOv8m64050.2234.71.8325.978.9
YOLOv8l64052.9375.22.3943.7165.2
YOLOv8x64053.9479.13.5368.2257.8

                                                                 YOLOv8基本模型

关于模型结构:

参数量FLOPs不可避免增加,n s m上已经有点明显了,但l x版本参数量反而减小了很多,我觉得主要还是减少了东西导致的,比如Backbone每个stage的输出的通道数只有 n/s 和YOLOv5的n/s相同,m/l/x 最后一个stage都缩减了很多,再配合最大的stage的blocks数也减少了,以及FPN去除了top-down上采样卷积,x版本的depth因子仍然为1.0而不是常规的1.33,所以YOLOv8各个模型尤其是大模型上参数量减小了,而小模型上增加的也不太多。

同时带来的一个问题也是设计上的不统一了,包括v6 damo-yolo都是大小模型各一套backbone,v7的设计个版本就更没有章法了。一套模型X L M S T N只改depth width因子是最理想状态,但是估计这些新的YOLO的作者往往发现和竞品对比时某一个版本稍弱或优势没那么大,于是就针对它调,效果是跳上去了,但是每个版本差别也越来越大,换版本的时候不能只是改下depth width因子了,各自调优稍显刻意了点。

关于Assign和Loss:

其实主要还是TOOD的思想,这个文章介绍的比较详细了 【YOLOv6、PP-YOLOE、PicoDet为什么都选择了TOOD?】,总结下来就是分类和回归任务具有较高一致性。但是v8分类loss目前还是使用的BCE,不知道使用VFL的时候精度如何,至于IoU loss可能也已经排列组合尝试过了采用了CIoU,loss_weight也调大了iou loss的比例。v8的Assign是全程采用TAL ,没有静态匹配ATSS,其实看v6的最新代码里也逐渐去除了ATSS阶段,而PPYOLOE里还是保留着约前1/3 阶段ATSS+后期TAL的设置。本人之前训TOOD也跳过ATSS和TAL的epoch数,ATSS静态匹配确实稍显生硬,但对于较简单的数据集还是挺有用。全程TAL对于遮挡多较难的数据集更合适。

关于训练细节:

几个综合YOLO的集合代码库已经火速安排上了复现的PR,比如MMYOLO和PaddleYOLO,今早看到了PaddleYOLO 里已经率先支持了YOLOv8的inference和部署速度。

具体训练可能都还得等的官方先公布完全吧。包括训练epoch数和预训练权重,这个已经在issue中有人问到了,这是对训练精度影响最大的两个方面,现在各个YOLO也已经很难做到公平对比了,以前还默认都是300epoch下640单尺度eval精度,所以后面的YOLO纷纷使用了1280尺度、加P6层、obj365预训练、自蒸馏、大蒸小蒸馏等外挂拼命往上刷,现在则是只剩下640单尺度eval精度。

关于部署和速度:

之前我的T4机器上就测过PaddleYOLO里的ppyoloe和v5 v7的速度对比,这下正好也直接验证了下v8的几个权重onnx的速度。最基础的测速,是640*640尺度下去nms bs=1的trt测速,各家YOLO发布时这个也是必测必写的,其实换算到FPS更直观点,但是FPS波动太大,多打20都有可能,而毫秒耗时则最多差个0.2ms。

看到PaddleYOLO 里yolov8表格的TRT-FP16-Latency的数据,发现和yolov5比小模型上速度比较接近,但大模型m l x上则变慢了不少,精度的巨大提升也牺牲了速度,这也可能是之前讨论的m l x比yolov5缩减了backbone的模块和通道数有关吧。理论上看模型结构改动尤其是head加大了很多,的确可能变慢的,具体等v8公布速度数据再看看(目前已公布速度数据,如上面图所示)。

YOLOv5 

 YOLOv8

 

 PaddleYOLO 的modelzoo页面可以直观的看到几乎所有YOLO的精度速度对比,虽然是paddle框架但都是同一T4 GPU环境下册的还算是可以参考的:

PaddleYOLO/MODEL_ZOO_cn.md at release/2.5 · PaddlePaddle/PaddleYOLO · GitHub

当然也期待yolov8论文中的超级大表格,那样会更直观。

star数是唯一评价标准吗

v8开源一天已经吸引了600多star数(截止2023年1月12日晚,已经1.3k star),热度非凡,最后想再稍微讨论下这个,一般来说大家首先都是看的star数去评价,但这个其实往往都是可以通过营销宣传来涨的,现在很多自媒体平台也极大的方便了传播,此外fork数基本都是被忽略的。yolov5代码普遍反应写的可读性极差不规范,但是他的star数就是一路飙升直至超过了mmdet和detectron2做到了检测领域第一,主要还是维护和生态应用做的好,此外forks数也有12.5k可见其影响力和使用范围。

我觉得还是需要看全面看待star fork等,一个代码库刚放出来的时候star肯定是暴涨的,当然也是配合着宣传营销,这个和新事物疯狂点收藏的一个道理。但是放出来一段时间后,star数的增长趋于平稳,这个时候其实可以关注下star/fork 比,一般来说在3~7的都算正常,10左右的基本上还是营销宣传PR一直在发力。起名呢也是个学问,只要起名直接叫yolov9 v10保准可以吸足流量,正如v5 v6 v7当初带动的一波又一波流量一样,但是我是觉得起名还得问问最初YOLO作者团队的同意,以示尊重经典各大YOLO都还在继续保持着创新和更新,可以期待下yolov9 v10,不过不需要盲目就换模型,还是得大致了解下改进点和优劣势后再谨慎选择

 

引用参考

[1].GitHub - ultralytics/ultralytics: YOLOv8 🚀 in PyTorch > ONNX > CoreML > TFLite

[2]. GitHub - PaddlePaddle/PaddleYOLO: 🚀🚀🚀 YOLO series of PaddlePaddle implementation, PPYOLOE, YOLOX, YOLOv5, YOLOv6, YOLOv7, YOLOv8, RTMDet and so on. 🚀🚀🚀

[3] YOLOv8精度速度初探和对比总结 - 知乎 (zhihu.com) 

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

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

相关文章

阿里云服务器安装图形界面

为了自动化流程安装图形界面,我的服务器是Centos7 1、yum安装gnome图形界面 yum groupinstall “GNOME Desktop” -y 2、安装远程桌面服务端 yum -y install tigervnc-server -y 3、启动远程桌面服务端(将桌面服务绑定到5903端口) vncserver :3 4、阿里控制台放开59…

SpringBoot+VUE前后端分离项目学习笔记 - 【23 权限菜单 续】

BUG1 : 路由跳转问题 访问错误路由: 已登录用户返回404,未登录用户返回登录页面 Route/index.js 路由守卫增加判断 router.beforeEach((to, from, next) > {localStorage.setItem("currentPathName", to.name) // 设置当前的路由名称s…

【墙角数枝梅,凌寒独自开】代码改变未来

墙角数枝梅,凌寒独自开 “墙角数枝梅,凌寒独自开。” 出自王安石的《梅花》 诗句是集语言中的精华,浓缩为七言、五言和四言等,寥寥几句道尽人生酸甜苦辣,儿女情长。 而我更愿把现代的程序员称作诗人,语言是…

ESP32设备驱动-TCS34725颜色传感器驱动

TCS34725颜色传感器驱动 文章目录 TCS34725颜色传感器驱动1、TCS34725介绍2、硬件准备3、软件准备4、驱动实现1、TCS34725介绍 TCS3472 器件提供红色、绿色、蓝色 (RGB) 和清晰光感应值的数字返回。 集成在芯片上并定位于颜色传感光电二极管的 IR 阻挡滤光片可最大限度地减少入…

并发场景使用SimpleDateFormat异常问题和解决

SimpleDateFormat类主要是负责日期的格式化与转换操作,因为它不是线程安全的,所以使用SimpleDateFormat时,务必确保同一个SimpleDateFormat对象不要与其他线程共享,否则并发情况下会出现问题 目录异常示例解决方案1:创…

Camera | 2.MIPI、CSI基础

瑞芯微专栏 上一篇我们讲解了camera的一些基础概念和知识。 我们说了,现在的手机由于高分辨率的要求,现在基本上都是基于MIPI、CSI协议来实现的, 本篇讲解MIPI、CSI的一些基础知识。 摄像头常用术语 下面这些术语是camera驱动中经常用到的…

9.6 容器适配器

文章目录定义一个适配器stack队列适配器queuepriority_queue 优先队列适配器是标准库的一个通用概念,容器、迭代器和函数等都有适配器。适配器是一种机制,接受一种已有容器类型。标准库有三个顺序容器适配器:stack,queue和priorit…

Elasticsearch:关于在 Python 中使用 Elasticsearch 你需要知道的一切 - 8.x

在本文中,我们将讨论如何在 Python 中使用 Elasticsearch。 如果你还不了解 Elasticsearch,可以阅读这篇文章 “Elasticsearch 简介” 进行快速介绍。在我之前的文章 “Elasticsearch:使用最新的 Python client 8.0 来创建索引并搜索”&#…

Pytorch自定义数据集模型训练流程

文章目录Pytorch模型自定义数据集训练流程1、任务描述2、导入各种需要用到的包3、分割数据集4、将数据转成pytorch标准的DataLoader输入格式5、导入预训练模型,并修改分类层6、开始模型训练7、利用训好的模型做预测Pytorch模型自定义数据集训练流程 我们以kaggle竞…

响应式流的核心机制——背压机制

一、响应式流是什么? Reactive Streams 是 2013 年底由 Netflix、Lightbend 和 Pivotal(Spring 背后的公司)的工程师发起的一项计划,响应式流旨在为无阻塞异步流处理提供一个标准。它旨在解决处理元素流的问题——如何将元素流从…

【BP靶场portswigger-客户端14】点击劫持-5个实验(全)

前言: 介绍: 博主:网络安全领域狂热爱好者(承诺在CSDN永久无偿分享文章)。 殊荣:CSDN网络安全领域优质创作者,2022年双十一业务安全保卫战-某厂第一名,某厂特邀数字业务安全研究员&…

Fastdfs分布式文件系统原理浅析

文章目录1、fastdfs文件系统原理简述2、storage server状态2.1 组内新增加一台storage server A时,由系统自动完成已有数据同步,处理逻辑如下:第一步:第二步:第三步:第四步:3、同步时间管理4、B…

[有人@你]请查收你的年终总结报告

嗨,兄dei,我是建模助手。 新年伊始,最近大家想必已经被各大平台的2022年度报告刷屏了。 听歌软件伴你度过的失眠夜,外卖软件拯救你的饥饿时刻,还有某俩宝账单告诉你,其实你是有钱的,只是你看不到…

基于有向图的邻接矩阵计算其割点、割边、压缩图,并用networkx可视化绘制

基于有向图的邻接矩阵计算其割点、割边、压缩图,并用networkx可视化绘制为什么基于邻接矩阵计算图的割点、割边、压缩图实现python代码代码运行效果结论:为什么基于邻接矩阵计算图的割点、割边、压缩图 由于矩阵计算过程,被广泛优化&#xf…

Linux关于 gdb 调试器的使用

坚持看完,结尾有思维导图总结 这里写目录标题debug 和 release 版本gdb 常见命令断点逐行调试和观察变量总结debug 和 release 版本 首先要说的是 ,在 Linux 中 gcc 直接编译是不能进行调试的 而是要在加上 -g 选项才能得到可调试的文件 以下程序用一个…

算法第十二期——BFS-双向广搜

双向广搜 应用场景:有确定的起点s和终点t;把从起点到终点的单向搜索,变换为分别从起点出发和从终点出发的“相遇”问题。操作:从起点s(正向搜索)和终点t(逆向搜索)同时开始搜索,当两个搜索产生…

Spring入门-Spring事务管理

文章目录1,Spring事务管理1.1 Spring事务简介1.1.1 相关概念介绍1.1.2 转账案例-需求分析1.1.3 转账案例-环境搭建步骤1:准备数据库表步骤2:创建项目导入jar包步骤3:根据表创建模型类步骤4:创建Dao接口步骤5:创建Service接口和实现类步骤6:添加jdbc.properties文件步…

数据治理与档案信息资源体系建设

如果要评选大数据或者数字化转型领域中哪个词最让人费解、最讲不清楚,“数据治理(Data Governance)”绝对是候选之一。说实话,笔者到现在也没有完全整明白,因为数据治理包含的范围太广了,可以说是包罗万象&…

高潜人才的自我要求

前言,上次写了个《潜力出众的你有这样的特质吗?》,地址如下:点我查看,这次在写个高潜人才的自我要求。本次以6个纬度来进行分析;3是基本要求,4是追求卓越,看你目前做到了哪个级别&am…

跨平台API对接(Python)的使用

Jenkins 是一个开源的、提供友好操作界面的持续集成(CI)工具,起源于 Hudson(Hudson 是商用的),主要用于持续、自动的构建/测试软件项目、监控外部任务的运行。后端可以利用 Jenkins 对任务进行调度运行:后端可利用 HTT…