# 基于深度学习的火灾报警系统 **Repository Path**: fanzsss/deep-learning-work-1 ## Basic Information - **Project Name**: 基于深度学习的火灾报警系统 - **Description**: 本项目是一个基于 PyTorch 的火情智能识别系统,主要用于对图像中的火情与非火情场景进行二分类识别。项目以卷积神经网络(CNN)为基础,在模型中加入残差连接,并结合多层卷积特征提取提升模型对火焰、烟雾及复杂背景的识别能力。系统包含完整的训练、验证、测试和模型保存流程,同时提供基于 Streamlit 的可视化网页,支持单张图片检测、摄像头实时监测、火情概率显示、报警提示、检测记录和概率变化曲线 - **Primary Language**: Python - **License**: MulanPSL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2026-10-10 - **Last Updated**: 2026-10-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 🔥 火情智能识别系统 基于 PyTorch 构建的火情二分类项目,支持模型训练、测试评估、单张图片识别以及 Streamlit 网页端展示。 ## 🌐 在线体验 > 将下面地址替换成你实际部署后的网页地址。 [点击进入火情智能监测平台](https://你的网页地址) --- ## 📌 项目简介 本项目用于识别图像中是否存在火情,分类结果包括: - `0`:非火情 - `1`:火情 项目采用 CNN / Residual CNN 进行图像分类,并提供完整的训练、测试和网页展示流程。 当前训练代码默认将输入图片统一调整为 `384 × 384`。 ## 🧠 模型结构 项目中的 `FireCNN` 由两个 CNN 分支组成。 ### 1. OriginalResidualCNN 原始残差 CNN,共包含 10 个卷积层,并在相邻卷积层之间加入残差连接。 ```text 输入图片 ↓ Conv1 + Conv2 + Residual ↓ Pool ↓ Conv3 + Conv4 + Residual ↓ Pool ↓ Conv5 + Conv6 + Residual ↓ Pool ↓ Conv7 + Conv8 + Residual ↓ Pool ↓ Conv9 + Conv10 + Residual ↓ Pool ↓ AdaptiveAvgPool ↓ 全连接层 ↓ 二分类输出 ``` ### 2. ContextResidualCNN 第二个分支使用 `ResNet18` 作为 CNN 特征提取骨干,并结合: - Adaptive Average Pooling - Adaptive Max Pooling - 全连接分类器 当前代码中使用: ```python resnet18(weights=None) ``` 因此当前并未加载官方预训练权重。 ### 3. 双分支融合 最终模型将两个 CNN 分支的输出进行加权融合: ```text OriginalResidualCNN:0.75 ContextResidualCNN:0.25 ``` ## 📂 项目结构 ```text Code-Fire2/ ├── data/ │ ├── train/ │ ├── validation/ │ └── test/ ├── model.py ├── train.py ├── test.py ├── prepare_data.py ├── plot_history.py ├── submit.py ├── app_dashboard.py ├── requirements.txt ├── requirements_web.txt ├── cnn1_best_checkpoint.pt └── README.md ``` ## 🛠 环境安装 建议使用 NVIDIA CUDA 版本 PyTorch。 安装项目依赖: ```bash python -m pip install -r requirements.txt ``` 安装网页端依赖: ```bash python -m pip install -r requirements_web.txt ``` 检查 CUDA: ```bash python -c "import torch; print(torch.cuda.is_available()); print(torch.cuda.get_device_name(0) if torch.cuda.is_available() else 'CUDA unavailable')" ``` ## 🏋️ 模型训练 ```bash python train.py ``` 默认参数: ```text epochs = 50 batch_size = 32 learning_rate = 1e-3 seed = 42 image_size = 384 ``` 训练过程中会记录: - Train Loss - Validation Loss - Validation Precision - Validation Recall - Validation F1 并保存验证集 F1 最好的 checkpoint。 ## 🧪 模型测试 ```bash python test.py --checkpoint cnn1_best_checkpoint.pt ``` 测试输出包括: ```text precision recall f1 accuracy ``` ## 📈 训练曲线 ```bash python plot_history.py ``` 用于绘制: - Train Loss - Validation Loss - Validation F1 ## 🌐 Web 可视化系统 启动网页: ```bash python -m streamlit run app_dashboard.py ``` 网页功能包括: - 首页仪表盘 - 单张图片火情识别 - 实时摄像头连续识别 - 火情红色报警提示 - 火情概率显示 - 检测记录 - 概率变化折线图 - CUDA / GPU 信息 - 模型参数信息 > 当前模型属于图像分类 CNN,因此红色报警框表示“当前整幅画面被判定为火情”,不是 YOLO 目标检测框。 ## 🚀 提高模型效果的方法 ### 数据增强 可以通过: - 随机水平翻转 - 旋转 - 亮度调整 - 对比度变化 - 裁剪 - 增加困难负样本 提高训练数据多样性,降低过拟合。 火情任务中可以重点增加: ```text 夕阳 红色灯光 橙色灯光 车灯 霓虹灯 暖色反光 红色物体 ``` 等容易误判成火情的非火情样本。 ### 预训练 预训练模型可以利用大规模数据集上已经学习到的通用视觉特征,从而减少训练时间并提高泛化能力。 如果后续允许使用预训练参数,可以将: ```python resnet18(weights=None) ``` 改为 torchvision 提供的 ResNet18 预训练权重配置,再进行火情二分类训练。 ## 📊 评价指标 项目主要使用: - Accuracy - Precision - Recall - F1 Score 火情识别中: - Recall 高:减少漏报 - Precision 高:减少误报 ## 🔗 项目仓库 Gitee: [https://gitee.com/fanzsss/deep-learning-work-1](https://gitee.com/fanzsss/deep-learning-work-1) ## 👨‍💻 技术栈 - Python - PyTorch - Torchvision - CNN - Residual Connection - ResNet18 - CUDA - Streamlit - OpenCV - Pandas - Pillow ## 📝 说明 本项目用于深度学习课程火情分类实验与模型效果比较。 训练、验证、测试和网页推理应尽量使用一致的图片预处理方式,以保证结果可比。