当前位置: 首页 > article >正文

YoloX训练实战:从零开始用PyTorch训练一个自定义数据集(附完整代码)

YoloX实战指南PyTorch自定义数据集训练全流程解析在工业检测、自动驾驶、安防监控等领域目标检测技术正发挥着越来越重要的作用。YoloX作为Yolo系列的最新演进版本凭借其Anchor-Free设计、SimOTA动态匹配等创新特性在精度和速度上实现了显著提升。本文将带您从零开始完成一个完整的YoloX模型训练流程涵盖数据准备、模型配置、训练优化到结果评估的全过程。1. 环境准备与数据标注1.1 基础环境配置YoloX训练需要PyTorch环境的支持建议使用Python 3.8和PyTorch 1.8版本。以下是推荐的环境配置步骤# 创建conda环境 conda create -n yolox python3.8 conda activate yolox # 安装PyTorch pip install torch1.8.1cu111 torchvision0.9.1cu111 -f https://download.pytorch.org/whl/torch_stable.html # 安装YoloX依赖 pip install yolox0.3.0 pip install opencv-python pillow tqdm tensorboard对于硬件配置建议至少使用8GB显存的GPU如NVIDIA RTX 2070及以上。如果显存不足可以通过减小batch_size或输入图像尺寸来降低显存消耗。1.2 数据集标注规范YoloX支持多种标注格式最常见的是VOC格式和COCO格式。本文以VOC格式为例介绍数据准备过程图像文件应存放在VOCdevkit/VOC2007/JPEGImages目录下标注文件XML格式存放在VOCdevkit/VOC2007/Annotations目录下每个XML文件对应一张图像包含以下关键信息annotation object nameperson/name bndbox xmin100/xmin ymin200/ymin xmax300/xmax ymax400/ymax /bndbox /object /annotation对于标注工具推荐使用LabelImg或CVATLabelImg轻量级开源工具适合小规模标注pip install labelImg labelImgCVAT功能强大的在线标注系统支持团队协作标注注意事项确保标注框紧密贴合目标边缘避免包含过多背景对于遮挡目标按可见部分标注同类目标在不同场景下应保持标注一致性。2. 数据预处理与增强2.1 数据集划分与格式转换使用voc_annotation.py脚本将数据集划分为训练集和验证集并转换为YoloX需要的格式# voc_annotation.py关键参数配置 classes_path model_data/custom_classes.txt # 自定义类别文件 trainval_percent 0.9 # 训练集验证集比例 train_percent 0.9 # 训练集比例生成的train.txt文件每行格式为图像路径 x1,y1,x2,y2,class_id x1,y1,x2,y2,class_id ...2.2 数据增强策略YoloX默认使用了Mosaic和MixUp等增强技术可以有效提升模型泛化能力。在yolox/data/data_augment.py中可以看到完整的增强流程Mosaic增强随机选取4张图像拼接为1张MixUp增强两幅图像线性叠加色彩扰动HSV空间随机调整色调、饱和度和明度几何变换随机翻转、旋转、裁剪对于特定场景如工业缺陷检测可能需要调整增强策略# 自定义增强配置示例 train_dataset YoloXDataset( ... augmentTrue, degrees10.0, # 旋转角度范围 translate0.1, # 平移比例 scale(0.5, 1.5), # 缩放范围 shear2.0, # 剪切幅度 perspective0.0, # 透视变换 )2.3 处理类别不平衡问题当数据集中各类别样本数量差异较大时可采用以下策略重采样对少数类样本进行过采样损失加权在YOLOLoss中调整各类别的权重class YOLOLoss(nn.Module): def __init__(self, num_classes, class_weightsNone): if class_weights is not None: self.class_weights torch.FloatTensor(class_weights)数据增强侧重对少数类样本应用更强的增强3. 模型配置与训练3.1 模型选择与参数配置YoloX提供多种规模的预训练模型可根据硬件条件选择模型类型参数量输入尺寸COCO AP适用场景YOLOX-Nano0.91M416x41625.8移动端/嵌入式YOLOX-Tiny5.06M416x41632.8边缘设备YOLOX-S9.0M640x64040.5通用场景YOLOX-M25.3M640x64046.9高性能需求YOLOX-L54.2M640x64049.7服务器端在train.py中关键配置参数# 模型选择 phi s # 可选 nano, tiny, s, m, l, x # 训练参数 input_shape [640, 640] # 输入图像尺寸 batch_size 8 # 根据显存调整 lr 1e-3 # 初始学习率 num_workers 4 # 数据加载线程数 # 训练策略 freeze_backbone True # 是否冻结骨干网络 mosaic_prob 1.0 # Mosaic增强概率 mixup_prob 1.0 # MixUp增强概率3.2 训练过程优化YoloX采用两阶段训练策略冻结阶段冻结骨干网络CSPDarknet仅训练检测头# 冻结骨干网络 for param in model.backbone.parameters(): param.requires_grad False解冻阶段解冻全部网络进行端到端微调训练过程中可通过TensorBoard监控关键指标tensorboard --logdirlogs常见训练问题与解决方案问题现象可能原因解决方案Loss不下降学习率过大/过小调整学习率尝试1e-4到1e-2显存不足batch_size过大减小batch_size使用梯度累积过拟合数据量不足增加数据增强添加正则化训练震荡数据标注噪声检查标注质量清洗错误样本3.3 自定义模型结构修改如需修改网络结构可编辑yolox/models/yolo_pafpn.py和yolox/models/yolo_head.py。例如增加一个检测层class YOLOXHead(nn.Module): def __init__(self, num_classes80, strides[8, 16, 32, 64]): # 新增64 stride super().__init__() # 新增一个检测头的配置 self.stems.append(BaseConv(in_channels, out_channels, ksize1)) self.cls_convs.append(...) self.reg_convs.append(...)4. 模型评估与部署4.1 评估指标解读YoloX训练过程中会输出多种评估指标mAP(mean Average Precision)综合衡量检测精度AP50IoU阈值为0.5时的AP值AP75IoU阈值为0.75时的AP值AR(Average Recall)平均召回率使用eval.py进行详细评估python tools/eval.py -n yolox-s -c yolox_s.pth -b 8 -d 1 --conf 0.0014.2 模型导出与部署YoloX支持导出为多种格式PyTorch转ONNXpython tools/export_onnx.py --output-name yolox_s.onnx -n yolox-s -c yolox_s.pthTensorRT加速trtexec --onnxyolox_s.onnx --saveEngineyolox_s.engine --fp16移动端部署Android: 使用NCNN或MNN框架iOS: 使用CoreML转换工具4.3 实际应用技巧推理优化# 设置更高效的推理参数 predictor Predictor( model, exp, trt_fileNone, decoderNone, devicegpu, fp16False, legacyFalse, )后处理调优调整置信度阈值--conf默认0.01调整NMS阈值--nms默认0.65多尺度测试exp.test_size (736, 1280) # 使用更大尺寸测试提升小目标检测5. 进阶技巧与问题排查5.1 工业场景优化策略针对工业检测的特殊需求可采取以下优化措施小目标检测优化增加高分辨率检测层使用更密集的特征金字塔添加注意力机制类别不平衡处理# 在SimOTA中调整类别权重 cost cls_cost 3.0 * iou_cost 100000.0 * (~in_boxes_and_center).float()模型轻量化使用通道剪枝知识蒸馏量化感知训练5.2 常见错误排查CUDA内存不足减小batch_size使用--fp16混合精度训练尝试梯度累积optimizer.zero_grad() for i, (images, targets) in enumerate(train_loader): loss model(images, targets) loss.backward() if (i1) % 4 0: # 每4步更新一次 optimizer.step() optimizer.zero_grad()训练出现NaN检查数据中是否存在无效标注降低学习率添加梯度裁剪torch.nn.utils.clip_grad_norm_(model.parameters(), max_norm10.0)验证集性能差检查训练/验证数据分布是否一致尝试关闭Mosaic增强调整数据增强强度5.3 性能调优记录以下是一个典型的调优过程记录迭代修改点mAP0.5推理速度(FPS)显存占用1基线模型(YOLOX-s)0.78455.2GB2Mosaic增强0.82435.4GB3自定义锚点0.84425.3GB4FP16训练0.83623.1GB5输入尺寸800x8000.87326.8GB在实际项目中建议从简单配置开始逐步增加复杂度每次修改只调整一个变量准确记录每次修改的影响。

