IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> 深入浅出Yolox之自有数据集训练超详细教程 -> 正文阅读

[Python知识库]深入浅出Yolox之自有数据集训练超详细教程

随着旷视科技发布Yolox的论文和代码后,Yolox得到了广泛的关注。

但由于训练代码和之前的Yolov3、Yolov4、Yolov5的代码都不相同。

且代码中的训练案例,以COCO和VOC格式为基准,和平时大家标注的文件,并不是完全相同的格式。

而且训练自有数据的讲解流程,很多人不太熟悉。

因此大白以自有标注的人头数据集为案例,一步步和大家一起学习,整体的训练和测试全流程。

PS:大白将代码文件、网络权重、数据集划分代码和人头数据集,都整理汇总,可点击查看下载


1 深入浅出Yolo核心基础完整讲解

当然了解训练和测试流程,我们还需要了解其相关的原理。

大白这里列出之前写的Yolo相关的文章,可以对应查看学习:

① Yolov3资料

【视频】深入浅出Yolov3(上)深入浅出Yolov3(下)

② Yolov4资料

【视频】深入浅出Yolov4(上)深入浅出Yolov4(下)

【文章】《深入浅出Yolo系列之Yolov4核心基础知识完整讲解》

③ Yolov5资料

【文章】《深入浅出Yolo系列之Yolov5核心基础知识完整讲解》

④ Yolox资料

【文章】:《深入浅出Yolo系列之Yolox核心基础知识完整讲解》-即将发布

2 Yolox代码环境搭建

在Yolox代码训练之前,我们先下载Yolox代码,将测试环境搭建起来。

测试的Demo跑通了,训练的环境也就没问题了。

2.1 下载Yolox代码

Yolox代码链接:https://github.com/Megvii-BaseDetection/YOLOX

2.2 搭建测试环境

大白的电脑系统为Ubuntu 16.04版本。

而Yolox测试环境的搭建,其实在代码中的,README.md中“Quick Start”这部分。
在这里插入图片描述

为了大家更简单入手,下面大白一步步演示一下:

首先为了测试环境更加独立,大白以conda为例,新建一个Yolox环境。

(1) 新建一个Conda环境

输入代码:conda create -n Yolox_3.7 python=3.7

在这里插入图片描述

Python为3.7版本,名字为Yolox_3.7的Conda环境,新建完成。

在这里插入图片描述

(2) 进入Conda环境

输入代码:conda activate Yolox_3.7,进入Conda环境中,并到下载好的YOLOX文件夹下。

在这里插入图片描述

(3) 安装代码依赖的库文件

输入代码:pip3 install -U pip && pip3 install -r requirements.txt

在这里插入图片描述

即可下载好,代码所依赖的一些库文件。

在这里插入图片描述

(4) 通过setup.py安装一些库文件

输入代码:python3 setup.py develop

在这里插入图片描述

(5) 下载apex文件

输入代码:git clone https://github.com/NVIDIA/apex

可以将apex所有文件下载到YOLOX文件夹中,不过大白网络原因,一直无法下载,所以大白先直接下载好apex文件,解压放到YOLOX中。

大白这里也将apex放到数据集的网盘中,大家也可以点击下载。

在这里插入图片描述

(6) 安装apex文件

输入代码:
cd apex
sudo pip3 install -v --disable-pip-version-check --no-cache-dir --global-option="–cpp_ext" --global-option="–cuda_ext" ./

在这里插入图片描述

7) 下载pycocotools

输入代码:pip3 install cython

在这里插入图片描述

再输入代码:

pip3 install ‘git+https://github.com/cocodataset/cocoapi.git#subdirectory=PythonAPI’

在这里插入图片描述

2.3 代码测试:Demo效果测试

2.3.1 下载Yolox_s.pth文件

搭建好环境后,就可以下载官方的预训练模型,对图片进行测试了。

预训练权重的下载链接,在官方代码的说明中。

我们先下载Yolox_s.pth文件,尝试测试效果。

在这里插入图片描述

下载好yolox_s.pth.tar后,放到YOLOX代码的文件夹下:

在这里插入图片描述

2.3.2 Demo测试

使用代码中自带的图片,进行Demo测试。

在YOLOX文件夹的终端页面输入:

python3 tools/demo.py image -n yolox-s -c yolox_s.pth.tar --path assets/dog.jpg --conf 0.3 --nms 0.5 --tsize 640 --save_result --device [gpu]

在这里插入图片描述

YOLOX的代码中,会新建一个YOLOX_outputs文件夹,在其中的yolox_s/vis_res/,可以看到带有检测效果的图片。

