基于 YOLOv8 的森林火灾检测系统(Web 版)

一、项目简介

本项目面向林区早期火情识别场景,使用 YOLOv8 完成火焰(Fire)与烟雾(Smoke)两类目标的检测模型训练,并以 FastAPI 构建 Web 检测平台,把模型能力封装为可直接登录使用的系统。

平台除常规的图片、批量、视频、摄像头检测外,还提供同图多权重对比、数据集浏览与标注核对、模型热切换,以及把训练搬到网页上的能力:可在浏览器配置超参数发起真实训练,训练中在线调整学习率、查看进度与动态曲线,训练完成后下载产物或直接应用到检测。

图片识别页:上传图片后由模型真实推理,输出火焰与烟雾的标注框、置信度与数量统计。

二、数据集说明

1. 数据来源与样本

数据来自真实林区与火情场景采集的图像,覆盖明火、烟柱、航空投撒、野外烧除等多种实际情形。下图为训练集中按标注类别抽取的真实样本:上排为含火焰目标的图像,下排为仅含烟雾目标的图像。

数据集原图样本:火焰(含 Fire 标注)与烟雾(仅 Smoke 标注)各三张。

2. 数据构成

标注为 YOLO 检测格式,共两类目标。训练、验证、测试三份划分独立存放,验证与测试集不参与训练。训练集共 12,009 个标注框(Fire 9,376 个、Smoke 2,633 个)。

划分 图像数量 标注框数量 用途
训练集 train 6,900 12,009 模型训练与数据增强
验证集 val 862 1,528 训练过程逐轮评估
测试集 test 863 1,527 独立评估与演示取样

3. 类别定义

类别编号 英文名称 中文名称 训练集标注数
0 Fire 火焰 9,376
1 Smoke 烟雾 2,633

4. 标注分布

训练框架对训练集标注做的统计:左上为两类目标的标注框数量,右上为标注框宽高比分布,下方两张分别是标注框中心位置分布与宽高分布。

训练产物原图 labels.jpg:Fire 与 Smoke 的标注数量及尺寸、位置分布。

5. 训练时的数据增强

训练阶段启用 mosaic 等增强策略。下图为训练批次的实际输入,多张样本被拼接为一张图参与训练,并带有数据集自带的真实标注框:

训练产物原图 train_batch0.jpg:训练批次输入与真实标注。

6. 平台内的标注核对

数据集浏览页支持按划分、按类别筛选样本,并可在原图上叠加数据集自带的真实标注框,便于检查标注质量与漏标情况。

数据集浏览页:左侧为真实样本,右侧按原图比例绘制标注框并给出类别统计。

三、模型训练与结果

1. 训练配置

  • 以 yolov8n.pt 预训练权重为起点,采用迁移学习。
  • 100 轮训练,batch 16,输入尺寸 640 × 640,优化器 SGD,初始学习率 0.01。
  • 每轮执行验证并记录损失、精确率、召回率、mAP 与学习率。

2. 最终指标(第 100 轮)

指标 末轮数值 峰值(对应轮次)
mAP@0.5 0.8518 0.8522(第 98 轮)
mAP@0.5:0.95 0.6072 0.6075(第 96 轮)
Precision 0.8117 0.8242(第 86 轮)
Recall 0.7815 0.7973(第 69 轮)

mAP50-95 达到 0.607,说明在较严格的定位标准下边界框质量同样稳定;精确率略高于召回率,误检控制较好,漏检仍可通过降低置信度阈值来权衡。

训练产物原图 metrics_detailed.png:Precision、Recall、mAP50 与 mAP50-95 随轮次的变化。

训练产物原图 loss_curves.png:训练与验证阶段的 box、cls、dfl 损失变化。

训练产物原图 training_metrics_comprehensive.png:损失、指标与学习率的综合总览。

四、功能设计

1. 登录与权限

账号分为普通用户与管理员两类:普通用户可检测、查看历史与数据集;模型切换、发起训练、调整学习率等操作仅管理员可用。密码哈希保存,会话通过 Cookie 维持。

2. 图片识别

上传图片后输出标注结果图、火焰与烟雾各自的数量与置信度,并可查看目标明细。页面同时提供示例样本,便于快速验证模型状态。

3. 批量检测

一次上传多张图片批量推理,逐张给出目标数与类别分布,并汇总整批的检测结果,可导出明细。

