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

模型训练篇 | 如何用YOLOv13训练自己的数据集(以明火烟雾检测举例)

前言:Hello大家好,我是小哥谈。明火烟雾检测是一种用于早期火灾预警的安全技术,通过感知火焰或烟雾的存在,及时发出警报以减少火灾风险。其核心在于结合多种传感手段和分析方法,确保快速响应并降低误报率。近年来,基于计算机视觉的智能分析逐渐普及,摄像头配合深度学习算法可实时分析烟雾的动态扩散模式或火焰的视觉特征,进一步提升检测精度。未来,随着传感器微型化和AI算法的优化,明火烟雾检测将更加智能化,能够在更早期识别火灾隐患,并与其他智能家居或安防系统深度集成,构建更全面的安全保障体系。本节课就带领大家如何基于YOLOv13算法来训练自己的目标检测模型,本次作者就以明火烟雾检测为案例进行说明,让大家可以轻松了解整个模型训练过程!~🌈

     目录

🚀1.算法介绍

🚀2.数据标注

🚀3.模型训练

🍀🍀3.1 准备数据集

🍀🍀3.2 创建yaml文件

🍀🍀3.3 下载预训练权重

🍀🍀3.4 新建Python文件

🍀🍀3.5 调节参数

🍀🍀3.6 开始训练

🚀1.算法介绍

YOLO(You Only Look Once)系列因其在速度与精度之间的卓越平衡,已成为实时目标检测领域的标杆。其发展历程体现了目标检测技术从追求速度到兼顾精度,再到精细化结构设计的演进。

  • 早期探索 (YOLOv1 - YOLOv3)YOLOv1首次将目标检测视为一个单次回归问题,实现了端到端的快速检测。YOLOv2通过引入锚框(anchor-based predictions)和DarkNet-19骨干网络提升了检测精度。YOLOv3则采用了更深的DarkNet-53骨干网和三尺度预测(three-scale predictions),显著增强了对小目标的检测能力。

  • 集成与优化 (YOLOv4 - YOLOv8)这一时期的YOLO模型广泛集成了当时主流的先进技术。例如,CSP(Cross Stage Partial)、SPP(Spatial Pyramid Pooling)、PANet等模块被陆续引入,并逐渐开始采用无锚框(anchor-free)的检测头,以进一步平衡模型的吞吐量与准确率。

  • 效率与部署 (YOLOv9 - YOLOv11)近期版本更侧重于模型的轻量化和端到端部署的便捷性。例如,YOLOv11在保持“骨干-颈部-头部”模块化设计的同时,采用了更高效的C3k2单元,并加入了带局部空间注意力的卷积块(C2PSA),以增强对小尺寸和被遮挡目标的检测效果。

  • 引入注意力机制 (YOLOv12)YOLOv12标志着注意力机制的全面融入,它引入了轻量级的区域注意力(Area Attention, A2)和Flash Attention,旨在以高效的方式实现全局和局部语义建模,提升了模型的鲁棒性和精度。

尽管YOLO系列不断进化,但论文作者指出,现有的模型在信息建模上仍存在共性局限。无论是YOLOv11及之前的卷积架构,还是YOLOv12引入的自注意力机制,其信息聚合方式本质上都受限于以下两点:

  • 局部性限制卷积操作在固定的感受野内聚合信息。

  • 成对关系建模自注意力机制的核心是建立特征间的成对关系(pairwise correlation)。

这两种模式都难以捕捉多个实体之间共同形成的、更复杂的“多对多”高阶关联(high-order correlations),导致模型在处理具有复杂空间和语义关系的场景时性能受限。因此,本研究的核心目的在于,通过引入能有效建模全局、高阶视觉关联的机制,来提升YOLO系列模型在复杂场景下的检测精度和鲁棒性。

为实现上述目标,论文提出了YOLOv13模型,其核心包含三大创新:

a. 基于超图的自适应相关性增强机制 (HyperACE)

b. 全流程聚合与分发范式 (FullPAD)

c. 深度可分离卷积轻量化设计

关于YOLOv13的网络结构图如下图所示:

上述网络结构图来源于源论文 

YOLOv13官方仓库地址:

https://github.com/iMoonLab/yolov13

作者在官网下载后,将含有预训练权重文件的YOLOv13完整源码进行了上传,大家可我的“资源“中自行下载。


🚀2.数据标注

利用labelimg或者make sense软件来标注数据,关于如何使用labelimg或者make sense软件来为自己的数据集打上标签,请参考作者专栏文章:

说明:♨️♨️♨️

数据标注工具的使用教程:

YOLOv5入门实践(1)— 手把手教你使用labelimg标注数据集(附安装包+使用教程)

YOLOv5入门实践(2)— 手把手教你使用make sense标注数据集(附工具地址+使用教程)


🚀3.模型训练

🍀🍀3.1 准备数据集

将数据集放在datasets文件夹中。datasets属于放置数据集的地方,位于PycharmProjects中,C:\Users\Lenovo\PycharmProjects中(这是我的电脑位置,跟你的不一定一样,反正位于PycharmProjects中,如果没有,可自行创建),属于项目的同级文件夹。

具体如下图所示:

打开datasets文件夹,可以看到本次明火烟雾训练所使用的数据集。

明火烟雾检测数据集是我手动标注好的,可以在我的博客“资源”中下载。 

打开数据集文件,我们会看到数据集文件包括imageslabels两个文件夹,其中,images放的是数据集图片,包括train和val两个文件夹,labels放的是经过labelimg标注所生成的标签,也包括train和val两个文件夹。

关于此处数据集的逻辑关系,用一张图总结就是:⬇️⬇️⬇️

🍀🍀3.2 创建yaml文件

打开pycharm,选择YOLOv13项目源码文件,在ultralytics\cfg\datasets下新建一个fire-smoke.yaml,如下图所示:

打开fire-smoke.yaml,按照如下图所示的进行配置:

代码:

# Train/val
train: C:\Users\Lenovo\PycharmProjects\datasets\firesmoke\images\train
val: C:\Users\Lenovo\PycharmProjects\datasets\firesmoke\images\val
test: # test images# Classes
nc: 2  # number of classes
names: ['fire','smoke']

说明:♨️♨️♨️

1.trainval为绝对路径地址,可根据自己数据集的路径地址自行设置。

2.nc指的是分类,即模型训练结果分类,此处为在用labelimg或者make sense为数据集标注时候确定。

3.由于本次进行的是明火烟雾检测模型训练,所以分两类,分别是:fire(明火)smoke(烟雾)

打开coco128.yaml文件,可以看到里面写的是相对路径,和我们的写法不同,但是都可以使用,据我所知还有很多种数据集读取方式:

# Ultralytics YOLO 🚀, AGPL-3.0 license
# COCO128 dataset https://www.kaggle.com/ultralytics/coco128 (first 128 images from COCO train2017) by Ultralytics
# Documentation: https://docs.ultralytics.com/datasets/detect/coco/
# Example usage: yolo train data=coco128.yaml
# parent
# ├── ultralytics
# └── datasets
#     └── coco128  ← downloads here (7 MB)# Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..]
path: ../datasets/coco128 # dataset root dir
train: images/train2017 # train images (relative to 'path') 128 images
val: images/train2017 # val images (relative to 'path') 128 images
test: # test images (optional)# Classes
names:0: person1: bicycle2: car3: motorcycle4: airplane5: bus6: train7: truck8: boat9: traffic light10: fire hydrant11: stop sign12: parking meter13: bench14: bird15: cat16: dog17: horse18: sheep19: cow20: elephant21: bear22: zebra23: giraffe24: backpack25: umbrella26: handbag27: tie28: suitcase29: frisbee30: skis31: snowboard32: sports ball33: kite34: baseball bat35: baseball glove36: skateboard37: surfboard38: tennis racket39: bottle40: wine glass41: cup42: fork43: knife44: spoon45: bowl46: banana47: apple48: sandwich49: orange50: broccoli51: carrot52: hot dog53: pizza54: donut55: cake56: chair57: couch58: potted plant59: bed60: dining table61: toilet62: tv63: laptop64: mouse65: remote66: keyboard67: cell phone68: microwave69: oven70: toaster71: sink72: refrigerator73: book74: clock75: vase76: scissors77: teddy bear78: hair drier79: toothbrush# Download script/URL (optional)
download: https://ultralytics.com/assets/coco128.zip
🍀🍀3.3 下载预训练权重

打开YOLOv13官方仓库地址,可以根据需要下载相应的预训练权重

官方仓库地址:

https://github.com/iMoonLab/yolov13

下载完毕后,即可将其复制粘贴到YOLOv13源码的主目录下。

具体如下图所示:

🍀🍀3.4 新建Python文件

在YOLOv13源码目录下新建Python文件,命名为train.py

具体如下图所示:

针对于本次案例,我的train.py文件内容如下所示,大家可自行调整路径地址。

from ultralytics import YOLO
import os
# By CSDN 小哥谈
os.environ['WANDB_DISABLED'] = 'true'
# Load a model
model = YOLO(r'C:\Users\Lenovo\PycharmProjects\yolov13-main\ultralytics\cfg\models\v13\yolov13.yaml')  # build a new model from YAML
model = YOLO('yolov13n.pt')  # load a pretrained model (recommended for training)
model = YOLO(r'C:\Users\Lenovo\PycharmProjects\yolov13-main\ultralytics\cfg\models\v13\yolov13.yaml').load('yolov13n.pt')  # build from YAML and transfer weights# Train the model
model.train(data=r'C:\Users\Lenovo\PycharmProjects\yolov13-main\ultralytics\cfg\datasets\fire-smoke.yaml', epochs=100,workers=0,imgsz=640)
🍀🍀3.5 调节参数

YOLOv13关于模型的各种参数都在ultralytics/cfg/default.yaml中,通过调节这些参数我们就可以实现各种我们所需的操作。

🍀🍀3.6 开始训练

当参数调节完毕之后,即可在train.py文件中点击“运行”。具体运行结果如下图所示:

训练结束后,训练结果如下所示:

由结果可知,训练结果还是很不错的。👏👏👏


http://www.dtcms.com/a/270200.html

相关文章:

  • 记录一种 Java 自定义快速读的方式,解决牛客中运行超时问题
  • 数与运算-埃氏筛 P1835 素数密度
  • go入门 - day1 - 环境搭建
  • Rust 中字符串类型区别解析
  • 10倍处理效率提升!阿里云大数据AI平台发布智能驾驶数据预处理解决方案
  • Tomcat:启用https(Windows)
  • AR/VR 显示画质失真?OAS百叶窗波导案例破难题
  • Spring Cloud 企业项目技术选型
  • Fiddler-关于抓取Android手机包,安装证书后页面加载失败,提示当前证书不可信存在安全风险的问题
  • 力扣-287.寻找重复数
  • Flutter基础(前端教程①-容器和控件位置)
  • 7月5号和6号复习和预习(C++)
  • 初识mysql(一)
  • 论文略读:UniPELT: A Unified Framework for Parameter-Efficient Language Model Tuning
  • 无人机报警器探测模块技术解析
  • HDLBits刷题笔记和一些拓展知识(十一)
  • 中文编程开发工具构件系列介绍——数值比较构件
  • 视频网站弹幕系统简易实现
  • Python语言+pytest框架+allure报告+log日志+yaml文件+mysql断言实现接口自动化框架
  • Android Handler机制与底层原理详解
  • RHA《Unity兼容AndroidStudio打Apk包》
  • 什么是2.5G交换机?
  • 【如何下载网页中的视频】
  • 【HarmonyOS】鸿蒙端云一体化开发入门详解 (一)
  • 零基础 Qt 6 在线安装教程
  • vue前置知识-end
  • 呼叫系统对接智能体能解决哪些问题?
  • exFAT文件系统mp4素材文件变0字节的恢复方法
  • Spring中过滤器和拦截器的区别及具体实现
  • ROS平台上使用C++实现A*算法