YOLOX算法调试记录

YOLOX是在YOLOv3基础上改进而来,具有与YOLOv5相媲美的性能,其模型结构如下:

在这里插入图片描述
由于博主只是要用YOLOX做对比试验,因此并不需要对模型的结构太过了解。
先前博主调试过YOLOv5,YOLOv7,YOLOv8,相比而言,YOLOX的环境配置是类似的,但其参数设置太过分散,改动比较麻烦,就比如epoch这些参数竟然要放到yolox_base.py文件中去继承,而不是直接在train.py中指定。话不多说,我们开始调试过程。

环境配置

YOLOX的调试过程基本与YOLOv5类似,不同之处在于需要进行一个安装过程。
即执行:

python setup.py develop

否则在运行是会提示找不到yolox文件

在这里插入图片描述

运行成功后结果如下,值得注意的是,博主在本地很难成功,但在服务器上却很容易。

在这里插入图片描述

随后便是conda环境配置过程,基本与YOLOv5一致,可以直接使用命令配置:

conda create -n yolox python=3.8
source activate yolox
pip install -r requirements.txt

数据集配置

YOLOX使用的数据集是COCO,但不同在于其训练与测试中没有给出参数进行指定,而是直接写在了数据集读取文件中,我们只需要按照其要求修改目录即可,将数据集放到datasets/COCO文件夹下即可,当然也可以像博主这样创建软连接:

ln -s /data/datasets/coco/ /home/ubuntu/outputs/yolox/YOLOX-main/datasets/COCO/

但这种方法却一直报错:

File "/home/ubuntu/outputs/yolox/YOLOX-main/yolox/data/datasets/datasets_wrapper.py", line 177, in __del__
if self.cache and self.cache_type == "ram":
AttributeError: 'COCODataset' object has no attribute 'cache'

没办法,只能把数据集复制一份到这个目录了。
随后运行报错:

assert img is not None, f"file named {img_file} not found"
AssertionError: file named /home/ubuntu/outputs/yolox/YOLOX-main/datasets/COCO/val2017/000000567197.jpg not found

仔细一看原来是目录结构出了问题,没有images这级目录,去掉该目录即可。最终的目录结构为:

在这里插入图片描述

训练模型

 <class 'torch.autograd.variable.Variable'>
RuntimeError: FIND was unable to find an engine to execute this computation

这是因为博主安装环境时默认安装torch为2.0,导致出错。换个torch版本即可:

conda install pytorch==1.12.0 torchvision==0.13.0 torchaudio==0.12.0 cudatoolkit=11.6 -c pytorch -c conda-forge

随后需要修改几个参数,首先是指定模型名称,博主使用的是yolox-l

parser.add_argument("-n", "--name", type=str, default="yolox-l", help="model name")

随后设置yolox-l的配置文件,–f代表从该文件读取,然后修改对应文件中的参数:

parser.add_argument(
        "-f",
        "--exp_file",
        default="/home/ubuntu/outputs/yolox/YOLOX-main/exps/default/yolox_l.py",
        type=str,
        help="plz input your experiment description file",
    )

修改/home/ubuntu/outputs/yolox/YOLOX-main/exps/default/yolox_l.py,num_class设置错了,博主习惯了DETR类模型,加上了背景类,实际上应该只有3类。

在这里插入图片描述

class Exp(MyExp):
    def __init__(self):
        super(Exp, self).__init__()
        self.depth = 1.0
        self.width = 1.0
        self.exp_name = os.path.split(os.path.realpath(__file__))[1].split(".")[0]
        
        # Define yourself dataset path
        self.train_ann = "instances_train2017.json"
        self.val_ann = "instances_val2017.json"

        self.num_classes = 4

        self.max_epoch = 1
        self.data_num_workers = 8
        self.print_interval=1
        self.eval_interval = 1

随后便是batch-szie参数了,YOLOX所占用显存还是比较大的,batch-size设置为6。

在这里插入图片描述
训练时间还是蛮快的,1个epoch大概45分钟左右。训练1个epoch的结果,由于没有使用预训练模型,值很低。还有一个问题,便是num_class设置错了,博主习惯了DETR类模型,加上了背景类,实际上应该只有3类。

在这里插入图片描述

预训练模型微调

我们可以使用YOLOX-L训练好的模型当作预训练模型,在该模型上面进行微调,从而能够快速收敛,训练好的num_class=80,我们保持原样即可,即num_class=3,模型会自动处理类别不一致的问题。使用预训练模型后,迭代速度明显加快,并且精度也迅速提升。

parser.add_argument("-c", "--ckpt", default="/home/ubuntu/outputs/yolox/YOLOX-main/yolox_l.pth.tar", type=str, help="checkpoint file")

使用预训练模型做微调后训练一个epoch的结果。
在这里插入图片描述

评估模型

完成eval.py的参数配置:

python -m yolox.tools.eval -n  yolox-s -c yolox_s.pth -b 64 -d 8 --conf 0.001 [--fp16] [--fuse]

当然也可以使用参数,主要修改这两个参数即可

在这里插入图片描述

