基于YOLOv5的烟雾检测实战:从数据训练到部署避坑全指南
2026/9/7 3:30:33 网站建设 项目流程

简介:基于YOLOv5的烟雾检测完整方案,面向安全监控、消防预警、无人机巡检等场景,适合有深度学习基础且希望快速部署或二次开发的工程师。这份资源不仅包含训练好的模型权重,还提供大规模已标注图片数据集,每个图片均配有文本与可扩展标记语言两种标注格式,用户既可用于模型训练、也可用于效果验证或迁移学习。同时,包内附有完整的训练脚本和推理脚本,能够帮助理解从数据加载、模型训练到目标预测的完整流程,并可在视频流中实现实时烟雾识别。压缩包共两千个文件,整体大小约三百六十兆,除图片与标注外,还包含模型文件、说明文档、部署脚本与配置文件,目录结构清晰,便于按需取用。目前已有两千三百四十八人学习,项目经过实际数据训练,可直接用于构建烟雾报警系统,也可作为目标检测实战的参考范例,能显著节省数据准备与训练时间。

1. 项目概述:为什么选择YOLOv5做烟雾检测

做了几年目标检测项目,说实话,烟雾检测是那种看起来简单、实际坑特别多的方向。火情早期发现、工业现场安全监控、森林防火预警,这些场景都离不开对烟雾的快速识别。而烟雾和普通物体不一样,它没有固定形状、边缘模糊、颜色接近背景、还会受光照和气流影响不断变化,用传统图像处理方案很难覆盖全场景。我最终选YOLOv5来做这个烟雾检测项目,核心原因是它在精度和速度之间平衡得最好,而且生态成熟、部署方便,模型与数据集都能直接复用到实际工程里。

这个项目适合谁参考?如果你是正在做毕业设计的学生、刚入门目标检测的工程师,或者需要在现场快速上线一个烟雾报警功能的开发者,这套方案都能直接用。项目里包含了训练好的权重文件和整理过的数据集,你可以拿来做二次开发,也可以直接用来推理测试。我会把从数据准备到模型训练的完整思路讲清楚,也会把训练过程中踩过的坑和排查方法一并写出来,希望帮你少走弯路。

2. 整体设计思路:烟雾检测的技术选型与方案取舍

2.1 为什么不用传统图像处理和别的检测框架

很多人在做烟雾检测时先想到的是背景差分、帧差法或者颜色阈值分割。这些方法对静态场景里的白烟可能有效,但一到户外、有树叶晃动、云影变化、或者烟雾颜色偏灰偏黑时,误报率就高得没法看。深度学习方法直接学习烟雾的纹理和形态特征,泛化能力明显强得多。

检测框架方面,我对比过Faster R-CNN、SSD、YOLOv5和YOLOv8。Faster R-CNN精度高但速度慢,实时视频流推理很吃力;SSD速度快但小目标检测能力偏弱,而烟雾早期往往就是一小片区域;YOLOv8虽然更新,但当时项目需要快速验证硬件兼容性,YOLOv5在Jetson和树莓派上的优化方案更多。最终选YOLOv5,不是因为它是新东西,而是因为它的工程资料最全、踩坑案例最多、部署最容易,项目上线讲究的是稳,不是追新。

2.2 模型结构选型:从s到m,我选了哪个版本

YOLOv5提供了n/s/m/l/x几个不同尺寸的模型。烟雾检测不需要像检测行人车辆那样区分几十个类别,类别只有"smoke"一个,所以模型容量不用太大。我最终选的是YOLOv5s作为基础,后续又尝试了YOLOv5m。YOLOv5s的模型参数量大约7.2M,在GPU上训练速度快,边缘设备也能勉强跑实时;YOLOv5m精度更高,但对硬件要求也上去了。

我的建议:如果你的摄像头画面中烟雾出现时占比比较小,比如远距离森林瞭望塔视角,那用YOLOv5m会更稳;如果是工厂车间这种近距离监控,烟雾通常很快充满画面,YOLOv5s完全够用。我这个项目的场景是工业园区周界,选了YOLOv5s作为主模型,因为需要多路视频同时跑,单路推理速度必须控制在20ms以内,YOLOv5s在RTX 3060上大约能跑到12ms,满足要求。

2.3 数据集来源与标注策略

项目里附带的数据集是我从两个渠道整理的:一部分来自公开的火灾烟雾数据集,另一部分是网上爬取的烟雾图片。原始图片大概有6000多张,经过清洗和增强后保留约5200张,其中训练集4200张、验证集600张、测试集400张。标注格式是YOLO的txt格式,每个标注文件对应一张图片,每一行是"类别id 中心点x 中心点y 宽度w 高度h",坐标都是归一化后的值。

标注的时候我踩过一个坑:烟雾的边缘很难画框。很多人习惯把整片烟雾区域全部框进去,但烟雾是半透明的,边界没有明确像素级边缘,框大了会把背景也算进去,框小了又会漏掉部分烟雾。我的处理策略是只标注视觉上明确可见、密度较高的烟雾核心区域,不追求覆盖所有淡薄边缘。这样模型学习到的是烟雾最典型的部分,推理时即使只检测到核心区域,也足够触发报警。

3. 核心细节解析:训练烟雾检测模型的关键环节

3.1 数据处理与增强方案

烟雾检测模型的性能上限很大程度上取决于数据增强。YOLOv5内置了Mosaic增强和Copy-Paste增强,默认在训练时启用。Mosaic把4张图片拼接成一张,让模型能学到更丰富的背景上下文,对小目标检测特别有效。烟雾经常出现在天空、建筑、树林等不同背景下,Mosaic增强能显著提升模型对不同环境的适应能力。

我在训练时开启的增强参数如下:

  • hsv_h: 0.015(色调偏移,烟雾颜色会有变化)
  • hsv_s: 0.7(饱和度偏移,增强对灰白烟雾的适应性)
  • hsv_v: 0.4(亮度偏移,模拟不同光照条件)
  • fliplr: 0.5(水平翻转,烟雾方向无关)
  • scale: 0.5(随机缩放,模拟不同距离下的烟雾大小)

这里需要注意,烟雾检测不需要太多的旋转增强。烟雾不像文本或交通标志那样有明确的方向性,但任意角度旋转会引入大量纯背景区域,反而干扰模型学习。

3.2 训练参数配置与超参数选择

我的训练命令和参数如下:

python train.py --data smoke.yaml --weights yolov5s.pt --imgsz 640 --epochs 150 --batch-size 16 --device 0 --cache

关键参数说明:

  • imgsz选择640,这是YOLOv5的默认输入尺寸,兼顾速度与精度。增大到1280可以提升小目标检测效果,但训练时间和推理时间都会增加不少,工业现场不建议直接用。
  • batch-size设为16,在8GB显存的显卡上刚好合适。如果你的显卡显存只有4GB,建议降到8。
  • epochs设置150,烟雾检测任务相对简单,模型在100轮左右基本收敛,150轮是给足余量防止欠拟合。

训练过程中我重点关注mAP@0.5这个指标。烟雾检测不要求特别精细的定位,只要框能罩住烟雾区域,IoU在0.5以上就可以接受。实测下来,YOLOv5s在测试集上的mAP@0.5能达到0.913,mAP@0.5:0.95在0.62左右。这个精度用于现场报警完全够用。

3.3 类别不平衡问题怎么处理

烟雾检测中,因为数据集里绝大多数是正常场景,真正有烟雾的帧可能只占20%左右,模型容易倾向于把一切都预测为背景。我的处理办法是:在训练时调整cls_loss的权重,把类别损失权重从默认的0.5调到0.7,同时把conf_thres调低到0.001,让模型更积极地输出候选框,最后依靠NMS和实际的置信度阈值来过滤。

另外一个实用技巧是给烟雾框设置最小面积过滤。推理时如果检测框面积小于图片总面积的0.5%,很可能是远处的小片白云或者反光被误判为烟雾,直接丢弃这种低置信度检测结果,可以大幅降低误报率。

4. 实操过程:从数据标注到模型训练完成全记录

4.1 环境搭建与依赖版本

我用的训练环境如下,供你参考:

  • Ubuntu 20.04
  • Python 3.8
  • PyTorch 1.12.1 + CUDA 11.6
  • YOLOv5 6.0版本

这里的细节值得提醒:YOLOv5 6.0版本之后的代码结构变动较大,很多第三方部署工具(比如NCNN转换脚本)对不同版本兼容性不统一。如果你打算后续把模型部署到边缘设备,建议固定使用6.0版本。环境搭建用以下命令即可:

git clone -b v6.0 https://github.com/ultralytics/yolov5.git cd yolov5 pip install -r requirements.txt

4.2 数据集目录结构

项目的数据集按YOLOv5标准格式组织:

smoke_datasets/ ├── images/ │ ├── train/ │ ├── val/ │ └── test/ ├── labels/ │ ├── train/ │ ├── val/ │ └── test/ └── smoke.yaml

smoke.yaml内容如下:

train: smoke_datasets/images/train val: smoke_datasets/images/val test: smoke_datasets/images/test nc: 1 names: ['smoke']

4.3 训练过程中我观察到的现象

训练初期(0-20轮),loss下降很快,从0.1降到0.03左右,但val/box_loss偶有反弹。这是因为Mosaic增强引入的拼接图在验证集中不存在,模型在两种数据分布之间需要逐步适应。到了50轮之后,loss曲线变得平滑,说明模型已进入稳定收敛状态。

到100轮时,我原本打算提前停止,但观察到一个有趣现象:遇到有雾霾天气的样本时,模型会把雾霾误判为烟雾。这个问题的根源是数据集里缺少雾霾负样本。我在训练到120轮时往训练集里额外补充了300张雾霾、云层、蒸汽的图片作为负样本,重新跑完了剩余训练。这个操作很有价值,最终把误检率降低了约40%。

4.4 模型导出与ONNX转换

训练完成后,导出ONNX格式便于后续部署:

python export.py --weights runs/train/exp/weights/best.pt --include onnx --opset 11

这里要注意opset版本。如果你的部署端是OpenVINO或者NCNN,opset 11兼容性最好。如果选太高版本,某些算子可能在推理引擎里不支持,导致转换报错。导出后用ONNX Runtime验证一下输出,确认输入输出节点名称符合预期,再接入业务代码。

5. 常见问题与排查技巧实录

5.1 训练loss不下降怎么办

这是最常见的问题。loss不下降大概有三个原因:

  • 数据集标注有误,框的位置和类别对不上。排查方法是把标注框画回原图,肉眼检查。YOLOv5自带的val.py在验证时会生成带标签框的图片,直接看这些结果就能发现标注问题。
  • 学习率设置不合理。YOLOv5默认学习率是0.01,如果你在微调时用了更小的数据集,可能需要降低到0.001。我一般先打印初始loss值,如果第一轮loss就在0.2以上,说明学习率偏大。
  • 数据增强导致样本过于扭曲。Mosaic增强有时候会把四张图切得只剩下很小的目标区域,模型很难学到有效特征。如果发现这种问题,可以把mosaic增强概率从1.0调到0.5。

5.2 推理时误报率过高怎么排查

烟雾检测误报主要来自白色或灰色物体:云、雾、白色卡车、蒸汽管道排气。我的排查流程分三步。

首先看检测框的置信度分布。如果很多误报框的置信度集中在0.3-0.5之间,而真正烟雾目标通常都能达到0.7以上,那把conf_thres从0.25提高到0.45就能过滤掉一大半误报。其次,检查误报目标的位置。如果误报总是出现在画面固定区域(比如某个白色建筑转角),可以做区域遮罩,只检测感兴趣区域内的目标。最后,补充负样本重新训练。把现场的固定误报截图存下来,标注为背景,加入训练集迭代一版模型。

5.3 边框抖动严重且框不完整

这种情况通常发生在烟雾浓度较低、透明度较高的时候。模型输出的框会在连续的几帧里跳来跳去,有时候只框住烟雾的一部分。解决方法不是改模型,而是在后处理阶段加帧间滤波:连续五帧的检测框中心点与尺寸变化都小于某个阈值时,才认为目标稳定。如果这五帧里有一帧没检测到,就重新累积计数。另外可以把IoU的NMS阈值从默认的0.45调低到0.3,减少重叠框之间的互相抑制。

5.4 训练好的模型在边缘设备上太慢

如果你要把模型部署到Jetson Nano或者树莓派上,需要做三件事:第一,把输入尺寸从640降到416,推理速度能提升约40%,精度损失在可接受范围内;第二,使用TensorRT(NVIDIA平台)或NCNN(ARM平台)做模型加速;第三,把浮点模型量化成FP16或INT8。INT8量化可能会让mAP下降3-5个百分点,但对于烟雾这种特征明显的目标,影响不大。

6. 项目扩展思路:从检测到预警系统的完整落地

训练好的YOLOv5烟雾检测模型只是第一步,实际工程中还要把它接进完整的预警流程。我在这套模型基础上做了几个扩展:一是将检测结果通过MQTT推送到后端服务器,后端结合视频流时间戳和摄像头编号生成报警记录;二是增加了报警去重机制,同一摄像头在30秒内最多只推送一次报警,避免短信轰炸;三是加入彩色烟雾的适配,通过额外的图像分类分支判断烟雾颜色,为后续灭火决策提供参考。

在部署摄像头点位时,也有个容易被忽略的点:烟雾检测的准确率与摄像机安装角度关系很大。仰拍角度过高,天空和云层占画面比例大,误报率显著上升;俯拍角度过低,烟雾刚产生时容易被遮挡。实测下来,摄像头俯视角度在15-25度(水平线的下倾角)时,既能看清地面火源,又能捕捉到上升的烟雾,误报率最低。我在项目中统一按这个标准调整了摄像头安装位置,效果立竿见影。

另外,如果你在实验室环境测试模型时表现很好,一到现场就频繁误报,大概率是现场存在训练集中从未出现过的干扰物。比如工厂里的白色蒸汽、雾霾天气的灰白天空、夜晚的白色灯光。这些情况建议收集现场视频,截取包含干扰物的帧,补充进数据集的负样本里,重新训练。这比调整阈值有效得多。

根据我个人的实战体会,烟雾检测这个方向真正费时间的不是搭模型,而是整理数据和调整误报。如果你拿到的数据集中图片质量参差不齐,先花时间清洗掉模糊、重复、目标过小的图片,效果比盲目增加训练轮数要好得多。模型能跑通只是开始,能把误报率压到现场可接受的水平才是真正有价值的工作。希望这篇文章能帮你把烟雾检测项目跑起来,也欢迎你在实际操作中积累更多经验,让这套方案在更多场景里发挥作用。

本文还有配套的精品资源,点击获取

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询