| |
|
开发:
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文件 输入代码: (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文件夹中,其中包含两个文件夹: ① 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 相关推荐:更多数据集下载除了上面人头的数据集,大白还汇总收集了数百个不同类别的数据集。 并将数据集,按照不同的种类,分门别类,大家也可以对应挑选下载尝试。 数百种数据集汇总链接:点击查看 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
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- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |