一点就分享系列(实践篇6——上篇)【迟到补发】Yolo-High_level系列算法开源项目融入V8 旨在研究和兼容使用【持续更新】

news2024/11/16 11:41:48

一点就分享系列(实践篇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的分割坑顺便)

跟踪模块

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

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

相关文章

React全家桶(一)

课程内容 1、React基础 2、React Hooks 3、React路由 4、React Redux 5、组件库 6、Immutable 7、Mobx 8、ReactTS 9、单元测试 10、dvaumi 一、React介绍 1、React起源与发展 2、React与传统MVC的关系 3、React的特性 4、虚拟DOM 二、create-react-app 1、全局安装…

数学小课堂:数学难题的意义(善用工具和跳出圈外)

文章目录 引言I 几何学中的古典难题(几何作图题)1.1 伽罗瓦1.2 伽罗瓦理论II 数学难题的启发2.1 跳出圈外2.2 工具的作用引言 毕达哥拉斯定理做保障:任何自然数的平方根都可以用圆规和直尺作出来 高斯用直尺和圆规作图解决正十七边形画法的问题,正十七边形的边长计算出来…

如何利用海外主机服务提高网站速度?

网站速度是任何在线业务成功的关键。快速的网站速度可以让用户更快地访问您的网站,增加页面浏览量。对于拥有全球用户的网站而言,选择一个海外主机服务商是提高网站速度的有效方法之一。下面是一些利用海外主机服务(如美国主机、香港主机)提高网站速度的…

Job System

01-C#Job System概述官方文档 Unity C# Job System允许用户编写与Unity其余部分良好交互的多线程代码,并使编写正确的代码变得更加容易。编写多线程代码可以提供高性能的好处。其中包括显着提高帧速率和延长移动设备的电池寿命。C&#xff03…

iOS开发-bugly符号表自动上传发布自动化shell

