目标检测实战(七): 使用YOLOX完成对图像的目标检测任务(从数据准备到训练测试部署的完整流程)

简介: 这篇文章介绍了如何使用YOLOX完成图像目标检测任务的完整流程,包括数据准备、模型训练、验证和测试。

一、目标检测介绍

目标检测(Object Detection)是计算机视觉领域的一项重要技术,旨在识别图像或视频中的特定目标并确定其位置。通过训练深度学习模型,如卷积神经网络(CNN),可以实现对各种目标的精确检测。常见的目标检测任务包括:人脸检测、行人检测、车辆检测等。目标检测在安防监控、自动驾驶、智能零售等领域具有广泛应用前景。

二、YOLOX介绍

论文链接YOLOX: Exceeding YOLO Series in 2021

背景:随着物体检测的发展,YOLO系列始终追求实时应用的最佳速度和精度权衡。而且在过去两年中,目标检测学术界的主要进展都集中在无锚检测器 、高级标签分配策略 和端到端(无 NMS)检测器。而YOLOV4和YOLOV5仍然是基于锚的检测器。由于计算资源的限制导致这些优秀的检测器并不能广泛运用。

创新与贡献

  1. Backbone。使用的依旧是CSP的思想,不过YOLOv5中的C3模块被替换成了C2f模块,实现了进一步的轻量化,同时YOLOv8依旧使用了YOLOv5等架构中使用的SPPF模块;
  2. PAN-FPN。毫无疑问YOLOv8依旧使用了PAN的思想,不过通过对比YOLOv5与YOLOv8的结构图可以看到,YOLOv8将YOLOv5中PAN-FPN上采样阶段中的卷积结构删除了,同时也将C3模块替换为了C2f模块
  3. Decoupled-Head。是不是嗅到了不一样的味道?是的,YOLOv8走向了Decoupled-Head;
  4. Anchor-Free。YOLOv8抛弃了以往的Anchor-Base,使用了Anchor-Free的思想;
  5. 损失函数。YOLOv8使用VFL Loss作为分类损失,使用DFL Loss+CIOU Loss作为分类损失;
  6. 样本匹配。YOLOv8抛弃了以往的IOU匹配或者单边比例的分配方式,而是使用了Task-Aligned Assigner匹配方式

三、源码获取

  1. 源码:点击
  2. bubbliiiing的代码:点击

四、环境搭建

我这里的环境安装的方式是根据源码安装的,但是我的代码是下载的bubbliiiing的。
第一步:Install YOLOX from source
cd YOLOX
pip install -v -e . # or python setup.py develop

第二步:安装cuda、torch、torchvision重要的环境。参考这个博客

环境 版本
python 3.7.11
cuda 10.1
torch 1.8.0+cu101
torchvision 0.9.0+cu101

第三步:安装之后进入到此环境下的代码主目录,在终端运行

pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple/

4.1 环境检测

下载YOLOX-S:点击
在这里插入图片描述
下载之后将模型放在下图位置,并修改predict.py路径
在这里插入图片描述
然后运行predict.py即可,输入图片路径,将得到下面的结果。在这里插入图片描述

五、数据集准备

