一点就分享系列(实践篇6——上篇)【迟到补发】Yolo-High_level系列算法开源项目融入V8 旨在研究和兼容使用【持续更新】
一点就分享系列(实践篇5-补更篇)[迟到补发]—Yolo系列算法开源项目融入V8旨在研究和兼容使用[持续更新]
题外话
去年我一直复读机式强调High-level在工业界已经饱和的情况,目的是呼吁更多人看准自己,不管是数字孪生交叉领域,还是chatGPT等大模型热点,大家都应该去延申自己的研究方向和工程技能栈,事实证明这判断完全符合趋势,也不是说明基础的检测、分割等任务没有研究和学习的意义,所以今天抽空写一下。言归正传,之所以现在才更博主要原因是去年开始我就接触了一些交叉方向以及快速的工程落地任务,导致个人时间完全没有,所以没有做到春节把代码上传。
在yolov8刚出时候我就加进了”玩具项目github",实不相瞒,我甚至第一时间并没有仔细看V8的Readme和创新点,下意识使然觉得无非就是这些,事实上确实也是,不过出乎我意料的就是anchor-free和新的代码结构,于是打算沿用V5代码风格融进去并完全兼容,而且一直跟检测的同学也会觉得V5代码风格很亲切。一番修改后确实差不多了,但唯独训练的时候发生了问题,后大致定位到是用V5的数据处理结构存在问题,可是同时我身兼多个业务的项目指标,压力拉满,毕竟要以工作业务为主,同时考虑作者习惯不停更新代码,所以我只完全把V8的anchor-free结构和V5的anchor代码风格融合通用了,其余所有的训练和推理部分都是使用的V8代码,命名为YOLO文件夹,可分离使用,这种做法看来是临时的,迫于工作压力我做到这里同时看了官方的参数文件中标注V5数据读取处理是debug的,大概和我估计的问题一致就停了,并且我不确定是否全部整理成V5风格还是V8风格,故还是先暂定这样,近期同步V8仓库做代码相关的整合适配,这些和算法创新无关,然后上传到了项目地址:https://github.com/positive666/yolo_research上,如有使用问题也属正常!可以提出来最好挂iussue上我会尽快解决和回复,那么今天开始更更文章补补欠的债并持续更新优化代码,不过由于工作节奏太快更新会较慢,还望各位读者见谅。
文章目录
- 一点就分享系列(实践篇5-补更篇)[迟到补发]—Yolo系列算法开源项目融入V8旨在研究和兼容使用[持续更新]
- 工程结构目录和总结
- Feature ——概述
- yolov8改动详解
- 网络结构
- 动手修改V5代码适配V8
- 分割模块(补之前V5的分割坑顺便)
- 跟踪模块
工程结构目录和总结
目前代码风格是以model.py为共同定义和解析网络结构为基础,单独拓展yolo/v8 文件夹作为V8部分可独立使用。
项目地址,以V5代码为基础,新添加了临时版本的V8部分:https://github.com/positive666/yolo_research
yolo_research
│ pose
│ └───── ## 关键点检测任务使用
│ ...
│ models ## 存储模型:算子定义和所有模型的yaml结构定义,包含yolov5\yolov7\yolov8
│ └───── cls 分类模型结构
│ pose 关键点模型结构
│ segment 分割模型结构
│ .... 其余是检测部分待整理
│ ....
│ segment
│ └───── ## 分割任务使用
| classify
│ └───── ## 分类任务使用
| tracker
│ └───── ## 跟踪任务使用 Fork V8
│ utils
│ └───── #通用部分代码
| .
| .
| segment ##分割的数据处理操作部分
| yolo
│ └───── v8 ## yolov8 core ,主要包含训练部分和推理使用部分的相关代码
│ └───── .
| cfg ## default.yaml 设置所有V8相关参数
| engine ## 定义基类结构
| utils
| data
| .
| .
| .
| ..其余为YOLO通用代码---
如果耐心看完我开篇的闲言碎语,大概能理解这个目前的结构,且也不是我最终的规划,简而言之:目前在该仓库yolov5—high_level基础上,加入yolov8的部分,保持以前的V5部分,也就是目前我改的逻辑:是所有v5.v8所有的模型结构的定义和解析分还是全部集中在model.py中,但是V8还是在独立的文件下可以单独使用,V5也是,V8的命令内容正常使用,和官方命令一样,也可自己修改用脚本启动。
方式一、比如V8的官方命令解析
yolo task=detect mode=train model=yolov8n.pt args...classify predict yolov8n-cls.yaml args...segment val yolov8n-seg.yaml args...export yolov8n.pt format=onnx args...
也可以直接通过脚本启动后者自己构建调用,如找到对应任务下,需要你进入到cfg/default.yaml中去配置你的参数,比如模型、数据等路径以及超参数。
方式二、在我的项目目录下,可以这样使用
python yolo\v8\detect\train.py
在官方的目录下,可以直接调包
from ultralytics import YOLO# Load a model
model = YOLO("yolov8n.yaml") # build a new model from scratch
model = YOLO("yolov8n.pt") # load a pretrained model (recommended for training)# Use the model
model.train(data="coco128.yaml", epochs=3) # train the model
metrics = model.val() # evaluate model performance on the validation set
#results = model("https://ultralytics.com/images/bus.jpg") # predict on an image
#success = model.export(format="onnx") # export the model to ONNX format
因为V8提供了全新的命令,设计一套yolo的命令格式,方式很简单就是现在最流行的低代码设计,降低使用者门槛。
通过yolo task… model=… arg=… 的格式启动所有任务
Feature ——概述
这种创新点其实老生常谈了,如果你是从21年看我偶尔随写的YOLO修改博客的话,对于算子、结构、LOSS样本匹配的思路应该比较熟悉了,可以看到V8版本在官方GIT上展示出了基于COCO性能的比对
左图展示在COCO数据验证集上的性能指标,说明在精度提升的同时带来了参数量的提升,在常规尺度的n/s/M的模型上参数量增加;
右图展示在COCO数据验证集上Tensorrt的性能指标,A100 显卡上FP16精度推理下的速度展示,总之可以看出V8精度更高,但是相对V5来说牺牲了部分推理速度,但是在如今检测器部署泛滥的年代,这样的速度差异倒是可以忽略。
另外插一句,不知道大家有没有近两年的检测项目,包含V5-6.0版本开始已经不满足于检测,(去年我记得我把顺着V7官方推荐的V5版本的开源关键点检测融进我GIT的那天,我晚上调好,我习惯性看看V5作者的工程优化时候,他就发出来分割代码了 当时就感觉不谋而合 )是经典的基础视觉任务“通杀”的工程化模型,还有开箱即用的Tensorrt等部署代码的工具都是清一色标配,这也能从侧面反应检测、分类、分割等High-level经典任务算法和技术上已经趋于瓶颈,我又来说这个了,没办法,因为去年接触过不少跨领域的东西,感觉目前业界做CV除了纯科研产出论文等,只做检测或者只研究检测远远不够!话呢说回来,基础还是要打好,所以多兼顾就要多牺牲时间,做CV越来越累也正常,V8这次的出现褒贬不一,不管是质疑SOTA技巧的缝合还是泛化性的不足也好,终归也有我们学习的点。
下面,我会尽量详细对于V8版本的一些新变化,原理和代码等做出一些分析展示把,可能短期都更完,因为最近很多工程要做,尽快完成更新,并且我也会额外写出一个如何把V8代码嵌进各位自己修改改进的V5代码中(很多读者是自己在V5上做了改进后适应了自己任务的特定数据集,那么直接引入V8核心部分的程序使用可能会更方便),简单规划总结下,我心中V8的一些核心改动特色。
1. 性能提升并在检测、分类、分割三线任务中加入了最新的跟踪bytetrack等方法。
2. 模型结构变化:核心算子块C3变成C2F,由于增加了不少次shortcut,在深层模型中梯度的问题得到缓解同时,可能有利用特征重用; head部分沿用之前的解耦头,取消掉了objectnetss分支,使用了经典魔改利器之一的Distribution Focal
loss,以积分表示BOX,需要进行解码转换,Anchor-free取消了先验anchor部分,且提供了v5u的一系列anchorfree的V5、v8模型结构。
3. 训练部分 :核心样本匹配策略改为动态匹配Taskaligened分配机制区分正负样本
4. 额外的工程化代码改动和自定以YOLO命令格式
预告下面更新的内容进行详细分析,感兴趣的可以先MARK!读者也可以提议是完全使用V8代码风格,还是保持V5的部分。
yolov8改动详解
网络结构
动手修改V5代码适配V8
分割模块(补之前V5的分割坑顺便)
跟踪模块
相关文章:

一点就分享系列(实践篇6——上篇)【迟到补发】Yolo-High_level系列算法开源项目融入V8 旨在研究和兼容使用【持续更新】
一点就分享系列(实践篇5-补更篇)[迟到补发]—Yolo系列算法开源项目融入V8旨在研究和兼容使用[持续更新] 题外话 去年我一直复读机式强调High-level在工业界已经饱和的情况,目的是呼吁更多人看准自己,不管是数字孪生交叉领域&#…...

buu RSA 1 (Crypto 第一页)
题目描述: 两个文件,都用记事本打开,记住用记事本打开 pub.key: -----BEGIN PUBLIC KEY----- MDwwDQYJKoZIhvcNAQEBBQADKwAwKAIhAMAzLFxkrkcYL2wch21CM2kQVFpY97 /AvKr1rzQczdAgMBAAE -----END PUBLIC KEY-----flag.enc: A柪YJ^ 柛x秥?y…...

Python 二分查找:bisect库的使用
✅作者简介:人工智能专业本科在读,喜欢计算机与编程,写博客记录自己的学习历程。 🍎个人主页:小嗷犬的个人主页 🍊个人网站:小嗷犬的技术小站 🥭个人信条:为天地立心&…...

性能优化之HBase性能调优
HBase是Hadoop生态系统中的一个组件,是一个分布式、面向列存储的内存型开源数据库,可以支持数百万列(MySQL4张表在HBase中对应1个表,4个列)、超过10亿行的数据存储。可用作:冷热数据分离HBase适合作为冷数据…...