这里介绍的是通过build得到的app文件和dSYM文件来打包分发和符号表上传。 通过Archive方式打包和获得符号表的方式以后再说。 一:bugly工具jar包准备 bugly符号表工具下载地址:(下载完成后放入项目目录下,如不想加入git可通过gitIgnore忽略…

doPost的实际使用

目录 前言 一、doPost是什么? 二、使用步骤 1.doPost的请求方法 2.需要引入依赖 总结 前言 本章主要记录一下doPost的请求公用方法的使用。 一、doPost是什么? 它其实就是一个http的post请求方式。 二、使用步骤 1.doPost的请求方法 当我们系…

使用Endnote自定义参考文献格式

使用Endnote自定义参考文献格式 使用Endnote插入参考文献,若要设置期刊指定格式或自己想要的参考格式,使用EndNote自定义方法,步骤如下。 注:有的期刊会给出EndNote的格式文件,那样直接导入就行。 文章目录使用Endnot…

Python+Yolov8目标识别特征检测

Yolov8目标识别特征检测如需安装运行环境或远程调试&#xff0c;见文章底部个人QQ名片&#xff0c;由专业技术人员远程协助&#xff01;前言这篇博客针对<<Yolov8目标识别特征检测>>编写代码&#xff0c;代码整洁&#xff0c;规则&#xff0c;易读。 学习与应用推荐…

毕业设计常用模块之温湿度模块DHT11模块使用

DHT11是一款可以测量温度数据和湿度数据的传感器 产品特点 暖通空调、除湿器、农业、冷链仓储、测试及检测设备、消费品、汽车、自动控制、数据记录器、气 象站、家电、湿度调节器、医疗、其他相关湿度检测控制 外形尺寸 第3管脚&#xff1a;NC 是没有用的 典型电路 通信方式…

表格中的table-layout属性讲解

表格中的table-layout属性讲解 定义和用法 tableLayout 属性用来显示表格单元格、行、列的算法规则。 table-layout有三个属性值&#xff1a;auto、fixed、inherit。 fixed&#xff1a;固定表格布局 固定表格布局与自动表格布局相比&#xff0c;允许浏览器更快地对表格进行布…

excel 一对多数据查询公式 经典用法

所谓一对多&#xff0c;就是符合某个指定条件的有多个结果&#xff0c;要把这些结果都提取出来。 下面咱们就说说一对多查询的典型用法&#xff0c;先看数据源&#xff1a; A~D列是一些员工信息&#xff0c;要根据F2单元格指定的学历&#xff0c;提取出所有“本科”的人员姓名…

“一网统管”视频融合平台EasyCVR增加播放限制功能,支持全局及自定义设置视频播放时长

EasyCVR平台可在复杂的网络环境中&#xff0c;将分散的各类视频资源进行统一汇聚、整合、集中管理&#xff0c;实现视频资源的鉴权管理、按需调阅、全网分发、智能分析等。平台可支持多协议、多类型的设备接入&#xff0c;包括国标GB28181、RTMP、RTSP/Onvif、海康SDK、大华SDK…

网络 | 网络层讲解 | IP协议 | 分片处理与网段划分

文章目录前言IP报文格式分片处理分片对传输层的影响网段划分路由转发中的路由表前言 tcp作为传输层的典型协议&#xff0c;保证了报文传输的可靠性&#xff0c;使每份报文完整的传输。在传输层之下的网络层解决的是传输能力的问题&#xff0c;它使得数据可以发送到对方主机&am…

Nginx-http-flv-module流媒体服务器搭建+模拟推流+flv.js在前端html和Vue中播放HTTP-FLV视频流

场景 Windows上搭建Nginx RTMP服务器并使用FFmpeg实现本地视频推流&#xff1a; Windows上搭建Nginx RTMP服务器并使用FFmpeg实现本地视频推流_win nginx-rtmp最新版_霸道流氓气质的博客-CSDN博客 Vue中使用vue-video-player和videojs-flash插件实现播放rtmp视频文件流&…

类型转换(C++)

文章目录1. 为什么需要类型转换2. C语言的类型转换2.1 隐式类型转换2.2 显式类型转换2.3 特点3. C的类型转换3.1 static_cast3.2 reinterpret_cat3.3 const_cast3.4 dynamic_cast转型向下转型的安全问题3.5 explicit4. RTTI5. 常见题目1. 为什么需要类型转换 类型转换是将一个…

数据库-基础篇-8-事务

事务简介&#xff1a;事务是一组操作的集合&#xff0c;它是一个不可分割的工作单位&#xff0c;事务会把所有的操作作为一个整体一起向系统提交或撤销操作请求&#xff0c;即这些操作要么同时成功要么同时失败。 默认MySQL的事务是自动提交的&#xff0c;也就是说&#xff0c…

S3C2440移植Linux4.19.275内核以及过程中遇到的问题

目录 1 问题一&#xff1a;内核移植时MTD分区问题 2 问题二&#xff1a;uboot的MTDPARTS_DEFAULT定义的MTD分区&#xff0c;bootargs中的文件系统分区&#xff0c;内核的mtd_partition smdk_default_nand_part定义的分区&#xff0c;三者要对应起来 3 问题三&#xff1a;ubo…

kafka:linux 安装 kafka集群

kafka运行依赖于 jdk、zookeeper&#xff0c;kafka可视化工具选择kafka-eagle。所以要装的组件有&#xff1a;jdk、zookeeper、kafka、kafka-eagle一、安装jdk下载linux版本的jdk包&#xff0c;比如&#xff1a;jdk-8u192-linux-x64.tar.gz。将其复制到 /opt 目录下并解压&…

设计模式(十八)----行为型模式之策略模式

1、概述 先看下面的图片&#xff0c;我们去旅游选择出行模式有很多种&#xff0c;可以骑自行车、可以坐汽车、可以坐火车、可以坐飞机。 作为一个程序猿&#xff0c;开发需要选择一款开发工具&#xff0c;当然可以进行代码开发的工具有很多&#xff0c;可以选择Idea进行开发&a…

第十届省赛——7外卖店优先级

题目&#xff1a;“饱了么”外卖系统中维护着N 家外卖店&#xff0c;编号1~N。每家外卖店都有一个优先级&#xff0c;初始时(0 时刻) 优先级都为0。每经过1 个时间单位&#xff0c;如果外卖店没有订单&#xff0c;则优先级会减少1&#xff0c;最低减到0&#xff1b;而如果外卖店…