随后运行python eval.py命令即可,这里发现使用下载的权重文件会报错,于是博主自己训练了1个epoch并保存权重结果,使用这个则是没有问题的,文件保存在YOLOX_outputs中。但似乎发现了一个问题,那就是值好低呀。

在这里插入图片描述

模型推理

首先我们下载已经训练完成的模型,博主这里选择的是YOLOX-L,值得注意的是,下载这个文件需要翻墙。下载的权重文件为tar文件,因此需要解压:

tar -xvf yolox_l.pth.tar

但没想到却报错了:

tar: This does not look like a tar archive
tar: Skipping to next header
tar: Exiting with failure status due to previous errors

这是个BUG
解决办法:

gzip -d xxxx.tar.gz (对于.tar.gz文件的处理方式)
tar -xf xxxx.tar    (对于.tar文件处理方式)

依旧不行,没办法,博主只能把其后缀名改为zip,然后使用unzip的方式解压该文件。但解压后却是一个文件夹,这与博主先前所见到的pth文件不同,果然在运行时报错:

super().init(open(name, mode)) IsADirectoryError: [Errno 21] Is a
directory: ‘/home/ubuntu/outputs/yolox/YOLOX-main/yolox_l.pth’

原来YOLOX的权重文件是不需要解压的,直接用即可,即在指定文件时为:

parser.add_argument("-c", "--ckpt", default="/home/ubuntu/outputs/yolox/YOLOX-main/yolox_l.pth.tar", type=str, help="ckpt for eval")

,指定size=224,Demo.py中给出了其参数量与计算量,
在这里插入图片描述

推理结果如下:

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

RS232、RS422、RS485硬件及RS指令、RS2指令应用知识学习

RS232、RS422、RS485硬件及RS指令、RS2指令应用知识学习 一、串行&#xff08;异步/同步)通讯、并行通讯、以太网通讯 二、单工通讯/半双工通讯/双工通讯 三、常用硬件接口&#xff08;工业上基本是RS485两线制的接线&#xff09; 常用硬件接口RS232/RS422/RS485&#xff0c;…

C#与西门子PLC1500的ModbusTcp服务器通信2--ModbusTcp协议

Modbus TCP是近年来越来越流行的工业控制系统通信协议之一&#xff0c;与其他通信协议相比&#xff0c;Modbus TCP通信速度快、可靠性高、兼容性强、适用于模拟或数字量信号的传输&#xff0c;阅读本文前你必须比较熟悉Modbus协议&#xff0c;了解tcp网络。 一、什么是Modbus …

[golang gin框架] 46.Gin商城项目-微服务实战之后台Rbac客户端调用微服务权限验证以及Rbac微服务数据库抽离

