win10初探yolox之环境安装与训练自己的数据集

最近被yolox爆屏,加上自己对于yolo系列有太多的情节之前还尝试过yolof,现在出现的yolox还有openvino推理,刚好自己会需要这部分内容,现在就尝试进行对其初步探索。
一、基础配置
cuda 10.1
二、环境搭建
1、安装yolox

git clone git@github.com:Megvii-BaseDetection/YOLOX.git
cd YOLOX
pip3 install -U pip && pip3 install -r requirements.txt
pip3 install -v -e .  # or  python3 setup.py develop

在运行第四行pip3 install -v -e . # or python3 setup.py develop会出现错误:
在这里插入图片描述
解决这个需要在setup.py文件中修改第50行,如下:在这里插入图片描述

2、安装apex
APEX是英伟达开源的,完美支持PyTorch框架,用于改变数据格式来减小模型显存占用的工具。其中最有价值的是amp(Automatic Mixed Precision),将模型的大部分操作都用Float16数据类型测试,一些特别操作仍然使用Float32。并且用户仅仅通过三行代码即可完美将自己的训练代码迁移到该模型。实验证明,使用Float16作为大部分操作的数据类型,并没有降低参数,在一些实验中,反而由于可以增大Batch size,带来精度上的提升,以及训练速度上的提升。
我没有按照官方的教程安装apex,因为按照那个方法出现了错误,我的安装步骤如下:
① 下载apex到本地并解压
下载地址 https://github.com/NVIDIA/apex
② 将解压好的文件放到自己的环境中
我使用的anconda环境找到环境名/Lib/site-packages
③进入环境中的apex文件
pip install -r requirements.txt
④ 安装apex
python setup.py install

3、安装pycocotools
又是一个没按照官方的操作
① pip install cython
② 安装前提是有vc++
下载cocoapi
下载地址https://github.com/cocodataset/cocoapi
③进入pythonapi目录
cd PythonAPI
④ 执行安装命令
python setup.py install
安装报错:
无效的数值参数“/Wno-cpp
解决:
编辑setup.py文件,删除如下图
在这里插入图片描述
三、运行demo
运行demo测试安装环境
1、下载预训练模型
2、执行以下指令

python tools/demo.py image -n yolox-s -c /path/to/your/yolox_s.pth --path assets/dog.jpg --conf 0.25 --nms 0.45 --tsize 640 --save_result --device gpu

-n 是模型的名字
-c 为权重文件地址
–path是测试的图片路径
–conf 置信度阈值
–nms nms的iou阈值
–tsize 测试图片大小
–save_result 是否保存推理结果
只要环境能按照上面部分的搭建这部分是不会出错的。

注:torch 和torchvision版本一定要匹配,以及torch版本要大于等于1.7
后面我会放自己各个包的版本信息
在这里插入图片描述

四、训练自己的数据集
1、数据集准备
官方使用的coco数据集,我就采用了voc数据集,voc数据集的格式如下:

├── data 
│   ├── VOCdevkit
│   │   ├── VOC2007
│   │   │   ├── Annotations #xml文件
│   │   │   ├── JPEGImages #图片
│   │   │   ├── ImageSets
│   │   │   │   ├── Main
│   │   │   │   │   ├── test.txt 
│   │   │   │   │   ├── trainval.txt
1

数据划分代码:

import os
import random

trainval_percent = 0.1
train_percent = 0.9
xmlfilepath = './Exp/Annotations/'
txtsavepath = './Exp/images/'
total_xml = os.listdir(xmlfilepath)

num = len(total_xml)
list = range(num)
tv = int(num * trainval_percent)
tr = int(tv * train_percent)
trainval = random.sample(list, tv)
train = random.sample(trainval, tr)
os.makedirs('./data/VOCdevkit/VOC2007/ImageSets', exist_ok=True)
ftest = open('./data/VOCdevkit/VOC2007/ImageSets/test.txt', 'w')
os.makedirs('./data/VOCdevkit/VOC2007/ImageSets', exist_ok=True)
ftrain = open('./data/VOCdevkit/VOC2007/ImageSets/trainval.txt', 'w')

for i in list:
    name = total_xml[i][:-4] + '\n'
    if i in trainval:
        ftest.write(name)
    else:
        ftrain.write(name)

ftrain.close()
ftest.close()

2、修改代码
修改exps/example/yolox_voc/yolox_voc_s.py改文件具体如下:
在这里插入图片描述
这个地放修改为自己的实际类别数量,不加背景即背景不算一类
在这里插入图片描述
在这里插入图片描述
修改yolox/data/datasets/voc_classes.py文件,修改为自己的类别名:
在这里插入图片描述
3、执行命令进行训练

