恒美微站 Logo 恒美微站
  • 首页
  • 关于我们
  • 建站服务
  • 主题模板
  • 案例展示
  • 资讯中心
  • 联系我们

基于YoloV5的火灾检测系统实现:从数据构建到部署全流程

  • 首页
  • 资讯中心
  • /
  • 基于YoloV5的火灾检测系统实现:从数据构建到部署全流程

相关资讯

ONNX Runtime 在 ARM Linux 上的编译与 CPU 执行提供者调优 2026/9/12 2:03:56
SAP Fiori Launchpad页面管理与优化实践 2026/9/12 2:03:56
MODBUS协议从帧格式到调试实战:嵌入式工程师的RS-485通信排障指南 2026/9/12 1:58:56

最新资讯

工业级旋转目标检测从零手搓实战指南
Java处理外部API JSON数据的实战指南
无限画布性能真相:百万节点支撑的四大技术硬指标
多Agent点对点通信协议Hermes Peer:从中心化瓶颈到轻量协作实战
基于 error-analysis 命令的分布式系统错误分析与根因排查实战指南
verl v0.5 Preview 镜像解析:CUDA 12.8 + PyTorch 2.7.1 下的 SGLang 与 Megatron 训练部署方案

今日推荐

MATLAB仿生优化框架:长鼻浣熊算法多策略融合实现
【JAVA毕设源码分享】基于 JavaWeb 的校园一卡通管理系统的设计与实现 基于 JavaWeb 的校园卡业务管理系统(程序+文档+代码讲解+一条龙定制)
【JAVA毕设源码分享】基于 Java 的图书馆借阅管理平台的搭建与实现 基于 Java 的图书馆综合管理系统(程序+文档+代码讲解+一条龙定制)

本周热门

超人会飞不算本事:系统稳定依赖清晰规则与边界设计
超人VS蜘蛛侠:拆解超级IP的影响力与传播方法论
基于CNN的调制信号识别:MATLAB实现时频图分类实战

本月精选

自研推理加速器Redwood:两周内实现PyTorch模型高效部署的实战教程
V4L2摄像头采集实战:从camera_client.rar到出图全流程解析
从“谁发明了钢琴键”到知识问答智能体:RAG与记忆工程实践

基于YoloV5的火灾检测系统实现:从数据构建到部署全流程

