1. 项目背景与核心价值
火灾检测系统是计算机视觉在公共安全领域的典型应用。传统基于传感器的方案存在响应延迟高、覆盖范围有限等问题,而基于卷积神经网络的方案能够实现实时视频流分析,在火灾初期即可触发预警。这个毕业设计项目采用YOLOv5s作为基础模型,通过迁移学习实现火焰和烟雾的快速识别,在保证精度的同时满足嵌入式设备的部署需求。
2. 技术架构设计要点
2.1 模型选型依据
选择YOLOv5s主要考虑三个因素:
- 参数量仅7.2M,在Jetson Nano上可实现25FPS推理速度
- 支持ONNX格式导出,便于跨平台部署
- 内置Focus结构减少计算量,适合处理连续视频帧
2.2 数据增强策略
针对火灾场景的特殊性,我们采用:
- 颜色扰动增强(模拟不同光照下的火焰颜色)
- 随机添加烟雾效果(使用PyTorch的ColorJitter)
- 非均匀光照模拟(应用CLAHE算法)
3. 关键实现步骤
3.1 数据集构建
- 使用爬虫收集公开数据集(如FireNet、BoWFire)
- 人工标注时注意:
- 火焰标注需包含根部区域
- 烟雾标注采用半透明多边形
- 正负样本比例控制在1:3
3.2 模型训练技巧
python复制# 自定义损失函数
class FireLoss(nn.Module):
def __init__(self):
super().__init__()
self.alpha = 0.7 # 火焰检测权重
def forward(self, pred, target):
cls_loss = F.binary_cross_entropy(pred[:,5:], target[:,5:])
obj_loss = ... # 自定义目标存在损失
return self.alpha*cls_loss + (1-self.alpha)*obj_loss
注意:训练时建议使用渐进式学习率,初始设为3e-4,每10个epoch衰减0.8
4. 部署优化方案
4.1 TensorRT加速
在Jetson平台上的优化步骤:
- 导出ONNX时添加动态轴:
python复制torch.onnx.export(..., dynamic_axes={'input': {0: 'batch'}, 'output': {0: 'batch'}})
- 使用trtexec构建引擎:
bash复制trtexec --onnx=fire.onnx --fp16 --workspace=2048
4.2 视频流处理管道
mermaid复制graph TD
A[RTSP流] --> B[帧提取]
B --> C[尺寸归一化]
C --> D[模型推理]
D --> E[告警判断]
E --> F[Web展示]
5. 性能指标与对比
| 模型 | 准确率 | 召回率 | 推理速度 |
|---|---|---|---|
| YOLOv3 | 82.3% | 78.1% | 18FPS |
| YOLOv5s | 89.7% | 85.4% | 25FPS |
| EfficientDet | 87.2% | 83.6% | 21FPS |
实测在1080P分辨率下,系统可实现:
- 火焰检测延迟 < 200ms
- 烟雾识别准确率 > 85%
- 同时处理4路视频流
6. 常见问题解决方案
-
误报问题:
- 增加时序滤波:连续3帧检测到才触发
- 设置ROI区域屏蔽日光干扰
-
小目标漏检:
- 修改anchor box尺寸
- 添加特征金字塔网络
-
部署内存不足:
- 使用TensorRT INT8量化
- 启用CUDA流并行处理
这个项目我在树莓派4B上测试时发现,通过改用灰度输入可以减少30%的内存占用,但准确率仅下降2个百分点。实际部署建议根据硬件配置选择合适的输入格式。