python tools/train.py -f exps/example/yolox_voc/yolox_voc_s.py -d 1 -b 16 --fp16 -o -c weights/yolox_s.pth

-d 使用多少张显卡训练
-b 批次大小
–fp16 是否开启半精度训练
期间遇到错误如下:
①:

`Original Traceback (most recent call last):
  File "E:\Anaconda3\envs\yolox\lib\site-packages\torch\utils\data\_utils\worker.py", line 198, in _worker_loop
    data = fetcher.fetch(index)
  File "E:\Anaconda3\envs\yolox\lib\site-packages\torch\utils\data\_utils\fetch.py", line 44, in fetch
    data = [self.dataset[idx] for idx in possibly_batched_index]
  File "E:\Anaconda3\envs\yolox\lib\site-packages\torch\utils\data\_utils\fetch.py", line 44, in <listcomp>
    data = [self.dataset[idx] for idx in possibly_batched_index]
  File "d:\code\yolox-main\yolox\data\datasets\datasets_wrapper.py", line 121, in wrapper
    ret_val = getitem_fn(self, index)
  File "d:\code\yolox-main\yolox\data\datasets\mosaicdetection.py", line 91, in __getitem__
    img, _labels, _, _ = self._dataset.pull_item(index)
  File "d:\code\yolox-main\yolox\data\datasets\voc.py", line 145, in pull_item
    target = self.load_anno(index)
  File "d:\code\yolox-main\yolox\data\datasets\voc.py", line 126, in load_anno
    target = self.target_transform(target)
  File "d:\code\yolox-main\yolox\data\datasets\voc.py", line 64, in __call__
    label_idx = self.class_to_ind[name]
KeyError: '1'`

这部分是以为自己在标记数据的时候对其命名为1,而在上面修改类别名的时候是其它类别名,故出错,在YOLOv5中就没有出现这个问题,具体原因下面说。

②:
在这里插入图片描述
修改yolox.data.get_yolox_datadir()函数
在这里插入图片描述

③:RuntimeError: DataLoader worker (pid(s) 17496, 8068, 18732, 8452) exited unexpectedly
在这里插入图片描述

修改exp下的yolox_base.py文件中的self.data_num_workers将其设置为0

基本上是没有什么大的问题了。

五、总结
1、对于环境搭建,自己没有出现太多的问题,因为环境是基础肯定会有问题,只要你耐心去解决就好了。
2、对于训练自己的数据集,在这部分中出现的问题是比较多的,个人感觉仅仅个人感觉,代码是比较混乱的,比如对于coco,voc数据集的处理这部分没有必要强求按照他的那个代码风格来,可以让用户自行处理成相应的格式,或许他是为了更好的让初学者接触,我感觉这大大增大了其烦恼。究其原因是因为代码对其规范要求的比较严格。
3、对于这个效果,个人还没有验证,工程和学术不同的是落地,其效果咋样有待考究,一上午的时间结束稍微终结一下,为后面自己学习部署希望有帮助,希望这个可以很好,属实有点卷了,现在连部署都要告知了。
告辞各位,且行且珍惜。

  • 6
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
Helm是一个开源的Kubernetes应用包管理工具,用于简化Kubernetes应用的部署和管理。通过Helm,我们可以将应用打包为一个可重复使用的Chart,然后在Kubernetes集群中进行部署。 首先,我们需要安装Helm客户端工具。可以从Helm官方网站上下载适合自己操作系统的版本,并根据安装说明进行安装安装完成后,我们可以使用Helm命令行工具来创建一个新的Chart。一个Chart包含了应用的全部资源定义,包括Deployment、Service、Ingress等。我们可以使用helm create命令创建一个新的Chart,并根据需求修改Chart文件夹下的各个模板文件。 在Chart文件夹下,最重要的文件是values.yaml。该文件定义了Chart的默认值,我们可以在部署时通过传入自定义的values文件来覆盖这些默认值。这样,我们可以根据不同环境和需求来定制化应用的部署配置。 在部署之前,我们可以使用helm lint命令来检查Chart是否符合Helm的规范。一旦通过了lint检查,我们就可以使用helm install命令来将应用部署到Kubernetes集群中。 在部署完成后,我们可以使用helm list命令来查看已部署的应用,以及相关的版本信息和状态。如果需要升级应用或回滚到之前的版本,我们可以使用helm upgrade和helm rollback命令。 除了部署应用,Helm还提供了一些其他功能,如搜索和安装Chart仓库中的应用、打包和分享自己的Chart等。通过Helm,我们可以更方便地管理和扩展Kubernetes应用,提高开发和部署的效率。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值