基于 YOLOv8 的森林火灾检测系统(全套源码+数据集)
基于 YOLOv8 目标检测算法实现的森林火灾与烟雾智能检测系统,支持图片、视频、实时摄像头等多种输入方式的火灾与烟雾识别,并提供完整的模型训练、指标可视化与检测历史管理功能。
一、项目概述
本系统采用 Ultralytics YOLOv8 作为检测核心,针对森林火灾场景进行模型训练与部署。系统具备用户登录、模型管理、多源检测、历史记录、训练指标可视化等功能,适用于森林防火监控、环境监测、无人机巡检等应用场景。
二、数据集说明


2.1 数据集概览
| 项目 | 说明 |
|---|---|
| 数据集名称 | 森林火灾检测数据集(Fire and Smoke Detection Dataset) |
| 检测类别 | 2 类:Fire(火灾)、Smoke(烟雾) |
| 图片格式 | JPG |
| 图片尺寸 | 640×640 像素(已统一) |
| 标注格式 | YOLO 格式(.txt) |
2.2 数据规模
| 数据集 | 图片数量 | 标注数量 | 占比 |
|---|---|---|---|
| 训练集 (train) | 6,900 张 | 6,900 个 | ~80% |
| 验证集 (val) | 862 张 | 862 个 | ~10% |
| 测试集 (test) | 863 张 | 863 个 | ~10% |
| 总计 | 8,625 张 | 8,625 个 | 100% |
2.3 目录结构
datasets/
├── fire_smoke.yaml # YOLO 数据集配置文件
├── classes.txt # 类别名称
└── datasets/
├── train/
│ ├── images/ # 训练图片(6,900 张)
│ └── labels/ # 训练标注
├── val/
│ ├── images/ # 验证图片(862 张)
│ └── labels/ # 验证标注
└── test/
├── images/ # 测试图片(863 张)
└── labels/ # 测试标注
2.4 标注格式(YOLO)
每行格式:class_id x_center y_center width height(归一化坐标 0–1)
0:Fire(火灾)1:Smoke(烟雾)
三、训练过程
3.1 训练流程
- 运行
train_yolo.py启动训练 - 自动更新数据集路径到当前项目
datasets/datasets - 加载 YOLOv8 预训练模型(默认
yolov8n.pt) - 按配置进行训练,并在
runs/train/fire_detection_<时间戳>/下保存结果
3.2 主要训练参数
| 参数 | 默认值 | 说明 |
|---|---|---|
epochs |
100 | 训练轮数 |
imgsz |
640 | 输入图像尺寸 |
batch |
16 | 批次大小(可按 GPU 显存调整) |
device |
'0' |
训练设备('0' 为 GPU,'cpu' 为 CPU) |
optimizer |
SGD | 优化器 |
lr0 |
0.01 | 初始学习率 |
lrf |
0.01 | 最终学习率 |
momentum |
0.937 | 动量 |
weight_decay |
0.0005 | 权重衰减 |
warmup_epochs |
3.0 | 预热轮数 |
cos_lr |
True | 余弦学习率调度 |
close_mosaic |
10 | 最后 10 轮关闭 Mosaic 增强 |
amp |
True | 自动混合精度训练 |
mosaic |
1.0 | Mosaic 数据增强概率 |
fliplr |
0.5 | 左右翻转概率 |
3.3 修改训练参数
在 train_yolo.py 的 main() 中修改:
results = trainer.train(
epochs=100, # 训练轮数
imgsz=640, # 图像尺寸
batch=16, # 批次大小
device='0' # GPU 或 'cpu'
)
四、训练可视化图说明