相关文章:

YoloX训练实战:从零开始用PyTorch训练一个自定义数据集(附完整代码)

YoloX实战指南:PyTorch自定义数据集训练全流程解析 在工业检测、自动驾驶、安防监控等领域,目标检测技术正发挥着越来越重要的作用。YoloX作为Yolo系列的最新演进版本,凭借其Anchor-Free设计、SimOTA动态匹配等创新特性,在精度和速…...

别再傻傻分不清了!一张图帮你理清YOLO各版本(v1-v13)的‘血缘关系’与核心团队

YOLO进化图谱:从v1到v13的技术传承与团队变迁 在计算机视觉领域,YOLO(You Only Look Once)目标检测算法的发展史堪称一部技术创新的微型史诗。从2016年Joseph Redmon提出初代YOLO开始,这个系列已经迭代了13个主要版本…...

如何快速解密网易云音乐NCM格式:3种简单方法重获音乐自由

如何快速解密网易云音乐NCM格式:3种简单方法重获音乐自由 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 你是否曾为网易云音乐下载的NCM格式歌曲无法在其他设备播放而烦恼?那些精心收藏的音乐文件就像被锁在…...

Rusted PackFile Manager深度解析:Total War MOD开发的架构革命与技术实践

Rusted PackFile Manager深度解析:Total War MOD开发的架构革命与技术实践 【免费下载链接】rpfm Rusted PackFile Manager (RPFM) is a... reimplementation in Rust and Qt6 of PackFile Manager (PFM), one of the best modding tools for Total War Games. 项…...