发布时间:2026/9/12 2:03:56
基于YoloV5的火灾检测系统实现:从数据构建到部署全流程 简介这是一套基于YoloV5的火灾识别与检测系统属于完整的Python深度学习项目源码核心思路是用目标检测模型对图像中的火焰区域进行定位与识别适合计算机视觉、人工智能、通信工程、自动化等专业的学生用于课程设计、毕业设计或项目初期演示。压缩包共130个文件大小约20.68MB主要包含44个YAML配置、33个Python脚本、5个Shell运行脚本、1个模型权重文件、多张图片样本和MD说明文档目录按配置、代码、数据、说明等模块组织便于快速查找和修改。模型权重与推理脚本搭配使用可以复现火灾检测流程也能换成自己的图片进行测试有一定基础的人还可以在此基础上调整数据集和训练参数拓展成其他目标检测项目。描述中注明代码已经测试运行成功下载后可通过README了解启动方式对初学者比较友好。目前已有99人学习/浏览适合需要快速落地深度学习项目的初中级学习者。1. 火灾检测不是分类题而是定位题把火灾识别做成一个单纯的图像分类任务是这类项目最容易走偏的方向。分类模型只会告诉你“图里有没有火”而实际监控场景需要的是“火在画面哪个位置、面积大概多大、有没有蔓延趋势”。这也是 YoloV5 在火灾检测场景里比传统图像分类更合适的原因它一次前向推理同时输出目标的类别和边界框配合视频流可以做连续帧的跟踪和面积变化估计而这些信息才是消防联动和早期报警的基础。一个完整的 YoloV5 火灾识别系统链路大致是构建带标注的火焰/烟雾数据集 → 调整 YoloV5 网络结构和训练超参数 → 训练得到权重 → 接入摄像头或图片/视频推理 → 对输出结果做误报抑制和报警判定。这套方案不需要从零写网络结构YoloV5 的工程化程度足够高普通机器也能训练这也是它成为大量毕业论文和实战项目首选的原因。下文按这个链路展开每个环节给出可复现的命令和参数说明并标注哪些地方容易踩坑。2. 构建火灾数据集与 YoloV5 的标注格式2.1 数据来源不要只靠网上下载的公开图片火灾检测效果的上限由数据集决定。网络上公开的火灾图片总量有限且多为新闻图片画面中火焰通常较大、较居中这与监控摄像头“远处小火苗、大面积烟雾”的真实场景差异很大。常见做法是混合多个来源公开火灾数据集中的图片筛选清晰、无严重水印的样本。从视频中抽帧消防演习录像、工厂监控片段、火灾实验视频按每秒 1~2 帧抽取能得到连续姿态的火焰样本。夜间和弱光场景单独收集。火焰在夜间与白天视觉特征完全不同只训练白天样本夜间部署会大量漏检。负样本同样重要。晚霞、红色灯光、汽车尾灯、焊接火花都是常见误报来源需要收集并标注为背景。数据量方面一个能用于训练的火灾数据集最少需要 2000~3000 张图片。如果包含烟雾检测烟雾样本需要单独保证数量因为烟雾是半透明目标边界模糊标注难度和训练难度都更大。2.2 标注格式YOLO 的 TXT 格式与归一化坐标YoloV5 使用与图片同名的.txt文件存放标注信息每行代表一个目标。用 LabelImg 或 Labelme 标注后导出为 YOLO 格式即可。也可以直接用 LabelImg其自带 YOLO 格式输出选项避免后续转换。标注格式为class_id center_x center_y width height其中坐标全部归一化到 0~1 区间即像素坐标除以图片宽或高。这张图两个类别0 表示火焰、1 表示烟雾0 0.523 0.678 0.126 0.183 1 0.315 0.442 0.208 0.095注意center_x center_y width height使用的是中心点坐标和宽高不是左上角坐标。如果用 OpenCV 或 PIL 读取标注做数据增强需要把中心点坐标换算回像素坐标# 将归一化的 YOLO 坐标转回像素坐标便于可视化检查 # 假设图片宽 w、高 h归一化坐标 cx, cy, bw, bh x1 int((cx - bw / 2) * w) y1 int((cy - bh / 2) * h) x2 int((cx bw / 2) * w) y2 int((cy bh / 2) * h)标注完成后检查每个类别在训练集和验证集中的数量分布是否均衡。火焰类别可能占 70% 以上烟雾少于 30%训练出来的模型对烟雾几乎不敏感。遇到这类情况通过对烟雾样本做水平翻转、亮度扰动、加噪来扩充数量或直接对烟雾样本过采样。2.3 目录结构与数据划分YoloV5 训练时读取一个 data yaml 文件该文件指向训练集和验证集的图片路径。推荐按以下目录结构组织数据集fire_dataset/ ├── images/ │ ├── train/ │ └── val/ ├── labels/ │ ├── train/ │ └── val/ └── fire.yamlfire.yaml的内容train: fire_dataset/images/train val: fire_dataset/images/val nc: 2 names: [fire, smoke]注意train和val的值是图片目录的路径。YoloV5 会根据这个路径自动把 images 换成 labels 去找对应的标注文件。划分建议训练集 85%验证集 15%。不要在训练过程中使用测试集做验证否则最终评估结果虚高。划分时需要确保同一条视频的连续帧不跨集合。连续帧画面高度相似如果一部分进训练集、一部分进验证集验证集损失会失真。按视频文件整体划分而不是按帧随机分配。3. YoloV5 训练火灾检测模型从配置到模型收敛3.1 环境准备与最小训练命令YoloV5 的依赖主要包括 PyTorch、OpenCV、numpy、matplotlib、PyYAML 等。用 pip 安装即可git clone https://github.com/ultralytics/yolov5 cd yolov5 pip install -r requirements.txt提示Python 版本建议 3.8~3.10。Windows 下如果遇到 pycocotools 安装失败改用pip install pycocotools-windows或直接删除 requirements.txt 中对应的行因为它只在计算 COCO 指标时需要。训练命令python train.py --img 640 --batch 16 --epochs 150 --data fire.yaml --weights yolov5s.pt --name fire_exp各参数含义--img 640输入图片分辨率训练时图片会缩放至 640×640。较高分辨率对小火焰目标有帮助但对显存要求更高。--batch 16批大小。显存不足时报CUDA out of memory可以降到 8 或 4。--epochs 150训练轮数。火灾数据集中小目标多模型收敛比常规目标检测任务慢低于 100 轮效果通常不理想。--weights yolov5s.pt预训练权重YoloV5 在 COCO 上预训练过的模型迁移学习可以显著加速收敛。显存有限的机器选 yolov5s服务器可以换 yolov5m 或 yolov5l。3.2 预训练权重的作用与选择YoloV5 提供 n/s/m/l/x 五个尺寸的模型其中 s 版本训练时长约为 m 版本的三分之一精度差距在 5% 以内。火灾检测里火焰和烟雾的纹理特征不算细微s 版本通常够用。但如果检测目标里包含远处小火苗模型容量可能不够此时优先调高输入分辨率而不是换大模型因为增加分辨率对感受野和细节保留的影响更直接。加载预训练权重时注意类别数不匹配。YoloV5 在加载 COCO 预训练权重时会自动裁剪最后一层只保留与新类别数匹配的部分所以数据集的nc设置不需要和 COCO 一致。3.3 训练过程中的实时监控与判断训练过程中终端会持续输出如下信息Epoch gpu_mem box obj cls labels img_size 99/150 2.1G 0.0325 0.0146 0.00086 7 640关注三类 loss 是否都在下降box是定位损失obj是置信度损失cls是分类损失。其中obj对火灾检测影响最大因为火焰目标尺寸多变前景背景区分难度大。训练 50 轮左右如果obj已经降到 0.01 以下且不再变化说明模型开始收敛。训练结束后验证集指标保存在runs/train/fire_exp/results.csv和results.png中。results.png中重点看 P精确率和 R召回率两条曲线火灾检测场景更关注召回率因为漏报一次火灾的代价远远大于一次误报。如果 R 值低于 0.8优先检查数据集是否缺少某种形态的火焰样本而不是盲目增加训练轮数。3.4 显存不足与训练中断的处理常见报错和处理方式# 显存不足 python train.py --img 640 --batch 8 --epochs 150 --data fire.yaml --weights yolov5s.pt # 继续中断的训练自动从上次保存的 checkpoint 恢复 python train.py --img 640 --batch 16 --epochs 150 --data fire.yaml --weights runs/train/fire_exp/weights/last.ptlast.pt每轮都会保存best.pt保存验证集指标最好的一轮。如果训练中断用last.pt恢复会从断点继续。命令行里的--epochs参数填的是总轮数YoloV5 会读取 checkpoint 中已完成的轮数自动计算剩余轮数。4. 减少漏检与误报针对火灾场景的 YoloV5 调优方案4.1 提高输入分辨率与自适应锚框YoloV5 默认输入分辨率是 640×640但在火灾场景中初期火苗可能只占画面的 2% 以下在 640×640 下只有十几个像素检测难度非常大。把输入分辨率提升到 1280×1280能明显提升小目标召回率代价是训练时间约增加 3 倍显存需求成平方增长。python train.py --img 1280 --batch 8 --epochs 150 --data fire.yaml --weights yolov5s.pt更高的输入分辨率同时会影响锚框尺寸。YoloV5 在训练开始时会自动基于标注数据计算锚框前提是标注的宽高比分布与默认锚框差异较大。建议第一次训练完成后观察 anchor 的分析结果确认各类目标的宽高分布。具体操作是在训练命令中加入--noautoanchor时模型会跳过自适应计算。大多数情况下保留自动计算即可不必手动调整。4.2 修改 YoloV5 网络结构添加 P2 小目标检测层YoloV5 原始结构包含 P3、P4、P5 三个检测层分别对应下采样 8 倍、16 倍、32 倍的特征图。下采样倍数越大特征图分辨率越低小目标特征流失越严重。火灾检测中火苗和烟雾属于典型小目标一个有效做法是增加 P2 检测层即下采样 4 倍的高分辨率特征图。在models/yolov5s.yaml中修改检测层配置# 原来的 head 部分 head: [[-1, 1, Conv, [512, 1, 1]], [-1, 1, nn.Upsample, [None, 2, nearest]], [[-1, 6], 1, Conv, [256, 1, 1]], # 16 倍下采样特征 [-1, 1, Conv, [256, 3, 3]], [[-1, 4], 1, Conv, [256, 1, 1]], # 8 倍下采样特征 [-1, 1, Conv, [256, 3, 3]], [[-1, 2], 1, Conv, [128, 1, 1]], # 添加4 倍下采样特征 [-1, 1, Conv, [128, 3, 3]], [[-1, 13], 1, Conv, [128, 3, 3]], # 4 倍下采样高分辨率检测层 ],修改后训练时模型结构会随之变化预训练权重中对应层参数无法加载训练时间会延长。如果训练资源有限更务实的方案是先不做结构调整只用 1280×1280 分辨率训练配合后续的推理优化策略。4.3 超参数调整与 NMS 阈值优化YoloV5 默认超参数文件是data/hyp.scratch-low.yaml其中与火灾检测最相关的是lr0: 0.01 # 初始学习率 lrf: 0.2 # 最终学习率 lr0 * lrf mosaic: 1.0 # mosaic 增强概率 mixup: 0.2 # mixup 增强概率 fl_gamma: 0.0 # focal loss 参数火灾检测任务建议做两处调整mosaic和mixup降低到 0.5 和 0.0。火灾数据集中火焰的形态与背景融合度较高过度使用数据增强会让烟雾边界更加模糊导致精度不升反降。如果训练过程中损失震荡剧烈初始学习率从 0.01 降到 0.001 到 0.005 之间。火焰样本中正负样本比例天然不平衡学习率过大容易让分类层在少数类别上震荡。推理阶段 NMS 参数通过detect.py控制python detect.py --weights runs/train/fire_exp/weights/best.pt --source test.jpg --conf-thres 0.25 --iou-thres 0.45--conf-thres是置信度阈值火灾检测建议设置在 0.15~0.25 之间。这个阈值决定只输出置信度大于该值的检测框。调高到 0.5 以上会滤掉大量小火焰目标直接表现为漏检增加。误报偏高时优先检查负样本数量而不是粗暴调高conf-thres。4.4 时间序列信息的融入视频帧间稳定性判定单帧检测不可避免地会出现偶发误报。监控场景中火焰在连续帧中的位置是连续变化的而误报往往是瞬时噪声。常见的后处理逻辑是# 连续 N 帧检测到同一位置的火焰目标才触发报警 # frame_queue 保存最近 N 帧的检测结果 def should_alarm(frame_queue, current_box, frame_count, threshold3): # 当前帧检测到目标 if current_box is None: return False # 与之前帧的中心点距离不超过一定像素 for hist_box in frame_queue: if abs(hist_box[0] - current_box[0]) 30 and abs(hist_box[1] - current_box[1]) 30: frame_count 1 if frame_count threshold: return True return False这个逻辑的核心思想是单帧检测不作为报警依据只有连续多帧在相近位置都检测到火焰才触发。误报通常不具备时间连续性该策略能过滤掉 80% 以上的偶发误报而且不增加任何推理成本。5. 部署推理与系统集成边缘设备上的 YoloV5 火灾检测5.1 图片、视频和摄像头实时检测命令训练完成后部署阶段的核心程序是推理。YoloV5 自带的detect.py已覆盖常见输入源# 单张图片 python detect.py --weights runs/train/fire_exp/weights/best.pt --source fire.jpg # 视频文件输出标注后的视频 python detect.py --weights runs/train/fire_exp/weights/best.pt --source test.mp4 --save-txt # 摄像头实时检测source 为 0 表示本机默认摄像头 python detect.py --weights runs/train/fire_exp/weights/best.pt --source 0--save-txt会保存含类别、置信度和坐标的文本结果便于报警程序读取。输出目录为runs/detect/exp/每次运行自动生成新的 exp 文件夹不会覆盖已有结果。火灾检测的实时系统中--conf-thres建议设在 0.2~0.25。烟雾的置信度天然低于火焰阈值设太低会引入大量背景噪声设太高则会漏掉早期阴燃产生的低浓度烟雾。5.2 用 Python API 接入业务系统实际项目中通常需要把检测结果接进监控大屏或联动报警装置此时用torch.hub加载模型更灵活import torch import cv2 # 加载训练好的模型 model torch.hub.load(ultralytics/yolov5, custom, pathruns/train/fire_exp/weights/best.pt, force_reloadTrue) model.conf 0.25 # 置信度阈值 model.iou 0.45 # NMS 阈值 # 读取视频帧并推理 cap cv2.VideoCapture(0) while True: ret, frame cap.read() if not ret: break results model(frame) # 遍历检测结果 for *xyxy, conf, cls in results.xyxy[0].tolist(): label model.names[int(cls)] # 业务逻辑只有检测到 fire 类目标且置信度大于 0.8 时才触发报警 if label fire and conf 0.8: # 调用报警接口 pass需要注意results.xyxy[0]返回的坐标是像素坐标格式为[x1, y1, x2, y2, confidence, class_id]。绘制边界框时直接用这四个坐标即可不再需要手动转换。该推理方式默认使用 CPU 还是 GPU取决于运行时环境中 PyTorch 是否检测到 CUDA 设备在无 GPU 的机器上会自动回退到 CPU 推理。5.3 推理速度与硬件选型YOLOv5s 在 CPU 上推理一张 640×640 图片大约需要 0.2~0.5 秒在 GPU如 RTX 3060上约为 10~20 毫秒。摄像头场景通常 25fps 即每帧 40ms因此 CPU 无法满足 640 分辨率的实时检测。有两种处理策略降低输入分辨率到 416×416推理时间大约减半小目标的精度会相应下降。抽帧检测每 3~5 帧检测一次中间帧直接沿用上一次检测结果。火焰运动速度相对较慢间隔 2~3 帧检测损失有限但 CPU 的实时性会有明显改善。边缘设备方面Jetson 系列、瑞芯微 RK3588、算能盒子都有人跑过 YOLOv5 的部署。Jetson Nano 上 YOLOv5s 大约能跑到 12~15fps属于“能跑但不太流畅”的水平RK3588 搭配其 NPU 能达到 30fps 左右更适合实际产品化。部署到 NPU 平台的过程一般涉及模型导出python export.py --weights runs/train/fire_exp/weights/best.pt --include engine这条命令导出 TensorRT engine 格式在 Jetson 或支持 TensorRT 的平台推理速度会有数量级提升。导出时注意--img参数要与训练时一致否则模型输出的特征图尺寸会与预期不匹配。5.4 误报兜底基于面积比例和位置约束的后过滤火焰检测的误报不能完全依赖模型训练部署时增加业务规则能显著降低误报率。两条简单且有效的规则检测框面积不超过画面总面积的 30% 时才触发报警。防止大面积夕阳或红色建筑墙面触发误报。# 计算检测框面积与画面面积之比过滤过大目标 box_area (x2 - x1) * (y2 - y1) frame_area frame.shape[0] * frame.shape[1] if box_area / frame_area 0.3: # 可能是大面积红色区域误报跳过 continue火焰检测框中心点位于画面顶端 10% 区域内时大概率是红灯笼或警报灯这类目标通常安装在屋顶或墙角可以排除。这项规则按实际场景中摄像头安装位置调整并不是通用规则。规则过滤放在模型推理之后不需要重新训练模型适合在部署环境中针对具体场景快速调整。本文还有配套的精品资源点击获取

关于恒美微站

恒美微站专注于为个体商户、工作室提供极简自助建站服务,让每个人都能轻松拥有专业网站。

快速链接

  • 关于我们
  • 建站服务
  • 主题模板
  • 案例展示
  • 资讯中心

服务项目

  • 可视化建站
  • 拖拽编辑
  • 主题定制
  • SEO 优化
  • 网站托管

联系方式

  • 📍 地址:北京市朝阳区建国路 88 号
  • 📞 电话:400-888-8888
  • ✉️ 邮箱:info@hmyw.cn
  • 🕐 时间:周一至周日 9:00-18:00

© 2024 恒美微站 hmyw.cn 版权所有 | 京 ICP 备 12345678 号