训练完成后,在 runs/train/fire_detection_<时间戳>/ 目录下会生成以下文件:
| 文件 | 含义 |
|---|---|
| results.csv | 每轮训练指标(损失、mAP、精确率、召回率等) |
| results.png | 训练曲线总览(损失、mAP、P、R 等随 epoch 变化) |
| loss_curves.png | 训练/验证损失曲线(box_loss、cls_loss、dfl_loss) |
| metrics_detailed.png | 详细指标曲线(mAP、精确率、召回率等) |
| confusion_matrix.png | 混淆矩阵,展示各类别预测与真实标签的对应关系 |
| F1_curve.png | F1 分数随置信度阈值变化曲线 |
| P_curve.png | 精确率(Precision)随置信度阈值变化曲线 |
| R_curve.png | 召回率(Recall)随置信度阈值变化曲线 |
| PR_curve.png | 精确率-召回率曲线(Precision-Recall) |
| train_batch**.jpg* | 训练批次样本(含 Mosaic 增强效果) |
| val_batch___labels.jpg* | 验证集真实标签可视化 |
| val_batch___pred.jpg* | 验证集预测结果可视化 |
| weights/best.pt | 验证集上表现最好的模型权重 |
| weights/last.pt | 最后一轮模型权重 |
4.1 主要指标含义
- mAP@50:IoU 阈值为 0.5 时的平均精度均值
- mAP@50:95:IoU 从 0.5 到 0.95 步长 0.05 的平均 mAP
- Precision(精确率):预测为正例中实际为正例的比例
- Recall(召回率):实际正例中被正确预测的比例
- box_loss:边界框回归损失
- cls_loss:分类损失
- dfl_loss:分布焦点损失(DFL)
五、系统功能
5.1 功能模块
| 模块 | 功能说明 |
|---|---|
| 图片识别 | 加载本地图片,进行火灾/烟雾检测,展示检测框、置信度、统计信息及置信度分布 |
| 视频识别 | 加载视频文件,逐帧检测,可设置检测间隔,实时统计检测结果 |
| 摄像头识别 | 连接摄像头进行实时检测,支持检测开关与帧间隔调节 |
| 检测历史 | 查看、筛选、搜索历史检测记录,支持导出 CSV 与清空 |
| 模型管理 | 加载/切换模型权重,配置置信度阈值、IoU 阈值、最大检测数 |
| 指标展示 | 读取训练结果 CSV,以图表展示训练曲线与 mAP、精确率、召回率等指标 |






5.2 检测参数
- 置信度阈值:过滤低置信度检测框(默认 0.25)
- IoU 阈值:NMS 时的重叠阈值(默认 0.45)
- 最大检测数:单张图最大保留检测框数量(默认 300)
六、项目技术栈
| 类别 | 技术 |
|---|---|
| 深度学习 | PyTorch、Ultralytics YOLOv8 |
| 图像处理 | OpenCV、NumPy、Pillow |
| 界面 | PyQt6 |
| 数据处理 | Pandas、NumPy |
| 可视化 | Matplotlib |
| 配置 | PyYAML |
| 其他 | SciPy、tqdm |
七、项目结构
c128/
├── main.py # 程序入口
├── login_window.py # 登录/注册窗口
├── main_window.py # 主窗口(侧边栏 + 页面切换)
├── train_yolo.py # YOLOv8 模型训练脚本
├── requirements.txt # 依赖列表
├── README.md # 项目说明
│
├── pages/ # 功能页面
│ ├── image_page.py # 图片识别页
│ ├── video_page.py # 视频识别页
│ ├── camera_page.py # 摄像头识别页
│ ├── history_page.py # 检测历史页
│ ├── model_page.py # 模型管理页
│ └── metrics_page.py # 指标展示页
│
├── utils/ # 工具模块
│ ├── detector.py # YOLOv8 推理封装
│ ├── auth.py # 登录/注册逻辑
│ ├── config.py # 配置读写
│ ├── history_db.py # 检测历史数据库
│ ├── paths.py # 路径常量
│ └── styles.py # 界面样式
│
├── data/ # 运行时数据
│ ├── config.json # 用户配置(模型路径、检测参数)
│ └── users.json # 用户数据
│
├── datasets/ # 数据集
│ ├── fire_smoke.yaml # 数据集配置
│ └── datasets/ # 训练/验证/测试数据
│
└── runs/train/ # 训练输出
└── fire_detection_*/ # 每次训练的结果目录
├── weights/ # 模型权重
├── results.csv # 训练指标
└── *.png # 可视化图表
八、运行说明
8.1 环境准备
pip install -r requirements.txt
8.2 启动系统
python main.py
启动后进入登录界面,登录成功后进入主界面,可进行图片/视频/摄像头检测、模型管理、历史查看、指标展示等操作。
8.3 模型训练
python train_yolo.py
训练完成后,在 runs/train/fire_detection_<时间戳>/weights/ 下可找到 best.pt,在模型管理页加载该权重即可使用。
九、训练结果示例
以 100 轮训练为例,最终验证集指标约:
- mAP@50:~0.85
- mAP@50:95:~0.61
- 精确率:~0.81
- 召回率:~0.78
具体数值以实际训练结果为准。
本项目为个人原创,结构清晰,功能完整,适合计算机视觉方向课程设计、毕业设计和项目演示使用。有定制化需求可以评论或私信作者。
作者原创项目地址:michael-jay.pages.dev/projects.html
浙公网安备 33010602011771号