一. 根据用户的权限动态显示左侧菜单微服务 1.引入 后台Rbac客户端调用微服务权限验证功能主要是: 登录后显示用户名称、根据用户的权限动态显示左侧菜单,判断当前登录用户的权限 、没有权限访问则拒绝,参考[golang gin框架] 14.Gin 商城项目-RBAC管理,该微服务功能和上一节[g…

攻防世界-simple_php

原题 解题思路 flag被分成了两个部分&#xff1a;flag2&#xff0c;flag2。获得flag1需要满足变量a0且变量a≠0&#xff0c;这看起来不能实现&#xff0c;但实际上当变量a的值是字符时&#xff0c;与数字比较会发生强制类型转换&#xff0c;所以a为字符型数据即可&#xff0c;变…

掌控未知:项目中如何巧妙应对突发与紧急

引言 在项目管理的领域中&#xff0c;每一个项目都伴随着一系列的不确定性和挑战。这些不确定性可能源于外部环境的变化、团队内部的动态或技术的快速迭代。而在这些不确定性中&#xff0c;突发和紧急事件尤为考验项目经理的应变能力和决策智慧。那么&#xff0c;如何在项目中…

数据结构<树和二叉树>顺序表存储二叉树实现堆排

✨Blog&#xff1a;&#x1f970;不会敲代码的小张:)&#x1f970; &#x1f251;推荐专栏&#xff1a;C语言&#x1f92a;、Cpp&#x1f636;‍&#x1f32b;️、数据结构初阶&#x1f480; &#x1f4bd;座右铭&#xff1a;“記住&#xff0c;每一天都是一個新的開始&#x1…

Verilog中的 条件语句\多路分支语句\循环语句

Verilog中的条件语句\多分支语句\循环语句 文章目录 Verilog中的条件语句\多分支语句\循环语句一、背景二、if-else2.1 标准结构2.2 例子 三、case-endcase3.1 标准结构3.2 例子3.2.1 三路选择器的case部分&#xff0c;如下&#xff1a;3.2.2 casez的四路选择器&#xff0c;如下…

论文学习——PixelSNAIL:An Improved Autoregressive Geenrative Model

文章目录 引言论文翻译Abstract问题 Introduction第一部分问题 第二部分问题 Model Architecture网络结构第一部分问题第二部分问题 Experiments实验问题 Conclusion结论问题 总结参考 引言 这篇文章&#xff0c;是《PixelSNAIL:An Improved Autoregressive Geenrative Model》…

电脑上安装,多版本node

手上有一个vue3的项目&#xff0c;sass配置如下图所示&#xff1a; 安装了Python3.10和node 16.14.0&#xff0c;项目能正常install 跟run。 因工作需要&#xff0c;收上有一个vue2的项目&#xff0c;sass配置如下图所示&#xff1a; 执行npm intsall 的时候一直报Python2找不…

Influxdb数据库(centos7)

Influxdb数据库 1、简介与使用场景 简介 InfluxDB是一个由InfluxData开发的开源时序型数据库&#xff0c;专注于海量时序数据的高性能读、高性能写、高效存储与实时分析等&#xff0c;在DB-Engines Ranking时序型数据库排行榜上排名第一&#xff1a; InfluxDB广泛应用于DevOps…

ElasticSearch索引库、文档、RestClient操作

文章目录 一、索引库1、mapping属性2、索引库的crud 二、文档的crud三、RestClient 一、索引库 es中的索引是指相同类型的文档集合&#xff0c;即mysql中表的概念 映射&#xff1a;索引中文档字段的约束&#xff0c;比如名称、类型 1、mapping属性 mapping映射是对索引库中文…

MyBatis入门配置及CURD实现

目录 一、MyBatis简介 1. 什么是 MyBatis ? 2. MyBatis的特性 3. 什么是持久层框架&#xff1f; 二、MyBatis环境配置 2.1 创建maven工程 2.2 导入相关pom依赖 2.3 导入jdbc配置文件 2.4 Mybatis相关插件安装 3.5 Mybatis-cfg.xml 核心配置 2.6 引入Log4j2日志文件…

在项目中如何解除idea和Git的绑定

在项目中如何解除idea和Git的绑定 1、点击File--->Settings...(CtrlAltS)--->Version Control--->Directory Mappings--->点击取消Git的注册根路径&#xff1a; 2、回到idea界面就没有Git了&#xff1a; 3、给这个项目初始化 这样就可以重新绑定远程仓库了&#x…

前端vue自定义柱形图 选中更改柱形图颜色及文字标注颜色

随着技术的发展&#xff0c;开发的复杂度也越来越高&#xff0c;传统开发方式将一个系统做成了整块应用&#xff0c;经常出现的情况就是一个小小的改动或者一个小功能的增加可能会引起整体逻辑的修改&#xff0c;造成牵一发而动全身。 通过组件化开发&#xff0c;可以有效实现…

船舶法兰盘法兰管件3D扫描尺寸测量|三维扫描检测|CAV测量-CASAIM

第一章 服务背景 船舶建造多采用分段建造法&#xff0c;即将零件、预装好的部件在胎架上组合焊接成分段或总段&#xff0c;然后由船台装配成整船的建造方法。而当船体合拢组装时&#xff0c;在船体上遍布着各种各样的管道&#xff0c;这些管道都需要互相完全适配以确保船体安装…

第8章:集成学习

个体与集成 同质&#xff1a;相同的基学习器&#xff0c;实现容易&#xff0c;但是很难保证差异性。异质&#xff1a;不同的基学习器&#xff0c;实现复杂&#xff0c;不同模型之间本来就存在差异性&#xff0c;但是很难直接比较不同模型的输出&#xff0c;需要复杂的配准方法。…

python基础5——正则、数据库操作

文章目录 一、数据库编程1.1 connect()函数1.2 命令参数1.3 常用语句 二、正则表达式2.1 匹配方式2.2 字符匹配2.3 数量匹配2.4 边界匹配2.5 分组匹配2.6 贪婪模式&非贪婪模式2.7 标志位 一、数据库编程 可以使用python脚本对数据库进行操作&#xff0c;比如获取数据库数据…

前后端分离------后端创建笔记(09)密码加密网络安全

本文章转载于【SpringBootVue】全网最简单但实用的前后端分离项目实战笔记 - 前端_大菜007的博客-CSDN博客 仅用于学习和讨论&#xff0c;如有侵权请联系 源码&#xff1a;https://gitee.com/green_vegetables/x-admin-project.git 素材&#xff1a;https://pan.baidu.com/s/…

Pixar、Adobe 和苹果等成立 OpenUSD 联盟推行 3D 内容开放标准

导读Pixar、Adobe、Apple、Autodesk 与 NVIDIA 联手 Linux 基金会旗下的联合开发基金会&#xff08;JDF&#xff09;宣布建立 OpenUSD 联盟&#xff08;AOUSD&#xff09;以推行 Pixar 创建的通用场景描述技术的标准化、开发、进化和发展。 联盟寻求通过推进开放式通用场景描述…

Crimson:高性能,高扩展的新一代 Ceph OSD

背景 随着物理硬件的不断发展&#xff0c;存储软件所使用的硬件的情况也一直在不断变化。 一方面&#xff0c;内存和 IO 技术一直在快速发展&#xff0c;硬件的性能在极速增加。在最初设计 Ceph 的时候&#xff0c;通常情况下&#xff0c;Ceph 都是被部署到机械硬盘上&#x…