第5篇:重复执行——让程序帮你干活 Rust中文编程

第5篇:重复执行——让程序帮你干活 作者: 李金雨 联系方式: wbtm2718qq.com 目标读者: Rust中文编程 核心理念: AI时代必须使用中文编程,母语编程阅读效率极高 1. 开篇引入 本课目标 掌握for循环的使用掌…...

Windows右键菜单终极管理指南:告别混乱,实现高效文件操作

Windows右键菜单终极管理指南:告别混乱,实现高效文件操作 【免费下载链接】ContextMenuManager 🖱️ 纯粹的Windows右键菜单管理程序 项目地址: https://gitcode.com/gh_mirrors/co/ContextMenuManager 在Windows系统中,右…...

别再到处找现成的了!手把手教你用CentOS 7.9定制一个带专属软件的LiveCD启动盘

从零构建企业级CentOS 7.9定制化LiveCD实战指南 每次新员工入职都要重复配置相同的开发环境?客户演示时总被环境差异搞得手忙脚乱?教学实验室的机器配置参差不齐?这些场景正是定制化LiveCD大显身手的地方。本文将带你深入掌握基于CentOS 7.9打…...

告别界面拥挤!用ttkbootstrap的Notebook组件给你的Python GUI做个清爽的‘文件夹‘

用ttkbootstrap的Notebook组件打造清爽Python GUI界面 每次打开一个功能繁杂的桌面应用,看到满屏按钮和输入框挤在一起,是不是感觉头都大了?就像把办公桌上所有文件、文具、咖啡杯都堆在同一个角落,找什么都费劲。Python的tkinter…...

小红书App深度链接(Scheme)逆向与安全实践指南:以AutoJs调用为例

小红书深度链接(Scheme)安全分析与AutoJs自动化实践 打开手机上的小红书App,点击某个按钮跳转到指定页面——这背后隐藏着一套名为**深度链接(Deep Link)**的技术机制。对于安全研究人员和高级开发者而言,理解这套机制不仅意味着能够实现自动化操作&…...

5个开源解码技巧:如何用MPC-BE突破Windows媒体播放性能瓶颈

5个开源解码技巧:如何用MPC-BE突破Windows媒体播放性能瓶颈 【免费下载链接】MPC-BE MPC-BE – универсальный проигрыватель аудио и видеофайлов для операционной системы Windows. 项目地址…...