在这里插入图片描述

到此Yolox的测试环境,以及测试效果都实现了,下面我们再进行Yolox的自有数据集训练。

3 Yolox自有数据集训练

3.1 数据集准备:标注数据

在数据集中,大白采用教室场景下的一个人头数据集,和大家一起尝试整个流程。

① 标注的工具:采用Labelimg标注软件

② 标注的图片:3000张人头图片

③ 标签的类别:head。

④ 下载链接:点击下载

在这里插入图片描述

3.2 数据集准备:训练&验证集划分

3.2.1 数据集介绍

在这里插入图片描述
当下载好人头数据集后,可以看到head的数据集文件夹,数据集只有一个标签:head(人头)。

在这里插入图片描述

进入head文件夹中,其中包含两个文件夹:

① JPEGImages文件夹:数据集的图片

② Annotations文件夹:与图片对应的所有xml文件。

将文件夹的结构展开,即下图这样的排布:

在这里插入图片描述

我们前面说明,总共有3000张图片,即有对应的3000个xml文件。

3.2.2 模仿VOC格式排布

Yolox的代码中有VOC、和COCO两个数据集加载的格式,这里大白主要演示VOC加载的方式。

那么我们首先看一下VOC格式的分布:

在这里插入图片描述

在VOC这些文件夹中,我们主要用到:

① JPEGImages文件夹:数据集图片

② Annotations文件夹:与图片对应的xml文件

③ ImageSets/Main文件夹:将数据集分为训练集和验证集,因此产生的train.txt和val.txt。

从Voc的文件夹排布,和head的文件夹排布,可以看出:还缺少一个ImageSets/Main文件夹。

因此在head文件夹中,新建一个ImageSets文件集,再在其中新建一个Main子文件夹。

在这里插入图片描述

即得到下图这样的文件夹结构:

在这里插入图片描述

3.2.3 划分训练集和验证集

因为自有标注好的图片数据,都是放在一起的。

而训练过程中,需要划分为训练集验证集

因此还需要编写脚本,将数据集分为训练集和验证集,并且生成对应的train.txt,和val.txt,放在Main文件夹中。

这里大白贴上写的划分数据集的代码,当然,代码文件也在上面的数据集下载处,点击此处进行下载。

在这里插入图片描述

下载好代码后,将脚本文件train_val_data_split.py放在JPEGImages同路径下

在这里插入图片描述

并进行运行后,在ImageSets/Main文件夹下,就会生成对应的train.txt和val.txt。

主要注意的是:代码中,训练集和验证集的比例,为9:1,大家也可以自行调整。

在这里插入图片描述

3.3 训练准备:修改训练配置参数

3.3.1 修改类别标签和数量

① 修改类别标签

因此前面自有的数据集只有一个类别,head。

将yolox/data/datasets/voc_classes.py中的标签信息,进行修改。

在这里插入图片描述

注意:类别后面都要加逗号,例如“head”后面加了一个逗号“,”。

② 修改类别数量

(1)修改exps/example/yolox_voc/yolox_voc_s.py中的self.num_classes

在这里插入图片描述

因为只有head一种,所以self.num_classes=1。

在这里插入图片描述

(2)修改yolox/exp/yolox_base.py中的self.num_classes

在这里插入图片描述

将self.num_classes=80修改为1。

在这里插入图片描述

3.3.2 修改训练集信息

(1)修改exps/example/yolox_voc/yolox_voc_s.py中的VOCDection。

在这里插入图片描述

因为是自己的数据集,所以修改为:

在这里插入图片描述

data_dir是前面3.2节中head的绝对路径,images_sets修改为train。

此外,max_labels,表示图片最多的目标数量,这里大白因为使用的是人头,数量较多,所以改为100。

(2)修改yolox/data/datasets/voc.py中,VOCDection函数中的读取txt文件。

在这里插入图片描述

因为自有的数据集,没有year年代的信息,所以修改为:

在这里插入图片描述

3.3.3 修改验证集信息

修改exps/example/yolox_voc/yolox_voc_s.py中的get_eval_loader函数。

在这里插入图片描述

因为是自己的验证数据集,所以修改为:

在这里插入图片描述

data_dir是前面3.2节中head的绝对路径,images_sets修改为val。

3.3.4 修改不同的网络结构

Yolox_s网络为例,比如在exps/default/yolox_s.py中,self.depth=0.33,self.width=0.5。

和Yolov5中的不同网络调用方式一样。

在这里插入图片描述

为了统一不同的网络结构,继续修改exps/example/yolox_voc/yolox_voc_s.py中的,self.depth和self.width。