通过labelImg标注图片得到xml和原图,分别放置在这两个文件夹下(labelImg的使用可查看这个博客
这时候就需要将此数据集转换成VOC格式的数据集,方可训练。

通过voc_annotation.py来将数据集进行划分,注意几个地方:

  • annotation_mode为0/1/2的时候的区别,代码里面有备注
  • classes_path:数据集的类别情况,要改为自己的类别
  • 其他地方就是修改路径的问题,改成自己数据集对应的路径

运行后发现在这里插入图片描述

六、模型训练

这时候你会发现在主目录下会得到两个txt文件,一个用于训练一个用于验证。
然后你运行train.py,model_path修改为自己的类别文件路径。然后就可以运行。

python train.py

在这里插入图片描述
训练的同时我们也可以通过tensorboard来查看训练损失和其他指标的图
在这里插入图片描述
在这里插入图片描述

七、模型验证

通过get_map.py来验证模型的准确率、召回率、F1和mAP。(若想要测试集多点,需通过voc_annotation.py来划分数据集的测试集)

python get_map.py

修改的地方

  • map_mode:第一次使用需要设置为0
  • classes_path:为自己的类别文件路径
  • VOCdevkit_path:为自己的数据集路径
  • 还有其他的相关路径的修改
    在这里插入图片描述
    第一次必须使用map_mode = 0才能运行。因为后面有些模式需要结合检测的结果来进行绘制,

由于训练时间问题,我只是简单测试了一下训练效果,没有进行大量的epoch训练,所以效果并不是很好。
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述在这里插入图片描述

在这里插入图片描述

八、模型测试

通过predict.py来对模型测试。

修改的地方

  • mode:可选择图片、视频、fps、热力图、转换成onnx模型等
  • 还有model_path和classes_path也需要改为自己的(和训练情况一样,model_path为训练好的模型文件)
    单张图片
    在这里插入图片描述
    热力图
    在这里插入图片描述
目录
相关文章
|
17天前
|
缓存 自然语言处理 并行计算
基于NVIDIA A30 加速卡推理部署通义千问-72B-Chat测试过程
本文介绍了基于阿里云通义千问72B大模型(Qwen-72B-Chat)的性能基准测试,包括测试环境准备、模型部署、API测试等内容。测试环境配置为32核128G内存的ECS云主机,配备8块NVIDIA A30 GPU加速卡。软件环境包括Ubuntu 22.04、CUDA 12.4.0、PyTorch 2.4.0等。详细介绍了模型下载、部署命令及常见问题解决方法,并展示了API测试结果和性能分析。
322 1
|
1月前
|
机器学习/深度学习 监控 计算机视觉
目标检测实战(八): 使用YOLOv7完成对图像的目标检测任务(从数据准备到训练测试部署的完整流程)
本文介绍了如何使用YOLOv7进行目标检测,包括环境搭建、数据集准备、模型训练、验证、测试以及常见错误的解决方法。YOLOv7以其高效性能和准确率在目标检测领域受到关注,适用于自动驾驶、安防监控等场景。文中提供了源码和论文链接,以及详细的步骤说明,适合深度学习实践者参考。
292 0
目标检测实战(八): 使用YOLOv7完成对图像的目标检测任务(从数据准备到训练测试部署的完整流程)
|
1月前
|
机器学习/深度学习 并行计算 数据可视化
目标分类笔记(二): 利用PaddleClas的框架来完成多标签分类任务(从数据准备到训练测试部署的完整流程)
这篇文章介绍了如何使用PaddleClas框架完成多标签分类任务,包括数据准备、环境搭建、模型训练、预测、评估等完整流程。
81 0
目标分类笔记(二): 利用PaddleClas的框架来完成多标签分类任务(从数据准备到训练测试部署的完整流程)
|
1月前
|
监控 测试技术 数据安全/隐私保护
新产品测试流程如何?
新产品测试流程如何?【10月更文挑战第10天】
89 0
|
6天前
|
JSON Java 测试技术
SpringCloud2023实战之接口服务测试工具SpringBootTest
SpringBootTest同时集成了JUnit Jupiter、AssertJ、Hamcrest测试辅助库,使得更容易编写但愿测试代码。
33 3
|
1月前
|
JSON 算法 数据可视化
测试专项笔记(一): 通过算法能力接口返回的检测结果完成相关指标的计算(目标检测)
这篇文章是关于如何通过算法接口返回的目标检测结果来计算性能指标的笔记。它涵盖了任务描述、指标分析(包括TP、FP、FN、TN、精准率和召回率),接口处理,数据集处理,以及如何使用实用工具进行文件操作和数据可视化。文章还提供了一些Python代码示例,用于处理图像文件、转换数据格式以及计算目标检测的性能指标。
57 0
测试专项笔记(一): 通过算法能力接口返回的检测结果完成相关指标的计算(目标检测)
|
2月前
|
移动开发 JSON Java
Jmeter实现WebSocket协议的接口测试方法
WebSocket协议是HTML5的一种新协议,实现了浏览器与服务器之间的全双工通信。通过简单的握手动作,双方可直接传输数据。其优势包括极小的头部开销和服务器推送功能。使用JMeter进行WebSocket接口和性能测试时,需安装特定插件并配置相关参数,如服务器地址、端口号等,还可通过CSV文件实现参数化,以满足不同测试需求。
237 7
Jmeter实现WebSocket协议的接口测试方法
|
2月前
|
JSON 移动开发 监控
快速上手|HTTP 接口功能自动化测试
HTTP接口功能测试对于确保Web应用和H5应用的数据正确性至关重要。这类测试主要针对后台HTTP接口,通过构造不同参数输入值并获取JSON格式的输出结果来进行验证。HTTP协议基于TCP连接,包括请求与响应模式。请求由请求行、消息报头和请求正文组成,响应则包含状态行、消息报头及响应正文。常用的请求方法有GET、POST等,而响应状态码如2xx代表成功。测试过程使用Python语言和pycurl模块调用接口,并通过断言机制比对实际与预期结果,确保功能正确性。
242 3
快速上手|HTTP 接口功能自动化测试
|
1月前
|
JavaScript 前端开发 API
vue尚品汇商城项目-day02【9.Home组件拆分+10.postman测试接口】
vue尚品汇商城项目-day02【9.Home组件拆分+10.postman测试接口】
39 0
|
2月前
|
JavaScript 前端开发 测试技术
ChatGPT与接口测试
ChatGPT与接口测试,测试通过
48 5