基于 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 训练流程

  1. 运行 train_yolo.py 启动训练
  2. 自动更新数据集路径到当前项目 datasets/datasets
  3. 加载 YOLOv8 预训练模型(默认 yolov8n.pt
  4. 按配置进行训练,并在 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.pymain() 中修改:

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

posted on 2026-08-03 00:57  Jay8059  阅读(5)  评论(0)    收藏  举报

导航