1. 项目背景与核心需求
火灾检测系统在工业安全、森林防护和城市安防等领域具有重大应用价值。传统基于传感器的检测方法存在响应延迟、误报率高的问题,而基于计算机视觉的方案能够实现早期预警和精准识别。这个毕设项目选择卷积神经网络(CNN)作为核心技术,主要解决三个核心问题:
- 实时性:需要在视频流中达到每秒25帧以上的处理速度
- 准确性:在复杂背景下区分真实火焰与干扰源(如红色灯光、夕阳等)
- 泛化能力:适应不同场景(室内、室外、夜间等)的火灾检测
2. 技术方案设计
2.1 网络架构选型
经过对比实验,最终采用改进的YOLOv5s架构,主要考虑以下因素:
- 速度与精度平衡:YOLOv5s在COCO数据集上达到27.1mAP的同时保持7ms/帧的处理速度
- 部署友好:支持ONNX格式导出,兼容TensorRT加速
- 可扩展性:便于后续添加注意力机制等改进模块
网络结构调整要点:
# 模型配置文件yolov5s_fire.yaml backbone: # 减少深层卷积层数,适应火焰特征 [[-1, 1, Conv, [32, 3, 2]], # 0-P1/2 [-1, 1, Conv, [64, 3, 2]], # 1-P2/4 [-1, 3, C3, [64]], [-1, 1, Conv, [128, 3, 2]], # 3-P3/8 [-1, 6, C3, [128]], [-1, 1, Conv, [256, 3, 2]], # 5-P4/16 [-1, 9, C3, [256]], [-1, 1, Conv, [512, 3, 2]], # 7-P5/32 [-1, 3, C3, [512]], [-1, 1, SPPF, [512, 5]], # 9 ]2.2 数据集构建
自建FireDataset2024数据集包含三个关键步骤:
数据采集:
- 真实火灾场景:从公开数据集(如FireNet、FD-Dataset)筛选2000+样本
- 模拟火灾:使用烟雾机和红色灯光制造可控场景
- 负样本:包含夕阳、车灯、焊接火花等干扰源
数据标注:
- 使用LabelImg标注火焰区域和烟雾区域
- 采用YOLO格式标注,包含火焰、烟雾两类标签
数据增强策略:
- 色彩扰动:调整HSV空间参数模拟不同光照条件
- 运动模糊:模拟摄像头抖动情况
- 随机遮挡:增强模型抗干扰能力
3. 关键实现细节
3.1 特征提取优化
针对火焰的动态特性,在Backbone中增加以下改进:
动态卷积层:替换部分静态卷积,公式如下:
y = α·Conv1(x) + (1-α)·Conv2(x)其中α由小型网络动态生成,增强对火焰形态变化的适应能力
多尺度特征融合:在Neck部分引入BiFPN结构,加强浅层纹理特征与深层语义特征的融合
3.2 损失函数设计
采用改进的CIoU Loss,增加火焰区域权重:
class WeightedCIoULoss(nn.Module): def __init__(self, fire_weight=1.5): super().__init__() self.fire_weight = fire_weight def forward(self, pred, target): # 常规CIoU计算 ciou_loss = 1 - calculate_ciou(pred, target) # 火焰区域权重调整 fire_mask = (target[..., 4] == 1) # 火焰类别标签 weighted_loss = torch.where(fire_mask, ciou_loss * self.fire_weight, ciou_loss) return weighted_loss.mean()4. 训练与调优
4.1 训练策略
采用两阶段训练方案:
预训练阶段:
- 使用COCO预训练权重初始化
- 冻结Backbone,仅训练检测头
- 学习率:0.01,batch_size=32
微调阶段:
- 解冻全部层
- 采用余弦退火学习率调度
- 加入CutMix数据增强
关键超参数配置:
optimizer: SGD momentum: 0.937 weight_decay: 0.0005 lr0: 0.01 # 初始学习率 lrf: 0.2 # 最终学习率倍数 warmup_epochs: 34.2 性能优化技巧
模型量化:
- 训练后动态量化(PTDQ)减少模型体积
- 测试表明INT8量化后精度损失<1%,推理速度提升2.3倍
TensorRT加速:
- 生成FP16精度的engine文件
- 启用DLA核心加速(NVIDIA平台)
5. 部署方案
5.1 边缘计算部署
硬件选型对比:
| 设备 | 推理速度(FPS) | 功耗(W) | 成本(元) |
|---|---|---|---|
| Jetson Nano | 12 | 10 | 1500 |
| Raspberry Pi+Intel NCS2 | 18 | 8 | 1200 |
| 昇腾310 | 35 | 15 | 2500 |
推荐方案:
- 室内场景:树莓派+NCS2组合
- 工业场景:昇腾310芯片方案
5.2 系统集成
报警逻辑设计:
class FireAlertSystem: def __init__(self, model_path): self.model = load_model(model_path) self.buffer = deque(maxlen=10) # 10帧缓存 def process_frame(self, frame): # 推理 detections = self.model(frame) # 连续检测逻辑 self.buffer.append(len(detections) > 0) if sum(self.buffer) >= 6: # 10帧中6帧检测到火焰 trigger_alarm()6. 实测效果与优化方向
在测试集上达到以下指标:
- 准确率:98.2%
- 误报率:1.3%
- 推理速度:28FPS(1080p)
典型误检案例分析:
- 焊接火花:因光谱特征相似导致误报
- 强烈反光:金属表面反射形成类火焰区域
优化方向:
- 加入红外通道信息
- 引入时序建模(3D CNN)
- 开发小样本增量学习方案