Python+GeoPandas实战:5分钟搞定地图坐标系转换(附常见CRS避坑指南)

PythonGeoPandas实战:5分钟搞定地图坐标系转换(附常见CRS避坑指南) 当你在高德地图上标注的店铺位置,放到百度地图却偏移了500米;当你的GPS设备采集的坐标在地图上显示到隔壁街区;当你的地理分析结果与官方…...

别再只用Task.Run了!用TaskCompletionSource在C#里优雅地控制异步流程(附真实支付场景代码)

用TaskCompletionSource重构C#异步支付流程:从回调地狱到优雅编排 在电商支付这类多步骤异步操作中,我们常常遇到这样的困境:库存检查、支付网关调用、订单状态更新等操作存在严格的先后依赖关系,而传统的Task.Run或Task.Wait要么…...

爬虫党必看:实测6个免费代理网站,手把手教你筛选出最快最稳的IP

高效数据采集实战:6大免费代理源测评与智能筛选方案 在数据采集领域,代理IP的质量直接影响着爬虫的稳定性和效率。面对市场上众多的免费代理源,如何快速识别可用资源并建立有效的筛选机制,成为每位数据工程师的必备技能。本文将基…...

如何3步轻松下载B站大会员4K视频:你的个人高清资源库搭建指南

如何3步轻松下载B站大会员4K视频:你的个人高清资源库搭建指南 【免费下载链接】bilibili-downloader B站视频下载,支持下载大会员清晰度4K,持续更新中 项目地址: https://gitcode.com/gh_mirrors/bil/bilibili-downloader 你是否遇到过…...

基础模型如何革新科研工作流与科学发现

1. 基础模型与科学发现的范式转移 实验室里的显微镜旁堆满了未标记的样本,隔壁工作站正在训练第37版蛋白质结构预测模型。三年前需要博士生团队半年才能完成的文献综述,现在GPT-4用20分钟就能生成初步框架。这不是科幻场景,而是我最近在生物医…...

别再只调参了!深入CPO的‘循环种群减少’策略,帮你跳出局部最优陷阱

冠豪猪优化算法(CPO)的防御策略与工程实践:从理论到代码实现 在解决复杂工程优化问题时,传统算法常常面临收敛速度慢和易陷入局部最优的双重困境。2024年提出的冠豪猪优化算法(Crested Porcupine Optimizer, CPO)通过模拟自然界中冠豪猪的防御行为&#…...

歌词滚动姬:零基础也能制作专业LRC歌词的终极指南

歌词滚动姬:零基础也能制作专业LRC歌词的终极指南 【免费下载链接】lrc-maker 歌词滚动姬|可能是你所能见到的最好用的歌词制作工具 项目地址: https://gitcode.com/gh_mirrors/lr/lrc-maker 还在为制作精准的歌词时间轴而烦恼吗?歌词…...

告别官方代码!手把手教你为YOLOv8-Seg模型定制ONNX导出,适配RKNN/Horizon/TensorRT部署

深度定制YOLOv8-Seg模型:从PyTorch到边缘计算芯片的高效部署指南 在计算机视觉领域,实时语义分割一直是工业应用中的关键技术挑战。YOLOv8-Seg作为最新一代的实时分割网络,其性能与效率平衡令人印象深刻。然而,当我们需要将其部署…...

Zephyr驱动初始化顺序详解:你的驱动为什么没跑起来?从链接脚本到启动流程的深度排错

Zephyr驱动初始化顺序详解:从链接脚本到启动流程的深度排错 当你在Zephyr RTOS中开发自定义驱动程序时,是否遇到过这样的场景:精心编写的驱动代码在运行时毫无反应,或者系统在启动阶段就崩溃?这往往与驱动初始化顺序的…...

Windows Cleaner:终极免费的Windows系统清理工具,一键解决C盘爆满问题

Windows Cleaner:终极免费的Windows系统清理工具,一键解决C盘爆满问题 【免费下载链接】WindowsCleaner Windows Cleaner——专治C盘爆红及各种不服! 项目地址: https://gitcode.com/gh_mirrors/wi/WindowsCleaner 你是否经历过这样的…...