4. 同图模型对比

同一张图片分别用两个权重推理,并排展示各自的标注结果与指标差异,用于比较不同训练版本的实际表现。

5. 视频检测

上传视频后由后台任务逐帧处理,可控制抽帧频率,实时回显进度与累计统计,任务可随时取消。

6. 摄像头识别

调用浏览器摄像头实时采集,按间隔抽帧提交后端推理并回传标注画面,用于现场部署前的快速验证。

7. 模型管理

列出可用权重及其来源,管理员可一键切换当前生效模型,切换失败时保留原模型;支持下载权重。

8. 网页真实模型训练

在网页上配置训练轮次、批大小、输入尺寸、学习率等超参数后发起训练。训练以独立子进程真实执行,页面实时显示进度与当前学习率,支持在线调整学习率、取消任务,完成后可下载训练产物。

9. 训练指标

读取真实训练日志绘制损失、mAP、精确率/召回率曲线,并可查看训练框架导出的原始图表。

10. 检测历史

检测记录按账号保存,支持按类型筛选与关键词搜索,可查看单条记录的结果图、目标明细与参数,并导出历史 CSV。

五、技术栈

类别 技术 用途
编程语言 Python、JavaScript 后端服务与前端页面
模型与框架 YOLOv8 / PyTorch 目标检测训练与推理
Web 服务 FastAPI、Uvicorn 接口服务、鉴权与任务调度
Web 前端 原生模块化 JS、CSS 页面与交互
图像与视频处理 OpenCV、NumPy 图像读取、绘制标注、逐帧处理
数据存储 SQLite、JSON 账号、会话、历史记录与任务状态
训练任务 子进程 + 状态文件 训练隔离执行、进度回写与取消

六、项目结构

text 复制代码
fire-detection/
├── datasets/datasets/           # 数据集(train / val / test,含 images 与 labels)
├── runs/train/                  # 原始训练产物:权重、日志与曲线
├── train_result/                # 网页训练产生的新任务目录
├── pages/                       # PyQt6 桌面端页面(独立保留)
├── train_yolo.py                # 训练入口
└── web/                         # Web 检测平台
    ├── 一键启动.bat
    ├── run.py
    ├── backend/                 # 配置、存储、推理、数据集、任务与接口
    ├── frontend/                # 页面、交互与图表
    └── data/                    # 运行数据:媒体、任务与数据库

七、运行说明

1. 安装依赖

text 复制代码
pip install -r requirements.txt

2. 启动 Web 平台

text 复制代码
双击 web/一键启动.bat
# 或在 web 目录执行
python run.py

服务仅监听本机,重复启动会提示服务已在运行,端口被其他程序占用时只提示、不结束进程。

3. 重新训练(可选)

text 复制代码
python train_yolo.py

也可直接在网页的「网页真实模型训练」页配置参数发起训练。

本项目为个人原创项目,配套完整源码、模型权重与项目说明,可用于毕业设计、课程实践、简历展示及个人学习。有项目成品或定制需求,可以通过主页联系作者。

相关推荐
code2cat16 分钟前
HTML基础篇之第一张网页:从index.html到浏览器里的任务清单
前端·html
miss1 小时前
AI 改完不敢上线?OpenSpec 规约驱动开发实战
前端·代码规范·前端工程化
AiMan2 小时前
腾讯ima还是不可以导出左侧所有对话,只能单条导出,方法不对吗
前端
去伪存真2 小时前
并发量一高就装死?Agent 全链路“防猝死”手册
前端·agent
Moment2 小时前
AI 编程时代,聊聊我的 Mac mini 双屏桌面
前端·后端
AiMan2 小时前
先确认能不能一次把Microsofat Copilot所有内容打包一个文件导出
前端
总要学点什么2 小时前
第97篇:三维数据加载-城市建筑白模自定义着色器——让一条光带沿高度扫上去,快慢却由帧率说了算
前端·gis·webgl·cesium·着色器·空间分析·白模
上海懒图科技2 小时前
工厂厂区电子地图定位导航:厂区人车精准定位,安全合规双保障
前端·arcgis·vue
西安小哥3 小时前
端侧跑大模型,真正的门槛不在参数量:一次 596 秒到 10 秒的压缩路径复盘
前端·人工智能