我是目录:

  • 前言:
  • 1.yolox的训练配置
  • 2.yolox源码
  • 3.必要的环境
    • 配置yolox所需环境
    • 1.安装依赖库
    • 2.安装yolox
    • 3.安装apex
    • 4.下载预训练模型
  • 4.准备自己的数据集
    • 构建VOC数据集
  • 5.训练
  • 6.测试
  • 总结:

前言:

基于VOC数据集的yolox踩坑记录,包括环境配置,数据集的制作,模型训练和检测。

1.yolox的训练配置

1.1 300epoch的训练长度,其中,前5个epoch使用warmup学习率策略;
优化器使用标配的SGD;

1.2 多尺度训练:448-832,不再是以往的320-608了。这应该是追求large input size的涨点。
1.3 Backbone就是v3所使用的DarkNet-53。
1.4 预测部分加入了IoU-aware分支,这一点应该是和PP-YOLO是对齐的
1.5 损失函数:obj分支和cls分支还是使用BCE,reg分支则使用IoU loss;
1.6 使用EMA训练技巧(这个很好用,可以加快模型的收敛速度);
1.7 数据增强仅使用RandomHorizontalFlip、ColorJitter以及多尺度训练,不使用RandomResizedCrop,作者认为RandomResizedCrop和Mosaic有点重合了。由于后续会上Mosaic Augmentation,所以这里暂时先不要了。

2.yolox源码

链接: link.

3.必要的环境

win10+python3.7+cuda11.1

配置yolox所需环境

1.安装依赖库

pip install -r requirements.txt

# TODO: Update with exact module version
numpy
torch>=1.7
opencv_python
loguru
scikit-image
tqdm
torchvision
Pillow
thop
ninja
tabulate
tensorboard# verified versions
onnx==1.8.1
onnxruntime==1.8.0
onnx-simplifier==0.3.5

2.安装yolox

python setup.py install

3.安装apex

apex下载地址,
cd到apex-master,
python setup.py install

4.下载预训练模型

model,
预训练模型包括标准(standard)和轻量(light)。在yolox文件夹下创建一个weights用于存放模型。

4.准备自己的数据集

构建VOC数据集

voc数据集的格式如下:

其中,annotation用于存放xml格式的标签文件,JPEGimage用于存放原始图片。由于我自己是用的labelme做的标签,生成的是json格式的标签文件。所以这里有一个json convert to xml的动作。

import os
from typing import List, Any
import numpy as np
import codecs
import json
from glob import glob
import cv2
import shutil
from sklearn.model_selection import train_test_splitlabelme_path = "before/json/"  # json文件夹路径
saved_path = "before/xml/"  # xml保存路径if not os.path.exists(saved_path + "Annotations"):os.makedirs(saved_path + "Annotations")files = glob(labelme_path + "*.json")
files = [i.replace("\\", "/").split("/")[-1].split(".json")[0] for i in files]
print(files)for json_file_ in files:json_filename = labelme_path + json_file_ + ".json"json_file = json.load(open(json_filename, "r", encoding="utf-8"))height, width, channels = 720, 1280, 3with codecs.open(saved_path + "Annotations/" + json_file_ + ".xml", "w", "utf-8") as xml:xml.write('<annotation>\n')xml.write('\t<folder>' + 'WH_data' + '</folder>\n')xml.write('\t<filename>' + json_file_ + ".png" + '</filename>\n')  # 更改图片后缀xml.write('\t<source>\n')xml.write('\t\t<database>WH Data</database>\n')xml.write('\t\t<annotation>WH</annotation>\n')xml.write('\t\t<image>flickr</image>\n')xml.write('\t\t<flickrid>NULL</flickrid>\n')xml.write('\t</source>\n')xml.write('\t<owner>\n')xml.write('\t\t<flickrid>NULL</flickrid>\n')xml.write('\t\t<name>WH</name>\n')xml.write('\t</owner>\n')xml.write('\t<size>\n')xml.write('\t\t<width>' + str(width) + '</width>\n')xml.write('\t\t<height>' + str(height) + '</height>\n')xml.write('\t\t<depth>' + str(channels) + '</depth>\n')xml.write('\t</size>\n')xml.write('\t\t<segmented>0</segmented>\n')for multi in json_file["shapes"]:points = np.array(multi["points"])labelName = multi["label"]xmin = min(points[:, 0])xmax = max(points[:, 0])ymin = min(points[:, 1])ymax = max(points[:, 1])label = multi["label"]if xmax <= xmin:passelif ymax <= ymin:passelse:xml.write('\t<object>\n')xml.write('\t\t<name>' + labelName + '</name>\n')xml.write('\t\t<pose>Unspecified</pose>\n')xml.write('\t\t<truncated>1</truncated>\n')xml.write('\t\t<difficult>0</difficult>\n')xml.write('\t\t<bndbox>\n')xml.write('\t\t\t<xmin>' + str(int(xmin)) + '</xmin>\n')xml.write('\t\t\t<ymin>' + str(int(ymin)) + '</ymin>\n')xml.write('\t\t\t<xmax>' + str(int(xmax)) + '</xmax>\n')xml.write('\t\t\t<ymax>' + str(int(ymax)) + '</ymax>\n')xml.write('\t\t</bndbox>\n')xml.write('\t</object>\n')print(json_filename, xmin, ymin, xmax, ymax, label)xml.write('</annotation>')