图像金字塔,原理、实现及应用
什么是图像金字塔 图像金字塔是对图像的一种多尺度表达,将各个尺度的图像按照分辨率从小到大,依次从上到下排列,就会形成类似金字塔的结构,因此称为图像金字塔。 常见的图像金字塔有两类,一种是高斯金字塔࿰…...

08-Oracle游标管理(定义,打开、获取数据及关闭游标)
目标 1.确定何时需要显示游标2.声明、打开和关闭显示游标3.从显示游标中提取数据4.了解与游标有关的属性5.使用游标FOR循环检索游标中的数据6.在游标FOR循环的子查询中声明游标7.评估使用逻辑运算符结合在一起的布尔条件游标 1、在使用一个PL/SQL块来执行DML语句或只返回一行结…...
Python判断字符串是否包含特定子串的7种方法
目录1、使用 in 和 not in2、使用 find 方法3、使用 index 方法4、使用 count 方法5、通过魔法方法6、借助 operator7、使用正则匹配转自:https://cloud.tencent.com/developer/article/1699719我们经常会遇这样一个需求:判断字符串中是否包含某个关键词…...

aop实现接口访问频率限制
引言 项目开发中我们有时会用到一些第三方付费的接口,这些接口的每次调用都会产生一些费用,有时会有别有用心之人恶意调用我们的接口,造成经济损失;或者有时需要对一些执行时间比较长的的接口进行频率限制,这里我就简…...

Hive---窗口函数
Hive窗口函数 其他函数: Hive—Hive函数 文章目录Hive窗口函数开窗数据准备建表导入数据聚合函数window子句LAG(col,n,default_val) 往前第 n 行数据LEAD(col,n, default_val) 往后第 n 行数据ROW_NUMBER() 会根据顺序计算RANK() 排序相同时会重复,总数不会变DENSE…...
JavaSe第7次笔记
1. C语言里面,NULL是0地址。Java中null和0地址没关系。 2.数组可以做方法的返回值。 3.可以使用变量作为数组的个数开辟空间。 4.断言assert,需要设置。 5.排序:Arrays. sort(array); 6.查找: int index Arrays. binarySea…...
什么是 Service 以及描述下它的生命周期。Service 有哪些启动方法,有 什么区别,怎样停用 Service?
在 Service 的生命周期中,被回调的方法比 Activity 少一些,只有 onCreate, onStart, onDestroy, onBind 和 onUnbind。 通常有两种方式启动一个 Service,他们对 Service 生命周期的影响是不一样的。 1. 通过 startService Service 会经历 onCreate 到 onStart,然后处于运行…...
Redis部署
JAVA安装 mkdir /usr/local/javacd /usr/local/java/wget --no-check-certificate --no-cookies --header "Cookie: oraclelicenseaccept-securebackup-cookie" http://download.oracle.com/otn-pub/java/jdk/8u131-b11/d54c1d3a095b4ff2b6607d096fa80163/jdk-8u13…...

AT32F437制作Bootloader然后实现Http OTA升级
首先创建一个AT32F437的工程,然后发现调试工程配置这里的型号和创建工程选的型号不一致,手动更改一下,使用PW Link下载程序的话还要配置一下pyocd.exe的路径。 打开drv_clk.c文件的调试功能看下系统时钟频率。 项目使用的是AT32F437VMT7芯片&…...
Springboot项目启动初始化数据缓存
1.从Java EE5规范开始,Servlet中增加了两个影响Servlet生命周期的注解, PostConstruct和PreDestroy,这两个注解被用来修饰一个非静态的void()方法,被PostConstruct修饰的方法会在服务器加载Servlet的时候运…...

深度学习必备知识——模型数据集Yolo与Voc格式文件相互转化
在深度学习中,第一步要做的往往就是处理数据集,尤其是学习百度飞桨PaddlePaddle的小伙伴,数据集经常要用Voc格式的,比如性能突出的ppyolo等模型。所以学会数据集转化的本领是十分必要的。这篇博客就带你一起进行Yolo与Voc格式的相互转化&…...

数据、数据资源及数据资产管理的区别
整理不易,转发请注明出处,请勿直接剽窃! 点赞、关注、不迷路! 摘要:数据、数据资源、数据资产 数据、数据资源及数据资产的区别 举例 CRM系统建设完成后会有很多数据,这些数据就是原始数据,业务…...

标度不变性(scale invariance)与无标度(scale-free)概念辨析
文章目录标度标度种类名义标度序级标度等距标度比率标度常用标度方法不足标度不变性标度不变(Scale-invariant)曲线和自相似性(self-similarity)射影几何分形随机过程中的标度不变性标度不变的 Tweedie distribution普适性&#x…...

WMS仓库管理系统解决方案,实现仓库管理一体化
仓库是企业的核心环节,若没有对库存的合理控制和送货,将会造成成本的上升,服务品质的难以得到保证,进而降低企业的竞争能力。WMS仓库管理系统包括基本信息,标签,入库,上架,领料&…...
css常见定位、居中方案_css定位居中
一、 定位分类 1、静态定位 position:static;(默认,具备标准流条件) 2、相对定位 position:relative; 通过 top 或者 bottom 来设置 Y 轴位置 通过 left 或者 right 来设置 X 轴位置 特点: 相对定位不会脱离文档流相对于自…...