在这里插入图片描述

再修改yolox/exp/yolox_base.py中的,self.depth和self.width。

在这里插入图片描述

3.3.5 修改其他相关

(1)删除year等信息

因为自有数据集中,没有year信息,所以需要删除。

即修改yolox/data/datasets/voc.py中,_get_voc_results_file_template函数。
在这里插入图片描述

所以将第三行的year等删除,如下图所示:

在这里插入图片描述

在训练过程中,在原始的head数据集中,会生成一个results的文件夹,保存历史信息。

在这里插入图片描述

(2)修改验证epoch的数量

目前代码中是训练迭代10个epoch,再对验证集做1次验证,但大白想每迭代1个epoch,即做一个验证,及时看到效果。

参数在yolox/exp/yolox_base.py的class Exp中:

在这里插入图片描述

修改为:

在这里插入图片描述

设置为每迭代一个epoch,即使用验证集验证一次。

(3)修改验证时的相关信息

主要对读取验证信息的相关代码进行调整,代码在yolox/data/datasets/voc.py中_do_python_eval函数中。

① 因为自有数据集没有year信息,所以将其中的rootpath和name:

在这里插入图片描述

修改为:
在这里插入图片描述

② 因为没有year信息,所以将其中的cachedir:

在这里插入图片描述

修改为:

在这里插入图片描述

在训练过程中,在原始的head数据集中,会生成一个annotations_cache的文件夹,保存历史信息。

在这里插入图片描述

③ 因为没有year信息,所以修改use_07_metric的信息。

在这里插入图片描述

修改为:

在这里插入图片描述

3.4 Yolox训练及常见问题

3.4.1 开始训练

(1)终端训练

将下载好的yolox_s.pth.tar放到YOLOX文件夹中,打开终端,在终端中输入:

python3 tools/train.py -f exps/example/yolox_voc/yolox_voc_s.py -d 0 -b 64 -c yolox_s.pth.tar

在这里插入图片描述

(2)Pycharm训练

代码运行时,常常需要Debug的方式,进行调试执行。

所以可以修改train.py的几个配置参数,采用Debug或者Run的方式进行执行。

主要需要修改以下参数:

① batch-size

根据自己机器的配置,设置batch-size的参数,比如大白这里设置的64。

在这里插入图片描述

② devices参数

如果GPU服务器只有1张卡,将devices的default修改为0。

在这里插入图片描述

③ exp_file参数

将exp_file的default修改为yolox_voc_s.py的路径(如代码版本更新,可重置路径)。

在这里插入图片描述

④ ckpt参数

如果使用预训练权重,将ckpt的default修改为模型权重的路径。

在这里插入图片描述

3.4.2 常见问题

在运行tools/train.py时,可能会出现以下问题,如没有可以跳过:

问题1:apex路径报错

在这里插入图片描述

因为YOLOX内的apex文件夹,还有一个apex文件夹,所以引用路径有点问题。

解决方法:

这时在每个调用apex的地方,添加一个apex.即可。

在这里插入图片描述

修改为:

在这里插入图片描述

需要注意的是,不少的地方,需要添加apex.,大概有10处左右,修改完之后,错误即可解决。

问题2:probubuf报错

在这里插入图片描述

解决方法:

(1) pip3 uninsall probobuf

(2) pip3 install google

(3) pip3 install protobuf

3.5 训练效果测试

在上面训练好模型后,我们可以得到一个精度测试最优的网络模型:

① best_ckpt.pth.tar:在tools/YOLOX_outputs/yolox_voc_s文件夹中。

② 为了方便测试,再挑选一张人头测试图片,放到assets文件夹中。

在YOLOX文件夹的终端页面输入:

python3 tools/demo.py image -n yolox-s -c tools/YOLOX_outputs/yolox_voc_s/best_ckpt.pth.tar --path assets/head.jpg --conf 0.3 --nms 0.5 --tsize 640 --save_result --device [gpu]

在这里插入图片描述

在YOLOX_outputs/yolox_s/vis_res,根据时间新建的文件夹下,可以看到检测出的效果图片。

注意:如最后的类别都显示person,将coco_classes.py中的类别,也修改为“head”。

在这里插入图片描述

4 相关推荐:更多数据集下载

除了上面人头的数据集,大白还汇总收集了数百个不同类别的数据集。

并将数据集,按照不同的种类,分门别类,大家也可以对应挑选下载尝试。

数百种数据集汇总链接点击查看

在这里插入图片描述

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2021-08-10 23:06:26  更:2021-08-10 23:06:31 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 21:31:41-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码