接下来运行txt_write.py,划分数据集,并写入main文件夹下,生成trainval.txt和test.txt。

import os
import randomtrainval_percent = 0.1
train_percent = 0.9
xmlfilepath = 'F:/YOLOX-main/YOLOX-main/datasets/VOC/VOCdevkit/VOC2007/Annotations'
txtsavepath = 'F:/YOLOX-main/YOLOX-main/datasets/VOC/VOCdevkit/VOC2007/ImageSets'
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)ftest = open('F:/YOLOX-main/YOLOX-main/datasets/VOC/VOCdevkit/VOC2007/ImageSets/test.txt', 'w')
ftrain = open('F:/YOLOX-main/YOLOX-main/datasets/VOC/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()

完成之后,把VOC copy到datasets文件夹下,至此完成VOC数据集的制作。

5.训练

1.修改 yolox/data/dataloading.py,line25

2.修改exps/example/yolox_voc/yolox_voc_s.py,line31

3.修改exps/example/yolox_voc/yolox_voc_s.py,line14,
num_classes为自己数据的类。不包括背景。

4.修改yolox/data/datasets/voc_classes.py为自己的类别。
5.修改yolox/evaluators/voc_eval.py,添加root为annotation的绝对路径。

root = r'F:/yolox/YOLOX-main/YOLOX-main/datasets/VOC/VOCdevkit/VOC2007/Annotations/'
def parse_rec(filename):""" Parse a PASCAL VOC xml file """tree = ET.parse(root + filename)

6.开始训练

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

设备条件有限,一直报cuda out of memory 的错,于是调小了batch_size,载入更轻量的预训练模型,去掉了–fp16 -o。

python tools/train.py -f exps/example/yolox_voc/yolox_voc_s.py -d 1 -b 4 -c weights/yolox_nano.pth.tar

效果是这样的,在这里我只标注了200张图片,设置了300个epoch。这里大概跑了2个小时,跑完之后,会在yolox的目录下生成yolox-output,值得注意的是lastest和best.pth两个权重文件。


如果要断点续练的话,需要修改train.py的resume为TRUE,权重文件改为lastest或best.pth。

python tools/train.py -f exps/example/yolox_voc/yolox_voc_s.py -d 1 -b 4 -c YOLOX_outputs/yolox_voc_s/latest_ckpt.pth.tar

6.测试

测试时需要修改tools下的demo.py。
1.import处from yolox.data.datasets.voc_classes import VOC_CLASSES

2.

3.修改cls_name

4.测试单张图片:

python tools/demo.py video -f exps/example/yolox_voc/yolox_voc_s.py -c YOLOX_outputs/yolox_voc_s/best_ckpt.pth --33d37a437.jpg --conf 0.3 --nms 0.65 --tsize 640 --save_result --device gpu

批量检测:

python tools/demo.py image -f exps/example/yolox_voc/yolox_voc_s.py -c YOLOX_outputs/yolox_voc_s/best_ckpt.pth --path test/ --conf 0.3 --nms 0.65 --tsize 640 --save_result --device gpu

5.检测结果被保存在…目录下

总结:

只训练了200张图片,300个epoch,效果提升余地很大,
代码跑通了,
开心!

【学习记录】win10搭建YOLOX训练自己的VOC数据集相关推荐

  1. YOLOX训练自己的VOC数据集

    文章目录 一.下载YOLOX代码 二.配置文件 修改数据集参数 三.开始训练 报错1:no model named 'yolox' 报错2:No such file or directory: '/a ...

  2. 【目标检测实战学习】从零开始制作并训练自己的VOC数据集,并使用Retinanet进行目标检测

    目录 基础软件安装 项目来源 环境配置 使用LabelImg给图片打标签 数据增强 划分训练集,测试集 模型训练 将验证集结果可视化 首先写一下我们这个项目的思路 1.下载图片,网上随便找 2.使用L ...

  3. (详细版Win10+Pycharm)YOLOX——训练自己的VOC2007数据集,以NWPU VHR-10 dataset为例

    目录 一.搭建YOLOX环境 二.训练自己的VOC数据集 1.打开Pycharm配置Anaconda已创建好的yolo_x虚拟环境 2.在Pycharm中设置Git环境 3.修改配置文件 (1)修改Y ...

  4. WIN10使用YOLOX训练自己的数据集(图解超详细)

    文章目录 WIN10使用YOLOX训练自己的数据集(图解超详细) 下载YOLOX源码 配置环境,修改源码 添加权重文件 建立VOCdevkit文件夹 添加数据集 划分训练集和测试集 修改 类别 为自己 ...

  5. 在服务器上利用mmdetection来训练自己的voc数据集

    在服务器上利用mmdetection来训练自己的voc数据集 服务器上配置mmdetection环境 在服务器上用anaconda配置自己的环境 进入自己的虚拟环境,开始配置mmdetection 跑 ...

  6. mmdetectionV2.x版本 训练自己的VOC数据集

    mmdetectionV2.x版本 训练自己的VOC数据集 1 首先根据规范的VOC数据集导入到项目目录下,如下图所示: mmdetection ----mmdet ----tools ----con ...

  7. mmdetection训练自己的VOC数据集及常见问题

    训练自己的COCO数据集及常见问题见下文: mmdetection训练自己的COCO数据集及常见问题_不瘦8斤的妥球球饼的博客-CSDN博客 目录 一.环境安装 二.训练测试步骤 三.常见问题 bat ...

  8. mmdetection的安装并训练自己的VOC数据集

    mmdetection的安装并训练自己的VOC数据集 mmdetection的安装与VOC数据集的训练 一. mmdetection的安装 1.使用conda创建虚拟环境 2.安装Cython 3.安 ...

  9. yolov5-7.0训练自己的VOC数据集

    yolov5-7.0训练自己的VOC数据集 这个笔记可能只适用于7.0版本的,写这个笔记主要是给工作室伙伴参考的,大佬请绕行 有错误之处欢迎指出 一.下载 yolov5的GitHub仓库地址:Rele ...

最新文章

  1. 超详细 Nginx 极简教程,傻瓜一看也会!
  2. JSP中文乱码问题解决方案
  3. 《当程序员的那些狗日日子》(五十二)同学情与差距
  4. Spring 中的隔离级别
  5. word2016 图片去底灰_看来看去,还是高级灰最耐看,喜欢现代简约风的你,选它准不会错...
  6. 算法练习题---回文数
  7. xhtml与html的区别开头,XHTML与HTML的差别
  8. android.intent.action.view 融云,Android 融云SDK集成单聊
  9. 基于微信小程序电影购选系统
  10. Word小技巧总结(持续更新中……)
  11. directadmin php.ini 修改,DirectAdmin 更改服务器IP
  12. 基于微信小程序的毕业设计题目(34)PHP小说平台小程序(含开题报告、任务书、中期报告、答辩PPT、论文模板)
  13. 【LoRaWan】节点端(一)--SX1278介绍
  14. 利用scikit中的遗传算法求解(整数01)约束规划实例详解教程+利用scipy.optimize求解约束规划问题
  15. c语言经典笔试100题,100条经典C语言笔试题目(全).doc
  16. python向自己qq邮件发信息_python实现自动向QQ邮箱发送天气预报邮件
  17. 2022普通人做抖音的红利在哪里
  18. java.net.Url类的应用 以及URL的学习
  19. 全网最详细的介绍ChatGPT:包括ChatGPT原理、应用、如何试用以及回答ChatGPT能否让程序员失业
  20. linux系统下怎么安装.deb文件?

热门文章

  1. AWS和Azure频频中断,可靠性让公有云成为带刺的玫瑰
  2. 3 Drools语法介绍(contains和not contains,memberOf和not memberOf,matches和not matches,update,insert,retract)
  3. 【NOI P模拟赛】序列题 (二分)
  4. Flink流计算可视化平台
  5. 实验5:进程管理【nyist】
  6. 机器学习中的数学——激活函数(十):Softplus函数
  7. 谷粒商城项目篇6_分布式基础完结篇_商品服务模块(品牌管理、平台属性、新增商品)、仓储服务模块(仓库管理)
  8. Android.拍照,保存图片,图片大小是0B...
  9. 安卓图片操作(调用系统相机,预览本地照片,调用系统裁剪图片,压缩图片,中心裁剪方形图片,bitmap转byte[])
  10. 如何注册上海电子科技公司?