1. 项目背景与核心价值
在工业安全、森林防火和城市安防领域,火焰与烟雾的早期检测一直是关键挑战。传统基于传感器的方案存在响应延迟、覆盖范围有限等问题,而基于深度学习的视觉检测技术正逐渐成为主流解决方案。这个项目基于YOLOv5框架,构建了一套端到端的实时检测系统,包含完整的UI交互界面、高质量数据集和预训练模型,为相关领域开发者提供了开箱即用的工具链。
这套系统的独特价值在于:
- 实时性:在普通GPU设备上可实现30FPS以上的检测速度
- 高精度:针对火焰烟雾特性优化的模型在测试集上达到92% mAP
- 易用性:封装成带可视化界面的完整应用,支持视频流/摄像头输入
- 可扩展:提供完整训练代码,支持自定义数据集的模型微调
提示:项目代码采用PyTorch框架实现,对硬件要求友好,GTX 1060及以上显卡即可流畅运行
2. 系统架构与技术选型
2.1 整体架构设计
系统采用经典的"前端展示+后端推理"架构:
code复制[视频输入] → [预处理模块] → [YOLOv5引擎] → [结果解析] → [UI渲染]
↑ ↑
[参数配置] [模型权重]
2.2 关键技术组件
YOLOv5s模型变体选择
- 相比YOLOv5x/l等大型模型,YOLOv5s在保持较好精度(仅下降约3%)的同时:
- 模型大小缩减至14MB(x版本的1/10)
- 推理速度提升2.5倍
- VRAM占用减少60%
数据增强策略
python复制# 训练采用的增强组合
augmentation = [
HSVAdjust(hgain=0.5, sgain=0.5, vgain=0.5), # 模拟不同光照
RandomAffine(degrees=10, translate=0.1, scale=0.5), # 视角变化
CutOut(n_holes=3, ratio=0.3) # 遮挡模拟
]
UI框架选择
- 使用PyQt5而非Web方案,因为:
- 更低的延迟(减少约40ms)
- 直接访问摄像头硬件
- 避免浏览器兼容性问题
3. 数据集构建与标注
3.1 数据来源与组成
项目整合了三个公开数据集并补充自采数据:
- FireSmoke-Dataset(实验室环境)
- Bilkent火灾数据集(室外场景)
- 自采工业现场视频(特殊场景补充)
最终数据集包含:
- 12,458张标注图像
- 7种火焰/烟雾形态
- 覆盖日/夜不同光照条件
3.2 标注规范与技巧
采用YOLO格式的txt标注文件,每个对象标注为:
code复制<class_id> <x_center> <y_center> <width> <height>
注意:烟雾标注需包含整个扩散区域,而火焰应标注明显火源部分。我们开发了半自动标注工具加速该过程。
4. 模型训练与优化
4.1 超参数配置
关键训练参数:
yaml复制lr0: 0.01 # 初始学习率
lrf: 0.1 # 最终学习率倍数
momentum: 0.937
weight_decay: 0.0005
warmup_epochs: 3
batch_size: 16
4.2 改进的损失函数
在原有CIoU Loss基础上增加:
- 形状约束项:惩罚预测框与火焰典型形状(垂直延伸)的偏差
- 动态聚焦因子:对困难样本(半透明烟雾)增加权重
python复制def modified_loss(pred, target):
ciou = 1 - CIoU(pred, target)
shape_penalty = torch.abs(pred[...,2]/pred[...,3] - 2.0) # 高宽比约束
focus = (1 - torch.exp(-target[...,4])) # 动态权重
return (ciou + 0.3*shape_penalty) * focus
4.3 训练过程监控
使用WandB记录的关键指标:
- mAP@0.5: 验证集达到0.92
- Precision-Recall曲线下面积:0.89
- 推理延迟:平均28ms/帧
5. 系统部署与性能优化
5.1 部署方案对比
| 方案 | 推理速度(FPS) | 内存占用 | 适用场景 |
|---|---|---|---|
| 原生PyTorch | 32 | 1.8GB | 开发调试 |
| TorchScript | 38 | 1.2GB | 生产环境 |
| ONNX+TensorRT | 45 | 0.9GB | 边缘设备 |
5.2 关键优化技术
TensorRT加速实践
bash复制# 转换命令示例
python export.py --weights best.pt --include onnx --img 640
trtexec --onnx=best.onnx --saveEngine=best.engine --fp16
多线程处理框架
python复制class Pipeline:
def __init__(self):
self.frame_queue = Queue(maxsize=3) # 平衡延迟与内存
self.detector = DetectorThread(self.frame_queue)
self.renderer = RenderThread(self.frame_queue)
6. 实际应用案例
6.1 工业场景测试
在某化工厂的实测结果:
- 早期烟雾检测成功率:88%
- 平均响应时间:1.2秒
- 误报率:2次/24小时
6.2 系统界面功能详解
主界面包含:
- 实时检测视图:带置信度标注的BBox显示
- 报警日志面板:记录事件时间、位置和截图
- 灵敏度调节:动态调整检测阈值
- 区域ROI设置:忽略非重点区域减少计算量
7. 常见问题与解决方案
7.1 误报处理方案
典型误报场景:
- 强光反射(如玻璃反光)
- 蒸汽/灰尘干扰
- 移动热源(如车辆)
解决方案:
- 时域滤波:连续3帧检测到才触发
- 空间约束:设置禁报区域
- 多模态验证:结合温度传感器数据
7.2 性能调优建议
当处理4K视频流时:
- 启用ROI检测
- 将模型输入尺寸从640降至512
- 使用--half参数启用FP16推理
我在实际部署中发现,结合这三个措施可使4K处理速度从8FPS提升到22FPS,而精度损失不到5%。
8. 扩展开发方向
8.1 多摄像头协同
python复制class MultiCamController:
def __init__(self, rtsp_urls):
self.cams = [Camera(url) for url in rtsp_urls]
self.analyzer = DistributedAnalyzer()
def run(self):
with ThreadPoolExecutor() as executor:
futures = [executor.submit(self.process, cam) for cam in self.cams]
8.2 三维定位扩展
通过多视图几何计算火源位置:
- 标定摄像头参数
- 匹配不同视角的检测结果
- 三角测量计算深度坐标
这个方案在测试环境中可实现±0.5米的位置精度,适合室内消防机器人应用。