别再只盯着SENet了!用PyTorch手把手实现CBAM注意力模块(附完整代码与可视化)

从零实现CBAM注意力模块:PyTorch实战与可视化对比 在计算机视觉领域,注意力机制已经成为提升模型性能的关键技术。虽然SENet通过通道注意力取得了显著效果,但CBAM(Convolutional Block Attention Module)更进一步&…...

在 Node.js 服务中集成 Taotoken 实现稳定 AI 功能调用

在 Node.js 服务中集成 Taotoken 实现稳定 AI 功能调用 1. 环境准备与基础配置 在 Node.js 服务中集成 Taotoken 的第一步是完成基础环境配置。建议将 API Key 存储在环境变量中而非硬编码,这既符合安全规范也便于多环境部署。在项目根目录创建 .env 文件并添加以…...

避开FANUC机器人后台编程的坑:DO状态输出程序组掩码设置与常见错误

FANUC机器人后台编程实战:DO信号输出与组掩码深度解析 在工业自动化领域,FANUC机器人以其稳定性和灵活性著称,而后台程序(Background Logic)作为其重要功能之一,常被用于实时监控和状态输出。然而,许多工程师在实际开发…...

如何快速配置NBFC-Linux:笔记本电脑风扇控制终极指南

如何快速配置NBFC-Linux:笔记本电脑风扇控制终极指南 【免费下载链接】nbfc-linux NoteBook FanControl ported to Linux 项目地址: https://gitcode.com/gh_mirrors/nb/nbfc-linux NBFC-Linux是一款专为Linux系统设计的笔记本电脑风扇控制工具,能…...

一个标准 Java SpringBoot 项目 Git ignore 文件

一个标准 Java SpringBoot 项目 Git ignore 文件 target/ !.mvn/wrapper/maven-wrapper.jar !**/src/main/**/target/ !**/src/test/**/target/ .kotlin### IntelliJ IDEA ### .idea/modules.xml .idea/jarRepositories.xml .idea/compiler.xml .idea/libraries/ *.iws *.iml *…...

cn-daily-tools:专为中文开发者打造的高效本土化工具库

1. 项目概述:一个中文开发者的日常工具箱如果你是一个经常在GitHub上寻找轮子的中文开发者,大概率会和我有一样的感受:很多优秀的工具库是英文的,文档是英文的,社区讨论也是英文的。这当然没问题,开源无国界…...

NCP1611/NCP1612 PFC控制器CCFF技术与应用解析

1. NCP1611/NCP1612 PFC控制器核心特性解析 NCP1611和NCP1612是安森美半导体推出的高性能功率因数校正(PFC)控制器,采用创新的电流控制频率回退(CCFF)技术。这两款器件在开关电源设计中扮演着关键角色,特别是在需要高功率因数(>0.99)和低总谐波失真(T…...

Transformer如何预测全国空气质量?AirFormer论文核心思想与代码复现指北

Transformer在空气质量预测中的革命性突破:AirFormer架构解析与实战指南 1. 时空预测的新范式:当Transformer遇见环境科学 2017年Transformer架构的横空出世彻底改变了自然语言处理领域的游戏规则,而如今这一革命性技术正在环境科学领域掀起新…...

PX4飞控固件里那些配置文件都是干啥的?从default.px4board到rc.board_sensors的保姆级解读

PX4飞控固件配置文件全景解析:从硬件抽象到传感器启动的完整链路 当你第一次打开PX4飞控的代码仓库,面对数十个配置文件和嵌套的目录结构时,那种扑面而来的压迫感我至今记忆犹新。作为开源飞控领域的标杆,PX4的强大之处在于其模块…...

避坑指南:在银河麒麟V10桌面版安装Qt 5.12.10时,如何解决权限卡死和图标不见的问题?

银河麒麟V10桌面版Qt 5.12.10安装避坑实战:权限管理与图标修复全解析 第一次在银河麒麟V10上安装Qt 5.12.10的经历,让我深刻体会到Linux系统权限管理的精妙与严格。当安装进度条莫名其妙卡在60%不动,或是明明安装成功却找不到桌面图标时&…...