【微信小程序】-- 自定义组件 -- 创建与引用 样式(三十二)
💌 所属专栏:【微信小程序开发教程】 😀 作 者:我是夜阑的狗🐶 🚀 个人简介:一个正在努力学技术的CV工程师,专注基础和实战分享 ,欢迎咨询! &…...
[特殊字符] 智能合约中的数据是如何在区块链中保持一致的?
🧠 智能合约中的数据是如何在区块链中保持一致的? 为什么所有区块链节点都能得出相同结果?合约调用这么复杂,状态真能保持一致吗?本篇带你从底层视角理解“状态一致性”的真相。 一、智能合约的数据存储在哪里…...
Python|GIF 解析与构建(5):手搓截屏和帧率控制
目录 Python|GIF 解析与构建(5):手搓截屏和帧率控制 一、引言 二、技术实现:手搓截屏模块 2.1 核心原理 2.2 代码解析:ScreenshotData类 2.2.1 截图函数:capture_screen 三、技术实现&…...

基于距离变化能量开销动态调整的WSN低功耗拓扑控制开销算法matlab仿真
目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.算法仿真参数 5.算法理论概述 6.参考文献 7.完整程序 1.程序功能描述 通过动态调整节点通信的能量开销,平衡网络负载,延长WSN生命周期。具体通过建立基于距离的能量消耗模型&am…...

简易版抽奖活动的设计技术方案
1.前言 本技术方案旨在设计一套完整且可靠的抽奖活动逻辑,确保抽奖活动能够公平、公正、公开地进行,同时满足高并发访问、数据安全存储与高效处理等需求,为用户提供流畅的抽奖体验,助力业务顺利开展。本方案将涵盖抽奖活动的整体架构设计、核心流程逻辑、关键功能实现以及…...
【SpringBoot】100、SpringBoot中使用自定义注解+AOP实现参数自动解密
在实际项目中,用户注册、登录、修改密码等操作,都涉及到参数传输安全问题。所以我们需要在前端对账户、密码等敏感信息加密传输,在后端接收到数据后能自动解密。 1、引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId...

Nuxt.js 中的路由配置详解
Nuxt.js 通过其内置的路由系统简化了应用的路由配置,使得开发者可以轻松地管理页面导航和 URL 结构。路由配置主要涉及页面组件的组织、动态路由的设置以及路由元信息的配置。 自动路由生成 Nuxt.js 会根据 pages 目录下的文件结构自动生成路由配置。每个文件都会对…...

微服务商城-商品微服务
数据表 CREATE TABLE product (id bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 商品id,cateid smallint(6) UNSIGNED NOT NULL DEFAULT 0 COMMENT 类别Id,name varchar(100) NOT NULL DEFAULT COMMENT 商品名称,subtitle varchar(200) NOT NULL DEFAULT COMMENT 商…...

ABAP设计模式之---“简单设计原则(Simple Design)”
“Simple Design”(简单设计)是软件开发中的一个重要理念,倡导以最简单的方式实现软件功能,以确保代码清晰易懂、易维护,并在项目需求变化时能够快速适应。 其核心目标是避免复杂和过度设计,遵循“让事情保…...

【堆垛策略】设计方法
堆垛策略的设计是积木堆叠系统的核心,直接影响堆叠的稳定性、效率和容错能力。以下是分层次的堆垛策略设计方法,涵盖基础规则、优化算法和容错机制: 1. 基础堆垛规则 (1) 物理稳定性优先 重心原则: 大尺寸/重量积木在下…...
React从基础入门到高级实战:React 实战项目 - 项目五:微前端与模块化架构
React 实战项目:微前端与模块化架构 欢迎来到 React 开发教程专栏 的第 30 篇!在前 29 篇文章中,我们从 React 的基础概念逐步深入到高级技巧,涵盖了组件设计、状态管理、路由配置、性能优化和企业级应用等核心内容。这一次&…...